HTTP-SSE代理服务

一个独立的代理服务,用于桥接现代HTTP流式MCP接口与传统的SSE长连接,解决服务器持久连接问题并提升性能。

  • by findexar
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 findexar/mcp_proxy

使用说明

MCP代理服务

一个独立的代理服务,用于在现代HTTP流式MCP接口与传统的SSE长连接之间建立桥梁。

问题已解决

  • 5秒延迟 在每次由于SSE连接初始化而调用MCP工具时
  • 无服务器的局限性 - Vercel 函数无法保持持久连接
  • 传统SSE实现 - Pizzaz 服务器及类似服务使用长时间运行的 SSE 连接

解决方案

MCP代理服务保持与传统服务器的持久SSE(Server-Sent Events)连接,同时提供一个现代的HTTP接口,该接口 fetchMcpMetaData 可以透明地调用。

建筑

fetchMcpMetaData → HTTP POST → MCP Proxy → Persistent SSE → Legacy Server (Pizzaz)

特点/特性

  • 持久的SSE(服务器发送事件)连接维护与旧版服务器的长期SSE(Server-Sent Events)连接
  • 连接池在多个请求之间重用连接
  • 健康监测检测并重新连接失败的SSE(服务器发送事件)连接
  • 透明界面对客户端来说,看起来就像一个普通的HTTP MCP服务器
  • 认证用于安全的Bearer令牌认证

使用方法

环境变量

MCP_PROXY_API_KEY=your-secure-api-key
PORT=3000

启动服务

npm install
npm start

健康检查

curl http://localhost:8008/health

MCP 请求

curl -X POST http://localhost:8008/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-api-key" \
  -H "X-Target-Server: http://localhost:8000/mcp" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "params": {},
    "id": 1
  }'

与Findexar的集成

代理服务与Findexar实现透明集成 fetchMcpMetaData 功能:

  1. 环境变量设置 MCP_PROXY_URL 并且 MCP_PROXY_API_KEY 在Findexar(注:Findexar可能是一个特定的名称或品牌,根据上下文可能需要具体翻译或解释,但在此直接音译为“芬德克斯”)
  2. 自动检测: fetchMcpMetaData 自动为旧版SSE服务器使用代理
  3. 无代码更改现有的MCP发现代码无需更改,可继续使用

测试

  1. 启动Pizzaz服务器:

    cd openai-apps-sdk-examples/pizzaz_server_node
    npm start
    
  2. 启动MCP代理:

    cd mcp-proxy
    npm start
    
  3. 运行测试脚本:

    node test-proxy.js
    

部署

渲染(推荐)

  1. 在Render上创建一个新的Web服务
  2. 连接你的GitHub仓库
  3. 设置构建命令: npm install
  4. 设置启动命令: npm start
  5. 添加环境变量:
    • MCP_PROXY_API_KEY您的安全API密钥
    • PORT3000(由渲染自动设置)

Findexar 的环境变量

将这些添加到您的Findexar环境中:

MCP_PROXY_URL=https://your-proxy-service.onrender.com
MCP_PROXY_API_KEY=your-secure-api-key

成本

  • 渲染启动器每月7美元,享受全天候服务
  • 演出消除每次工具调用时的5秒延迟
  • **ROI(Return on Investment)的中文翻译是“投资回报率”**用户体验显著提升

API 参考文档

POST /mcp 翻译为中文是:“发送到 /mcp(路径)”

处理MCP JSON-RPC请求。

标题:

  • Authorization: Bearer <api-key>
  • X-Target-Server: <legacy-server-url>
  • Content-Type: application/json

正文: 标准的MCP JSON-RPC请求

回应: 标准MCP JSON-RPC响应

GET /health 翻译为中文是:“获取/健康(信息)”或“发送GET请求至/health端点”。在实际应用中,这通常用于检查服务器或应用程序的健康状态

健康检查端点。

回答:

{
  "status": "healthy",
  "connections": 2,
  "timestamp": "2025-01-27T10:00:00.000Z"
}

发展

# Install dependencies
npm install

# Start in development mode
npm run dev

# Build for production
npm run build

故障排除

连接问题

  • 检查目标服务器是否正在运行
  • 验证 X-Target-Server 标题是正确的
  • 检查代理服务日志中的SSE连接错误

性能问题

  • 在健康端点监控连接缓存大小
  • 检查连接超时情况
  • 验证SSE流是否保持活跃

身份验证问题

  • 验证 MCP_PROXY_API_KEY 设置正确
  • 检查Authorization头部格式
  • 确保客户端和代理之间的API密钥匹配