mcpField
M
MCP Connect

MCP Connect

精选
github.com/EvalsOne框架与 SDK24032 周前更新

关于 MCP Connect

MCP Connect 是一个轻量级网关,可将本地基于 stdio 的 MCP 服务以 Streamable HTTP 或经典请求/响应桥接方式暴露为 HTTP 接口,便于云端 AI 服务调用。它适合需要从远程访问本地 MCP 服务的开发者。

主要功能

  1. 01通过 Streamable HTTP 或经典 HTTP 桥接调用 stdio MCP 服务
  2. 02基于 Bearer Token 的鉴权与 CORS 白名单
  3. 03会话管理以保持对话连续性
  4. 04内置 Ngrok 隧道,可对外暴露端点
  5. 05支持一键部署到 E2B 沙箱环境

适用场景

  1. 01让云端 AI 工具访问本地 MCP 服务
  2. 02在 E2B 沙箱中运行不受信任的 MCP 服务
  3. 03通过 Ngrok 隧道向外部临时开放本地 MCP 服务

MCP 相关

MCP Connect 作为客户端网关,将本地 stdio MCP 服务转换为 HTTP 端点,路径为 /mcp/:serverId,并通过 mcp-servers.json 配置服务。

详细介绍

MCP Connect

███╗   ███╗ ██████╗██████╗      ██████╗ ██████╗ ███╗   ██╗███╗   ██╗███████╗ ██████╗████████╗
████╗ ████║██╔════╝██╔══██╗    ██╔════╝██╔═══██╗████╗  ██║████╗  ██║██╔════╝██╔════╝╚══██╔══╝
██╔████╔██║██║     ██████╔╝    ██║     ██║   ██║██╔██╗ ██║██╔██╗ ██║█████╗  ██║        ██║   
██║╚██╔╝██║██║     ██╔═══╝     ██║     ██║   ██║██║╚██╗██║██║╚██╗██║██╔══╝  ██║        ██║   
██║ ╚═╝ ██║╚██████╗██║         ╚██████╗╚██████╔╝██║ ╚████║██║ ╚████║███████╗╚██████╗   ██║   
╚═╝     ╚═╝ ╚═════╝╚═╝          ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═══╝╚══════╝ ╚═════╝   ╚═╝   

License: MIT Node.js Version TypeScript

轻量级桥接器,可将本地 MCP 服务公开为 HTTP API


什么是 MCP Connect?

MCP Connect 是一个 HTTP 网关,可让你通过 Streamable HTTP 或经典请求/响应桥接器调用本地 MCP 服务(使用 stdio 通信)。

最新更新
  • 在经典请求/响应桥接器的基础上新增 Streamable HTTP 模式
  • 在 deploy/e2b 下新增快速部署脚本和配置,可在 E2B 沙盒中启动

工作原理

+-----------------+   HTTP (JSON)               +------------------+      stdio      +------------------+
|                 |   /bridge                   |                  |                 |                  |
|  Cloud AI tools | <------------------------>  |  Node.js Bridge  | <------------>  |    MCP Server    |
|   (Remote)      |                             |    (Local)       |                 |     (Local)      |
|                 |   HTTP (SSE stream)         |                  |                 |                  |
|                 |   /mcp/:serverId            |                  |                 |                  |
+-----------------+         Tunnels (optional)  +------------------+                 +------------------+

主要功能

功能描述
🚀 双模式通过 Streamable HTTP 或经典 HTTP 桥接器调用本地 stdio MCP 服务
🔄 会话管理通过会话保持对话连续性
🔐 安全性Bearer 令牌身份验证 + CORS 允许列表
🌐 公开访问内置 Ngrok 隧道,可将端点公开到外部
☁️ 云端部署一键部署到 E2B 云沙盒

快速开始

前提条件
  • Node.js >= 22.0.0(推荐)
  • npm 或 yarn
1) 安装
git clone https://github.com/EvalsOne/MCP-connect.git
cd mcp-connect
npm install
2) 准备工作

A. 设置初始环境变量

cp .env.example .env

启动服务前,请在 .env 中设置 ACCESS_TOKEN。如果该值为空,启动将失败。

B. 配置 MCP 服务

使用 Streamable HTTP 模式时,需要为每个 MCP 服务单独配置。编辑文件以添加现有示例服务以外的更多配置。

vim mcp-servers.json  
3) 运行
# Build and start
npm run build
npm start

# Or use dev mode (hot reload)
npm run dev

# Enable Ngrok tunnel
npm run start:tunnel

看到启动横幅后,访问 http://localhost:3000/health 检查服务状态。


使用方法

模式 1:Streamable HTTP 桥接器

通用模式,兼容任何支持 Streamable HTTP 的 MCP 客户端。

在 Streamable HTTP 模式下,每个 MCP 服务都会分配一个唯一路由。例如,在 mcp-servers.json 中添加 fetch MCP 服务。

{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"],
      "description": "HTTP/HTTPS content fetcher"
    }
  }
}

启动后,使用你喜欢的 MCP 客户端(例如 Claude Code、Cursor、Codex、GitHub Copilot……)访问 fetch MCP 服务。

http://localhost:3000/mcp/fetch

注意:必须在启动服务前配置 mcp-servers.json,否则该服务将不可用。


模式 2:经典请求/响应桥接器

这是一种非标准调用方式,你需要实现 tools/list、tools/call 等方法。

每个请求头中都需包含 Authorization: Bearer <token>。启动时必须设置 ACCESS_TOKEN。

示例 1:列出可用工具
curl -X POST http://localhost:3000/bridge \
  -H "Authorization: Bearer your-secret-token-here" \
  -H "Content-Type: application/json" \
  -d '{
    "serverPath": "uvx",
    "args": ["mcp-server-fetch"],
    "method": "tools/list",
    "params": {}
  }'
示例 2:调用工具
curl -X POST http://localhost:3000/bridge \
  -H "Authorization: Bearer your-secret-token-here" \
  -H "Content-Type: application/json" \
  -d '{
    "serverPath": "uvx",
    "args": ["mcp-server-fetch"],
    "method": "tools/call",
    "params": {
      "name": "fetch",
      "arguments": {
        "url": "https://example.com"
      }
    }
  }'
安全性
身份验证

MCP Connect 使用基于令牌的身份验证系统。启动前,请在 .env 中设置 ACCESS_TOKEN。如果该值为空,服务将因配置错误而退出。

Authorization: Bearer <your_auth_token>
允许的来源

在生产环境中,设置 ALLOWED_ORIGINS 以限制跨域请求:

ALLOWED_ORIGINS=https://yourdomain.com,https://app.yourdomain.com

如果设置了 ALLOWED_ORIGINS,则不匹配的来源将被拒绝。


API 参考

GET /health

健康检查端点(无需身份验证)

响应:

{"status": "ok"}

POST /mcp/:serverId

流式 HTTP 模式

路径参数:

  • serverId:在 MCP_SERVERS 中定义的服务 ID

请求头:

  • Authorization: Bearer <token>(必填)
  • Accept: application/json, text/event-stream(必填)
  • mcp-session-id: <session-id>(可选,复用现有会话)

请求体:

[
  {"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}},
  {"jsonrpc":"2.0","method":"notifications/initialized"}
]

POST /bridge

原始请求/响应桥接模式

请求头:

  • Authorization: Bearer <token>(必填)
  • Content-Type: application/json

请求体:

{
  "serverPath": "Executable command or URL (http/https/ws/wss)",
  "method": "JSON-RPC method name",
  "params": {},
  "args": ["optional command-line args"],
  "env": {"OPTIONAL_ENV_VAR": "value"}
}

支持的方法:

  • tools/list、tools/call
  • prompts/list、prompts/get
  • resources/list、resources/read
  • resources/subscribe、resources/unsubscribe
  • completion/complete
  • logging/setLevel

通过 Ngrok 公开服务

  1. 获取令牌:https://dashboard.ngrok.com/get-started/your-authtoken

  2. 添加到 .env:

    NGROK_AUTH_TOKEN=your-token-here
    
  3. 启动服务:

    npm run start:tunnel
    
  4. 控制台将显示公开 URL:

    Tunnel URL: https://abc123.ngrok.io
    MCP Bridge URL: https://abc123.ngrok.io/bridge
    

快速部署到 E2B 沙盒

E2B 提供隔离的云沙盒,非常适合安全地运行不受信任的 MCP 服务。

第 1 步:准备 E2B 环境
# Sign up at https://e2b.dev and get an API key
pip install e2b
export E2B_API_KEY=your-e2b-api-key

可选:为桥接设置 bearer 令牌(E2B 部署首选的环境变量):

export E2B_MCP_AUTH_TOKEN=your-secure-token
第 2 步:构建沙盒模板
cd deploy/e2b
python build.py
第 3 步:从模板启动
python sandbox_deploy.py --template-id mcp-dev-gui

详情请参阅:E2B 部署指南。


日志记录与监控

日志文件
  • combined.log:所有级别
  • error.log:仅错误级别
级别

通过 LOG_LEVEL 控制详细程度:

LOG_LEVEL=DEBUG  # development
LOG_LEVEL=INFO   # production (default)
LOG_LEVEL=WARN   # warnings + errors

开发

项目结构
src/
├── server/
│   └── http-server.ts      # HTTP server and routes
├── client/
│   └── mcp-client-manager.ts  # MCP client manager
├── stream/
│   ├── session-manager.ts   # session lifecycle
│   └── stream-session.ts    # SSE session implementation
├── config/
│   └── config.ts            # config loading & validation
├── utils/
│   ├── logger.ts            # Winston logger
│   └── tunnel.ts            # Ngrok tunnel management
└── index.ts                 # entry point

贡献

欢迎提交问题和 PR!


如果这个项目对你有帮助,请 ⭐️ Star!

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。