# What changed in @ai-sdk/mcp

> 36 changes in @ai-sdk/mcp 1 to 2 from its official release notes, upgrade guides and advisories: 5 breaking, 7 security, 9 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/@ai-sdk/mcp/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @ai-sdk/mcp 2

### Breaking changes

- Managed event subscription creation now requires ttlMs as a millisecond duration or null instead of accepting expiresAt; responses still include the backend-calculated expiresAt deadline. (2.0.76) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.76)
- Rejects invalid or missing adapter operations, nullish results, and Promise or thenable results with MCPClientError before the transport starts. (2.0.73) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.73)
- Pass an integration implementing createAdapter instead of passing subscription operations directly; existing operations can be wrapped with { createAdapter: () => operations }. (2.0.73) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.73)
- The configured integration type is now Experimental_MCPEventAdapter and requires implementing createAdapter. (2.0.73) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.73)
- The former subscription operations interface is renamed to Experimental_MCPEventOperations; update imports and operation type annotations. (2.0.73) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.73)

### Security

- Prevents authorization server paths beginning with repeated slashes from bypassing validation. (1.0.92, 2.0.70) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.70), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.92)
- Failed OAuth tokens are identified for conditional invalidation. (2.0.65) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.65)
- Pre-registered OAuth clients are preserved after client authentication errors, and dynamically registered credentials are replaced only with explicit provider provenance. (1.0.85, 2.0.55) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.85), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.55)
- DNS validation and connection pinning remain in place when frameworks or instrumentation wrap global fetch before or after the SDK loads. (0.0.39, 1.0.90, 2.0.51) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.90), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.39), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.51)
- Prevents SSRF in OAuth metadata discovery. (0.0.39, 1.0.90, 2.0.49) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.90), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.39), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.49)
- OAuth client registration is hardened according to the latest protocol. (2.0.33) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.33)

### New APIs and options

- Experimental event adapters implement synchronous createAdapter({ transport }) to receive the configured transport description and return bound subscription operations, so applications no longer configure the endpoint twice. (2.0.73) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.73)
- Adds experimental adapters for backend-owned subscription lifecycles without a local event store. (2.0.70) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.70)
- Adds an exclusive configuration union that distinguishes managed and direct event APIs from a single MCPClientConfig. (2.0.70) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.70)
- Adds compatibility for webhook-based MCP events. (2.0.70) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.70)
- Exports MCPClientError for typed MCP failure handling. (2.0.67) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.67)
- Adds an error for OAuth authorization server pin mismatches. (2.0.66) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.66)
- Adds the foundation for the latest 2026 protocol discovery. (2.0.33) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.33)
- Adds support for MCP 2026 streamable HTTP. (2.0.33) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.33)

### Behavior and default changes

- Renames the unreleased client event configuration to experimental_events. (2.0.70) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.70)
- Server-provided tool annotations are now surfaced in tool metadata. (1.0.78, 2.0.45) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.45), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.78)

### Fixes and other changes

- MCP tools can now execute without options. (0.0.40, 1.0.93, 2.0.74) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.74), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.93), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.40)
- Preserves OAuth credentials when callback codes are rejected. (1.0.91, 2.0.67) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.67), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.91)
- Rejects startup when the connection closes before an endpoint is received. (2.0.67) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.67)
- Preserves prototype-named tools, providers, and provider metadata as own properties without changing lookup object prototypes, preventing inherited names from resolving as registered providers or breaking image metadata aggregation. (0.0.38, 1.0.89, 2.0.62) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.89), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.38), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.62)
- Explicit environment values for the stdio transport are now preserved. (0.0.36, 1.0.86, 2.0.58) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.86), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.36), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.58)
- Avoids duplicate OAuth refreshes for stale 401 responses in legacy SSE. (1.0.82, 2.0.53) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.53), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.82)
- OAuth callbacks use the stored authorization server when protected resource metadata rediscovery fails. (1.0.81, 2.0.51) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.51), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.81)
- MCP tool results can return structuredContent without content; the serialized structured result is added as text. (2.0.45) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.45)
- Origin-only OAuth issuers now accept trailing slashes. (1.0.79, 2.0.44) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.79), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.44)
- Creating an MCP tool set now fetches all paginated tool definitions. (1.0.74, 2.0.37) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.37), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.74)
- Command shims such as npx can now be spawned on Windows. (0.0.29, 1.0.73, 2.0.36) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.73), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.29), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.36)
- Rejects SSE requests when POST responses are unsuccessful. (1.0.72, 2.0.35) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%402.0.35), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.72)

## @ai-sdk/mcp 1

### Security

- Private OAuth endpoints are rejected before credentials are sent, preventing credential disclosure. (0.0.39, 1.0.75) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%400.0.39), [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.75)

### New APIs and options

- OAuthClientProvider.invalidateCredentials accepts optional token context so providers sharing storage can atomically delete only the rejected token generation and preserve tokens saved by a concurrent refresh. (1.0.91) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.91)

### Behavior and default changes

- MCP scope selection now applies to dynamic client registration as well as authorization. (1.0.75) — [release notes](https://github.com/vercel/ai/releases/tag/%40ai-sdk/mcp%401.0.75)
