Commit graph

1,319 commits

Author SHA1 Message Date
Paul Carleton
4f01e7e070
fix: add non-null assertions for optional setupServer fields in stateful test 2026-02-04 18:52:07 +00:00
Paul Carleton
a05be176ca
Merge commit from fork
* fix: add transport isolation guards to prevent cross-client data leaks

When a single McpServer or stateless transport is reused across multiple
client connections, responses can be routed to the wrong client due to
message ID collisions. This is a data leak vulnerability (CWE-362).

Two guards added:
- Protocol.connect() throws if already connected to a transport
- Stateless transport.handleRequest() throws if called more than once

Also fixes three examples that shared a single McpServer across sessions:
- standaloneSseWithGetStreamableHttp.ts
- ssePollingExample.ts
- elicitationFormExample.ts

Related: #820, #204, #243

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: correct misleading test name and add per-request cleanup

- Rename 'should reject second SSE stream even in stateless mode' to
  'should allow multiple SSE streams in stateless mode with per-request
  transports' since the test now asserts both streams succeed (status 200)
- Add mcpServer.close() after per-request handling in
  stateManagementStreamableHttp.test.ts to prevent resource leaks,
  matching the pattern used in streamableHttp.test.ts
- Remove unused mcpServers array that collected but never cleaned up
  per-request server instances

* thread abort through sendRequest and notification to prevent crosstalk

* test: remove dummy objects from stateless setupServer return

In stateless mode, setupServer() was creating unused McpServer and
StreamableHTTPServerTransport instances solely to satisfy the return
type. Make mcpServer/serverTransport optional in the return type and
simplify the stateless beforeEach/afterEach to only track server and
baseUrl.

* fix: use McpError for sendRequest abort guard and fix Hono example reuse

- sendRequest abort guard now throws McpError(ErrorCode.ConnectionClosed)
  instead of plain Error for consistency with the rest of the codebase
- Hono example updated to create fresh transport and server per request,
  fixing breakage from the stateless transport reuse guard

* fix: use separate resolvers per protocol in transport isolation test

Address review feedback: each protocol handler now has its own resolver
returning distinct data (responseForA vs responseForB), so the test
properly demonstrates that responses route to the correct transport.
Uses explicit 'handler entered' promises for deterministic synchronization.

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:23:03 +00:00
Zwifi
50d9fa3cd1
Fix #1430: Client Credentials providers scopes support (backported) (#1442) 2026-02-02 15:53:49 +00:00
Samuele V
aa81a66556
fix(deps): resolve npm audit vulnerabilities and bump dependencies (v1.x backport) (#1382)
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
2026-01-23 15:44:06 +00:00
Paul Carleton
6aba065965
chore: bump v1.25.3 for backport fixes (#1412) 2026-01-20 11:42:13 +00:00
Matt
6e8f7e1a43
fix: prevent Hono from overriding global Response object (v1.x) (#1411) 2026-01-20 11:17:15 +00:00
Ola Hungerford
12ae856cee
[v1.x backport] Use correct schema for client sampling validation when tools are present (#1407)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:15:11 +00:00
Paul Carleton
b392f02ffc
fix: prevent ReDoS in UriTemplate regex patterns (v1.x backport) (#1365) v1.25.2 2026-01-07 14:37:11 +00:00
Anton Pidkuiko
a0c9b13484
fix: README badges links destinations (#907)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
2025-12-19 16:47:16 +00:00
Felix Weinberger
6dd08ac608
ci: trigger workflow on v1.x branch (#1319) 2025-12-19 15:45:13 +02:00
Felix Weinberger
384311b9b8
chore: bump version for patch fix (#1307) 1.25.1 2025-12-16 16:10:07 +01:00
Konstantin Konstantinov
fb07af810b
spec types - backwards compatibility changes (#1306) 2025-12-16 15:15:39 +01:00
Felix Weinberger
2b20ca9573
chore: bump version for release (#1301) 1.25.0
simple version bump for release
2025-12-15 19:39:21 +01:00
Matt
67ba7adbb7
feat: fetch transport (#1209)
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
2025-12-15 17:28:10 +00:00
Dale Seo
1d42547134
Add theme property to Icon schema (#1290)
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
2025-12-15 18:03:03 +02:00
Henry Mao
54303b4f8c
Add optional description field to Implementation schema (#1295)
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
Co-authored-by: Konstantin Konstantinov <konstantin@mach5technology.com>
2025-12-15 17:58:03 +02:00
Felix Weinberger
9941294df9
Fix Zod v4 schema description extraction (#1296) 2025-12-15 17:46:11 +02:00
Matt
34c9e165fe
Update TypeScript config to ES2020 to fix AJV imports (#1297) 2025-12-15 15:33:10 +00:00
Dale Seo
67d79d45ee
Update server examples and docs (#1285) 2025-12-11 11:58:47 +00:00
Felix Weinberger
06a4fd2332
Follow-up fixes for PR #1242 (#1274) 2025-12-09 14:21:02 +02:00
Konstantin Konstantinov
a606fb1790
SPEC COMPLIANCE: Remove loose/passthrough types not allowed/defined by MCP spec + Task types (#1242) 2025-12-09 11:52:23 +00:00
Konstantin Konstantinov
4d6c3b8284
Flaky test fix on Types.test.ts (#1244)
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
2025-12-08 21:40:18 +00:00
Matt
fbf5fc9b02
Protocol date validation (#1247) 2025-12-08 17:46:34 +00:00
Dale Seo
cd7a055abc
fix a typo in examples README (#1246) 2025-12-08 11:52:20 +00:00
Konstantin Konstantinov
d0be5fa296
tsconfig - tests and build fix (#1243) 2025-12-07 14:45:49 +02:00
Konstantin Konstantinov
8d27021af9
Fix tsconfig: remove tests (#1240) 2025-12-07 12:53:02 +02:00
Konstantin Konstantinov
5a9de1c638
Relocate tests under /test (#1220) 2025-12-05 23:56:12 +00:00
Luca Chang
7655eeb51c
Remove type dependency on @cfworker/json-schema (#1229)
Co-authored-by: Matt Carey <mcarey@cloudflare.com>
Co-authored-by: Matt <77928207+mattzcarey@users.noreply.github.com>
2025-12-05 19:13:45 +02:00
V
316906aeb8
fix: Support updating output schema (#1048)
Co-authored-by: Konstantin Konstantinov <konstantin@mach5technology.com>
2025-12-05 11:20:29 +02:00
Cliff Hall
a57303c335
No automatic completion support unless needed - Revisited yet again (#1237) 2025-12-05 06:12:16 +02:00
Paul Carleton
d5dba5484c
fix: use versioned npm tag for non-main branch releases (#1236)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
2025-12-04 19:24:26 +00:00
Konstantin Konstantinov
e7ab32f9b5
Role - moved from inline to reusable type (#1221) 2025-12-04 21:21:46 +02:00
Matt
b0aac584fb
list changed handlers on client constructor (#1206)
Co-authored-by: ChipGPT <chip@ignission.io>
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
2025-12-04 21:08:36 +02:00
Felix Weinberger
724fe6eefe
chore: bump version for patch release (#1235) 1.24.3 2025-12-04 14:20:06 +00:00
Felix Weinberger
2f76ac8856
fix: skip priming events and closeSSEStream for old protocol versions (#1233) 2025-12-04 15:19:14 +02:00
Matt
0a374fc20a
fix: release HTTP connections after POST responses (#1214)
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
2025-12-04 11:56:32 +02:00
dependabot[bot]
2d2c8ffaab
chore(deps): bump express from 5.0.1 to 5.2.1 in the npm_and_yarn group across 1 directory (#1228)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 17:39:07 +00:00
Felix Weinberger
545dbe1f84
chore: fix dev dependency security vulnerabilities (#1227) 2025-12-03 17:35:01 +00:00
Paul Carleton
d23674da26
chore: bump version to 1.24.2 (#1224) 1.24.2
Co-authored-by: Claude <noreply@anthropic.com>
2025-12-03 13:06:06 +00:00
Wuma
7c9257cdf5
refactor: make Server class framework-agnostic by moving express to separate module (#1223) 2025-12-03 11:58:42 +00:00
Luca Chang
401a189fb8
chore: refresh CLAUDE.md (#1217)
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
2025-12-03 07:31:27 +02:00
Vincent Horvath
4b5c25d592
feat: add optional resource annotations (#954)
Co-authored-by: Konstantin Konstantinov <konstantin@mach5technology.com>
2025-12-03 07:22:20 +02:00
Felix Weinberger
6dd7cd4e16
chore: bump version for release (#1219) 1.24.1 2025-12-02 18:30:47 +00:00
David Soria Parra
600859f105
chore: update protocol version to 2025-11-25 (#1218)
Co-authored-by: Claude <noreply@anthropic.com>
2025-12-02 18:17:57 +00:00
Mattias
bfad917cad
fix(streamableHttp): fix infinite retries when maxRetries is set to 0 (#1216)
Co-authored-by: Felix Weinberger <fweinberger@anthropic.com>
2025-12-02 14:39:52 +00:00
Felix Weinberger
356b7e61c8
chore: bump version for release (#1215) 1.24.0 2025-12-02 13:40:51 +00:00
Paul Carleton
09623e2aa5
Merge commit from fork
* Add secure default for DNS rebinding, use in examples

* Update README examples to use createMcpExpressApp, bump to 1.23.0

- Update all server examples to use createMcpExpressApp() for secure defaults
- Rewrite DNS Rebinding Protection section to document new middleware approach
- Bump version from 1.23.0-beta.0 to 1.23.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add IPv6 support, allowedHosts option, and warning for unprotected servers

- Use native URL API to parse Host headers (handles IPv6 correctly)
- Add [::1] (IPv6 localhost) to localhostHostValidation
- Add ::1 to list of localhost hosts that get automatic protection
- Add allowedHosts option to createMcpExpressApp for custom host validation
- Warn when binding to 0.0.0.0 or :: without allowedHosts configured
- Add tests for IPv6 and allowedHosts functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update remaining examples to use createMcpExpressApp and add DNS rebinding docs

- Update simpleTaskInteractive.ts, ssePollingExample.ts, and elicitationUrlExample.ts
  to use createMcpExpressApp() instead of express() + express.json()
- Add DNS rebinding protection section to docs/server.md explaining how to use
  createMcpExpressApp() and hostHeaderValidation middleware

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-02 13:23:06 +00:00
Felix Weinberger
cf51343cc1
feat: backwards-compatible createMessage overloads for SEP-1577 (#1212) 2025-12-02 13:18:22 +00:00
Matt
82041262dc
fix: allow zod 4 transformations (#1213) 2025-12-02 12:56:38 +00:00
Jacopo Cappellato
608360047d
Modify Origin header validation in validateRequestHeaders (streamableHttp.ts and sse.ts) to allow requests without an Origin, as they are not relevant to server DNS rebinding protection. (#1205) 2025-12-02 09:56:09 +00:00