MCP Server Proxy
Aggregates multiple MCP servers into a single endpoint, enabling LLM clients to access tools, resources, and prompts from various backends through one connection.
README
MCP Server Proxy
一个强大的代理服务器,可以聚合多个 MCP (Model Context Protocol) 服务器,让 LLM 客户端通过单一连接访问来自多个后端服务器的工具、资源和提示模板。
✨ 核心特性
- 🔗 多服务器聚合: 同时连接多个 MCP 服务器(已测试 25+ 工具)
- 🚀 多传输协议支持:
- 代理对外: stdio、HTTP (SSE)、Streamable HTTP
- 后端连接: stdio、HTTP (SSE)、Streamable HTTP 混合连接
- 🏷️ 命名空间管理: 通过可配置命名空间避免命名冲突
- 📡 实时通知转发: 转发后端服务器的通知到客户端
- 🔥 热重载配置: 配置文件变更自动生效,无需重启服务
- 🌐 Web管理界面: 现代化的Web界面管理MCP服务器配置
- ✅ 协议完全兼容: 完全兼容 MCP 规范和 SDK v1.17.5
- 🔧 会话管理: HTTP 传输的高级会话处理
- 🛡️ 健壮错误处理: 完善的错误处理和连接管理
- 📊 全面日志记录: 可配置级别的详细日志
🏗️ 架构设计
基础架构
LLM Client (Cursor/Claude Desktop)
↓ (JSON-RPC 2.0 via stdio/HTTP/Streamable)
MCP Server Proxy (多传输协议支持)
↓ (Multiple connections via stdio/HTTP/Streamable)
Backend MCP Servers (Everything, Memory, SSE, Streamable HTTP, etc.)
多传输协议架构
┌─────────────────┐ ┌──────────────────────────────────┐
│ LLM Client │ │ MCP Server Proxy │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ ┌──────────────┐ │
│ │ stdio │◄┼────┼►│ stdio │ │ BackendMgr │ │
│ │ HTTP (SSE) │◄┼────┼►│ HTTP (SSE) │ │ CapabilityAgg│ │
│ │ Streamable │◄┼────┼►│ Streamable │ │ RequestRouter│ │
│ └─────────────┘ │ │ └─────────────┘ │ NotifyMgr │ │
└─────────────────┘ │ └──────────────┘ │
└──────────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│Everything │ │Simple SSE │ │Streamable │
│Server │ │Server │ │HTTP Server │
│(stdio) │ │(HTTP) │ │(Streamable) │
└─────────────┘ └─────────────┘ └─────────────┘
代理服务器对客户端表现为单一的 MCP 服务器,同时管理与多个后端服务器的连接。
🚀 快速开始
环境要求
- Node.js >= 18.0.0
- npm >= 8.0.0
- 操作系统: macOS, Linux, Windows
1. 项目构建
1.1 安装依赖
cd mcp-proxy
npm install
1.2 构建项目
npm run build
构建完成后,编译后的文件将位于 dist/ 目录中。
2. 启动后端测试MCP服务器
2.1 启动 SSE Server (端口 3004)
# 在新的终端窗口中执行
node examples/server-sse.js
服务器将在 http://localhost:3004/sse 启动,提供 2 个工具。
2.2 启动 Streamable HTTP Server (端口 3005)
# 在新的终端窗口中执行
node examples/server-streamable-http.js
服务器将在 http://localhost:3005/mcp 启动,提供 3 个工具。
2.3 Everything Server (通过 stdio)
Everything Server 通过 stdio 协议启动,无需单独启动,将由 Proxy 自动管理。
3. 启动 Admin 管理页面
# 在新的终端窗口中执行
npm run dev:admin examples/config.json
管理界面将在 http://localhost:3001 启动。
4. 启动 Proxy Server
4.1 基本启动 (支持热重载)
# 使用默认配置启动
node dist/index.js examples/config.json
4.2 开发模式启动
# 开发模式,支持自动重启
npm run dev examples/config.json
4.3 启用调试日志
# 启用详细调试日志
LOG_LEVEL=DEBUG node dist/index.js examples/config.json
4.4 使用 MCP Inspector 测试
# 使用inspector启动
npx @modelcontextprotocol/inspector node dist/index.js examples/config.json
5. 配置Cursor连接
5.1 创建 Cursor MCP 配置
编辑或创建 ~/.cursor/mcp.json 文件:
{
"mcpServers": {
"mcp-proxy": {
"command": "node",
"args": ["/path-to-mcp-proxy/mcp-proxy/dist/index.js", "/path-to-mcp-proxy/mcp-proxy/examples/config.json"],
"env": {
"LOG_LEVEL": "INFO"
}
}
}
}
5.2 重启 Cursor
完全关闭并重新启动 Cursor 以加载新的 MCP 配置。
6. 完整启动序列
按以下顺序启动所有组件:
# 终端 1: 构建项目
npm run build
# 终端 2: 启动 SSE Server
node examples/server-sse.js
# 终端 3: 启动 Streamable Server
node examples/server-streamable-http.js
# 终端 4: 启动管理界面
npm run dev:admin examples/config.json
# 终端 5: 启动 Proxy Server
LOG_LEVEL=DEBUG node dist/index.js examples/config.json
# 终端 6: 测试功能
npx @modelcontextprotocol/inspector node dist/index.js examples/config.json
7. 验证功能
7.1 使用 MCP Inspector 测试
Inspector 将显示:
- 聚合的工具列表 (预期: 16 个工具)
- 资源列表 (预期: 10 个资源)
- 提示模板列表 (预期: 3 个提示模板)
7.2 验证命名空间
工具名称应该带有命名空间前缀:
everything.*- Everything Server 的工具 (11个)sse.*- SSE Server 的工具 (2个)stream.*- Streamable Server 的工具 (3个)
7.3 测试热重载功能
编辑 examples/config.json,例如禁用一个服务器,保存后观察:
- Proxy 日志显示服务器被动态移除
- 工具数量实时变化
- Cursor 中的工具列表自动更新
8. 常见问题排查
8.1 端口冲突
如果遇到端口占用问题:
# 查找占用端口的进程
lsof -ti:3004 | xargs kill -9
lsof -ti:3005 | xargs kill -9
8.2 Cursor 连接问题
- 检查 MCP 配置文件路径是否正确
- 确保 Proxy 服务器正在运行
- 查看 Cursor 的 MCP 日志 (
Cmd+Shift+U→ "MCP Logs")
环境变量
LOG_LEVEL: 日志级别 (DEBUG, INFO, WARN, ERROR)ADMIN_PORT: 管理界面端口 (默认: 3001)
Configuration
Create a configuration file (JSON format) to define your backend servers:
{
"serverInfo": {
"name": "mcp-server-proxy",
"version": "1.0.0"
},
"servers": [
{
"id": "everything",
"name": "Everything Server",
"command": "npx",
"args": ["@modelcontextprotocol/server-everything"],
"transport": "stdio",
"namespace": "everything",
"enabled": true
},
{
"id": "simple-sse",
"name": "Simple SSE Server",
"transport": "http",
"url": "http://localhost:3004/sse",
"namespace": "sse",
"enabled": true
},
{
"id": "streamable-http",
"name": "Streamable HTTP Server",
"transport": "streamable",
"url": "http://localhost:3005/mcp",
"namespace": "stream",
"enabled": true
}
]
}
Configuration Options
通用配置
id: 服务器唯一标识符name: 人类可读的服务器名称transport: 传输协议类型 ("stdio", "http", "streamable")namespace: 工具/资源/提示模板的命名空间前缀enabled: 是否启用该服务器
stdio 传输配置
command: 启动服务器的命令args: 命令参数 (可选)env: 环境变量 (可选)
HTTP/Streamable 传输配置
url: 服务器的 HTTP URL- HTTP SSE:
http://localhost:3004/sse - Streamable HTTP:
http://localhost:3005/mcp
- HTTP SSE:
🔥 热重载功能
MCP Proxy支持配置文件热重载,无需重启即可应用配置变更:
工作原理
- 文件监听: 自动监听配置文件变化
- 智能差异检测: 只更新发生变化的服务器
- 动态管理: 新增/删除/修改服务器配置
- MCP通知: 自动通知客户端能力变化
使用方法
# 启动支持热重载的代理
node dist/index.js examples/config.json
# 修改配置文件,变更会自动生效
# 查看日志确认重载成功
支持的变更类型
- ✅ 添加新服务器
- ✅ 删除现有服务器
- ✅ 修改服务器配置
- ✅ 启用/禁用服务器
🌐 Web管理界面
现代化的Web界面管理MCP服务器配置:
功能特性
- 服务器列表: 查看所有配置的MCP服务器
- 实时状态: 显示服务器连接状态和能力统计
- 添加服务器: 通过表单添加新的MCP服务器
- 编辑配置: 修改现有服务器配置
- 一键操作: 启用/禁用/删除服务器
- 实时更新: 配置变更立即生效
访问方式
- 启动管理服务器:
npm run dev:admin examples/config.json - 打开浏览器访问: http://localhost:3001
- 通过界面管理服务器配置
详细使用指南请参考 ADMIN_GUIDE.md
🏷️ 命名空间
代理支持命名空间以避免服务器间的冲突:
- 无命名空间:
list_files,query_database - 有命名空间:
everything.list_files,sse.simple_tool
实际项目中的命名空间示例:
everything.*- Everything Server 的工具 (11个)sse.*- SSE Server 的工具 (2个)stream.*- Streamable Server 的工具 (3个)
🧪 测试验证
使用 MCP Inspector 测试
# 测试代理服务器
npx @modelcontextprotocol/inspector node dist/index.js examples/config.json
Inspector 将显示:
- 16个工具: 来自3个不同服务器的聚合工具
- 10个资源: 文件系统资源访问
- 3个提示模板: 代码生成、文档编写等
验证成功标志
当所有组件正常运行时,你应该看到:
-
Proxy 日志显示:
- "Starting MCP Server Proxy..."
- "Connected to server: everything"
- "Connected to server: stream"
- "Aggregated capabilities: 16 tools, 10 resources, 3 prompts"
-
MCP Inspector 显示:
- 16 个工具 (everything., sse., stream.*)
- 10 个资源
- 3 个提示模板
-
管理界面显示:
- 服务器状态为 "Connected"
- 实时能力统计正确
API
The proxy implements the full MCP specification:
Lifecycle
initialize- Initialize connection and negotiate capabilitiesinitialized- Confirm initialization complete
Tools
tools/list- List all available tools from all serverstools/call- Execute a tool (routed to appropriate server)
Resources
resources/list- List all available resources from all serversresources/read- Read a resource (routed to appropriate server)
Prompts
prompts/list- List all available prompts from all serversprompts/get- Get a prompt (routed to appropriate server)
Notifications
notifications/tools/list_changed- Tools list changednotifications/resources/list_changed- Resources list changednotifications/prompts/list_changed- Prompts list changed
Development
项目结构
src/
├── proxy/ # 主代理服务器
├── managers/ # 组件管理器
│ ├── BackendManager.ts # 后端服务器连接管理
│ ├── CapabilityAggregator.ts # 能力聚合
│ ├── RequestRouter.ts # 请求路由
│ └── NotificationManager.ts # 通知处理
├── admin/ # Web管理界面
│ ├── server.ts # 管理服务器
│ └── public/ # 前端资源
│ ├── index.html # 管理界面
│ └── app.js # 前端逻辑
├── types/ # TypeScript类型定义
├── utils/ # 工具函数
└── config/ # 配置管理
Building
npm run build
Linting
npm run lint
开发和测试
构建项目
npm run build
开发模式
# 启动开发模式(支持自动重启)
npm run dev examples/config.json
# 启动管理界面开发模式
npm run dev:admin examples/config.json
集成测试
- 完整功能测试:
# 启动所有测试服务器
node examples/server-sse.js &
node examples/server-streamable-http.js &
# 启动代理服务器
LOG_LEVEL=DEBUG node dist/index.js examples/config.json
- 使用 MCP Inspector 测试:
npx @modelcontextprotocol/inspector node dist/index.js examples/config.json
这将:
- 在本地端口启动 MCP Inspector
- 将代理服务器作为子进程启动
- 打开Web界面进行交互式测试
- 验证16个工具的聚合结果
Web界面功能:
- 查看聚合的工具、资源和提示模板
- 使用自定义参数测试工具执行
- 监控实时 JSON-RPC 通信
- 调试协议消息和错误
- 检查服务器能力和元数据
验证清单
- ✅ 代理服务器无错误启动
- ✅ 配置文件正确加载
- ✅ MCP Inspector 成功连接
- ✅ 协议握手完成 (initialize/initialized)
- ✅ 工具/资源/提示模板正确聚合 (16个工具)
- ✅ 命名空间前缀正常工作 (everything., sse., stream.*)
- ✅ 请求路由功能正常
- ✅ 错误处理健壮
- ✅ 通知正确转发
- ✅ 热重载功能正常
- ✅ Web管理界面可访问
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
🔧 故障排除
常见问题
-
端口冲突
# 查找占用端口的进程 lsof -ti:3004 | xargs kill -9 # SSE Server lsof -ti:3005 | xargs kill -9 # Streamable Server lsof -ti:3001 | xargs kill -9 # Admin界面 -
后端服务器启动失败
- 检查配置文件中的命令和参数
- 验证服务器可执行文件是否可用
- 检查环境变量设置
-
工具未显示
- 验证服务器已连接(检查日志)
- 检查命名空间配置
- 确保服务器支持工具能力
- 验证服务器的
enabled状态
-
Cursor 连接问题
- 检查 MCP 配置文件路径是否正确
- 确保 Proxy 服务器正在运行
- 查看 Cursor 的 MCP 日志 (
Cmd+Shift+U→ "MCP Logs") - 完全重启 Cursor
-
权限错误
- 检查文件系统权限
- 验证环境变量设置正确
chmod +x dist/index.js
调试模式
启用详细调试日志:
LOG_LEVEL=DEBUG node dist/index.js examples/config.json
这将显示详细信息:
- 服务器连接状态
- 能力加载过程
- 请求路由详情
- 通知处理过程
- 热重载操作
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.