语义工具发现算法

MCP-Zero是一种用于AI代理语义工具发现的算法,通过两阶段分层搜索和嵌入技术,实现高效、低延迟的工具匹配。

  • by jorgecotillo
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jorgecotillo/mcp_zero

使用说明

MCP Zero:人工智能代理的主动工具发现

使用真实的MCP服务器独立演示语义工具发现的MCP Zero算法

作者 豪尔赫·科蒂略
团队: Spark结构平台
日期: 2025年12月


🎯 什么是MCP Zero?

简单来说:
MCP Zero是一个 算法 (不是工具),帮助人工智能代理从数千个选项中找到合适的工具,比如谷歌搜索人工智能工具。

类比

  • 无MCP零点:为AI提供1000页的电话簿→ “找到正确的号码”
  • 使用MCP Zero:AI描述了它需要什么→ 立即获取精确的工具

🤔 是什么与不是什么

✅ MCP零点为:

  • 算法/概念 来自学术研究(如“二分查找”)
  • 一种语义工具发现方法 使用嵌入
  • 两阶段分层搜索 (服务器→ 工具)
  • 可扩展到10000多种工具 没有性能问题

❌ MCP零点不是:

  • ❌ PyPI中的可安装库(pip install mcp-zero 不存在)
  • ❌ 一个现成的VS Code扩展(尚未)
  • ❌ 官方MCP SDK的一部分
  • ❌ MCP协议的替代品——它增强了它
  • ❌ 目前已集成到GitHub Copilot (截至2025年12月)

📁 存储库结构

核心实施

  • mcp_zero_core.py -核心算法(2级分层路由)
  • mcp_client.py -MCP协议客户端和VS代码设置解析器
  • mcp_server_connector.py -真正的MCP服务器连接(stdio/SSE)
  • demo_mcp_zero.py -互动演示

文档

  • README.md -此文件

🚀 快速开始

1.安装依赖项

pip install -r requirements.txt

2.运行演示

# Run with real MCP servers (default - connects to your configured servers)
python demo_mcp_zero.py

# Or run with mock data (fast, no server connections)
python demo_mcp_zero.py --mock

演示将:

  1. 从VS代码配置加载MCP服务器
  2. 为所有工具描述创建嵌入
  3. 让您键入查询以查看语义匹配的实际情况
  4. 显示两级分层搜索(服务器→ 工具)

🤖 为什么选择“MCP Zero”?理解价值

名称解释

MCP零点 = 零上下文开销的模型上下文协议

“零”强调:

  • ✅ 零上下文块:将零不必要的工具加载到LLM中
  • ✅ 零样本发现:在没有LLM的情况下查找工具,查看所有内容
  • ✅ 接近零延迟:亚秒级搜索与慢速LLM处理

💎 MCP Zero解决的问题

没有MCP零点(传统方法):

User: "analyze Spark job performance"

1. Load ALL MCP tools → 100,000+ tokens
2. Send massive context to GPT-4 → $3.00 per query
3. Takes 30+ seconds to process
4. May hit token limits (fails with 1000+ tools)
5. LLM gets confused by too many options

使用MCP Zero:

User: "analyze Spark job performance"

1. Semantic search → finds spark_runtime_investigator (0.6s)
2. Load only top 5 relevant tools → 500 tokens
3. Send tiny context to GPT-4 → $0.015 per query
4. Fast response (< 2 seconds total)
5. LLM focuses on perfect match

📊 实际影响

度量 传统 MCP零 改进
令牌/查询 100,000+ ~500 减少99.5%
成本/查询 $3.00 $0.015 便宜200倍
延迟 30+秒 <2秒 快15倍
Max工具 ~100 10,000+ 100倍比例

🛠️ MCP Zero的工作原理

先决条件:关键概念

🔢 嵌入:“意义坐标”

嵌入将文本转换为捕捉语义含义的数字:

"Spark performance" → [0.72, -0.15, 0.89, ... 384 numbers]
"analyze jobs"      → [0.68, -0.12, 0.91, ... 384 numbers]  
"pizza delivery"    → [-0.23, 0.67, -0.45, ... 384 numbers]

相似的含义=相似的数字。这使计算机能够对概念进行数学比较。

📐 余弦相似度:测量语义距离

衡量两个嵌入向量的“平行”程度:

Query: "analyze Spark job performance"
Tool 1: "Analyze Spark job metrics"     → 0.872 (very similar!)
Tool 2: "Query database by email"       → 0.215 (somewhat related)
Tool 3: "Send email notification"       → 0.044 (not related)
  • 得分接近 1.0 =非常相似
  • 得分接近 0.0 =无关
  • 得分接近 -1.0 =相反

💾 嵌入缓存:性能关键

钥匙:嵌入计算 一旦启动,不是按查询。

# At Startup (One-Time):
for tool in all_tools:
    tool.embedding = model.encode(tool.description)
# Cache to disk

# At Query Time (Fast):
query_embedding = model.encode(user_query)
similarities = cosine_similarity(query_embedding, cached_tool_embeddings)

为什么这很重要:

  • 工具描述不变→ 嵌入是静态的
  • 仅在运行时计算查询嵌入
  • 重复查询速度快得多

📝 工具描述质量:精度至关重要

MCP Zero的准确性取决于清晰的工具描述。

❌ 糟糕(模糊) ✅ 良好(清晰)
“处理数据” “使用T-SQL查询Azure SQL数据库”
“处理请求” “调查Spark作业性能瓶颈”
“运行分析” “执行Kusto KQL查询进行日志分析”

影响:

Query: "analyze Spark performance"
Bad description: "analyzer" → 0.12 similarity (poor match)
Good description: "Spark job performance analyzer" → 0.85 (excellent!)

算法

第一阶段:服务器级别匹配

  1. 用户查询: “我需要分析Spark作业绩效”
  2. 转换为嵌入:将查询转换为384个数字
  3. 比较:计算所有服务器描述的余弦相似度
  4. 过滤器:返回前5个最相关的服务器

第二阶段:工具级别匹配

  1. 狭义搜索:只看排名前5的服务器中的工具(不是全部10000个!)
  2. 比较:计算顶级服务器中每个工具的相似性
  3. 提高分数:乘以服务器相关性: final = similarity × (0.7 + 0.3 × server_score)
  4. 返回最佳:得分最高的单个工具

结果

输入:“分析慢速Spark作业”
输出: spark_runtime_investigator (相似性:0.872)
代币:500(与传统的100000相比)


🎮 GitHub副本集成状态

⚠️ 重要提示:MCP Zero尚未出现在GitHub Copilot中

现状(2025年12月):

  • ✅ GitHub Copilot通过以下方式支持MCP协议 @mcp 命令
  • ❌ 副驾驶不使用MCP Zero优化
  • ❌ Copilot仍然加载所有工具(传统方法)

👀 演示问题:如何查看副驾驶加载所有工具

您可以直观地看到Copilot当前如何在没有MCP Zero优化的情况下加载所有工具:

步骤1:检查您的MCP服务器

@mcp list servers

这显示了您配置的所有MCP服务器(例如,scout docker、kusto MCP、describer等)

第二步:让副驾驶列出所有工具

@mcp list all available tools

Copilot将加载并显示来自所有服务器的所有工具。观察响应——对于多个服务器,这可能是上下文中的数百个工具。

步骤3:查看查询问题

@mcp I need to analyze Spark job performance issues from the last 7 days

发生了什么(没有MCP Zero):

  1. Copilot将来自所有服务器的所有工具加载到其上下文中
  2. 有5台服务器和大约80多种工具,这是8000多种代币
  3. LLM必须扫描所有内容以找到相关工具
  4. 反应较慢,成本较高,潜在混乱

视觉比较:

方法 加载内容 令牌 时间
当前副驾驶 来自5台服务器的全部81个工具 ~8100 3-5秒
使用MCP Zero 只有5个相关的Spark工具 ~500 <1秒
储蓄 工具减少94% 减少94% 速度提高3-5倍

试试这个演示流程:

  1. 跑 @mcp list all available tools → 查看大量列表
  2. 跑 python demo_mcp_zero.py → 输入相同的查询(默认使用真实服务器)
  3. 比较:Copilot显示111个工具,MCP Zero仅显示前5个匹配项

这种视觉比较展示了为什么MCP Zero的语义过滤在规模上是有价值的。


此存储库演示了什么

这是一个 独立实现 展示了如果集成,MCP Zero可以做什么:

  • ✅ 连接到您的真实MCP服务器
  • ✅ 语义搜索从81多种工具中找到合适的工具
  • ✅ 两级分层匹配(服务器→ 工具)
  • ✅ 显示出94%的代币减少潜力

它不做什么:

  • ❌ 不修改GitHub Copilot的行为
  • ❌ 不将工具注入Copilot的上下文中
  • ❌ 不会取代Copilot的原生MCP支持

📚 参考文献

研究

协议

  • MCP规范: https://modelcontextprotocol.io/

📄 许可证

MIT许可证


🙏 致谢

  • 冯兴宇等研究论文。
  • Anthropic的MCP协议
  • 这是一个独立的实现,演示了该算法