OneMCP:让你的 AI 工具不再「各自为战」
如果你用过 Claude Desktop、Cursor 这些 AI 工具,大概率已经碰到过 MCP(Model Context Protocol)。
这玩意儿有多火?2024 年 11 月 Anthropic 推出来,不到一年,28% 的财富 500 强公司已经部署了它。社区里已经冒出来几千个 MCP 服务器,什么文件系统、GitHub、数据库…应有尽有。
但问题也随之来了:
工具一多,管理就乱。
这个工具叫
read_file,那个也叫read_file,到底调用的是哪个?每加一个服务,就要配置一次,有没有办法一次性搞定?
这些问题,OneMCP 都能帮你解决。
OneMCP 是什么?
OneMCP 是一个「智能路由层」,插在 MCP 客户端和后端服务器之间。
你的 AI 工具 (Claude Desktop, Cursor...) ↓ OneMCP 路由层 ↓ ┌─────┬─────┬─────┐ │ S1 │ S2 │ S3 │ ← 多个 MCP 服务器 └─────┴─────┴─────┘
简单说,它做三件事:
-
统一入口 — 一个接口,管理所有 MCP 服务 -
解决冲突 — 自动给工具加前缀,避免名字重复 -
性能优化 — 连接池、健康检查、故障自动恢复
核心特色
🔌 服务聚合
不管你有多少个 MCP 服务器,OneMCP 统一暴露一个接口。客户端只需要连接一次,就能访问所有服务的工具。
🏷️ 命名空间
这是我觉得最实用的功能。
想象一下:你同时装了 filesystem 服务器和 github 服务器,它们都有个叫 read_file 的工具。怎么办?
OneMCP 自动帮你搞定冲突:
filesystem__read_file → 读本地文件github__read_file → 读 GitHub 文件
格式是 {服务名}__{工具名},双下划线分隔,一目了然。
🔌 连接池
每个服务维护一个连接池,复用连接,不用每次请求都重新启动进程。配置也很灵活:
{"connectionPool": {"maxConnections": 5,"idleTimeout": 60000,"connectionTimeout": 30000 }}
🌡️ 健康监控
OneMCP 会定期「体检」每个服务。连续失败 3 次,自动标记为不健康,工具列表里就看不到了。恢复后又自动加回来。
🎨 TUI 交互界面
不想改配置文件?直接跑 onemcp-tui,一个终端界面让你可视化配置服务。
🏷️ 标签过滤
给服务打标签,然后按标签筛选:
# 只暴露有 "production" 或 "api" 标签的服务onemcp -t production,api
Server 模式也支持,用 HTTP 头过滤:
curl -H "X-MCP-Tags: production" http://localhost:3000/mcp ...
📦 批量操作
一个请求调用多个工具,减少网络往返:
const results = await router.invokeToolsBatch([ { namespacedName: 'filesystem__read_file', args: { path: '/tmp/a.txt' } }, { namespacedName: 'github__create_issue', args: { title: 'Bug found' } }]);
安装和使用
安装
# 全局安装npm install -g onemcp# 或者作为项目依赖npm install onemcp
初始化
# 初始化配置目录(默认 ~/.onemcp)onemcp --init
CLI 模式(stdio)
这是最常用的模式,AI 工具通过标准输入输出和 OneMCP 通信:
# 直接运行onemcp# 指定配置目录onemcp --config-dir ~/.onemcp
Server 模式(HTTP)
启动一个 HTTP 服务,其他应用可以通过网络访问:
# 监听 3000 端口onemcp --mode server --port 3000# 或者用环境变量ONEMCP_MODE=server ONEMCP_PORT=8080 onemcp
TUI 模式
可视化配置界面:
onemcp-tui
配置示例
配置文件在 ~/.onemcp/config.json:
{"mcpServers": {"filesystem": {"transport": "stdio","command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],"tags": ["filesystem", "local"],"enabled": true },"github": {"transport": "stdio","command": "npx","args": ["-y", "@modelcontextprotocol/server-github"],"env": {"GITHUB_TOKEN": "your-token-here" },"tags": ["remote", "api"],"enabled": true } },"connectionPool": {"maxConnections": 5,"idleTimeout": 60000 }}
编程式使用
如果想在代码里用,OneMCP 是个完整的 NPM 包:
import { CliModeRunner } from'onemcp';import { FileConfigProvider, FileStorageAdapter } from'onemcp';const storage = new FileStorageAdapter('~/.onemcp');const configProvider = new FileConfigProvider({ storageAdapter: storage, configDir: '~/.onemcp'});const config = await configProvider.load();const runner = new CliModeRunner(config, configProvider);await runner.start();
适用场景
-
多服务管理:同时用十几个 MCP 服务,每个都要配置 -
工具名冲突:不同服务有同名的工具 -
性能敏感:需要连接池复用、批量调用 -
运维需求:健康监控、审计日志、故障恢复
总结
OneMCP 不是要替代 MCP,而是让 MCP 更好用。
当你的服务从 1 个变成 10 个,从 10 个变成 50 个的时候,你会发现:一个统一的路由层,能省多少事儿。
官网:https://github.com/BeCrafter/onemcp安装:npm install -g onemcp
夜雨聆风