Gatemini
Shared-daemon MCP gateway that multiplexes many backend servers behind one stable MCP endpoint.
Gatemini是运行时和二进制名称。源代码库和发布渠道在 PrismGate GitHub项目。
为什么存在
大多数MCP客户端每个会话启动一个进程树。如果你配置了几十个后端,每个新的终端或编辑器会话都会再次支付相同的启动和内存成本。
Gatemini更改了该模型:
- 一个守护进程拥有后端连接。
- 轻量级代理进程通过stdio桥接每个客户端会话。
- 守护进程将被重用,直到它在配置的超时时间内处于空闲状态。
- 代理通过7个网关元工具发现后端工具,而不是预先接收每个模式。
它提供了什么
| 能力 | 代码今天做了什么 |
|---|---|
| 共享守护进程 | 代理模式连接到单个Unix套接字守护进程,而不是在每个会话中启动后端 |
| 自动启动和重新启动 | 第一个代理生成 gatemini serve; gatemini restart 耗尽客户端并让代理重新连接 |
| 渐进式发现 | search_tools, list_tools_meta, tool_info, get_required_keys_for_tool, call_tool_chain, register_manual, deregister_manual |
| 多种后端传输 | stdio, streamable-http,以及 cli-adapter 一个配置中的后端 |
| 健康管理 | 定期ping、故障阈值、内部断路器跟踪、重启回退、等待后端重试 |
| 工具缓存 | 在后端重新连接之前加载缓存的命名空间工具;缓存版本当前为 4 |
| TypeScript执行 | call_tool_chain 快速路径JSON/简单调用,并在需要时回退到V8沙盒 |
| 秘密 | 环境插值, .env 加载, secretref: 解决方案和Bitwarden Secrets Manager集成 |
快速启动
安装
从下载版本 ,或从源代码构建:
git clone https://github.com/jonwraymond/prismgate.git
cd prismgate
cargo install --path .配置
默认配置路径是平台配置目录+ gatemini/config.yaml:
- macOS/Linux:
~/.config/gatemini/config.yaml - 窗户:
%APPDATA%\\gatemini\\config.yaml
最小示例:
log_level: info
daemon:
idle_timeout: 5m
backends:
exa:
command: npx
args: ["-y", "exa-mcp-server"]
env:
EXA_API_KEY: "${EXA_API_KEY}"
github:
transport: streamable-http
url: "https://api.githubcopilot.com/mcp/"
headers:
Authorization: "Bearer ${GITHUB_PAT_TOKEN}"有关涵盖机密、CLI适配器、管理设置和健康调优的更完整示例,请参阅 config/example.yaml.
将Gatemini注册为MCP服务器
克劳德代码配置示例:
{
"mcpServers": {
"gatemini": {
"command": "/path/to/gatemini",
"args": ["-c", "/path/to/config.yaml"]
}
}
}CLI模式
gatemini # Proxy mode (default)
gatemini --direct # Single-process direct mode, no daemon or socket
gatemini serve # Run the daemon in the foreground
gatemini status # Read PID/socket state
gatemini stop # Gracefully stop the daemon
gatemini restart # Stop, drain clients, let proxies reconnect运行期模型
守护进程在较重的初始化路径完成之前提前绑定其套接字。这意味着代理可以在守护进程仍在加载配置、解析机密、恢复缓存和启动后端时连接。
代理模式不仅仅是一个原始字节管道。它还:
- 获取羊群锁以避免重复启动守护进程
- 如果守护进程消失,则使用回退重新连接,同时保持客户端stdio会话打开
- 缓存MCP初始化请求和初始化通知
- 重新连接时重放缓存的握手
- 跟踪正在进行的JSON-RPC请求ID,以便守护进程重启成为可重试的请求错误,而不是传输丢失
- 在工作进行中保留安静的客户端,然后使用MCP
pingliveness探测以获取其stdio管道被父进程打开的无响应空闲客户端
发现模型
后端工具不作为一级MCP工具公开。相反,Gatemini暴露了一个小的发现和执行界面:
| 元工具 | 目的 |
|---|---|
search_tools | 按任务描述搜索实时注册表项 |
list_tools_meta | 浏览已注册的工具名称 |
tool_info | 检查一个工具 brief 或 full 细节 |
get_required_keys_for_tool | 显示所属后端所需的env密钥 |
call_tool_chain | 执行JSON、简单TS或全沙盒TS |
register_manual | 在运行时注册动态后端 |
deregister_manual | 删除动态后端 |
资源和提示完善了MCP界面:
- 静态资源:
gatemini://overview,gatemini://backends,gatemini://tools,gatemini://recent - 资源模板:
gatemini://tool/{tool_name},gatemini://backend/{backend_name},gatemini://backend/{backend_name}/tools,gatemini://recent/{limit} - 提示:
discover,find_tool,backend_status
健康和生命周期行为
公开披露的后端状态仅限于:
StartingHealthyUnhealthyStopped
断路器定时由健康检查器在内部跟踪,并通过这些状态而不是单独的公共枚举显示。
当前默认运行状况设置来自 src/config.rs:
- 间隔:
30s - 超时:
5s - 故障阈值:
3 - 每个窗口的最大重启次数:
5 - 重新启动窗口:
60s - 重新启动回退:
1s初始,30s最大 - 重新启动超时:
30s - 恢复倍数:
3 - 排水超时:
10s
配置和秘密
配置加载故意简单且有代码支持:
- 负载
.env文件一次。 - 阅读YAML。
- 通过以下方式扩展环境变量
shellexpand::env. - 反序列化配置。
- 解决
secretref:价值观。 - 验证必填字段和支持的传输组合。
.env 文件从以下位置加载:
~/.env- 例如,标准的Gatemini配置目录
~/.config/gatemini/.env - 配置文件的同级目录
支持的秘密模式:
- 直接环境参考,如
${EXA_API_KEY} secretref:bws:...禁用BWS时进行环境回退- Bitwarden秘密经理时
secrets.providers.bws.enabled: true
文档
repo文档是根据当前的Rust实现和图表重写的:
贡献
看 CONTRIBUTING.md 对于开发设置,文档构建命令并审查期望。
许可证
根据 Apache许可证,版本2.0.
