Skip to content

Commit 473e53c

Browse files
Upgrade MCP SDK to v1.25.1 (#752)
* upgrade mcp and native example * fix: fallback error handling since mcp v1.24.0 * fix lockfile * add some tests * Update @modelcontextprotocol/sdk to v1.25.2 - Upgrade MCP SDK from 1.25.1 to 1.25.2 - Import EventStore, StreamId, EventId types from SDK instead of local definitions - Regenerate package-lock.json * reset on main * Update @modelcontextprotocol/sdk to v1.25.2 - Upgrade MCP SDK from 1.23.0 to 1.25.2 - Use caret range for automatic patch updates * pin package version * changeset * typo --------- Co-authored-by: Sunil Pai <spai@cloudflare.com>
1 parent 6a60afe commit 473e53c

File tree

21 files changed

+1101
-164
lines changed

21 files changed

+1101
-164
lines changed

.changeset/angry-beds-cheat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"agents": patch
3+
---
4+
5+
bump mcp sdk version to 1.25.2. changes error handling for not found see: https://github.com/cloudflare/agents/pull/752/changes#diff-176ef2d2154e76a8eb7862efb323210f8f1b434f6a9ff3f06abc87d8616855c9R25-R31

examples/mcp-server/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# MCP Server Example
2+
3+
This example demonstrates how to use `WebStandardStreamableHTTPServerTransport` to create an unauthenticated stateless MCP server.
4+
5+
In this example we do not use the `agents` package, but instead use the `@modelcontextprotocol/sdk` package directly to create an MCP server that "just works" on Cloudflare Workers.
6+
7+
This is THE simplest way to get started with MCP on Cloudflare.
8+
9+
## Usage
10+
11+
```bash
12+
npm install
13+
npm run dev
14+
```
15+
16+
## Testing
17+
18+
You can test the MCP server using the MCP Inspector or any MCP client that supports the `streamable-http` transport.
19+
20+
## Adding State
21+
22+
To create a stateful MCP server, you can use an `Agent` to keep the state of the session/transport. See the [`mcp-elicitation`](../mcp-elicitation) example for more information.

examples/mcp-server/env.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* eslint-disable */
2+
// Generated by Wrangler by running `wrangler types env.d.ts --include-runtime false` (hash: b739a9c19cff1463949c4db47674ed86)
3+
declare namespace Cloudflare {
4+
interface GlobalProps {
5+
mainModule: typeof import("./src/index");
6+
}
7+
interface Env {}
8+
}
9+
interface Env extends Cloudflare.Env {}

examples/mcp-server/package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "@cloudflare/agents-mcp-server",
3+
"description": "zero config stateless MCP Server on Cloudflare",
4+
"author": "Matt Carey <mcarey@cloudflare.com>",
5+
"version": "0.0.1",
6+
"private": true,
7+
"type": "module",
8+
"scripts": {
9+
"dev": "wrangler dev",
10+
"deploy": "wrangler deploy",
11+
"types": "wrangler types env.d.ts --include-runtime false"
12+
}
13+
}

examples/mcp-server/src/index.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { z } from "zod";
3+
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
4+
5+
const server = new McpServer({
6+
name: "Hello MCP Server",
7+
version: "1.0.0"
8+
});
9+
10+
server.registerTool(
11+
"hello",
12+
{
13+
description: "Returns a greeting message",
14+
inputSchema: { name: z.string().optional() }
15+
},
16+
async ({ name }) => {
17+
return {
18+
content: [
19+
{
20+
text: `Hello, ${name ?? "World"}!`,
21+
type: "text"
22+
}
23+
]
24+
};
25+
}
26+
);
27+
28+
const transport = new WebStandardStreamableHTTPServerTransport();
29+
server.connect(transport);
30+
31+
const corsHeaders = {
32+
"Access-Control-Allow-Origin": "*",
33+
"Access-Control-Allow-Methods": "GET, POST, DELETE, OPTIONS",
34+
"Access-Control-Allow-Headers":
35+
"Content-Type, Accept, mcp-session-id, mcp-protocol-version",
36+
"Access-Control-Expose-Headers": "mcp-session-id",
37+
"Access-Control-Max-Age": "86400"
38+
};
39+
40+
function withCors(response: Response): Response {
41+
for (const [key, value] of Object.entries(corsHeaders)) {
42+
response.headers.set(key, value);
43+
}
44+
return response;
45+
}
46+
47+
export default {
48+
fetch: async (request: Request, _env: Env, _ctx: ExecutionContext) => {
49+
if (request.method === "OPTIONS") {
50+
return new Response(null, { headers: corsHeaders });
51+
}
52+
return withCors(await transport.handleRequest(request));
53+
}
54+
};

examples/mcp-server/tsconfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"extends": "../../tsconfig.base.json"
3+
}

examples/mcp-server/wrangler.jsonc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"compatibility_date": "2025-10-08",
3+
"compatibility_flags": ["nodejs_compat"],
4+
"main": "src/index.ts",
5+
"name": "mcp-server",
6+
"observability": {
7+
"logs": {
8+
"enabled": true
9+
}
10+
}
11+
}

examples/mcp-worker/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
This example demonstrates how to use `createMcpHandler` to create an unauthenticated stateless MCP server.
44

5-
This is THE simplest way to get started with MCP on Cloudflare.
6-
75
## Usage
86

97
```bash

package-lock.json

Lines changed: 17 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"@cloudflare/vite-plugin": "^1.19.0",
3838
"@cloudflare/vitest-pool-workers": "^0.11.1",
3939
"@cloudflare/workers-types": "^4.20260103.0",
40-
"@modelcontextprotocol/sdk": "1.23.0",
40+
"@modelcontextprotocol/sdk": "1.25.2",
4141
"@openai/agents": "^0.3.7",
4242
"@openai/agents-extensions": "^0.3.7",
4343
"@types/node": "^25.0.3",

0 commit comments

Comments
 (0)