MCP Server 部署到 Cloudflare Workers:从边缘跑 MCP
把 MCP Server 部署到 Cloudflare Workers:std↔streamable HTTP 转换、Edge Runtime 限制、KV 持久化、wrangler 配置与生产部署清单。
操作步骤
评估 stdio vs Streamable HTTP
本地自用 → 保持 stdio;跨网络共享 → 改 Streamable HTTP;用 Cloudflare Workers 部署就一定用 Streamable HTTP。
改造 MCP Server 入口
用 @modelcontextprotocol/sdk 的 StreamableHTTPServerTransport 替代 StdioServerTransport;入口从 process.stdin 改成 fetch handler。
适配 Edge Runtime
代码只用 fetch / crypto / streams / KV binding;移除 fs / child_process 用法;长任务用 ctx.waitUntil 异步。
配 wrangler.jsonc
设 name / main / compatibility_date / compatibility_flags;配 kv_namespaces(D1 / R2 bindings);secrets 放 wrangler secret 单独管。
本地 wrangler dev 调试
wrangler dev 启动;MCP Host 配 http://localhost:8787/sse;测 tool 列表与调用;改代码 hot reload。
部署 + 监控
wrangler deploy;Cloudflare dashboard 看请求日志 + CPU 用量;配 alerts。
Cloudflare Workers 是部署 MCP Server 的理想边缘平台--低延迟、按请求付费、快启动。本文给完整路径。
1. 为何选 Workers
部署 MCP Server 的常见选项:
| 平台 | 延迟 | 冷启动 | 适合 |
|---|---|---|---|
| Cloudflare Workers | 极低(200+ PoP) | < 50ms | 边缘 MCP、IO 密集 |
| Vercel Functions | 中(CDN) | 中 | Next.js 同栈 |
| AWS Lambda | 中 | 中 | 复杂后端 |
| 自建 VPS | 看你机房 | 看负载 | 完全控制 |
Workers 的优势:全球边缘延迟 + 按请求付费 + KV/D1/R2 配套。
2. stdio vs Streamable HTTP
MCP 有两种传输:
- stdio:本地进程(Host 拉起 server 二进制,通过 stdin/stdout 通信)
- Streamable HTTP:HTTP + SSE(Server 暴露 HTTP endpoint,Host 通过 POST + GET-SSE 调用)
Workers 只能跑 Streamable HTTP--因为 Workers 是 edge runtime,没有 stdin/stdout 进程。
改造方法:用 @modelcontextprotocol/sdk 的 StreamableHTTPServerTransport 替代 StdioServerTransport:
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined, // stateless
});
server.connect(transport);
// Workers fetch handler
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
return transport.handleRequest(request);
}
};
3. Edge Runtime 限制
Workers Edge Runtime 不是 Node.js--以下不可用:
fs(文件系统)child_process(子进程)setImmediate/process.nextTick- 任何 Node.js 内置模块(除 fetch / crypto / streams / URL 等 Web 标准)
代码要:
- 只用 Web 标准 API(
fetch、crypto.subtle、TransformStream) - 用 Workers KV / D1 / R2 替代本地存储
- 长任务用
ctx.waitUntil异步 - 不能 require Node.js 包;用 esbuild 兼容的 npm 包(多数现代 SDK 都兼容)
4. CPU 时间限制
| Plan | CPU 时间 / 请求 |
|---|---|
| Free | 5ms(wall time 10s) |
| Bundled | 5-50ms(按 plan) |
| Unbound | 30s |
MCP tool call 通常 CPU 密集度低(IO bound)--5ms 多数情况够;复杂计算(爬虫 + 解析)上 Unbound。
5. KV 持久化
Workers KV(边缘 key-value 存储)适合 MCP 场景:
// 读
const counter = await env.MCP_KV.get("rate_limit:user_123", { type: "json" });
// 写
await env.MCP_KV.put("rate_limit:user_123", JSON.stringify({ count: counter + 1 }));
KV 特性:
- Eventual consistency(全球 < 60 秒收敛)
- 单 key ≤ 25MB value
- 适合 rate limit / 缓存 / 偏好设置
不适合强一致场景(用 D1 SQLite)。
6. wrangler.jsonc 配置
{
"name": "my-mcp-server",
"main": "src/index.ts",
"compatibility_date": "2026-08-01",
"compatibility_flags": ["nodejs_compat"], // 兼容部分 Node.js API
"vars": {
"LOG_LEVEL": "info"
},
"kv_namespaces": [
{ "binding": "MCP_KV", "id": "xxx" }
],
"secrets": [
"GITHUB_CLIENT_SECRET", // 用 wrangler secret put 设置
"API_KEY"
]
}
secrets 不进 git--用 wrangler secret put GITHUB_CLIENT_SECRET 设置。
7. 部署 + 监控
# 本地开发
wrangler dev
# 部署
wrangler deploy
# 查看日志
wrangler tail
# 设置 secrets
wrangler secret put GITHUB_CLIENT_SECRET
Cloudflare dashboard 提供:
- 请求 / 错误率实时监控
- CPU 时间使用(识别性能问题)
- KV 读写量
配 alerts:5xx 率 > 5% 持续 5 分钟触发报警。
8. 实战踩坑
nodejs_compatflag:部分 Node.js 包(特别是 zod / pnpm 包)需要这个 flag 才能跑- 冷启动:首次请求 50-100ms warm-up;用户第一次调 MCP 体验稍慢
- Worker size limit:1MB 压缩后;含 SDK 后通常 200-400KB
- CORS:MCP Host(ChatGPT 网页)从不同域调你的 Worker;需要配置 CORS 允许
*或 ChatGPT 域
9. 下一步
- 《自己搭一个 MCP Server:从零到发布的完整指南》 - stdio MCP 完整路径
- 《Model Context Protocol 完全指南:MCP 工作机制与实战》 - 协议深入
- 《OpenAI API 错误处理与重试》 - 推理层稳定性
更新记录
- 2026-08-08:首次发布
关键要点
- Workers 是部署 MCP Server 的理想边缘平台--但只能跑 Streamable HTTP MCP,stdio 需要本地进程
- Edge Runtime 没有 Node.js API(fs / child_process 不可用)--只用 Web 标准 API(fetch / crypto / streams)
- CPU 时间限 5ms(free plan)/ 30s(unbound plan)--长任务要 stream 或 offload
- KV 用于持久化(rate limit 状态、user 偏好)--eventual consistency 但够用
- wrangler.jsonc 配置 secrets(OAuth client secret、API keys)+ bindings(KV、D1、R2)
- 本地用 wrangler dev 模拟 Edge Runtime;部署用 wrangler deploy;CI 用 wrangler deploy --dry-run
常见问题
官方参考
相关文章
MCP 服务器开发实战:协议、调试、安全与生产部署
MCP 服务器 production 必备能力:协议深入(JSON-RPC 2.0 / lifecycle / capabilities 协商)、Inspector 调试、安全模式(prompt injection / OAuth scope / 审计)、三种传输选型(stdio / Streamable HTTP / SSE)实战。
阅读全文自己搭一个 MCP Server:从零到发布的完整指南
用 @modelcontextprotocol/sdk 从零搭一个 MCP Server 并发布:项目初始化、声明工具、选传输层、本地自测、OAuth 鉴权与上线清单。
阅读全文Model Context Protocol 完全指南:MCP 工作机制与实战
MCP 是什么、它如何标准化 LLM 的工具调用,以及如何动手写一个 MCP Server,把你的数据或 API 暴露给 ChatGPT、Claude 和 Cursor。
阅读全文订阅 GPTMap Weekly
每周一封邮件,精选 OpenAI 重要更新、深度解读与最佳实践。无广告,可随时退订。