Securely scale AI usage across your organization. A single stack to Connect, Secure, Observe and Distribute agents, MCPs, and Skills within your company.
curl -X POST https://<gram-host>/rpc/deviceIntegrations.listManagedDevices \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"user_ids": ["<user-id>"], "user_emails": ["<[email protected]>"]}'
mcpApproval.refreshEvidence
mcpApproval.ensureServerReview
curl -X POST https://<your-gram-host>/api/chat.list \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"user_id": "usr_abc123"}'
chat.list({ user_id: "<gram-user-id>", source_kind: "dashboard" })
curl -L https://<your-gram-host>/v1/install/device-agent-macos.pkg -o device-agent.pkg
curl -X POST https://<your-gram-host>/v1/auth.enterDemo \
-H 'Authorization: Bearer <session-token>'
curl -X POST https://<host>/api/auth.enterDemo \
-H 'Authorization: Bearer <session_token>'
curl https://<host>/api/adminRemoteSessions.listGlobalIssuers \
-H 'Authorization: Bearer <platform_admin_token>' Summary
Securely scale AI usage across your organization. A single stack to Connect, Secure, Observe and Distribute agents, MCPs, and Skills within your company.
Release history
-
gram dashboard 0.110.0 adds an AI research agent, graph-view MCP connections, drift detection for approved servers, and richer evidence dossiers.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›New
mcpApproval.startResearchendpoint (decide-scoped) launches a Temporal-backed AI research agent that runs a bounded tool-calling loop, extracts a schema-held report (summary, independent-coverage level, tiered claims with citations), and persists results tomcp_research_reportswith model, prompt version, and per-run spend metadata; re-runs are additive and at most one run per request is in-flight. - ›New
assets.fetchImageFromURLendpoint downloads a catalog server's registry icon into an image asset at install time, storing it as the server's MCP metadata logo; collection listings now populateicon_urlfrommcp_metadatafor both toolset-backed and mcp_server-backed servers. - ›New
search_gram_docsresource answers queries from a pinned corpus of reviewed Platform MCP setup guides, returning cited excerpts with resource links; queries with no matching reviewed content returnguide_unavailableinstead of invented steps. - ›
risk.createPolicyBypassRequestnow carries a requester-supplied justification as the requester's note on the review, replacing the previous behavior where every requester's note was the policy's generic block reason. - ›MCP evidence dossier gains three deterministic new sources: code-host repository metadata (stars, forks, contributors, commit recency, archived status), OSV.dev published vulnerability advisories, and domain-registry registration records for remote server domains; package registries also surface declared repository and homepage URLs.
+8 moreshow less
- ›Research agent now runs a prompt-injection judge over every fetched page and records flagged pages as findings on the report, surfacing manipulation attempts as evidence rather than silently defending against them.
- ›Daily drift-detection sweep re-gathers evidence for approved MCP servers and compares the permission-relevant slice (OAuth scopes, authority mode, demanded credentials, published advisories) against the approval snapshot; drift sets a changed-since-approval flag, announces once per distinct change via the audit-log webhook channel, and surfaces on the review page as a diff banner and on the inventory as a badge.
- ›MCP Connections view now renders as a graph — rows represent a person, provider, or client, and expanding a row shows the nodes on the other side of its edges; the list splits into active connections and inactive ones (dormant over a week or no longer usable), which remain visible and revocable.
- ›MCP connection listings now carry a status dot (green live, amber expiring, red needs re-auth, grey idle or revoked) so connection health is scannable by colour at a glance.
- ›Organization page moves from
/user-sessionsto/mcp-sessionswith updated nav entry and title. - ›PAYG organization admins can view and set independent monthly Security inference and Other inference caps for each applicable platform-managed key; each change records a per-key audit event.
- ›Adds live Stripe PAYG subscription status, a controlled customer portal, and end-of-period cancel and resume controls for organization administrators.
- ›Approval page gains a Run Research button that polls while a run is live and renders the report with coverage callout, tier chips, citation links, and run footer.
└──▷ BREAKING ON UPGRADE- !The organization MCP sessions page moves from
/user-sessionsto/mcp-sessions; any bookmarks or hardcoded links to/user-sessionswill no longer reach that page.
- ›New
-
Gram server 1.15.0 adds MCP research agent, evidence drift detection, shadow inventory per-user lookup, and richer session/device APIs.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITFetch managed devices for a user by both ID and email in one call, handling MDM alias mismatches that would otherwise split the results.$ curl -X POST https://<gram-host>/rpc/deviceIntegrations.listManagedDevices \ -H 'Authorization: Bearer <token>' \ -H 'Content-Type: application/json' \ -d '{"user_ids": ["<user-id>"], "user_emails": ["<[email protected]>"]}'
- ›New
mcpApproval.startResearchendpoint (decide-scoped) launches a bounded AI research workflow that searches the web, fetches pages, and returns a schema-held report with summary, coverage level, and cited tiered claims stored onmcp_research_reportswith model, prompt version, and per-run spend metadata. - ›New
GET /rpc/access.listShadowMCPInventoryServersForUserendpoint inverts the shadow MCP inventory to return all shadow servers reached by a single user, enriched with the same policy state shown in the project-wide listing. - ›New
deviceIntegrations.listManagedDevicesacceptsuser_idsanduser_emails(OR'd) to resolve managed devices per identity, handling MDM alias mismatches across both lookup legs. - ›New
risk.listResultsfilterexternal_user_idsperforms exact whole-match lookups (both Postgres and ClickHouse paths), fixing the existinguser_idsubstring match that caused cross-user result leakage;user_idis unchanged. - ›New
assets.fetchImageFromURLendpoint downloads a catalog server's registry icon into an image asset at install time and stores it as the server's MCP metadata logo.
+9 moreshow less
- ›Adds
evidence_changed_atandnotified_change_fingerprintcolumns to MCP approval requests to track permission-relevant evidence drift and deduplicate daily recheck announcements. - ›MCP evidence dossier gains three new deterministic sources: code-host repository signals (stars, forks, contributors, commit recency, archived status), OSV.dev vulnerability advisories, and domain registry registration records; package registries also surface declared repository and homepage URLs.
- ›MCP approval change detection now runs a daily sweep that re-gathers evidence, diffs the permission-relevant slice (OAuth scopes, authority mode, demanded credentials, published advisories), sets a changed-since-approval flag, fires an audit-log webhook on each distinct change, and surfaces a diff banner on the review page and a badge on the inventory.
- ›Adds
researchplatform toolset withplatform_web_search(cited searches via OpenRouter's web-search plugin, taggedmcp-researchfor spend attribution) andplatform_fetch_page(guardian-routed fetch with byte, redirect, and per-run budgets, reducing HTML to readable text); both gated on themcp_approvalfeature. - ›
userSessions.listUserSessionsnow returnslast_used_atandupstreams(remote sessions Gram holds for the same subject and issuer) per session, exposing both legs of a brokered connection in a single call. - ›Exposes active directory groups and exact directory attribute values as plugin assignment audiences for organization administrators.
- ›Admin projects list now reports the count of MCP servers per project (covering both
mcp_serversrows and MCP-enabled toolsets) without requiring the operator to open each project. - ›Policy bypass request flow now collects a requester-supplied justification via
risk.createPolicyBypassRequest, replacing the previous behavior where every requester's note defaulted to the policy's generic block reason. - ›Pay-as-you-go organizations can view current billing cycle details on the Billing page, including tokens under management with flat-rate cost, Other inference spend through the last completed day, and an estimated invoice total.
- ›New
-
gram server 1.12.0 adds MCP approval management APIs, evidence dossiers with OSV/code-host/registry signals, and direct server probing.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITRe-run all evidence sources for an MCP server under review after a registry record has been updated, without disturbing previously recorded decision snapshots.$ mcpApproval.refreshEvidenceResolve or open an evidence dossier for a server URL before any review decision is made, so evidence is ready when an admin later inspects the server.$ mcpApproval.ensureServerReview- ›Adds
mcpApproval.refreshEvidenceendpoint to re-run every evidence source on demand for an MCP approval request, replacing current evidence while leaving frozen decision snapshots untouched. - ›Adds
mcpApproval.ensureServerReviewendpoint to resolve or open an evidence dossier for any server URL without placing it in the decision queue. - ›Adds MCP approval management API: list servers awaiting a decision, retrieve evidence and prior decisions for a server, and record an approval or denial with a rationale and explicit set of principals — gated by two new separate permissions for queue review and committing the organisation.
- ›Adds approval-request intake to the MCP approval API: members can submit a server for review by URL or launch command with no permission grant required; admins can promote existing bypass requests into the review queue.
- ›Generates TypeScript SDK bindings and React Query hooks for the new MCP approval endpoints.
+9 moreshow less
- ›Evidence dossiers now probe remote MCP servers directly: OAuth metadata via standard well-known endpoints (auth mode, scopes, dynamic client registration) and tool declarations via unauthenticated
tools/list, falling back to the MCP registry catalog entry when the server refuses. - ›MCP registry catalog matches now populate a new provenance section covering official flag, lifecycle status, publish/update recency, and visitor estimates.
- ›Evidence gathering now consults code-host repository signals (stars, forks, contributors, commit recency, archived status), OSV.dev vulnerability advisories, and domain-registry registration records for a server's registrable domain.
- ›Adds org-exposure signals to approval evidence: whether the requesting project already talks to a server, since when, call frequency, and distinct-caller count.
- ›Shadow MCP inventory servers now carry their MCP approval request state, with approval request summaries exposing the inventory server slug for
server_urltargets and list/detail responses including approval request id, status, and requester count. - ›Shadow MCP page consolidates to a single servers table:
target_kindfield distinguishes review-only targets (requested-but-unobserved URLs and stdio commands); pending decisions sort first and are filterable; the separate Access Requests tab is removed. - ›MCP approval decisions now enforce policy: approval replaces the server's risk-policy bypass audience with the decision's blast radius (defaulting to everyone, stored explicitly); denial revokes it; under allow-by-default policies the directions invert.
- ›Shadow-MCP block link redemption now attaches the blocked employee as a requester on the server's single canonical review (deduplicated by URL) instead of creating a per-user bypass request; the standalone Approval Requests review page retires.
- ›Retires legacy Shadow MCP inventory enforcement endpoints — upsert/delete policy bypass and block/unblock server — now that every allow and deny travels through a recorded MCP approval decision;
resolveShadowMCPInventoryRequestremains while pre-approval bypass requests drain.
└──▷ BREAKING ON UPGRADE- !The standalone Approval Requests review page is removed; the Shadow MCP servers table is now the only review surface.
- !Legacy Shadow MCP inventory enforcement endpoints (upsert/delete policy bypass, block/unblock server) are retired; all allow/deny actions must go through a recorded MCP approval decision.
- ›Adds
-
Gram dashboard adds MCP evidence dossier enrichment, unified Shadow MCP review surface, and risk policy enable/disable controls.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds a dedicated advisories group in the MCP approval evidence panel where a clean advisory check is shown as a positive finding rather than an absence.
- ›Unifies the Shadow MCP servers table as the single MCP approval review surface: every server row carries its review state, evidence is grouped by admin question (identity, data access, capabilities, legitimacy, exposure, prior decisions), and allow/deny decisions with required rationale are made in-place; the standalone Approval Requests tab is retired.
- ›Introduces a new
target_kindfield on Shadow MCP server rows that marks review-only targets (requested-but-unobserved URLs and stdio commands) so they surface in the unified inventory list. - ›Allows risk policies to be disabled and re-enabled from Policy Center and the policy detail page, letting operators pause enforcement without deleting the policy.
- ›Registers
mcp_approval:readandmcp_approval:decidepermissions in the role editor's scope picker so they can be discovered and granted.
+1 moreshow less
- ›Command palette now surfaces pending MCP access requests in place of the retired standalone Approval Requests review page.
└──▷ BREAKING ON UPGRADE- !The standalone Approval Requests review page is retired; the Shadow MCP servers table is now the only review surface, and existing request links for URL targets redirect to the server page.
-
gram [email protected] adds inline org peek panels, bulk account-type updates, multi-value filters, and row-level disable/trial actions to the admin organizations list.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds a peek panel to each row in the admin organizations list, docking a 400px side panel showing account type, trial end, member count, creation date, and both IDs without leaving the page; supports keyboard navigation (Arrow Up/Down to walk rows, Escape to close) and screen-reader announcements.
- ›Adds
account_types,trial_states, anddisabled_statesfilter parameters to the organizations list API, each accepting multiple values per request; replaces the single-valuedaccount_typeandinclude_disabledboolean (which remain supported as a compatibility shim). - ›Adds multi-value filter controls to the organizations list toolbar — Type (free, pro, enterprise), Trial (six states), and Status (active, disabled, both) — with chosen filters persisted in the URL so views can be shared.
- ›Adds a bulk account-type control to the admin organizations list: ticking multiple rows reveals a strip that counts the selection, lists accepted account types, and requires confirmation before writing.
- ›Adds a summary strip above the organizations table showing total org count (with 7-day new count), trials ending within 7 days (
ending_soonstate), and disabled orgs (with 7-day count); each figure is a clickable filter shortcut.
+2 moreshow less
- ›Adds per-row actions (Disable, Re-enable, Extend trial) accessible from a row menu and from the peek panel footer, allowing platform admins to manage organizations without leaving the list.
- ›Consolidates row controls into a pinned Actions column at the right edge of the organizations table; adds Alt+click anywhere on a row as a shortcut to open the peek panel.
-
Admin org endpoints now expose real trial state and end date; dashboard link scopes directly to an org via
redirectparameter.└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Admin organizations and organization detail endpoints now return each organization's real trial state and end date read from the trials table, distinguishing running, ending-soon, expired, demoted, converted, and never-trialled states.
- ›Adds a URL contract using the
redirectparameter on the login URL to open the customer-facing dashboard already scoped to a chosen organization, replacing the set-a-cookie-and-redirect flow.
-
Gram server 1.11.0 adds range-bounded activity totals and independent pagination to assistant sessions.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds exact range-bounded activity totals and independent pagination to assistant sessions.
- ›Restricts
agent.getConfigurationtoorg:adminrole, aligning read access with the existingagent.updateConfigurationrequirement, and hides the Device Agent Configuration tab from non-admins in the dashboard.
└──▷ BREAKING ON UPGRADE- !
agent.getConfigurationnow requiresorg:admin; callers with lesser roles that previously could read device agent fleet configuration will receive an authorization error after upgrading.
-
Adds browser hardening headers, scopes device agent fleet config to org admins, and improves assistant session pagination.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
Cross-Origin-Resource-Policy: same-origin,Cross-Origin-Opener-Policy: same-origin, andX-Permitted-Cross-Domain-Policies: noneheaders to dashboard HTML responses, set per nginx location block to avoid inherited header loss; static assets under/assetsand/externalretainAccess-Control-Allow-Origin: *. - ›Restricts viewing device agent fleet configuration (
agent.getConfiguration) toorg:adminrole, matching the existing write requirement onagent.updateConfiguration; hides the Device Agent Configuration tab from non-admins while keeping the Setup tab available to org readers. - ›Routes
/explore-demodirectly to the demo org's default project so new visitors land on sample data immediately.
└──▷ BREAKING ON UPGRADE- !Viewing
agent.getConfigurationnow requiresorg:admin; users without that role who previously could view device agent fleet configuration will lose access.
- ›Adds
-
gram admin: organization list view now syncs search and filters to the URL for shareable operator views.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Organization list search and filter state is now persisted in the URL, enabling operators to share exact filtered views with colleagues via URL.
- ›Adds a persistent toolbar row with a Columns control to the organizations list table.
-
Gram server 1.10.0 adds a configurable assistant detail panel, a
triggers.listEventsendpoint, and encrypted OpenRouter key management.└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds the
triggers.listEventsendpoint, surfacing recent traffic per trigger with each dispatched event linking to the conversation it was routed to. - ›New
adminOpenRouterKeysservice and dashboard page lets platform admins list every organization's OpenRouter API keys with credit limit, live usage, and encryption state — with encrypt, enable, and disable actions (enable/disable are audit logged against the owning organization). - ›Encrypts platform OpenRouter API keys at rest using AES-256-GCM with dual-write during the expand phase; every read path prefers the encrypted copy and lazily back-fills ciphertext for legacy plaintext rows.
- ›Assistant detail panel is now fully configurable in place: overview settings (name, model, concurrency, warm TTL) are editable, and a Sessions tab shows aggregate stats (sessions, messages, cost, tokens) over a selectable time range defaulting to the last 30 days with per-session cost in the list.
- ›Agent sessions routed through LiteLLM retain their LiteLLM association when the agent's own hook stream captures the transcript, matching the LiteLLM platform filter and displaying as '<Client> via LiteLLM' in session list and detail views.
- ›Adds the
- └──▷ GET THIS VERSION
$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds a platform-admin
adminOpenRouterKeysservice and dashboard page listing every organization's OpenRouter API keys with credit limit, live usage, and encryption state — with enable, disable, and encrypt actions (enable/disable are audit logged against the owning organization). - ›Encrypts platform OpenRouter API keys at rest using AES-256-GCM via a dual-write expand phase; all read paths prefer the encrypted copy and lazily backfill ciphertext for legacy plaintext rows.
- ›Adds a platform-admin
-
Gram server 1.9.0 adds on-demand MCP tool discovery, local assistant runtimes, file attachments, RFC 7009 upstream revocation, and new OTel MCP tracing.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITFilter chat sessions to only those started by a specific user when querying project-wide chat history.$ curl -X POST https://<your-gram-host>/api/chat.list \ -H 'Authorization: Bearer <token>' \ -H 'Content-Type: application/json' \ -d '{"user_id": "usr_abc123"}'
- ›Adds
userSessionIssuersCimdClients.verifyURLendpoint to probe a client ID metadata document URL for reachability and spec compliance before committing it — rate-limited per project, distinguishing malformed URL, unreachable endpoint, non-JSON body, and spec-violation outcomes. - ›Emits
gram.mcp.requested_protocol_versionandgram.mcp.negotiated_protocol_versionOpenTelemetry trace attributes on all five inbound MCP paths, plus a new unsampledmcp.initializecounter broken down by revision. - ›
externalKeys.updateAwsKmsandexternalKeys.updateGcpKmsnow cover onlyname,external_credential_id, andcustomer_grant_reference—key_arn,resource_name, andalgorithmare no longer accepted. - ›Adds
chat.listuser_idfilter so callers with project-wide chat visibility can narrow results to a specific Gram user. - ›Adds a
localruntime provider for assistants — starts one Docker container per assistant on demand, reuses it across turns, and replaces idle containers when the runtime image is rebuilt, with no Fly.io credentials required.
+11 moreshow less
- ›Revokes Remote Session credentials upstream via RFC 7009: discovers
revocation_endpointfrom the issuer's RFC 8414 metadata and posts the stored token on revoke, covering single-session revoke, bulk revoke, client delete, and the end-user 'Disconnect' flow. - ›MCP tools are now discovered on demand through a search tool rather than sent in full on every call; MCP servers connect on first use instead of at assistant startup, and dropped connections reseat automatically.
- ›Lets organization admins set an organization-wide automatic remote session refresh policy (Disabled, User controlled, or Required) from the MCP Connections page, with the effective policy surfaced on the OAuth consent screen.
- ›Supports file attachments in the Project Assistant — images, text files, and OpenAPI specs travel with the turn; unreadable files get a short-lived download link.
- ›Propagates retroactive risk-exclusion changes into ClickHouse so creating, updating, disabling, or deleting an exclusion rewrites affected findings' effective state in both ClickHouse and Postgres.
- ›Catalog entries from external MCP registries now carry the registry's linked source repository and published packages, feeding the MCP approval evidence surface.
- ›Caches OAuth client ID metadata documents, honoring upstream Cache-Control and Expires headers within a 5-minute to 24-hour bound and revalidating with If-None-Match.
- ›Scores Watchdog signals from the matched risk policy's configured score and simplifies the signal drawer to a single Create-exclusion action.
- ›Organization names now accept punctuation and any Unicode script, capped at 100 characters (must carry at least two letters or numbers; control characters, bidi overrides, and invisible formatting are still rejected).
- ›Surfaces the supported client that originated an Agent Session routed through LiteLLM while preserving LiteLLM filtering.
- ›Warns when an identity provider duplicates an issuer URL at all three tiers on both create and edit (advisory, never blocks the write).
└──▷ BREAKING ON UPGRADE- !
externalKeys.updateAwsKmsandexternalKeys.updateGcpKmsno longer acceptkey_arn/resource_nameoralgorithm; changing what a key points to now requires deleting it and creating a new one. - !
createGcpKmsnow requires a fully-qualified crypto key version path.
- ›Adds
-
gram dashboard 0.106.0 adds upstream OAuth token revocation via RFC 7009, MCP client ID metadata controls, and file attachments for Project Assistant.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITNarrow Project Assistant chat history to sessions started by a specific user, using the newuser_idfilter onchat.list.$ chat.list({ user_id: "<gram-user-id>", source_kind: "dashboard" })- ›Adds
revocation_endpointdiscovery for Remote Session issuers (via RFC 8414 metadata), enabling upstream credential revocation via RFC 7009 on every session-ending path: single revoke, bulk client revoke, client delete, and the consent screen's per-provider 'Disconnect'. - ›Exposes MCP server authentication settings to configure which OAuth Client ID Metadata Document clients are accepted: Gram's verified client catalog, any spec-valid client, or none, plus allow-listing additional document URLs with reachability and validity verification.
- ›Adds organization-wide automatic remote session refresh policy (Disabled, User controlled, or Required) configurable by organization admins from the MCP Connections page, surfaced to end users on the OAuth consent screen.
- ›Logout response now sends
Clear-Site-Data: "cookies", "storage"to drop the session cookie and clear localStorage, sessionStorage, IndexedDB, and Cache Storage across the origin's registrable domain. - ›Adds a PAYG rate adjustment (%) input to the platform-admin TUM contract price estimator on the billing page, reflecting the uplift or discount across the tier table, blended rate, and committed-vs-PAYG comparison.
+6 moreshow less
- ›Adds a new UI for the Watchdog page.
- ›Skill details split into focused pages for content, usage, feedback, versions, and settings.
- ›Organization names now accept punctuation and any script (Japanese, Chinese, Korean, Cyrillic, Arabic, Hebrew, etc.), capped at 100 characters, with control characters and bidi overrides still rejected.
- ›Chat composer recalls past prompts terminal-style using Up/Down arrow navigation, with history kept in localStorage scoped per project.
- ›Durable block pages now link to the owning project's risk event log.
- ›Agent Sessions routed through LiteLLM now display the originating supported client while preserving LiteLLM filtering.
└──▷ BREAKING ON UPGRADE- !
externalKeys.updateAwsKmsandexternalKeys.updateGcpKmsno longer acceptkey_arn,resource_name, oralgorithm; onlyname,external_credential_id, andcustomer_grant_referenceare accepted, so changing what a key points to now requires deleting it and creating a new one. - !
createGcpKmsnow requires a fully-qualified crypto key version path.
- ›Adds
-
Gram server 1.8.0 adds Slack image vision, prompt-injection scanning for skills, and a new
risk.getSignalsendpoint.└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
risk.getSignalsAPI endpoint for finding attribution, backing the internal Watchdog page. - ›Adds
input_partsfield to turn requests, widening the assistant runtime message representation from plain strings to structured text/image content parts across the Go runtime and Rust runner wire protocol (back-compat in both directions). - ›Adds
platform_slack_get_file_urlrunner tool that mints short-lived sealed download URLs via the Gram server's Slack file proxy, enabling credentialed Slack image retrieval in assistant turns. - ›Adds
inspect_assetrunner tool that fetches any directly reachable image URL, validates it, and attaches it to the conversation as a user message for vision context in threaded Slack interactions. - ›Fetches Slack image attachments server-side (up to 4 files, 8 MiB total per turn; png/jpeg/gif/webp, 10 MiB per file) and injects them as
image_urlinput parts withdata:URIs into assistant turns;data:URIs are stripped to text placeholders before persistence.
+2 moreshow less
- ›Scans captured skill manifests for prompt injection at capture time and surfaces current-version findings on the skill details page; admins can configure the Prompt Injection policy directly from the Skills page.
- ›Carries Slack file attachment metadata (id, name, mimetype, size) through trigger ingestion into the assistant turn context, with the
fileslist addressable from Slack trigger CEL filters.
- ›Adds
-
Gram dashboard adds prompt-injection scanning for skill manifests, trial-expiry upgrade flow, and a unified page-template layer.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
revealprop to Input (absorbing the formerPrivateInputcomponent) for inline secret reveal in forms. - ›Adds
Card.Dashboard(replacingDashboardCard),StatTile(replacingchart/MetricCard), andSegmentedControl(absorbingToggleButton) to the design-system primitives. - ›Promotes
SettingsSectionandDetailSidebarNavout of the mcp path into@/components/detailfor reuse across detail pages. - ›Adds
ResourceListPage,DetailPage,TabbedPage,FormPage,SettingsPage,OverviewPage,WorkbenchPage,WizardPage,CenteredPage, andFullBleedPagepage-template components in@/components/page-templates, plus composite widgetsInlineEmptyState,StatRow,SummaryCard, andDetailBody. - ›Organizations whose enterprise trial has ended now land on a dedicated upgrade-call page rather than the generic book-a-demo screen; users still inside a trial can reach the same page early via the sidebar countdown.
└──▷ BREAKING ON UPGRADE- !The Modal and
IconButtonsubsystem has been removed. - !
PrivateInputis removed; use Input with the newrevealprop instead. - !
DashboardCardis removed; useCard.Dashboardinstead. - !
ToggleButtonis removed; useSegmentedControlinstead. - !Editable is removed; use
editable-textinstead. - !The analytics tile
chart/MetricCardis renamed toStatTile;MetricCardnow refers solely to the base primitive.
- ›Adds
-
Gram server 1.7.0 adds RFC 9207
issparameter support and an overhauled MCP Clients and Sessions UI with a newactive_session_countAPI field.└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
active_session_countfield to the user session clients API, exposing how many active sessions each MCP client holds; clicking the count filters both the Clients and Sessions listings to that client. - ›The OAuth authorization server now emits the RFC 9207
issparameter on every authorization response (success and error) and advertisesauthorization_response_iss_parameter_supportedin its metadata document, satisfying the MCP 2026-07-28 Authorization Response Validation requirement and enabling mix-up attack detection across concurrent flows. - ›The MCP server Clients and Sessions tab now leads with active counts and renders both listings as searchable, filterable, sortable tables paginated ten rows at a time, with member avatars and creation dates on sessions.
- ›Adds
-
MCP server dashboard gets searchable, filterable, paginated Clients and Sessions tables with active session counts.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
active_session_countfield to the user session clients API, surfacing how many active sessions each MCP client holds; clicking the count filters both the Clients and Sessions listings to that client.
- ›Adds
-
Gram server 1.6.0 adds MCP Clients/Sessions tab, provider convergence, agent plugins, and trial auto-demotion.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Removes the legacy OAuth proxy provider system: the
/oauth/*proxy serving path now returnsinvalid_grant, and thetoolsets.addOAuthProxyServer/updateOAuthProxyServermanagement endpoints are gone, along with theremoteSessionClients.cloneClientFromOAuthProxyProvideranduserSessionIssuers.migrateLegacyGramRegistrationsmigration helpers and theAdditionalCacheKeyscache fan-out mechanism. - ›Adds a Convergence tab on platform identity providers, letting platform admins consolidate an organization's remote identity provider onto the shared platform catalog entry — showing how many clients would move and any metadata differences, and re-pointing those clients on consolidation without requiring users to sign in again.
- ›Publishes compatible Cursor and Codex plugins from a shared Agent Plugins 1.0 package and exposes compatibility on plugin responses.
- ›Adds user-opted-in automatic remote session token refresh, with organization-level settings hidden until the feature is enabled.
- ›New enterprise trial signup flow: organizations start a 14-day trial with $50 of chat credits (applied as a ceiling on inference Gram runs on the org's behalf); the billing page shows the credit ceiling for the organization.
+2 moreshow less
- ›An hourly job now auto-demotes expired enterprise trials — returning the org to the free plan, removing it from the whitelist, and disabling its platform model key — writing each demotion to the audit log under
organization:enterprise_trial_demoted. - ›Public skill share links now use a verified custom domain, serving the share page and raw
SKILL.mddownload athttps://<your-domain>/shared/skills/<token>, scoped so a domain only serves skills belonging to its own organization.
└──▷ BREAKING ON UPGRADE- !The
/oauth/*proxy serving path is removed: the token endpoint now returnsinvalid_grant, and the authorize and register endpoints are gone — clients holding proxy refresh tokens must re-authorize against their user session issuer. - !The
toolsets.addOAuthProxyServerandupdateOAuthProxyServerproxy management endpoints are removed. - !The
remoteSessionClients.cloneClientFromOAuthProxyProvideranduserSessionIssuers.migrateLegacyGramRegistrationsmigration helpers are removed. - !The
oauth/providerspackage and theAdditionalCacheKeyscache fan-out mechanism are removed.
- ›Removes the legacy OAuth proxy provider system: the
-
Gram dashboard 0.103.0 adds MCP Clients/Sessions tab, provider convergence, opencode fleet management, and custom-domain skill share links.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds a Clients and Sessions tab to MCP server detail pages, listing clients registered against the server's session issuer and its active sessions; CIMD-resolved OAuth clients are now distinguished from DCR-registered ones.
- ›Adds
opencodeto the managed tools list on the device agent fleet configuration page, with the same off/user/managed enforcement layer selection as other supported tools. - ›Reworks the toolset OAuth configuration UI: the 'Configure OAuth' wizard's custom path now provisions a
remote_session_issuer+remote_session_clientand links the toolset instead of an OAuth proxy server; the external-OAuth path is unchanged. - ›Applies a new editorial design language across the dashboard: flat square surfaces with hairline borders, serif display page titles, colorized metric tiles, and a dark-mode chart palette.
- ›Updates the macOS Device Agent setup walkthrough to install from a signed
.pkg(coveringinstallerCLI and MDM Package push), and makes Device Agent the default choice on the 'Instrument agent platforms' onboarding step; Device Agent is now out of preview.
+1 moreshow less
- ›Agent Plugins compatibility status and portable ZIP downloads now appear on plugin list and detail pages.
-
gram server 1.5.0 adds ChatGPT compliance import, Microsoft Teams triggers, LiteLLM OTLP ingestion, Codex spend-gate enforcement, and new OAuth client admission controls.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITLink to the always-current macOS device-agent installer from IT onboarding docs or MDM scripts without hardcoding a version string.$ curl -L https://<your-gram-host>/v1/install/device-agent-macos.pkg -o device-agent.pkg
Switch an authenticated session into the shared read-only demo org to let a prospect explore live data without provisioning a separate account.$ curl -X POST https://<your-gram-host>/v1/auth.enterDemo \ -H 'Authorization: Bearer <session-token>'
- ›Adds
GET /v1/install/device-agent-macos.pkg— a stable redirect that resolves the current signed macOS device-agent installer version server-side and 302s to the versioned pkg, so IT-admin instructions never need a hardcoded version URL. - ›Adds
auth.enterDemoendpoint to switch any authenticated session into the shared read-only demo organization without requiring membership, with a verb-based write guard backstop and a dashboard/explore-demoentry route. - ›Adds
auth.loginoptionalemailandorg_nameparameters:emailsets WorkOSlogin_hintandscreen_hint=sign-upfor pre-filled sign-up flows;org_namestashes a signup intent and creates the organization during the auth callback, recorded asonboarding_event/new_org_createdwithcreated_via: 'signup'. - ›Adds a new
chatgpt_complianceAI-integration provider that polls workspace-scopedCONVERSATION_MESSAGElog files from the OpenAI Compliance Logs Platform and persists them as external chats and messages in the Agent Sessions surface, configured with a workspace UUID. - ›Adds a
codex_cloud_sessionsschedule on thechatgpt_complianceintegration that polls the workspace-scopedCODEX_LOGcompliance feed and imports Codex cloud web-task transcripts as agent sessions under the newcodex-webchat source.
+14 moreshow less
- ›Extends spend-gate enforcement to Codex and Cursor at parity with Claude: denies over-budget actors on
hooks.codex(PreToolUse, PermissionRequest, UserPromptSubmit),hooks.cursor(preToolUse, beforeMCPExecution, beforeSubmitPrompt), and the unifiedhooks.ingestpath for codex and cursor adapters (case-insensitive match). - ›Adds
userSessionIssuersCimdClientsservice to list the curated catalog of verified MCP clients (Claude Code, Claude, VS Code, Zed, Goose, ChatGPT, Codex CLI, Notion, MCPJam, Factory Droid, ToolHive) and manage per-issuer URLs; admission mode (curated catalog, any spec-valid client, or none) is readable and writable on the existinguserSessionIssuersendpoints. - ›Adds authenticated OTLP trace ingestion for LiteLLM telemetry.
- ›Adds project-scoped LiteLLM integration provisioning, key rotation, revocation, and lifecycle metadata APIs.
- ›Accepts opt-in LiteLLM OTLP operational metrics without adding them to usage billing or sessions.
- ›Exposes health and attribution diagnostics for provisioned LiteLLM integrations.
- ›Adds Microsoft Teams as an assistant trigger source: Bot Framework activities (messages, reactions, membership and installation updates) posted to a trigger webhook are verified against Microsoft's signing keys and dispatched to assistants with the same CEL-based event type filtering as other webhook triggers.
- ›Adds an OpenRouter platform key lockdown that returns a distinct
inference_disablederror at key resolution rather than an upstream rejection when a key is locked down, with limit-refresh reinstatement. - ›Adds
externalCredentials.verifyGcpIamandexternalCredentials.getGcpSetupInfomethods for verifying GCP IAM impersonation; scopes the External Services page to org admins behind a newcustomer_managed_encryption_keysentitlement enforced on bothexternalCredentialsandexternalKeys. - ›Adds
adminRemoteSessions.listGlobalIssuersandadminRemoteSessions.getGlobalIssuer— now returning both platform-owned and tenant-owned client counts — plus a new Platform Admin sidebar section for curating the shared remote identity provider catalog. - ›Substitutes the OAuth callback URL into the
{{ gram.oauth.callback_url }}template key in content returned bymcpRegistries.getSetupDocs, soexternal_markdownandspeakeasy_markdowncarry a paste-ready redirect URI. - ›Adds organization-level device-agent remote configuration to the existing agent policy response, with admin management endpoints, versioning, validation, and audit logging.
- ›Meters Codex cloud usage (GitHub code review, web tasks) from the compliance COSTS feed, promoting token counts to
gen_ai.usage.*for TUM when no OTEL stream is available. - ›Classifies Codex account identity and billing mode on every capture path (legacy hooks, OTEL logs, ingest adapter), stamping
account_typefrom email resolution and resolving org-levelbilling_modefrom thecodex_complianceintegration config.
- ›Adds
-
gram dashboard 0.102.0 adds a live demo org path, org-scoped external services with GCP IAM verification, platform-admin identity provider curation, ChatGPT/Codex compliance imports, and more.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
└──▷ TRY ITLet a prospect explore Gram features without creating an account or requesting org membership — flip their session into the demo org via the API.$ curl -X POST https://<host>/api/auth.enterDemo \ -H 'Authorization: Bearer <session_token>'
Check which platform-level and tenant-level OAuth clients are tied to a global issuer before deciding whether it is safe to delete.$ curl https://<host>/api/adminRemoteSessions.listGlobalIssuers \ -H 'Authorization: Bearer <platform_admin_token>'
- ›Adds
auth.enterDemoendpoint to switch any authenticated session into a shared read-only demo org without membership; demo org enforces a fixed read-only scope with a verb-based write guard as backstop, and the dashboard gains an/explore-demoentry route and demo banner. - ›Adds
externalCredentials.verifyGcpIamto probe that Gram can impersonate a named GCP service account, andexternalCredentials.getGcpSetupInfoto report the Gram service account that must be grantedroles/iam.serviceAccountTokenCreator; both are gated behind the newcustomer_managed_encryption_keysentitlement enforced onexternalCredentialsandexternalKeys. - ›Adds
adminRemoteSessions.listGlobalIssuersandadminRemoteSessions.getGlobalIssuer— now returning platform-owned and tenant-owned client counts separately — and a new Platform Admin sidebar section for curating the shared remote identity provider catalog (list, create, edit, refresh metadata, delete). - ›Adds a
chatgpt_complianceAI-integration provider that polls workspace-scopedCONVERSATION_MESSAGElog files and persists them as external chats and messages in the same Agent Sessions surface as the Anthropic compliance import; config takes a workspace UUID, distinct fromcodex_compliancewhich is per API organization. - ›Extends spend-gate enforcement to Codex and Cursor at parity with Claude: legacy endpoints
hooks.codex(PreToolUse, PermissionRequest, UserPromptSubmit) andhooks.cursor(preToolUse, beforeMCPExecution, beforeSubmitPrompt), plus the unifiedhooks.ingestpath forcodexandcursoradapters (case-insensitive match).
+10 moreshow less
- ›Adds a Device Agent configuration tab for org administrators to configure per-tool enforcement layers, release policy, and reconciliation cadence.
- ›Adds
auth.loginoptionalemailandorg_nameparams:emailpre-fills WorkOS login hint and setsscreen_hint=sign-up;org_namestashes a signup intent against the login nonce and creates the org during the auth callback, loggingonboarding_event/new_org_createdwithcreated_via: 'signup'. - ›Adds a
/sign-uppage that collects company name before handing off to the identity provider; failed signups return to/sign-uprather than/register. - ›Webhooks are now available to every organization (marked Beta) without a preview gate; delivery is controlled solely by the organization's own webhooks toggle.
- ›Shows active trial status — current trial day, remaining days, elapsed progress, and a link to Sales — in project and organization navigation.
- ›Makes Skills table columns sortable from their headers, with 'recently updated' as the default order, and reduces the table to its most useful overview columns with rebalanced widths.
- ›Makes RBAC always on, provisioning built-in roles and grants for new organizations and assigning the first organization user the Admin role.
- ›Project sidebar nav groups now collapse by default with a chevron to pin groups open; only the group containing the current page opens automatically.
- ›Displays enabled warning policies in the Shadow MCP inventory status card.
- ›Connects Figma added from the MCP catalog directly to Figma's official server instead of routing through a proxy.
- ›Adds
-
gram server 1.4.0 adds an authenticated LiteLLM guardrail endpoint, model-response capture, and allow-all shadow MCP policy enforcement.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
platform_distribute_skillandplatform_undistribute_skillMCP tool calls to attach and revoke a skill from a plugin or assistant, andplatform_list_pluginsto resolve a plugin by name to the ID those calls require. - ›Adds an authenticated LiteLLM Generic Guardrail endpoint that enforces prompt policies before model calls and captures blocked prompts.
- ›Adds 'Block Server' and 'Unblock Server' per-server actions in the shadow MCP inventory that add and remove
risk_policy:blockgrants through dedicated inventory endpoints under allow-all policies. - ›Captures LiteLLM model responses with per-call session and user attribution to support asynchronous risk analysis.
- ›Adds
-
gram dashboard adds allow-all shadow MCP policy support for inventory, approvals, and block/unblock server actions.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Approval UI skips audience/policy pickers for
allow_all-policyrequests and explains that approval unblocks the server for everyone in the project. - ›Shadow MCP inventory is now disposition-aware under
allow_allpolicies: servers are reported as allowed by default and shown as blocked only when a block rule lists them. - ›Policy status banner now explains the allow-by-default posture when an
allow_allpolicy is active. - ›Per-server primary action in inventory flips to 'Block Server' / 'Unblock Server' under
allow_allpolicies, adding and removingrisk_policy:blockgrants through dedicated inventory endpoints.
- ›Approval UI skips audience/policy pickers for
-
gram server 1.3.0 adds allow-all shadow MCP policies, blocked-URL lists, new assistant risk tools, and OpenTelemetry sync metrics.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
shadow_mcp_blocked_urlsto risk policy create/update payloads, enabling proactive blocking of MCP server URLs (including servers not yet observed in project inventory) on allow-all shadow MCP policies; stored asrisk_policy:blockRBAC grants held by the all-users principal. - ›Enforces allow-all shadow MCP policies in the hook path: every non-Gram-hosted MCP server is permitted unless a
risk_policy:blockgrant names its URL; projects are limited to one enabled shadow MCP blocking policy to prevent disposition conflicts. - ›Adds
platform_list_risk_exclusionsandplatform_create_risk_exclusionassistant tools to suppress whole classes of risk findings;platform_create_risk_exclusionfingerprints exact and regex match values to reuse equivalent existing exclusions. - ›Adds
platform_mark_risk_false_positiveandplatform_unmark_risk_false_positiveassistant tools to dismiss and restore specific risk findings, gated on org admin permissions and fully audited. - ›Adds
platform_get_risk_rule_breakdownassistant tool to answer 'which rules fire most' in a single small call instead of many large paginated responses.
+6 moreshow less
- ›Adds
platform_create_skillassistant tool to create project skills from completeSKILL.mdcontent, using the same validation, versioning, permissions, feature gating, and audit logging as manual skill creation. - ›Emits new OpenTelemetry metrics
gram.device_integration.sync.outcome(sync runs by provider and outcome) andgram.device_integration.sync.auto_pause(schedules auto-paused after credential-rejection streaks) for the device-integration sync pipeline. - ›Adds
chatgptandchatgpt-worksources to the product-surface taxonomy; the compliance importer routes Work rows to thechatgpt-workhook source and useshook_sourceas a summary GROUP BY dimension so the per-product split survives summarization. - ›Admits
chatgpt:usagerows (ChatGPT/Work usage and spend from the OpenAI compliance COSTS import) intoattribute_metrics_summaries_mvandchat_session_summaries_mvso ChatGPT tokens count toward tokens-under-management and appear in usage/cost analytics. - ›Agent-facing risk findings listing now defaults to 25 results and caps at 50, preventing large pages from inflating assistant context during triage.
- ›Project assistant tool calls now render with Claude-style collapsed tool groups, each preceded by a terse activity phrase that becomes the group heading; consecutive batches merge into one advancing group.
- ›Adds
-
Shadow MCP policy now supports block-all/allow-all postures, and ChatGPT/Work compliance sources land in the product taxonomy.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Shadow MCP policy creation adds a default-disposition choice: 'Block all servers (allow exceptions)' or 'Allow all servers (block exceptions)', with the server selector flipping between allowed and blocked servers to match the chosen posture.
- ›Adds
chatgptandchatgpt-workhook sources to the product-surface taxonomy, routing ChatGPT Work compliance rows tochatgpt-workand standard ChatGPT/unknown surfaces tochatgpt, preserving per-product splits across summarization (sincehook_sourceis a GROUP BY dimension and summaries outlive raw-row TTL). - ›Adds a contract value estimator to the TUM Contract section of the billing page (platform admin only), approximating enterprise account value under a committed platform fee with tiered overage or uncommitted pay-as-you-go, based on observed tokens under management.
- ›Project assistant tool calls now render Claude-style with a terse activity phrase heading each collapsed tool group; consecutive batches merge into one advancing group and the global thinking loader hides while a tool group is streaming.
-
gram server 1.2.0 adds memory extraction with corpus browser, weekly billing summaries, and MCP setup-doc lookup via
mcpRegistries.getSetupDocs.└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds
mcpRegistries.getSetupDocsto return published setup documentation for an upstream MCP server from thegithub.com/speakeasy-api/mcp-setup-docs/gocatalog; a guide can be located by the server's endpoint URL, by its registry specifier as returned bylistCatalog, or by both — matches are deduplicated by guide slug and returned in descending specificity, and servers with no published guide return an empty list rather than an error. - ›Adds two managed-assistant tools,
platform_list_docsandplatform_get_doc, that expose the ~110 pages under speakeasy.com/docs/ai-control-plane to the project assistant:platform_list_docsreturns the page index (cached hourly from the docs sitemap) andplatform_get_docreturns one page's markdown and its public permalink. - ›Adds selective extraction of high-value, reusable business memories from completed chats, with deduplication of semantic duplicates and an organization-admin corpus browser featuring semantic search, source-transcript navigation, and a content-scope tree with distinct-memory counts.
- ›Adds a
billing.TumComponentsregistry that centralises the tokens-under-management token components so the ClickHouse billing measure and a new weekly usage summary email both derive from a single definition. - ›Adds a weekly usage summary email (sent every Monday via a Temporal sweep) to each organization's billing alert contact, reporting their tokens-under-management total for the active billing cycle with a percent-change badge against the same elapsed point in the previous cycle; organizations with no usage in either window are skipped and sends are deduplicated per organization and run date.
+1 moreshow less
- ›Serves the Risk Events listing from ClickHouse when the
risk-list-from-clickhouseper-org flag is enabled, preserving existing ordering, filters, and pagination behavior.
- ›Adds
-
Gram dashboard adds selective business memory extraction with an admin corpus browser and semantic search.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Adds an organization-admin corpus browser with semantic search, source-transcript navigation, and a full content-scope tree showing distinct-memory counts.
- ›Selectively extracts high-value, reusable business memories from completed chats, omitting semantic duplicates to reduce noise in the corpus.
-
Gram server 1.1.0 adds OAuth CIMD support for MCP clients and custom domain root routing with OpenAI ownership verification.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Supports OAuth Client ID Metadata Documents (CIMD) on the Gram Session OAuth authorization server, gated per organization behind the
gram-user-session-cimdfeature flag, enabling MCP clients that use a URL-shapedclient_id(such as Claude Code and VS Code) to complete the OAuth flow without Dynamic Client Registration, including loopback redirects on any port. - ›Custom domains can now route their root URL (
https://your-domain.com/) to a default MCP server endpoint — configurable from the custom domain page or the MCP server's own settings — with slug renames automatically updating routing. - ›Custom domains can serve an OpenAI app-submission verification token at
/.well-known/openai-apps-challenge, allowing ChatGPT app reviews to verify domain ownership without site changes.
- ›Supports OAuth Client ID Metadata Documents (CIMD) on the Gram Session OAuth authorization server, gated per organization behind the
-
Custom domains can now route their root URL to a default MCP server and serve OpenAI app-submission verification tokens.
└──▷ GET THIS VERSION$ git clone --branch [email protected] https://github.com/speakeasy-api/gram.git # already have the repo? check out this version: $ git checkout [email protected]
- ›Custom domains can route their root URL (
https://your-domain.com/) to a designated default MCP server, letting MCP clients connect at the root while browsers see the installation page; renaming the endpoint slug updates routing automatically. - ›The default MCP server for a custom domain can be set either from the custom domain page or from an individual MCP server's own settings page.
- ›Custom domains can route their root URL (