MCP服务器模板

一个基于Cloudflare Workers的无状态MCP服务器模板,适用于工具、资源和提示的开发,具有结构化日志记录、错误跟踪和可配置的CORS功能。

  • by cougz
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 cougz/example-mcp-via-workers

使用说明

MCP服务器模板

Cloudflare Workers使用无状态的生产就绪MCP服务器模板 createMcpHandler 图案。

快速开始

bun install && bun run dev
# Connect MCP Inspector to http://localhost:8787/mcp

脚本

命令 描述
bun run dev 地方发展
bun run test 运行测试
bun run deploy 部署到生产环境
bun run deploy:staging 部署到暂存

环境

环境 日志 跟踪 用例
生产 10% 1% 针对高流量进行了成本优化
暂存 100% 10% 调试完全可见

采样率控制记录/跟踪的请求百分比。较低的速率可以降低成本,同时保持可观测性。

配置

环境变量

变量 描述 示例
CORS_ORIGIN 允许的CORS源(默认值: *) https://myapp.com

通过wrangler设置:

wrangler secret put CORS_ORIGIN

建筑

这使用了 无状态 createMcpHandler 代理SDK中的模式。这是MCP服务器的推荐方法:

  • 不需要在请求之间维护状态
  • 更简单,运营成本更低(无耐用物品)
  • 工具、资源和提示足够

如果您需要有状态的行为(例如游戏服务器、聊天状态),请使用 McpAgent 类中的持久对象。

结构

src/
├── index.ts        # Entry point with health check, CORS, and MCP handler
├── types.ts        # Type definitions
└── utils/          # Logging utilities
    ├── logger.ts    # Structured logging
    └── sanitize.ts # Param sanitization

添加工具

编辑 src/index.ts 并在服务器上注册您的工具:

import { z } from "zod";

server.tool(
  "my_tool",
  "What it does",
  { input: z.string() },
  async ({ input }) => ({
    content: [{ type: "text", text: JSON.stringify({ result: input }) }],
  }),
);

Zod模式由MCP SDK自动验证。

客户配置

开源代码

~/.config/opencode/opencode.json:

{
  "mcp": {
    "my-server": {
      "type": "remote",
      "url": "https://my-worker.workers.dev/mcp",
      "enabled": true
    }
  }
}

克劳德桌面/光标

{
  "mcpServers": {
    "my-server": { "url": "https://my-worker.workers.dev/mcp" }
  }
}

特性

  • 无状态架构:无需耐用物品,更简单,成本更低
  • 结构化日志记录:所有日志都包括请求ID、时间戳和上下文
  • 错误跟踪:在Cloudflare Observability中捕获并可见堆栈跟踪
  • 安全标头:X-Content-Type-Options、X-Frame-Options和推荐人政策
  • 可配置CORS:通过以下方式限制特定来源 CORS_ORIGIN env 是
  • 健康检查: /health 监控端点
  • 参数消毒:日志中自动编辑敏感字段(密码、令牌、api_key)

许可证

麻省理工学院