代理发现
 ](https://nodejs.org/)    
MCP服务器注册和市场。 按需发现、安装、激活和管理MCP工具。充当动态代理——激活的服务器将其工具合并到注册表自己的工具列表中,因此代理可以在不重新启动的情况下使用它们。
今天的每个MCP客户端——Claude Code、Cursor、Codex CLI、Aider、Continue、普通MCP客户端——都需要重新启动完整的代理会话才能获取新注册的MCP服务器。 工具目录在启动时冻结。代理发现是注册新服务器并使其在同一运行会话中可被发现的唯一路径。这是一个区别于每台主机的因素,即使是那些内置了延迟工具加载器的主机。
搜索范围 MCP官方注册, npm,以及 PyPI 在一个查询中,不在官方索引中的热门服务器(微软 @playwright/mcp, @modelcontextprotocol/server-*, mcp-server-fetch, mcp-server-git,…)都出现了。
专为AI编码代理(Claude Code、Codex CLI、Gemini CLI、Aider)构建,但与任何MCP客户端、REST消费者或WebSocket侦听器同样适用。
______________________________________________________________________
| 浅色主题 | 深色主题 |
|---|---|
| Light Theme | Dark Theme |
______________________________________________________________________
为什么
静态MCP配置意味着每台服务器始终在运行,即使在未使用时也是如此。添加新服务器需要编辑配置文件并重新启动。无法在运行时浏览可用内容或安装新工具。
| 无代理发现 | 有代理发现 | |
|---|---|---|
| 发现 | 必须提前知道服务器名称 | 浏览官方MCP注册表,按关键字搜索 |
| 安装 | 编辑配置文件,重新启动代理 | 一个工具调用即可安装和注册 |
| 激活 | 所有服务器始终运行 | 按需激活/停用,工具实时出现/消失 |
| 秘密 | 配置文件或env | Per-server秘密存储中的API密钥,激活时自动注入 |
| 监控 | 无法查看服务器运行状况 | 运行状况检查、每个工具的指标、错误计数 |
| 管理 | 手动配置编辑 | Dashboard+REST API用于配置,标记 |
______________________________________________________________________
特性
- 单调用工具发现(
find_tool) --混合BM25+语义排名返回带有置信度标签的顶级匹配,紧凑required_args,以及4个排名的备选方案。自动激活所属的子服务器,以便代理可以在下一轮立即调用代理工具。取代多步骤search → list → activate跳一次往返舞。 - 批量发现(
find_tools) --传递一系列意图,以便在多步骤任务的单次往返中发现N个工具。 - 间接调用(
proxy_call) --调用已发现的工具 通过 代理在不将其暴露给主机目录的情况下进行发现。无论注册的子服务器公开了多少工具,都会使主机MCP表面保持在5个操作,这对于非常大的目录至关重要,因为向主机中注入数千个模式会破坏模型的上下文预算。 - 可插拔嵌入件(
AGENT_DISCOVER_EMBEDDING_PROVIDER) --语义搜索是通过以下方式选择加入的none(默认值,仅限BM25)/local(Xenova/全MiniLM-L6-v2通过@huggingface/transformers) /openai(text-embedding-3-small).提供程序故障可以完全恢复到BM25。镜像代理知识的模式,因此可以重用相同的模型。 did_you_mean恢复 --当代理工具调用失败时,代理会将BM25排名相似的工具建议附加到错误响应中,这样代理就可以在一次额外的循环中进行纠正,而不是放弃。- 本地注册表 --在SQLite数据库中注册MCP服务器,包括名称、命令、参数、环境、标签
- 联合市场搜索 --一个查询同时访问官方MCP注册表、npm和PyPI,通过以下方式进行重复数据消除
:,并折叠版本副本 - PyPI集成 --精心策划的知名Python MCP服务器列表(
mcp-server-fetch,mcp-server-git,mcp-server-time,mcp-server-postgres,mcp-server-sqlite,mcp-proxy,…)加上通过PyPIJSON API的实时元数据;Python条目安装通过uvx - npm回退 --两个并行的npm搜索(
keywords:mcp和mcp)捕获未标记自己的包(例如Microsoft@playwright/mcp) - Prereqs探针 --
GET /api/prereqs报告哪些包管理器(npx,uvx,docker,uv)在主机上可用;当安装所需的东西丢失时,仪表板会显示一个横幅 - 跨流程激活 --the
activeflag是SQLite中的真理之源;每个新代理发现进程在启动时都会从数据库中水合其内存中的代理,因此在一个进程中激活的工具会显示在其他进程中 - 按需激活 --在运行时激活/停用服务器;他们的工具会动态地出现和消失
tools/list_changed通知 - 工具代理 --激活的服务器工具的命名空间为
serverName__toolName并合并到工具列表中 - 多运输 --用于连接到子服务器的stdio、SSE和流式http传输
- 秘密管理 --每个服务器存储API密钥和令牌,在激活时自动注入为env vars(stdio)或HTTP头(SSE/streatable-HTTP);CRLF经过验证,可防止标头注入
- 健康检查 --连接/断开非活动服务器的探测器,检查活动服务器的工具列表,并跟踪错误计数
- 每工具指标 --每次代理工具调用时自动记录的调用计数、错误计数和平均延迟
- 全文搜索 --FTS5跨服务器名称、描述和标签搜索+跨服务器工具索引
find_tool - 预下载 --即发即弃
npm cache add(npx服务器)或uv tool install(uvx服务器)注册,加上专用/preinstall端点 - 实时仪表盘 --web用户界面位于http://localhost:3424具有服务器和浏览选项卡、暗/亮主题、WebSocket更新
- MCP检查员级测试面板 --每个活动服务器卡都会增长一个包含七个子选项卡(工具/信息/资源/提示/事件/导出/诊断)的测试抽屉。模式驱动的表单呈现器、Pretty/Raw JSON/cURL结果模式、实时通知+进度流、本地存储预设、用于并排调试的弹出浮动面板,以及
Test ad-hoc按钮,启动一个一次性(从未注册)服务器,TTL为15分钟。覆盖与上游相同的表面@modelcontextprotocol/inspector而没有第二进程或第二端口。 - 3个传输层 --MCP(stdio)、REST API(HTTP)、WebSocket(实时事件)
- 声明性安装文件 --set
AGENT_DISCOVER_SETUP_FILE到一个列出服务器的JSON文件,以确保在启动时注册。Idempotent(跳过现有)。支持auto_activate,env-var机密参考($VAR)和标签。也会自动读取.local.json变体(例如。discover-setup.local.json)用于具有机密的机器特定服务器。新registry({ action: "sync" })MCP行动和POST /api/sync用于按需重新读取的REST端点。 - 工作台安全带 --under
bench/,将急切的工具加载与延迟的发现与真正的OpenCode+gpt-5-mini进行比较。可再现的结构结果:发现的第一圈输入标记在N中是平坦的(N∈{10100100003000}上约20.8k);渴望线性增长(20.9k→ 32.4k → 160.9k → N=3000处的上下文溢出)。端到端精度和多匝成本数字更嘈杂,并且取决于型号——请参见bench/README.md什么可以复制,什么不能。
______________________________________________________________________
快速开始
从npm安装
npm install -g agent-discover或者直接使用npx运行
npx agent-discover或从源代码克隆
git clone https://github.com/keshrath/agent-discover.git
cd agent-discover
npm install
npm run build选项1:MCP服务器(用于AI代理)
添加到您的MCP客户端配置(Claude Code、Cline、Cursor、Windsurf等):
{
"mcpServers": {
"agent-discover": {
"command": "npx",
"args": ["agent-discover"]
}
}
}仪表板自动启动http://localhost:3424在第一个MCP连接上。
选项2:独立服务器(用于REST/WebSocket客户端)
node dist/server.js --port 3424______________________________________________________________________
MCP工具(1)
一个基于动作的工具通过 action 参数——无论注册了多少子服务器,这都会使提示开销成本最小化。
| 行动 | 目的 |
|---|---|
find_tool | 单次呼叫发现。 混合BM25+语义搜索→ 顶级匹配+信任标签+紧凑型 required_args +4种选择。自动激活所属服务器。 |
find_tools | 批量发现。 通过 intents: [...] 在一次往返中发现N个工具。用于多步骤任务。 |
get_schema | 满 input_schema 对于一个发现的工具。仅在紧凑型时需要 required_args 摘要不够(条件/多态参数)。 |
proxy_call | 调用已发现的工具 通过 代理在不将其暴露给主机目录的情况下进行发现。配对 find_tool({auto_activate: false}) 对于巨大的目录。 |
list | 按服务器搜索本地注册表(FTS5)。 |
install | 从市场或通过手动配置(command+args+env)添加服务器。 |
uninstall | 删除服务器。 |
activate | 启动服务器,发现其工具,将其作为 serverName__toolName. |
deactivate | 停止服务器,隐藏其工具。 |
browse | 跨官方MCP注册表、npm和PyPI的联合搜索。 |
status | 活动服务器摘要(名称、工具计数、工具列表)。 |
激活的服务器通过代理发现公开其工具,命名空间为 serverName__toolName。例如,激活名为的服务器 filesystem 这暴露了 read_file 使其可用 filesystem__read_file.
当 find_tool 被称为 auto_activate: false (建议使用约1k以上的工具目录),代理连接以静默方式打开,工具必须通过以下方式调用 proxy_call 而不是添加到主机的目录中。无论注册的子服务器暴露了多少工具,这都会使主机MCP表面积保持恒定。
______________________________________________________________________
REST API(33个端点)
所有端点都返回JSON。CORS已启用。
GET /health Version, uptime
GET /api/prereqs Probe host for npx/uvx/docker/uv availability
GET /api/servers List servers (?query=, ?source=, ?installed=)
GET /api/servers/:id Server details + tools
POST /api/servers Register new server
PUT /api/servers/:id Update server config (description, command, args, env, tags)
DELETE /api/servers/:id Unregister (deactivates first if active)
POST /api/servers/:id/activate Activate -- start server, discover tools, begin proxying
POST /api/servers/:id/deactivate Deactivate -- stop server, remove tools
POST /api/servers/:id/preinstall Pre-download package (npm cache add for npx, uv tool install for uvx)
GET /api/servers/:id/secrets List secrets (masked values)
PUT /api/servers/:id/secrets/:key Set a secret (upsert)
DELETE /api/servers/:id/secrets/:key Delete a secret
POST /api/servers/:id/health Run health check (connect/disconnect probe)
GET /api/servers/:id/metrics Per-tool metrics for a server (call count, errors, latency)
GET /api/metrics Metrics overview across all servers
GET /api/browse Federated search: official registry + npm + PyPI (?query=, ?limit=, ?cursor=)
GET /api/npm-check Check if an npm package exists (?package=)
GET /api/status Active servers summary (names, tool counts, tool lists)
Tester surface (MCP Inspector parity — localhost-only unless AGENT_DISCOVER_ALLOW_REMOTE_TEST=1):
GET /api/servers/:id/info Server name, version, capabilities, instructions
GET /api/servers/:id/tools Live tools (bypasses activation cache)
POST /api/servers/:id/call Call a tool
GET /api/servers/:id/resources List resources (?cursor=...)
GET /api/servers/:id/resource-templates List resource templates
POST /api/servers/:id/resource/read Read a resource
POST /api/servers/:id/resource/subscribe Subscribe to resource updates
POST /api/servers/:id/resource/unsubscribe Unsubscribe
GET /api/servers/:id/prompts List prompts (?cursor=...)
POST /api/servers/:id/prompt/get Get a prompt with args
POST /api/servers/:id/ping Ping — returns { ok, rtt_ms }
POST /api/servers/:id/logging-level Set server logging level
GET /api/servers/:id/export Export config (?format=mcp-json|claude-code|cursor|agent-discover)
POST /api/transient Activate an ad-hoc server (returns { handle, ... })
DELETE /api/transient/:handle Release transient server
GET /api/transient/:handle/* Same tester surface, keyed by handle
GET /api/roots Configured client roots (AGENT_DISCOVER_ROOTS)
GET /api/logs/notifications Notification log entries
GET /api/logs/progress Progress log entries______________________________________________________________________
仪表盘
web仪表板自动启动时间为 http://localhost:3424 并提供了两个视图:
服务器选项卡 --所有注册的服务器都显示为卡片,显示健康点、错误计数、活动/非活动状态、描述、标签、工具列表和可扩展的秘密/指标/配置部分。用于激活、停用、健康检查和删除的操作按钮。
浏览选项卡 --跨官方MCP注册表、npm和PyPI的联合搜索。每张卡都显示运行时标签(node, python, streamable-http,…)、版本、描述和一个选择正确命令的安装按钮(npx, uvx,或远程URL)。当所需的包管理器出现时,选项卡顶部的prereq横幅会发出警告(npx, uvx, docker)主机上缺少。
通过WebSocket进行2秒数据库轮询的实时更新。具有持久偏好的深色和浅色主题。
______________________________________________________________________
测试
npm test # 179 tests across 12 files
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run check # Full CI: typecheck + lint + format + test
npm run test:e2e:ui # Playwright dashboard smoke tests______________________________________________________________________
环境变量
核心
| 变量 | 默认值 | 描述 |
|---|---|---|
AGENT_DISCOVER_PORT | 3424 | 仪表板HTTP端口 |
AGENT_DISCOVER_DB | ~/.claude/agent-discover.db | SQLite数据库路径 |
AGENT_DISCOVER_ROOTS | -- | 向子服务器通告逗号分隔的根URI(例如。 file:///Users/me/repo,file:///Users/me/data) |
AGENT_DISCOVER_ALLOW_REMOTE_TEST | 0 | 设置为 1 以允许来自非环回源的测试面板端点。 不推荐 --请参阅安全。 |
嵌入(语义搜索 find_tool)
嵌入是 选择加入。默认值为 none,这意味着 find_tool 仅按BM25+动词同义词排名。设置提供者可以实现混合BM25+余弦检索,从而缩小自然语言差距(例如“计费安排”→ 仅BM25就错过了“订阅”。
| 变量 | 默认值 | 描述 | ||
|---|---|---|---|---|
AGENT_DISCOVER_EMBEDDING_PROVIDER | none | none | local | openai |
AGENT_DISCOVER_EMBEDDING_MODEL | -- | 覆盖所选提供程序的默认模型id | ||
AGENT_DISCOVER_EMBEDDING_THREADS | 1 | 仅限本地提供程序--onnx运行时线程数 | ||
AGENT_DISCOVER_EMBEDDING_IDLE_TIMEOUT | 60 | 仅限本地提供程序--从RAM卸载模型前几秒 | ||
AGENT_DISCOVER_OPENAI_API_KEY | - | 用于嵌入的OpenAI API密钥(返回到 OPENAI_API_KEY 如果未设置) |
本地供应商 用途 Xenova/all-MiniLM-L6-v2 (384调暗)通过 @huggingface/transformers。使用安装可选的对等依赖关系 npm install @huggingface/transformers 如果你想使用它。没有网络调用,没有API密钥。
OpenAI提供商 用途 text-embedding-3-small (1536调暗)。与代理知识模型相同,因此两台服务器可以共享一个嵌入密钥。
主机包管理器先决条件
代理发现通过主机安装的包管理器生成子MCP服务器。安装你打算使用的任何东西;丢失的工具由以下人员报告 GET /api/prereqs 并在“浏览”选项卡中显示为横幅。
______________________________________________________________________
文档
- 用户手册 --全面的指南,涵盖所有工具、REST API、仪表板和故障排除
- API 参考 --所有MCP工具和REST端点
- 建筑 --源代码结构、设计原则、数据库模式
- 仪表盘 --web UI视图和功能
- 安装指南 --安装、客户端设置(Claude Code、Cursor、Windsurf)
- 更新日志
______________________________________________________________________
许可证
麻省理工学院——见 许可证
