使用说明
MCPGate-本地MCP服务器网关
MCPGate是一个本地无坞MCP(模型上下文协议)网关,提供对多个上游MCP服务器的统一访问。它本身充当MCP服务器,聚合到各种MCP服务器的连接,并提供集中的请求路由、连接管理和服务器发现。
特性
- 多种运输支持:通过stdio(子进程)、HTTP、WebSocket或Unix套接字连接到MCP服务器
- 服务器注册和发现:自动注册和发现可用的MCP服务器
- 连接池:通过健康监测实现高效的连接重用和管理
- 请求路由:将请求智能路由到适当的上游服务器
- TOML配置:服务器定义的简单、可读的配置格式
- 多个客户端连接:支持各种客户端连接方法(默认为stdout/stdio)
- 生产就绪:采用Go构建,性能可靠
- 优化的二进制文件:使用GoReleaser和UPX压缩来处理较小的工件
安装
来源
git clone https://github.com/j4ng5y/mcpgate.git
cd mcpgate
# Build for development
make dev
# Or build release binaries (requires goreleaser)
make release-snapshot
先决条件
- 转到1.25.5或更高版本
- goreleaser(用于UPX压缩的建筑释放)
- UPX(可选,用于二进制压缩)
配置
MCPGate使用TOML格式进行配置。看 example/config.toml 举一个完整的例子。
基本配置
[gateway]
log_level = "info"
[[server]]
name = "bedrock"
transport = "stdio"
enabled = true
command = "node"
args = ["./server.js"]
timeout = 30
服务器配置
每个上游MCP服务器都可以配置:
- 名字:服务器的唯一标识符
- 运输:连接类型(
stdio,http,websocket,unix) - 启用:是否启动此服务器
- 命令:(stdio)要执行的命令
- 参数:(stdio)命令参数
- 环境:(stdio)环境变量
- 网址:(http/webocket)远程服务器URL
- 插座路径:(unix)unix套接字的路径
- 超时:请求超时(秒)
- 元数据:自定义元数据(键值对)
运输类型
标准(默认)
生成子流程并与之通信:
[[server]]
name = "local-tool"
transport = "stdio"
command = "python"
args = ["-m", "mcp_server_filesystem"]
[server.env]
PYTHONUNBUFFERED = "1"
超文本传输协议
连接到远程HTTP/JSON-RPC端点:
[[server]]
name = "remote-api"
transport = "http"
url = "http://api.example.com:8000"
timeout = 30
双向通信
实时WebSocket连接:
[[server]]
name = "realtime"
transport = "websocket"
url = "ws://localhost:9000"
UNIX套接字
本地Unix域套接字通信:
[[server]]
name = "local-socket"
transport = "unix"
socket_path = "/tmp/mcp-server.sock"
用法
运行网关
# Using default config
./bin/mcpgate
# Using custom config
./bin/mcpgate -config /path/to/config.toml
# Or with shorthand
./bin/mcpgate -c /path/to/config.toml
网关特定方法
作为MCP服务器,MCPGate提供特殊的网关管理方法:
列出所有服务器
{
"jsonrpc": "2.0",
"id": 1,
"method": "gateway/list_servers",
"params": {}
}
答复:
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"name": "bedrock",
"connected": true,
"initialized": true,
"transport": "stdio",
"capabilities": ["tools"]
}
]
}
获取服务器详细信息
{
"jsonrpc": "2.0",
"id": 2,
"method": "gateway/get_server",
"params": {"name": "bedrock"}
}
检查服务器状态
{
"jsonrpc": "2.0",
"id": 3,
"method": "gateway/server_status",
"params": {"name": "bedrock"}
}
列出功能
{
"jsonrpc": "2.0",
"id": 4,
"method": "gateway/capabilities",
"params": {}
}
将请求路由到特定服务器
包含 _server 路由到特定服务器的参数:
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/list",
"params": {"_server": "bedrock"}
}
在没有明确的服务器规范的情况下,MCPGate使用智能路由:
- 尝试基于方法前缀进行路由(例如。,
tools/list→ 工具能力) - 如果没有特定的功能匹配,则回退到第一个可用服务器
- 如果没有可用的服务器,则返回错误
建筑
开发版本
make dev
# Creates: bin/mcpgate
发布版本(压缩)
make release
# Creates optimized, UPX-compressed binaries in dist/
# Supports: Linux, macOS, Windows (amd64, arm64, arm)
生成快照
make release-snapshot
# Quick build without publishing, for testing
发展
使用示例配置运行
make run
运行测试
make test
格式化代码
make fmt
棉绒
make lint
清洁构建工件
make clean
建筑
组件
┌─────────────────────────────────────────┐
│ MCP Clients │
│ (Communicates via stdio/JSON-RPC) │
└─────────────┬───────────────────────────┘
│
▼
┌─────────────────────┐
│ MCPGate Gateway │
│ (Acts as MCP Server)
│ │
├─ Configuration │
├─ Request Router │
├─ Server Registry │
└─────────────────────┘
│ │ │
┌────┘ │ └────┐
▼ ▼ ▼
Upstream Upstream Upstream
Server 1 Server 2 Server 3
关键模块
- 配置:TOML配置解析
- 运输:抽象传输层(stdio、HTTP、WebSocket、Unix套接字)
- 服务器:托管服务器生命周期和注册表
- 主控程序:MCP协议处理和请求路由
- 池:连接池和管理
连接管理
网关通过以下方式管理与上游服务器的连接:
- 自动连接建立:启动时重试连接
- 健康监测:跟踪连接运行状况和可用性
- 连接池:高效地重用连接
- 自动重新连接:检测断开连接并重建连接
- 超时管理:每台服务器可配置超时
错误处理
MCPGate按照JSON-RPC 2.0规范提供详细的错误响应:
-32700:分析错误-32600:无效请求-32601:未找到方法-32602:无效参数-32603:内部错误-32000到-32099:服务器错误
性能注意事项
- 二进制大小:UPX压缩二进制文件通常小60-70%
- 记忆:连接池减少了开销
- 并发:针对高并发场景的线程安全设计
- 超时:所有外部操作都有可配置的超时
故障排除
服务器连接问题
检查日志中的连接错误:
./bin/mcpgate -c config.toml
确保上游服务器可访问:
- 对于stdio:命令存在并且可执行
- 对于HTTP:URL是可访问的
- 对于WebSocket:URL是可访问的
- 对于Unix套接字:套接字文件存在并且可读
路由问题
如果请求路由不正确:
- 检查
gateway/list_servers查看已连接的服务器 - 显式指定
_server测试参数 - 路由器中检查方法前缀匹配
CI/CD管道
MCPGate使用GitHub Actions进行自动化测试、linting和发布:
测试工作流程(.github/workflows/test.yml)
每次推都会跑 main 以及所有拉取请求:
- 矩阵测试:在Ubuntu、macOS和Windows上对Go 1.25和1.26的测试
- 单元测试:
go test -v -race有报道 - 代码检查:
golangci-lint自动检查 - 构建验证:构建快照以确保创建工件
- 覆盖上传:向Codecov发送覆盖率报告
在本地运行:
make test # Run unit tests
make lint # Run linters
make build # Build snapshot
发布工作流(.github/workflows/release.yml)
当按下git标签时自动触发(格式: v*):
- 预发布测试:在构建之前运行所有测试
- 多平台构建:为Linux、macOS、Windows(amd64、arm64、arm)创建二进制文件
- 二进制压缩:对较小的伪影使用UPX压缩
- 校验和:为所有工件生成SHA256校验和
- GitHub发布:使用工件和自动生成的更改日志创建GitHub版本
创建发布:
git tag v1.0.0
git push origin v1.0.0
# GitHub Actions will automatically build and publish the release
依赖管理
Dependabot自动:
- 创建Go模块更新的拉取请求(每周)
- 将GitHub Actions更新到最新版本(每周)
- 标记PR以便于组织
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 确保所有检查均已通过:
make test-单元测试通过make lint-林廷传球make fmt-代码已格式化
- 提交拉取请求(使用PR模板)
许可证
[在此处添加您的许可证]
支持
有关问题、疑问或建议,请在GitHub上打开问题。
MCPGate -统一的MCP服务器管理变得简单
