mcp-gateway —— 隐藏 mcp 上下文以避免不必要的 tokens 开销
起因
今天上午刷到了 One MCP 发布新功能 - 用 Skill 替代 MCP,省下 80% 的 Context 开销 ,奈何该工具需要 docker,而我又没有 docker,遂造轮之。
叠甲:我是不会告诉你们我今天晚上搜 gateway 在 npm 上发现了很多同类工具。所以请不要说我重复造轮子,我只是看了帖子上头了手搓了几个小时搓出来的
技术细节
该 mcp 服务提供了 3 个工具以隐藏 mcp 服务。
获取全部的 MCP 服务以及其下属的工具摘要。
放心,它只会返回 MCP 服务的名字以及下属的全部工具名称以及经过处理的描述。
不会占用太多上下文。批量获取 MCP 服务及其下属工具
该工具会返回要查询的全部 MCP 服务以及其下属工具的名称,描述以及调用参数约定通过 MCP 服务名称和工具名称调用具体工具
安装
首先,确保您使用 NodeJS v16 及以上版本。
npm install -g @kagg886/mcp-gateway@latest
其次,打开您的 AI 工具,编辑 MCP 文件,进行配置:
{ "mcpServers": { "mcp-gateway": { "isActive": true, "name": "mcp-gateway", "type": "stdio", "command": "mcp-gateway", "args": [ "-f", "/path/to/your/json" ], "installSource": "unknown" } } } /path/to/your/json 的配置如下:
{ "mcpServers": { "chrome-devtools": { "command": "npx", "args": [ "-y", "chrome-devtools-mcp@latest" ] }, "mcp-server-time": { "command": "uvx", "args": [ "mcp-server-time", "--local-timezone=Asia/Shanghai" ], "alwaysAllow": [ "get_current_time", "convert_time" ] }, "context7": { "command": "npx", "args": [ "-y", "@upstash/context7-mcp@latest" ], "alwaysAllow": [ "resolve-library-id", "query-docs" ], "disabled": true } } } 最后,在 AI 工具中进行测试:
优点
- 不需要安装 docker (
除了我之外还有谁没安装 docker 呢) - 配置超级简单,只需要传递配置路径或配置字符串 (使用
-s参数) - 无
web-ui,私认为这种工具不需要可视化配置,完全可以通过参数来隔离实例。
缺陷
虽然我在几个小时内匆忙地写完了这个工具,但是综合看来,还是有很多功能没有做,例如:
现版本只能代理基于 STDIO 的 MCP 服务
将部分 MCP 调用错误标记为 error,以供 Agent 识别
尽管我在 MCP 服务的 description 中给 Agent 添加了足够的提示。
但是在能力有限的模型中,可能不会调用代理工具查询可用的 Agent。
此时需要您手动在聊天框或 prompt 中显式告知 AI 可用工具尽管配置了并发启动,但启动速度很明显受木桶效应影响。
开发计划
大概有人用我才会更新,否则我会基于我自己的需求迭代这个工具 (x
未来可能会增加以下功能:
- 异步启动 (而不是在程序启动阶段就初始化所有服务)
- 数据缓存 (缓存调用规范以避免频繁启动)
- 自动清理 (长时间不调用的 mcp 会自动关闭) 功能。
- 代理基于 SSE 的 MCP 服务
我将永远不会制作以下功能:
- 可视化 web 页面
注意事项
最好不要代理影响 LLM 行为的 MCP 服务,如
sequential-thinking最佳实践是代理专业性较强,或者不常使用的 MCP 服务,如
chrome-devtools,github。
开源地址
mcp-gateway 使用 MIT 协议发布。源码地址为:GitHub - magic-cucumber/mcp-gateway: an gateway to manage tools, keeping context clean and focused.
写在最后
如果您喜欢这个重复的轮子,以及有建议,还请留言 / 收藏 / 标星,或者在原仓库提 issue (仅接受英文 issue,不过在这里反馈的话可以写中文)!
