工具路由服务

MCP Finder是一款工具路由服务,通过智能搜索和AI重排技术帮助用户快速找到适合的工具,适用于开发效率提升和工具管理。

  • by SaiVSrini
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SaiVSrini/mcpfinder

使用说明

MCP Finder:我的个人工具路由器

我创建这个项目是为了解决一个简单的问题: 我有太多的MCP工具,我不知道该用哪一个。

我创建了这个“路由器”,而不是手动搜索文档或猜测哪个服务器有合适的工具。我只是简单地问了它一个问题,它告诉我该使用哪种工具。

运作原理

当我问这样的问题时 “扫描我的docker镜像以查找安全问题”,以下是幕后发生的事情:

  1. 意向分析:首先,系统会查看我的查询以了解我想要什么。它检查我是否要求“本地”、“免费”的东西,或者我是否需要特定类型的工具(如“安全”或“数据库”)。
  2. 搜索:它搜索我的目录(mcpfinder.sqlite)使用两种方法:
    • 关键词:将查询中的单词与工具描述相匹配。
    • 含义(嵌入):匹配 概念 将我的查询添加到工具中(因此“图片”与“图像”匹配)。
  3. 评分:它根据每个工具的匹配程度为其打分。它甚至为最适合我当前编辑器的工具(如Cursor)提供了额外的好处。
  4. AI重新排名:最后,它将最优秀的候选人发送到一个小型AI模型(GPT-4o-mini)。人工智能像人类一样观察它们,选择最好的一个,并解释 为什么.

数据流

我保持简单。我的数据保存在CSV文件中,应用程序从快速的SQLite数据库中读取。

  1. 真相的来源: db.csv
    • 这是我手动添加或编辑工具的地方。这只是一个电子表格。
  2. 数据库: mcpfinder.sqlite
    • 该应用程序不会直接读取CSV(速度太慢)。相反,我将数据加载到这个SQLite数据库中。
    • 文件 mcp_suggester/load_mcp_csv_to_sqlite.py 处理此转换。

我如何设置它

1.先决条件

我需要安装Python。然后我安装依赖项:

pip install -r requirements.txt

2.环境变量

我需要告诉应用程序我的数据库在哪里,并给它一个OpenAI密钥(用于理解含义和重新排序等“智能”部分)。

$env:MCP_CATALOG_DB = ""
$env:OPENAI_API_KEY = "sk-..."

3.运行它

我可以直接运行服务器进行测试:

python -m mcp_suggester.server

4.使用Web UI(可选)

如果你想要一个可视化界面来测试查询,你可以使用Streamlit应用程序:

streamlit run ui_app.py

这将打开一个浏览器窗口,您可以在其中:

  • 在文本框中键入您的查询
  • 使用滑块调整设置(结果数量、候选池大小)
  • 通过良好的格式、推理和可粘贴的复制示例查看结果

无需单独运行服务器——UI应用程序直接调用逻辑。

在游标中使用它

这是最好的部分。我将这个“路由器”连接到Cursor,这样我就可以在编码时使用它。

  1. 打开 光标设置 > 主控程序.
  2. 添加新的MCP服务器:
    • 类型: command
    • 命令: python
    • 参数: -m mcp_suggester.server
    • 环境:添加我的 PYTHONPATH, MCP_CATALOG_DB,以及 OPENAI_API_KEY.

现在,在Cursor Chat中,我只需键入:

“找到一个工具将此应用程序部署到Kubernetes”

它用我需要的确切工具进行响应(例如。, Helm -> deploy_application).

项目结构

  • mcp_suggester/:核心逻辑。
    • server.py:Cursor对话的入口点。
    • scoring.py:对工具进行排名的数学。
    • intent.py:找出我想要什么的逻辑。
  • db.csv:我的工具清单。
  • mcpfinder.sqlite:应用程序实际读取的数据库。

我如何衡量质量

我不只是猜测搜索是否有效。我有一个测试套件 evaluation/ 文件夹来证明这一点。

  • eval_dataset.csv:这是我对系统的“考试”。它包含27个真实世界的问题(如 “找到一个部署到Kubernetes的工具”)以及确切的工具 应该 成为最佳答案。
  • evaluate.py:这个脚本通过三种不同的策略来回答这些问题,看看哪一个会赢。

结果

当我运行基准测试时(python evaluation/evaluate.py),以下是我通常看到的:

  1. 仅关键字搜索:约60%的准确率。
    • 当我使用与工具描述不同的单词时(例如,当工具说“图像”时,要求提供“图片”),它就会失败。
  2. 混合搜索(关键字+含义):~55%至60%的准确率。
    • 更好地理解概念,但有时会被类似的工具混淆。
  3. 混合+人工智能重新排名: ~70%+精度.
    • 这就是为什么LLM是必不可少的。它通过“思考”结果来缩小差距。

AI到底在做什么

你可能会想, “为什么我需要法学硕士学位?我不能搜索吗?”

当系统找到20个可能的工具时,它会将前3-5个发送给LLM(GPT-4o-mini),并给出非常具体的提示。LLM是 不 只是总结。它扮演着法官的角色。

以下是它对每个查询所做的操作:

  1. 它读取文档:它查看工具的描述、参数和功能。
  2. 它检查约束:如果我要求一个“本地”工具,它会检查该工具是否实际在本地运行。
  3. 它解释了“为什么”:它为自己的选择写了一个人类可读的理由。
    • 坏:“得分:0.9”
    • 良好(法学硕士):“这个工具是最合适的,因为它专门处理Kubernetes部署,而你要求部署工具。”

最后一步至关重要。它将原始数据库搜索变成了一个有用的助手,可以解释它的想法。

证据

这是评估脚本输出的快照。您可以看到“混合+LLM”策略是如何击败其他策略的:

Lexical-only (TF-IDF)
---------------------
Precision@1: 0.593
Precision@3: 0.667
Recall@3:    0.611
MRR:         0.668

Hybrid (Lexical + Embedding + Intent)
-------------------------------------
Precision@1: 0.519
Precision@3: 0.667
Recall@3:    0.648
MRR:         0.599

Hybrid + LLM Rerank
-------------------
Precision@1: 0.700
Precision@3: 0.741
Recall@3:    0.725
MRR:         0.704
  • Precision@11号答案正确的频率。
  • Recall@3:我在前3个结果中找到了多少个正确答案。
  • 平均倒数排名:正确答案为“有多高”的分数。越高越好。

演示

观看演示视频,了解MCP Finder的实际操作:

观看演示视频 (点击下载/查看)

注: GitHub markdown不支持内联视频播放。上面的链接将允许您下载和观看视频。


我接下来要带这个去哪里

现在,这是一个坚实的原型。但要做到这一点 “企业就绪” 适合工业生产,以下是我的计划:

1.抛弃CSV,转而使用真实数据库

目前,我手动编辑CSV文件。在真实的生产环境中,我会将其移动到 PostgreSQL 随着 pgvector.

  • 为什么?:它处理数百万个工具,支持并发用户,并原生进行矢量搜索。不再同步脚本!

2.自动摄入

我不应该手动添加工具。我想建立一个 爬虫 它监视GitHub存储库或MCP注册表。

  • 流量:
    1. 爬网程序检测到新的MCP服务器版本。
    2. 它刮 README.md 和 tool 定义。
    3. LLM会自动生成描述、标签和示例查询。
    4. 它会自动将新工具推送到数据库。

3.管理仪表板和分析

我需要一个用户界面来查看发生了什么。

  • 策展人模式:批准/拒绝爬虫发现的新工具。
  • 分析:查看用户正在搜索什么。如果每个人都搜索“Kubernetes”但没有结果,我知道我需要添加更多的Kubernetes工具。

4.反馈回路

系统应该从使用中学习。

  • 如果我搜索“deploy”并始终选择“Helm”而不是“Kubernetes CLI”,系统应该会学习该偏好,并在下次自动将Helm排名更高。