关于 MCP Connect
MCP Connect 是一个轻量级网关,可将本地基于 stdio 的 MCP 服务以 Streamable HTTP 或经典请求/响应桥接方式暴露为 HTTP 接口,便于云端 AI 服务调用。它适合需要从远程访问本地 MCP 服务的开发者。
主要功能
- 01通过 Streamable HTTP 或经典 HTTP 桥接调用 stdio MCP 服务
- 02基于 Bearer Token 的鉴权与 CORS 白名单
- 03会话管理以保持对话连续性
- 04内置 Ngrok 隧道,可对外暴露端点
- 05支持一键部署到 E2B 沙箱环境
适用场景
- 01让云端 AI 工具访问本地 MCP 服务
- 02在 E2B 沙箱中运行不受信任的 MCP 服务
- 03通过 Ngrok 隧道向外部临时开放本地 MCP 服务
MCP 相关
MCP Connect 作为客户端网关,将本地 stdio MCP 服务转换为 HTTP 端点,路径为 /mcp/:serverId,并通过 mcp-servers.json 配置服务。
详细介绍
MCP Connect
███╗ ███╗ ██████╗██████╗ ██████╗ ██████╗ ███╗ ██╗███╗ ██╗███████╗ ██████╗████████╗
████╗ ████║██╔════╝██╔══██╗ ██╔════╝██╔═══██╗████╗ ██║████╗ ██║██╔════╝██╔════╝╚══██╔══╝
██╔████╔██║██║ ██████╔╝ ██║ ██║ ██║██╔██╗ ██║██╔██╗ ██║█████╗ ██║ ██║
██║╚██╔╝██║██║ ██╔═══╝ ██║ ██║ ██║██║╚██╗██║██║╚██╗██║██╔══╝ ██║ ██║
██║ ╚═╝ ██║╚██████╗██║ ╚██████╗╚██████╔╝██║ ╚████║██║ ╚████║███████╗╚██████╗ ██║
╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝
什么是 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/callprompts/list、prompts/getresources/list、resources/readresources/subscribe、resources/unsubscribecompletion/completelogging/setLevel
通过 Ngrok 公开服务
-
添加到
.env:NGROK_AUTH_TOKEN=your-token-here -
启动服务:
npm run start:tunnel -
控制台将显示公开 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!
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。