远程MCP服务器

基于Cloudflare Workers和Durable Objects实现的远程MCP服务器,支持HTTP流传输和状态管理,适用于AI交互和远程工具调用。

  • by endoumame
  • TypeScript
  • 混合部署
  • 更新于
在 GitHub 查看 endou-mame/cloudflare-my-remote-mcp-server

使用说明

Cloudflare远程MCP服务器

在具有持久对象的Cloudflare Workers上运行的模型上下文协议(MCP)服务器实现。

特性

  • 远程MCP服务器:可通过互联网访问基于HTTP流传输的MCP服务器
  • 耐用物品:使用Cloudflare持久对象进行有状态的请求处理
  • 示例工具:MCP协议演示工具
  • 示例资源:可通过MCP访问静态数据资源
  • 示例提示:人工智能交互的预构建提示
  • CORS支持:网络友好,跨源资源共享

建筑

┌─────────────────┐  HTTP POST + SSE  ┌──────────────────┐
│   MCP Client    │ ◄──────────────► │ Cloudflare       │
│   (AI/Claude)   │                  │ Worker           │
└─────────────────┘                  └─────────┬────────┘
                                               │
                                               ▼
                                     ┌──────────────────┐
                                     │ MCPServerObject  │
                                     │ (Durable Object) │
                                     │                  │
                                     │ • MCP Protocol   │
                                     │ • HTTP Processing│
                                     │ • Request State  │
                                     └──────────────────┘

可用功能

工具

  • 回声:回显输入文本
  • 获取时间:获取当前时间戳
  • 随机编号:生成最小值和最大值之间的随机数

资源

  • cloudflare://worker-info:有关Cloudflare Worker的信息
  • cloudflare://sample-data:用于测试的JSON数据示例

鼓励

  • 解释码:生成解释代码的提示
  • debug_help:生成调试帮助提示

部署

  1. 安装依赖项:

    npm install
    
  2. 部署到Cloudflare:

    npm run deploy
    
  3. 通过已部署的URL访问您的MCP服务器

发展

  1. 启动本地开发:

    npm run dev
    
  2. 测试服务器:

    # Get server info
    curl http://localhost:8787/
    
    # Test MCP endpoint with a simple request
    curl -X POST http://localhost:8787/mcp \
      -H "Content-Type: application/json" \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
    

用法

HTTP API

  • GET / -服务器信息和功能
  • POST /mcp -MCP HTTP流式传输端点

MCP连接

将MCP客户端连接到HTTP端点:

  • 本地: http://localhost:8787/mcp
  • 生产: https://your-worker.your-subdomain.workers.dev/mcp

协议细节

服务器使用 HTTP流式传输:

  • 请求:正文中包含JSON-RPC消息的HTTP POST
  • 响应:服务器发送的事件(SSE)流 text/event-stream 内容类型
  • 格式:每个响应都以如下方式发送 data: {JSON}\n\n

MCP消息示例

列出工具

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list"
  }'

呼叫工具

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "echo",
      "arguments": {
        "text": "Hello, MCP!"
      }
    }
  }'

列出资源

curl -X POST http://localhost:8787/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "resources/list"
  }'

配置

服务器已在中配置 wrangler.jsonc:

  • 耐用物品: MCPServerObject 处理有状态的MCP请求处理
  • 兼容性日期:设置为Cloudflare Workers最新功能的当前日期

开发说明

  • 用途 @modelcontextprotocol/sdk 用于MCP协议实现
  • HTTP请求由持久对象处理以进行状态管理
  • 使用服务器发送事件(SSE)流式传输响应
  • CORS已启用,以实现web客户端兼容性
  • 错误处理包括JSON-RPC错误响应
  • 启用严格模式的TypeScript

传输协议

此实现使用 HTTP流式传输 代替WebSocket:

  • 与代理和防火墙更兼容
  • 使用标准HTTP语义
  • 支持服务器发送事件以进行实时响应
  • 更适合无状态云环境

许可证

这是一个用于教育目的的示例实现。