Repository navigation
server@2.22.0
Minor Changes
- 008a91f: All federated sign-ins now use a per-client redirect URI,
/mcp/idp_callback/{clientID}, that binds each authorization response to its issuer (RFC 9700 section 4.4.2). This makes federated sign-in work with identity providers that do not return the RFC 9207issauthorization response parameter, such as Okta's org authorization server. A provider that advertisesisssupport, in discovery or through the issuer'sauthorization_response_iss_parameter_supportedsetting, must still return a matchingiss. Existing federated identity provider apps must register the new redirect URI, which organization-owned remote session clients now report asfederated_callback_url. The shared/mcp/idp_callbackserves only WorkOS; a misrouted federated callback is rejected without spending the login state. Issuer migration is refused while a client of the source issuer is a user session issuer's trusted sign-in client. Okta identity provider connections now report theirremote_session_issuer_id. - 2baba61: Identity chaining changes are now audited on the remote session client. A binding becoming ready on a client records
remote-session-client:enable-identity-chaining, changing the requested scopes while it stays ready on the same client recordsremote-session-client:update-identity-chaining-scopes, and a ready binding leaving the client (unlinked, moved to another client, or no longer ready) recordsremote-session-client:disable-identity-chainingwith that client'sclient_id. Each entry carries the binding, the user session issuer, the remote session issuer, the resource, the generation, the binding state, and the requested scopes (plus the previous scopes for a scope change). The entries are written in the same transaction as the binding change, and only a user actor carries an email display name, for these entries and for the client a dynamic registration creates.
Patch Changes
-
4c811b0: The admin command palette lists enterprise organizations first, then pro and pay-as-you-go, then free, then any other account type. The organization list and the staff Admin MCP
find_organizationstool accept the sameaccount_tiersort. -
3ffc9d0: Risk policy details load immediately. The obsolete analysis-progress counts are removed, including
risk.getPolicyStatusand the "View Progress" panel. -
1776c08: Keep a hosted toolset's own MCP server and the gateway members on the same toolset apart. Platform MCP diagnostics, server health charts, and hosted overview metrics exclude member traffic from the canonical server, which also owns the toolset's plugin entries. Role delivery adds the canonical server once, falling back to one addressable alternate only when the canonical server is enabled but has no live endpoint, and keeps entries it already delivered. Adding the canonical server as a gateway member is now rejected.
-
2baba61: The MCP consent page marks a service whose access identity chaining is configured to supply as "Managed by your identity provider", with an optional, de-emphasised "Use a separate sign-in instead" action, and a configured service counts toward enabling "Give access" because the runtime obtains its access on first use; an interactive connection still takes precedence. The page now checks the chained exchange in the background: a card with a usable stored credential renders "Connected through your identity provider" straight away, and otherwise the page runs the exchange with a short timeout and settles the card in place as connected (counted in the "n of m connected" summary, with the credential stored for the first tool call), rejected (a generic message naming the service and a primary "Connect" for a separate sign-in), or unknown (the neutral copy). Provider error details never reach the page, and without script the card keeps the neutral copy and its fallback. A card is marked only when exactly one ready binding serves the upstream through that card's authorization server, never when the bindings are ambiguous or the card's existing grant cannot be routed, and a lookup failure leaves the card unmarked instead of failing the page. On gateway endpoints a card is marked only when identity chaining serves every gateway member that uses its authorization server.
-
56218c5: Explore and widgets can draw a Stacked bar and a Stacked area chart, which show what made up a total rather than how each series moved. A stack needs a Group by; without one it is drawn as the plain bar or area it is and says so. It stacks one measure that adds up, a count or a sum, since its bands are a total. When a breakdown has more series than fit, the smallest are stacked as one Other band so the height is still the real total, and the tooltip gives each bucket's total.
-
af578ee: The Dashboards page lists the dashboards Speakeasy ships with the product, marked Speakeasy-built, beside the project's own. One opens read only at
/dashboards/builtin/<slug>under the shared filter bar, with every card answering within it, and Duplicate makes a project dashboard from it, with a saved widget per card, that can be laid out and changed like any other. The first is MCP & Tools: what the agents called, how often a call failed, and who was calling. -
e022baf: Agents can list, read, save, duplicate and delete a project's Explore widgets through the Speakeasy Platform MCP.
list_widgetsandget_widgetshow each widget's query, chart, whether it still works and the dashboards it is on.save_widget,duplicate_widgetanddelete_widgetpreview first and commit only on confirmation, naming the version they read, so an edit made in the dashboard meanwhile is never overwritten; a delete reports which dashboards lost the widget. Permissions match the dashboard: any project member can create and duplicate widgets, and a widget can be updated or deleted by its creator or by someone with write access to the project. The tools need Explore switched on for the organization and serve external users only. -
827cf06: Agents can list, read, create, lay out, filter, duplicate and delete dashboards through the Speakeasy Platform MCP.
list_dashboardsandget_dashboardread a project's dashboards and the Speakeasy-built ones;save_dashboard,duplicate_dashboard,delete_dashboard,edit_dashboard_layoutandsave_dashboard_filterspreview first, then commit once confirmed against the version last read, with the same permissions, grid rules and audit trail as the Dashboards page. Speakeasy-built dashboards stay read-only: duplicate one to change it. -
43db572: Hosted MCP server traffic now records the MCP server and endpoint it was served through on tool call and resource read logs, usage events, analytics events, request logs, and the tool call and request duration metrics.
Legacy hosted requests also attribute unambiguous server identities without changing authorization, and remote tool-call and resource-read usage events include their fronting server identity. Hosted tools-list analytics emits the shared
mcp_server_tools_listevent alongside the existingmcp_server_countevent for compatibility; analytics consumers should select one event rather than sum both. -
2baba61: Identity chaining no longer sends OpenID Connect scopes (
openid,profile,email,offline_access,phone,address) in the ID-JAG token exchange, because Okta rejects them. A client whose scope came from the issuer's discoveredscopes_supportednow chains with only its resource scopes, or with noscopeparameter when none remain, in which case the ID-JAG may carry no scope or only scopes from the configured set. When scopes are requested, the ID-JAG must carry exactly that set: one that omits itsscopeclaim fails withscope_policy_deniedand one that carries only some of them fails withinsufficient_scope, so an omitted token scope is never recorded as granted on the ID-JAG's behalf. An ID-JAG whose audience is the resource authorization server's issuer is accepted alongside an administrator-confirmed audience. When the resource authorization server's token reports a scope that lacks a requested scope, the server still rejects it and now logs the requested and granted scope names at warning level. -
2baba61: Platform MCP readiness now judges MCP servers that identity chaining serves the way the MCP runtime does. When a user has no interactive session for such a server, including when no interactive client is attached,
get_mcp_readinessreportsreadywithidentity_chaining_activeevidence once the user holds a usable chained credential, and otherwise keeps reporting that authorization is needed withidentity_chaining_configuredevidence instead ofupstream_authorization_requiredorno_valid_authorization.get_my_mcp_connection_statusreports the server as active with reasonidentity_chainingwhen the user holds a usable chained credential, and otherwise reasonidentity_chaining_configuredwith next actionuse_mcp; an active interactive session the provider rejected still reports reauthorization, since the runtime forwards it rather than chaining. With several interactive clients for the server, identity chaining is consulted before reportingmultiple_authorization_clients. A stored chained credential that no longer decrypts counts as unusable. Neither surface requests a token. -
fd1b58c: Hosted MCP requests served through the legacy toolset slug lookup now carry the toolset's canonical MCP server when it has one, so kill switches (evaluated fail-closed, as on the endpoint path) and server-scoped risk policies on prompts/get and resources/read apply to them. Each fallback request is logged with its entry point, toolset, project, request host, canonical-server presence and custom domain state.
-
b481b2d: The Okta setup checklist now says that the AI agent's linked app is the app people use to sign in to Speakeasy. After the agent is registered and linked, you record the agent ID, then a new Add the agent's public key step has you use Set up Okta sign-in, paste the public key it shows in the agent's Credentials and click Activate, before activating or editing the linked app, because Okta rejects changes to the linked app until the agent has a public key. The step notes that rotating or publishing a new key means pasting it in Okta again, and that setup needs customer-managed encryption keys and a Google Cloud KMS key. The activate step then adds the Authorization Code and Refresh Token grant types and the sign-in redirect URI. It also says that people who sign in through Okta must already exist in Speakeasy through directory sync (SCIM).
The checklist's first Cross App Access connection step now says, in the same words as the dashboard's notice, that each vendor must also enable enterprise-managed authorization in its own admin console and trust your Okta issuer, with Linear as the example. Many vendors require an Enterprise or SSO plan, and Speakeasy cannot do this step for you.
-
b481b2d: The Platform MCP
get_xaa_readinesstool now also reports the organization's Okta sign-in setup inokta_sign_in: whether the AI agent's linked app is registered as the sign-in client and ready, the active public key (JWK, public members only) to paste in the agent's Credentials in Okta and Activate, the sign-in redirect URI, which organization sign-in issuers trust it or still trust a previous agent's client, the next sign-in step, and the first Okta setup checklist step not yet confirmed (skipping steps Speakeasy cannot observe once its side is done). Several clients claiming the agent ID report a distinctresolve_duplicate_sign_in_clientsstep instead of picking one. It stays read-only and organization-admin only; setting up sign-in still happens in the dashboard because it needs a signing key choice and a confirmed trust change.Recording an AI agent ID that is the connection's own service app client ID is now rejected.
-
db650a3: Migrate prompt injection scanning to a cascade that sends Jev candidates at or above 50% probability to Sonnet 5.5 for confirmation using up to five conversation messages. Role-play and "act as" requests count as content requests unless they also try to override the agent. When Sonnet 5.5's safety classifier refuses a candidate, Opus 4.8 confirms it instead.
-
daf0a70: Editing a Shadow MCP policy no longer fails with "cannot change the sources or action of a shadow mcp policy with a disposition". A
block_allpolicy — the default, and what every policy the dashboard creates stores — can once again turn its Shadow MCP detector off or move off the Deny action, exactly as the policies that predate the disposition field always could; the server now retires the policy's allowed-server grants along with the posture instead of leaving them behind. Anallow_allpolicy still cannot, because its blocked-server list would have nothing left to enforce, but the editor now pins its detector and action up front with the reason, and the remaining server-side rejections say which part of the edit was refused and what to do instead. The Platform MCPupdate_risk_policytool follows the same rule: ablock_allpolicy's patch may turn offshadow_mcpor move off the Deny action and retires the policy's allowed-server grants with it, while anallow_allpolicy's patch is refused with the same explanation. -
520d773: Shadow MCP admission no longer depends on hidden rollout flags: the project's enabled block policy is always enforced for user-supplied MCP servers, and an organization administrator's own write is recorded as the approval. When an administrator puts a server added by URL into a plugin, or widens a plugin's audience, from the Platform MCP or the dashboard, the server is recorded in Shadow MCP as approved for exactly the people who receive it, and the Platform MCP result reports that standing with a link to its page. The
platform-mcp-shadow-audience-enforcementandplatform-mcp-direct-remote-distribution-disabledfeature flags are removed. -
41d53fc: Resolve a toolset's MCP server to an enabled server before a disabled canonical wrapper, so the advertised hosted URL and minted session tokens target a server that serves.
Keep the playground connection, session mint, and session management on the selected server's endpoint and issuer without reviving disabled canonical routes. Show explicit loading and failure states instead of reporting missing authentication or starting chat after connection errors.
-
2baba61: The Platform MCP
get_xaa_readinesstool now reports an MCP server's identity chaining bindings (state, remediation, the configured scopes, the scopes actually requested after dropping OpenID Connect scopes, and whether chaining serves it, judged the way the runtime selects a direct or tunneled upstream) and the federated sign-in callback URL to register in the identity provider, including for clients with a recorded callback origin when no outbound origin is pinned. Every live binding for the upstream is listed. Preparing identity chaining checks organization administration before any other grant validation when it would change an organization-owned client's grants.