MCP矢量代理
位于AI代理和 MCP路由器,只暴露了4个工具,而不是数百个。使用局部向量嵌入按需找到正确的工具——不需要OpenAI密钥。
为什么
当你有150多个MCP工具时,将它们全部传递给AI代理每个请求需要花费约30000个令牌。此代理仅公开4个工具(discover_tools, execute_tool, batch_execute, refresh_tools).代理在语义上搜索它需要的东西,然后调用它——将令牌使用量减少了约93%。
Without proxy: 151 tools × ~200 tokens = 30,860 tokens per request
With proxy: 4 tool definitions + search results = ~500 tokens建筑
MCP Router (all your servers)
│ stdio
▼
mcp-vector-proxy (tray-managed background process, port 3456)
- Local embeddings: EmbeddingGemma-300M q8 (~150MB, runs offline)
- LanceDB vector store (persistent, handles 1M+ tools, no server)
- Hybrid search: dense vector + BM25 keyword + RRF fusion
- Auto-syncs when tools change (MCP notifications + polling)
- HTTP: Streamable HTTP + SSE legacy
│
├── Claude Code / other agents (HTTP → :3456/mcp)
│
└── Claude Desktop (stdio-bridge → HTTP)
System tray (node dist/tray.js, auto-starts on login)
- Green = connected, N tools indexed
- Yellow = MCP Router reconnecting
- Red = proxy down / crashed (auto-restarts)
- Right-click → Restart Proxy / Open Health URL / Exit需求
- 所有平台: Node.js 18+, MCP路由器 已安装并正在运行
- 窗户: Windows 10/11
- macOS: macOS 10.15+
- Linux: 任何带有系统托盘的桌面(GNOME、KDE等)
第一轮: EmbeddedGemma-300M(~150MB)在首次启动时自动下载并缓存到 .model-cache/。后续启动是即时的。设置
1.配置您的令牌
cp .env.example .env
# Edit .env and replace "your-mcp-router-token-here" with your real MCPR_TOKEN这 .env 文件被标记为无效。或者,设置 MCPR_TOKEN 作为系统环境变量,它优先于 .env 文件。
2.安装依赖项并构建
npm install
npm run build3.注册自动启动并启动托盘
窗户:
npm run setup
# or: powershell -ExecutionPolicy Bypass -File setup.ps1macOS/Linux:
npm run setup
# or: bash setup.sh这会注册托盘,以便在每次登录时启动,并立即启动它。
4.连接您的AI客户端
克劳德代码 (~/.claude.json):
{
"mcpServers": {
"mcp-vector-proxy": {
"type": "http",
"url": "http://127.0.0.1:3456/mcp"
}
}
}克劳德桌面 (%APPDATA%\Claude\claude_desktop_config.json 在Windows上, ~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"mcp-vector-proxy": {
"command": "node",
"args": ["/absolute/path/to/mcp-proxy/dist/stdio-bridge.js"],
"env": { "PROXY_URL": "http://127.0.0.1:3456/mcp" }
}
}
}任何其他代理人 --指向它 http://127.0.0.1:3456/mcp (流式HTTP)或 http://127.0.0.1:3456/sse (苏格兰和南方能源公司遗留问题)。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
MCPR_TOKEN | *(来自.env)* | MCP路由器身份验证令牌--必需 |
HTTP_PORT | *(无=标准输入模式)* | HTTP服务器端口 |
HTTP_HOST | 127.0.0.1 | 绑定地址 |
POLL_INTERVAL_MS | 15000 | 刀具更换轮询间隔 |
DISCOVER_LIMIT | 10 | 默认最大结果来自 discover_tools |
暴露于代理的工具
| 工具 | 说明 |
|---|---|
discover_tools | 混合语义+关键字搜索——通过自然语言查询查找相关工具 |
execute_tool | 按带参数的确切名称执行任何MCP工具 |
batch_execute | 在一次调用中并行执行多个MCP工具 |
refresh_tools | 立即强制重新索引MCP路由器中的所有工具 |
npm脚本
npm run build # Compile TypeScript → dist/
npm run setup # Register auto-start + launch tray (platform-detected)
npm run update # Build + restart tray (platform-detected)更新中
更改源代码后:
npm run update这将重建所有内容并重新启动托盘(从而重新启动代理)。
健康检查
GET http://127.0.0.1:3456/health{
"status": "ok",
"routerConnected": true,
"tools": 151,
"indexedAt": "2026-02-17T15:51:21.620Z",
"sessions": { "streamable": 1, "sse": 0 }
}状态为 "ok" 当MCP路由器连接并且工具被索引时。 "disconnected" 表示代理已启动,但MCP路由器无法访问(它将自动重新连接)。
文件引用
src/
index.ts — Main proxy server (HTTP + stdio modes, hybrid vector search)
stdio-bridge.ts — Thin stdio→HTTP forwarder for Claude Desktop
launch-router.ts — Spawns MCP Router CLI with windowsHide:true
tray.ts — Cross-platform system tray (systray2)
dist/ — Compiled output (generated by npm run build)
.env.example — Template for .env (copy and fill in MCPR_TOKEN)
.env — Your config (gitignored, never commit this)
setup.ps1 — Windows: register auto-start + launch tray
setup.sh — macOS/Linux: register auto-start + launch tray
restart-tray.ps1 — Windows: kill + restart tray
restart-tray.sh — macOS/Linux: kill + restart tray
.lancedb/ — LanceDB vector store (auto-generated, gitignored)
.tool-meta.json — Tool fingerprint cache (auto-generated, gitignored)
.model-cache/ — Downloaded embedding model (~150MB, gitignored)工具同步的工作原理
- 启动时,MCP Router的工具使用EmbeddedGemma-300M嵌入并存储在LanceDB中
- MCP路由器发送
tools/list_changed服务器更改时的通知→ 立即重新索引 - 轮询回退每15秒运行一次,以捕捉任何错过的通知
- 重新索引是增量的——只有新的或更改的工具会被重新嵌入,缓存的嵌入会被重用
- 通过指纹和触发器重新索引检测工具模式更改(新参数)
搜索工作原理
discover_tools 用途 混合搜索 为了获得最佳精度:
- 密集矢量搜索 --LanceDB使用EmbeddedGemma-300M嵌入(处理释义、同义词、概念匹配)找到语义相似的工具
- BM25关键字搜索 --内存评分可以找到语义搜索可能遗漏的精确工具名称/关键字匹配
- RRF融合 --互惠排名融合将两个排名列表合并为一个最佳排名
这种组合可以在任何规模上准确处理模糊查询(“与文件有关的事情”)和精确查询(“browser_screenshot”)。
