关于 Unified MCP Tool Graph: A Intelligence Layer for Dynamic Tool Retrieval
Unified MCP Tool Graph 是一个研究型项目,将多个 MCP 服务的工具 API 汇总到 Neo4j 图数据库中,帮助 LLM 与 Agent 按任务动态检索最相关的工具。项目面向需要处理大量工具的 Agent 开发者。
主要功能
- 01将多个 MCP 服务的工具结构化存入 Neo4j
- 02按用户查询动态检索相关工具
- 03记录工具之间的重叠与依赖关系
- 04按需启动 MCP 服务并在闲置后关闭
- 05集成 A2A 与 LangGraph 示例 Agent
适用场景
- 01为 Agent 仅加载与当前任务相关的少量工具
- 02在企业内按权限筛选可用内部工具
- 03构建基于标签与依赖的工具推荐 Agent
MCP 相关
该项目通过 Dynamic Tool Retriever MCP 返回相关工具及其 MCP 服务配置,并由服务管理器按需连接对应的 MCP 服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
统一 MCP 工具图谱:用于动态检索工具的智能层
统一 MCP 工具图谱 是一个以研究为导向的项目,它将来自不同 Model Context Protocol(MCP)服务 的工具 API 汇总并构建为结构化数据,存储在集中式 Neo4j 图数据库 中。该图谱充当智能基础设施层,使 大语言模型(LLM) 和 Agent 式 AI 系统 能够针对任何任务 动态检索 最相关的工具,而不会被冗余或令人困惑的选项淹没。
🚀 最新动态:该项目已集成到 SmarterMCP,目前处于预览模式。
动态启动 MCP 服务并提供精简工具上下文
🟢 动态编排 MCP 服务
- 系统现在会 仅启动给定用户查询所需的 MCP 服务。默认情况下,五个常用 MCP 服务(包括 Dynamic Tool Retriever MCP)会保持预热状态;其他服务则按需启动,并在最后一次使用后保持运行 10 分钟。
- Dynamic Tool Retriever MCP 返回的不仅是工具元数据,还包括运行/连接到该工具对应 MCP 服务所需的配置(自动从供应商的 GitHub README 获取)。
- 自动提取 MCP 配置: 使用供应商的 GitHub 仓库,从 README 中提取每个工具对应的 MCP 服务配置,以便 Agent 随时启动/连接正确的服务。
- 错误处理: 如果配置提取失败,系统会记录警告并继续运行,确保工具检索过程稳健可靠。
🟢 为大模型/Agent 提供精简工具上下文
- 仅将用户查询所需的确切工具加载到 Agent 的上下文中(而非加载所有 MCP 服务的全部工具)。这可以避免大模型混淆和无限工具循环。
- 端到端流程:
- 接收用户查询。
- Dynamic Tool Retriever MCP 查询 Neo4j 图谱,并返回最相关的工具 及其 MCP 服务配置。
- Agent 使用这些配置,仅启动/连接所需的 MCP 服务,并加载检索出的工具。
- Agent 执行工作流并返回答案。
🟢 支持 A2A 和 LangGraph Agent
- A2A Agent 示例: 查看
Example_Agents/A2A_DynamicToolAgent/,了解一个完全动态的 A2A Agent,它会根据每次请求编排 MCP 服务和工具。 - LangGraph 示例: 查看
Example_Agents/Langgraph/,了解一个使用相同动态精简工具方法的 LangGraph Agent。
🔬 本仓库专注于创建和演进 统一工具图数据库。基于聊天机器人的集成(例如 LangChain)被视为这一基础层的模块化扩展。
📢 即将支持 Cline 和 IDE……
研究问题
随着大模型和自主 Agent 不断发展,开始与外部工具和 API 交互,一个关键瓶颈也随之出现:
面对不断扩大的 API 集合,模型如何高效选择合适的工具,而不会陷入无限循环或选错工具?
为什么会出现这种情况:
-
工具混淆:
当许多工具提供相似功能时(例如create_post、schedule_post、post_to_social),大模型难以抉择,并可能调用错误的工具。 -
↺ 无限调用链:
如果缺少对工具差异的结构化理解,大模型往往会陷入无效调用链,重复调用工具或选择不理想的工具。 -
缺乏结构化的访问方式:
当前大多数实现会将所有可用工具都塞进大模型的上下文,使其被过多选项淹没,并增加产生幻觉的风险。
本项目提出了一种结构化、可查询的解决方案:一个与供应商无关的 Neo4j 图数据库,收录来自 MCP 服务(例如 LinkedIn、Google、Facebook、Notion 等)的工具/API。
🔍 核心能力:
-
集中式工具智能:
以图格式存储 API 描述、元数据、参数及工具之间的关系。 -
面向大模型的查询层:
Agent 可以根据元数据和关系,为每项任务检索最相关的 3–4 个工具,从而最大限度地减少混淆。 -
语义区分:
通过图关系(例如overlaps_with、extends、preferred_for_task)记录工具之间的相似之处和差异,以指导决策。
模块化扩展
图谱是核心,同时也支持强大的下游用例:
动态工具检索(DTR):
一种模块化的 LangChain/Autogen 聊天机器人扩展,可查询图谱,并针对给定的用户意图提供一组精简、准确的工具。
这样可以避免大模型盲目扫描庞大的工具库,而是只提供完成任务所需的工具——不多不少。
核心实现:
- 按需启动 MCP 服务(使用工具检索 MCP 和 GitHub 中的配置),并在不活跃后关闭。
- 始终只运行最受欢迎的 5 个 MCP;其他 MCP 按需运行。
- Agent(A2A 或 LangGraph)只能看到与当前查询相关的工具,而不是全部工具。
核心目标
| 目标 | 描述 |
|---|---|
| 工具摄取 | 从公共/私有 MCP 服务获取 API 和架构,并对其进行规范化 |
| 工具关系映射 | 定义图谱边,例如 overlaps_with、requires_auth、preferred_for、belongs_to_vendor |
| 面向大模型的查询 | 实时返回针对特定任务的工具组合 |
| 可扩展的生态系统 | 持续添加供应商和工具,无需重新训练或硬编码 |
| 感知 Agent 的结构 | 通过富含元数据、可搜索的工具表示,引导大模型推理 |
主要优势
-
减少大模型中的工具混淆
只展示与任务相关的选项,避免工具过载。防止无限调用循环和错误的工具选择。 -
与供应商无关的集成
将不同提供商的 API 整合到一个智能系统中。 -
映射互操作性
记录工具之间的关联或依赖关系,便于在工作流中串联 API。 -
优化 Agent 推理
让大模型能够更高效地推理,减少上下文窗口中的干扰。 -
可扩展且模块化
可独立于大模型或聊天机器人基础设施进行更新。可扩展至任何 Agent 技术栈。
示例用例
-
“我想在 LinkedIn 上安排一条帖子,并分享到 Slack。”
→ 图谱只返回相关的create_post、schedule_post和send_message工具。 -
面向企业的定制 AI 助手:
只开放图谱中的内部工具,并按访问权限、范围或功能进行筛选。 -
智能推荐 Agent:
根据标签、人气、成功率或依赖关系推荐最匹配的工具。
Example_Agents 目录提供了与 LangGraph 和 A2A 的集成,可简化 Agent 工作流和动态工具编排。
🏗️ 架构
┌─────────────────────────────────────────────────────────────┐
│ MCP Unified Gateway │
│ (Port 8000) │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────┴───────────────────────────────────────┐
│ MCP Proxy Server │
│ (Port 9000) │
└─┬─────────────┬─────────────┬─────────────┬─────────────────┘
│ │ │ │
┌─▼──────────┐ ┌▼─────────────▼┐ ┌─▼─────────▼┐ ┌─▼─────────────┐
│ Dynamic │ │ Everything │ │Sequential │ │ Time Server │
│ Tool │ │ Server │ │ Thinking │ │ │
│ Retriever │ │ │ │ Server │ │ │
└────────────┘ └──────────────┘ └────────────┘ └───────────────┘
│
┌─────▼─────┐
│ Neo4j │ (Optional)
│ Database │
└───────────┘
🛠️ 工作原理(概述)
- 用户提交查询(例如:“安排一条 LinkedIn 帖子,并分享到 Slack。”)
- 动态工具检索器 MCP 查询 Neo4j 图,并返回最相关的工具,以及它们的 MCP 服务配置(如有需要,则从 GitHub 获取)。
- MCP 服务管理器仅启动/连接所需的 MCP 服务(使用这些配置),并在最后一次使用后保持运行 10 分钟。
- Agent(A2A 或 LangGraph)仅加载检索到的工具并执行工作流。
- 结果返回给用户,尽可能减少工具混淆并提高效率。
即将推出
- 图数据导入脚本
- 架构蓝图 + Cypher 查询
- 工具可视化 Playground
- LangChain DTR 聊天机器人插件
- 操作教程与用例
开始使用
👉 查看 GETTING_STARTED.md,了解使用 uv 的完整设置说明。
快速开始
# Clone the repository
git clone https://github.com/your-username/unified-mcp-tool-graph.git
cd unified-mcp-tool-graph
# Install dependencies with uv
uv sync
# Start the unified gateway
uv run python start_unified_gateway.py
网关将在 http://localhost:8000 上提供服务,所有 MCP 服务中的工具都可通过单一端点访问。
有关详细设置说明、故障排除和配置选项,请参阅 GETTING_STARTED.md。
贡献
如果你热衷于 Agent 式 AI、图数据库或大模型集成,我们非常期待你的帮助!
- 提交想法或供应商来源
- 提交 PR,改进架构/设计
- 为此研究点亮 Star,给予支持
许可证
MIT 许可证——可免费用于学术、个人和商业用途。
总结
与其把 100 多个工具一股脑塞进模型的提示词并期待它做出明智选择,不如通过 统一 MCP 工具图为你的大模型提供结构、清晰度和相关性。
它能解决工具混淆问题、防止无限循环,并支持模块化、智能化的 Agent 工作流。
让我们一次构建一个工具图,共同打造更智能的系统。
为项目点亮 Star,关注发展历程,让工具真正变得智能、可搜索且模块化。
开发动态
面向多标签开放式用例的聚类。
创建了一个包含供应商和工具的 GraphDB,并为其生成嵌入,以支持向量搜索。 需要一种方法来对供应商进行分类,并将同一类别的供应商关联起来。例如(网页搜索、文件系统、社交媒体等)。 支持的工具数量:11066 MCP 服务数量(官方 + 社区):4161
查询 = 我想发布一条关于 AI 最新趋势的 LinkedIn 帖子。
Here are the top 5 tools recommended based on your task of creating a LinkedIn post about AI trends, along with brief explanations to help you choose:
---
### 1. **linkedin_post_generator** (Likely the Most Relevant)
**Description**: Generates optimized LinkedIn posts with engaging headlines, content structure, and hashtags tailored for professional audiences.
**Why Use**: Directly creates polished posts while suggesting multimedia (images, videos) and tone adjustments for maximum engagement.
---
### 2. **ai_search** (Top Search Tool)
**Vendor**: Higress AI-Search
**Key Feature**: Aggregates **real-time data** from Google/Bing/Quark and academic sources like ArXiv for cutting-edge AI research and industry trends.
**How to Use**:
- Query: `Latest AI trends 2024` → Get recent news, research papers, and opinion pieces.
- Useful for ensuring your post cites fresh, credible sources.
---
### 3. **tavily-search** (Comprehensive Web Research)
**Vendor**: Tavily
**Key Feature**: AI-powered search with advanced filters (e.g., `time_range`, `exclude_domains`) to curate content from trusted sources.
**How to Use**:
- Example: Search for "recent AI breakthroughs 2024" → Pull articles from tech blogs, IEEE, or MIT Tech Review to highlight in your post.
---
### 4. **query_repository** (If Curating Open-Source or GitHub Content)
**Vendor**: GitHub Chat
**Use Case**:
- If your post references open-source projects (e.g., "Top AI tools from GitHub 2024"), use this to query repositories for trending AI-related code/repos.
---
### 5. **social_media_analytics** (Post-Creation Optimization)
**Use Case**:
- After drafting your post, analyze engagement metrics (e.g., "Which AI topics are trending this week?") to refine your draft based on what performs well on LinkedIn.
---
### Recommended Workflow:
1. **Research** using **ai_search** or **tavily-search** to gather the latest AI news and data (e.g., LLM progress, ethical AI debates).
2. **Craft the Post** with **linkedin_post_generator** to ensure professional formatting and engagement hooks.
3. **Validate** with quick checks via **query_repository** (if citing open-source tools) or **social_media_analytics** for topic popularity.
Let me know if you'd like step-by-step instructions for any specific tool!
使用 mcp-proxy 代理 MCP 服务
本项目使用 mcp-proxy 将基于 stdio 的 MCP 服务暴露为 HTTP 端点。mcp-proxy 充当基于 stdio 的 MCP 服务与 HTTP 客户端之间的桥梁,支持 Streamable HTTP 和 SSE 传输方式。
工作原理
- MCP 服务作为子进程(stdio)启动,并注册到
mcp-proxy。 - 每个服务都会在以下地址暴露:
http://localhost:<port>/servers/<name>/(Streamable HTTP,POST)http://localhost:<port>/servers/<name>/sse(SSE,GET)
- 官方 MCP Python SDK 可通过
sse_client连接到/sse端点:
from mcp.client.sse import sse_client
from mcp.client.session import ClientSession
import asyncio
async def main():
mcp_url = "http://localhost:9000/servers/time/sse"
async with sse_client(mcp_url) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# ... interact with the server ...
if __name__ == "__main__":
asyncio.run(main())
有关配置和高级用法的更多详情,请参阅 mcp-proxy 文档。
📚 文档
- GETTING_STARTED.md - 使用
uv的完整设置指南 - CONTRIBUTING.md - 贡献指南
- CODE_OF_CONDUCT.md - 社区行为准则
📄 许可证
本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
为项目点亮 Star,关注发展历程,让工具真正变得智能、可搜索且模块化。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
