Skip to content

Commit 54fa96e

Browse files
Version Packages (alpha) (#1420)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 38d6cd2 commit 54fa96e

File tree

17 files changed

+520
-9
lines changed

17 files changed

+520
-9
lines changed

.changeset/pre.json

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,47 @@
2121
"@modelcontextprotocol/test-helpers": "2.0.0-alpha.0",
2222
"@modelcontextprotocol/test-integration": "2.0.0-alpha.0"
2323
},
24-
"changesets": []
24+
"changesets": [
25+
"abort-handlers-on-close",
26+
"add-fastify-middleware",
27+
"add-hono-peer-dep",
28+
"add-resource-size-field",
29+
"brave-lions-glow",
30+
"busy-rice-smoke",
31+
"busy-weeks-hang",
32+
"cyan-cycles-pump",
33+
"drop-zod-peer-dep",
34+
"expose-auth-server-discovery",
35+
"extract-task-manager",
36+
"finish-sdkerror-capability",
37+
"fix-abort-listener-leak",
38+
"fix-oauth-5xx-discovery",
39+
"fix-onerror-callbacks",
40+
"fix-server-protocol-version",
41+
"fix-session-status-codes",
42+
"fix-stdio-epipe-crash",
43+
"fix-stdio-windows-hide",
44+
"fix-streamable-http-error-response",
45+
"fix-task-session-isolation",
46+
"fix-transport-exact-optional-property-types",
47+
"fix-unknown-tool-protocol-error",
48+
"funky-baths-attack",
49+
"heavy-walls-swim",
50+
"oauth-error-http200",
51+
"quick-islands-occur",
52+
"reconnection-scheduler",
53+
"remove-websocket-transport",
54+
"respect-capability-negotiation",
55+
"rich-hounds-report",
56+
"schema-object-type-for-unions",
57+
"shy-times-learn",
58+
"spotty-cats-tickle",
59+
"stdio-skip-non-json",
60+
"support-standard-json-schema",
61+
"tame-camels-greet",
62+
"tender-snails-fold",
63+
"token-provider-composable-auth",
64+
"twelve-dodos-taste",
65+
"use-scopes-supported-in-dcr"
66+
]
2567
}

packages/client/CHANGELOG.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# @modelcontextprotocol/client
2+
3+
## 2.0.0-alpha.1
4+
5+
### Major Changes
6+
7+
- [#1783](https://github.com/modelcontextprotocol/typescript-sdk/pull/1783) [`045c62a`](https://github.com/modelcontextprotocol/typescript-sdk/commit/045c62a1e0ada756afe90dd1442534e362269dbf) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Remove
8+
`WebSocketClientTransport`. WebSocket is not a spec-defined transport; use stdio or Streamable HTTP. The `Transport` interface remains exported for custom implementations. See #142.
9+
10+
### Minor Changes
11+
12+
- [#1527](https://github.com/modelcontextprotocol/typescript-sdk/pull/1527) [`dc896e1`](https://github.com/modelcontextprotocol/typescript-sdk/commit/dc896e198bdd1367d93a7c38846fdf9e78d84c6a) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Add
13+
`discoverOAuthServerInfo()` function and unified discovery state caching for OAuth
14+
- New `discoverOAuthServerInfo(serverUrl)` export that performs RFC 9728 protected resource metadata discovery followed by authorization server metadata discovery in a single call. Use this for operations like token refresh and revocation that need the authorization server
15+
URL outside of `auth()`.
16+
- New `OAuthDiscoveryState` type and optional `OAuthClientProvider` methods `saveDiscoveryState()` / `discoveryState()` allow providers to persist all discovery results (auth server URL, resource metadata URL, resource metadata, auth server metadata) across sessions. This
17+
avoids redundant discovery requests and handles browser redirect scenarios where discovery state would otherwise be lost.
18+
- New `'discovery'` scope for `invalidateCredentials()` to clear cached discovery state.
19+
- New `OAuthServerInfo` type exported for the return value of `discoverOAuthServerInfo()`.
20+
21+
- [#1673](https://github.com/modelcontextprotocol/typescript-sdk/pull/1673) [`462c3fc`](https://github.com/modelcontextprotocol/typescript-sdk/commit/462c3fc47dffac908d2ba27784d47ff010fa065e) Thanks [@KKonstantinov](https://github.com/KKonstantinov)! - refactor: extract task
22+
orchestration from Protocol into TaskManager
23+
24+
**Breaking changes:**
25+
- `taskStore`, `taskMessageQueue`, `defaultTaskPollInterval`, and `maxTaskQueueSize` moved from `ProtocolOptions` to `capabilities.tasks` on `ClientOptions`/`ServerOptions`
26+
27+
- [#1763](https://github.com/modelcontextprotocol/typescript-sdk/pull/1763) [`6711ed9`](https://github.com/modelcontextprotocol/typescript-sdk/commit/6711ed9ae8a6a98f415aaa4f145941a562b8e191) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Add
28+
`reconnectionScheduler` option to `StreamableHTTPClientTransport`. Lets non-persistent environments (serverless, mobile, desktop sleep/wake) override the default `setTimeout`-based SSE reconnection scheduling. The scheduler may return a cancel function that is invoked on
29+
`transport.close()`.
30+
31+
- [#1443](https://github.com/modelcontextprotocol/typescript-sdk/pull/1443) [`4aec5f7`](https://github.com/modelcontextprotocol/typescript-sdk/commit/4aec5f790624b1931cf62c006ae02b09d7562d2f) Thanks [@NSeydoux](https://github.com/NSeydoux)! - The client credentials providers now
32+
support scopes being added to the token request.
33+
34+
- [#1689](https://github.com/modelcontextprotocol/typescript-sdk/pull/1689) [`0784be1`](https://github.com/modelcontextprotocol/typescript-sdk/commit/0784be1a67fb3cc2aba0182d88151264f4ea73c8) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Support Standard Schema
35+
for tool and prompt schemas
36+
37+
Tool and prompt registration now accepts any schema library that implements the [Standard Schema spec](https://standardschema.dev/): Zod v4, Valibot, ArkType, and others. `RegisteredTool.inputSchema`, `RegisteredTool.outputSchema`, and `RegisteredPrompt.argsSchema` now use
38+
`StandardSchemaWithJSON` (requires both `~standard.validate` and `~standard.jsonSchema`) instead of the Zod-specific `AnySchema` type.
39+
40+
**Zod v4 schemas continue to work unchanged** — Zod v4 implements the required interfaces natively.
41+
42+
```typescript
43+
import { type } from 'arktype';
44+
45+
server.registerTool(
46+
'greet',
47+
{
48+
inputSchema: type({ name: 'string' })
49+
},
50+
async ({ name }) => ({ content: [{ type: 'text', text: `Hello, ${name}!` }] })
51+
);
52+
```
53+
54+
For raw JSON Schema (e.g. TypeBox output), use the new `fromJsonSchema` adapter:
55+
56+
```typescript
57+
import { fromJsonSchema, AjvJsonSchemaValidator } from '@modelcontextprotocol/core';
58+
59+
server.registerTool(
60+
'greet',
61+
{
62+
inputSchema: fromJsonSchema({ type: 'object', properties: { name: { type: 'string' } } }, new AjvJsonSchemaValidator())
63+
},
64+
handler
65+
);
66+
```
67+
68+
**Breaking changes:**
69+
- `experimental.tasks.getTaskResult()` no longer accepts a `resultSchema` parameter. Returns `GetTaskPayloadResult` (a loose `Result`); cast to the expected type at the call site.
70+
- Removed unused exports from `@modelcontextprotocol/core`: `SchemaInput`, `schemaToJson`, `parseSchemaAsync`, `getSchemaShape`, `getSchemaDescription`, `isOptionalSchema`, `unwrapOptionalSchema`. Use the new `standardSchemaToJsonSchema` and `validateStandardSchema` instead.
71+
- `completable()` remains Zod-specific (it relies on Zod's `.shape` introspection).
72+
73+
- [#1710](https://github.com/modelcontextprotocol/typescript-sdk/pull/1710) [`e563e63`](https://github.com/modelcontextprotocol/typescript-sdk/commit/e563e63bd2b3c2c1d1137406bef3f842c946201e) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Add `AuthProvider` for
74+
composable bearer-token auth; transports adapt `OAuthClientProvider` automatically
75+
- New `AuthProvider` interface: `{ token(): Promise<string | undefined>; onUnauthorized?(ctx): Promise<void> }`. Transports call `token()` before every request and `onUnauthorized()` on 401 (then retry once).
76+
- Transport `authProvider` option now accepts `AuthProvider | OAuthClientProvider`. OAuth providers are adapted internally via `adaptOAuthProvider()`no changes needed to existing `OAuthClientProvider` implementations.
77+
- For simple bearer tokens (API keys, gateway-managed tokens, service accounts): `{ authProvider: { token: async () => myKey } }`one-line object literal, no class.
78+
- New `adaptOAuthProvider(provider)` export for explicit adaptation.
79+
- New `handleOAuthUnauthorized(provider, ctx)` helperthe standard OAuth `onUnauthorized` behavior.
80+
- New `isOAuthClientProvider()` type guard.
81+
- New `UnauthorizedContext` type.
82+
- Exported previously-internal auth helpers for building custom flows: `applyBasicAuth`, `applyPostAuth`, `applyPublicAuth`, `executeTokenRequest`.
83+
84+
Transports are simplified internally~50 lines of inline OAuth orchestration (auth() calls, WWW-Authenticate parsing, circuit-breaker state) moved into the adapter's `onUnauthorized()` implementation. `OAuthClientProvider` itself is unchanged.
85+
86+
- [#1614](https://github.com/modelcontextprotocol/typescript-sdk/pull/1614) [`1a78b01`](https://github.com/modelcontextprotocol/typescript-sdk/commit/1a78b0138f1f3432968e53e810bac7929833eda2) Thanks [@pcarleton](https://github.com/pcarleton)! - Apply resolved scope consistently
87+
to both DCR and the authorization URL (SEP-835)
88+
89+
When `scopes_supported` is present in the protected resource metadata (`/.well-known/oauth-protected-resource`), the SDK already uses it as the default scope for the authorization URL. This change applies the same resolved scope to the dynamic client registration request
90+
body, ensuring both use a consistent value.
91+
- `registerClient()` now accepts an optional `scope` parameter that overrides `clientMetadata.scope` in the registration body.
92+
- `auth()` now computes the resolved scope once (WWW-AuthenticatePRM `scopes_supported``clientMetadata.scope`) and passes it to both DCR and the authorization request.
93+
94+
### Patch Changes
95+
96+
- [#1758](https://github.com/modelcontextprotocol/typescript-sdk/pull/1758) [`e86b183`](https://github.com/modelcontextprotocol/typescript-sdk/commit/e86b1835ccf213c3799ac19f4111d01816912333) Thanks [@KKonstantinov](https://github.com/KKonstantinov)! - tasks - disallow requesting
97+
a null TTL
98+
99+
- [#1824](https://github.com/modelcontextprotocol/typescript-sdk/pull/1824) [`fcde488`](https://github.com/modelcontextprotocol/typescript-sdk/commit/fcde4882276cb0a7d199e47f00120fe13f7f5d47) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Drop `zod` from
100+
`peerDependencies` (kept as direct dependency)
101+
102+
Since Standard Schema support landed, `zod` is purely an internal runtime dependency used for protocol message parsing. User-facing schemas (`registerTool`, `registerPrompt`) accept any Standard Schema library. `zod` remains in `dependencies` and auto-installs; users no
103+
longer need to install it alongside the SDK.
104+
105+
- [#1761](https://github.com/modelcontextprotocol/typescript-sdk/pull/1761) [`01954e6`](https://github.com/modelcontextprotocol/typescript-sdk/commit/01954e621afe525cc3c1bbe8d781e44734cf81c2) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Convert remaining
106+
capability-assertion throws to `SdkError(SdkErrorCode.CapabilityNotSupported, ...)`. Follow-up to #1454 which missed `Client.assertCapability()`, the task capability helpers in `experimental/tasks/helpers.ts`, and the sampling/elicitation capability checks in
107+
`experimental/tasks/server.ts`.
108+
109+
- [#1632](https://github.com/modelcontextprotocol/typescript-sdk/pull/1632) [`d99f3ee`](https://github.com/modelcontextprotocol/typescript-sdk/commit/d99f3ee5274bb17bb0eb02c85381200feb4b43e6) Thanks [@matantsach](https://github.com/matantsach)! - Continue OAuth metadata discovery
110+
on 502 (Bad Gateway) responses, matching the existing behavior for 4xx. This fixes MCP servers behind reverse proxies that return 502 for path-aware metadata URLs. Other 5xx errors still throw to avoid retrying against overloaded servers.
111+
112+
- [#1772](https://github.com/modelcontextprotocol/typescript-sdk/pull/1772) [`5276439`](https://github.com/modelcontextprotocol/typescript-sdk/commit/527643966e42a91711c50a0a6609f941f1dfe3e2) Thanks [@felixweinberger](https://github.com/felixweinberger)! - Always set
113+
`windowsHide` when spawning stdio server processes on Windows, not just in Electron environments. Prevents unwanted console windows in non-Electron Windows applications.
114+
115+
- [#1390](https://github.com/modelcontextprotocol/typescript-sdk/pull/1390) [`9bc9abc`](https://github.com/modelcontextprotocol/typescript-sdk/commit/9bc9abc68bf2b097b15c76a9673d44fb3ff31d03) Thanks [@DePasqualeOrg](https://github.com/DePasqualeOrg)! - Fix
116+
StreamableHTTPClientTransport to handle error responses in SSE streams
117+
118+
- [#1343](https://github.com/modelcontextprotocol/typescript-sdk/pull/1343) [`4b5fdcb`](https://github.com/modelcontextprotocol/typescript-sdk/commit/4b5fdcba02c20f26d8b0f07acc87248288522842) Thanks [@christso](https://github.com/christso)! - Fix OAuth error handling for servers
119+
returning errors with HTTP 200 status
120+
121+
Some OAuth servers (e.g., GitHub) return error responses with HTTP 200 status instead of 4xx. The SDK now checks for an `error` field in the JSON response before attempting to parse it as tokens, providing users with meaningful error messages.
122+
123+
- [#1534](https://github.com/modelcontextprotocol/typescript-sdk/pull/1534) [`69a0626`](https://github.com/modelcontextprotocol/typescript-sdk/commit/69a062693f61e024d7a366db0c3e3ba74ff59d8e) Thanks [@josefaidt](https://github.com/josefaidt)! - remove npm references, use pnpm
124+
125+
- [#1386](https://github.com/modelcontextprotocol/typescript-sdk/pull/1386) [`00249ce`](https://github.com/modelcontextprotocol/typescript-sdk/commit/00249ce86dac558fb1089aea46d4d6d14e9a56c6) Thanks [@PederHP](https://github.com/PederHP)! - Respect capability negotiation in list
126+
methods by returning empty lists when server lacks capability
127+
128+
The Client now returns empty lists instead of sending requests to servers that don't advertise the corresponding capability:
129+
- `listPrompts()` returns `{ prompts: [] }` if server lacks prompts capability
130+
- `listResources()` returns `{ resources: [] }` if server lacks resources capability
131+
- `listResourceTemplates()` returns `{ resourceTemplates: [] }` if server lacks resources capability
132+
- `listTools()` returns `{ tools: [] }` if server lacks tools capability
133+
134+
This respects the MCP spec requirement that "Both parties SHOULD respect capability negotiation" and avoids unnecessary server warnings and traffic. The existing `enforceStrictCapabilities` option continues to throw errors when set to `true`.
135+
136+
- [#1534](https://github.com/modelcontextprotocol/typescript-sdk/pull/1534) [`69a0626`](https://github.com/modelcontextprotocol/typescript-sdk/commit/69a062693f61e024d7a366db0c3e3ba74ff59d8e) Thanks [@josefaidt](https://github.com/josefaidt)! - clean up package manager usage, all
137+
pnpm
138+
139+
- [#1595](https://github.com/modelcontextprotocol/typescript-sdk/pull/1595) [`13a0d34`](https://github.com/modelcontextprotocol/typescript-sdk/commit/13a0d345c0b88bf73264c41a793bf0ad44cfa620) Thanks [@bhosmer-ant](https://github.com/bhosmer-ant)! - Don't swallow fetch `TypeError`
140+
as CORS in non-browser environments. Network errors (DNS resolution failure, connection refused, invalid URL) in Node.js and Cloudflare Workers now propagate from OAuth discovery instead of being silently misattributed to CORS and returning `undefined`. This surfaces the real
141+
error to callers rather than masking it as "metadata not found."
142+
143+
- [#1279](https://github.com/modelcontextprotocol/typescript-sdk/pull/1279) [`71ae3ac`](https://github.com/modelcontextprotocol/typescript-sdk/commit/71ae3acee0203a1023817e3bffcd172d0966d2ac) Thanks [@KKonstantinov](https://github.com/KKonstantinov)! - Initial 2.0.0-alpha.0
144+
client and server package

packages/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@modelcontextprotocol/client",
3-
"version": "2.0.0-alpha.0",
3+
"version": "2.0.0-alpha.1",
44
"description": "Model Context Protocol implementation for TypeScript - Client package",
55
"license": "MIT",
66
"author": "Anthropic, PBC (https://anthropic.com)",

0 commit comments

Comments
 (0)