项目简介
该项目包含一个实现了 Model Context Protocol (MCP) 的服务器组件。其核心功能是利用一个预先构建好的工具图数据库(存储了从其他MCP服务器采集的工具信息)来响应客户端(如LLM代理)的工具检索请求。当LLM需要执行一个任务时,它可以调用此服务器提供的工具,传入任务描述,服务器将返回与任务最相关的外部工具列表,辅助LLM决策。
主要功能点
- MCP 端点: 提供一个标准的MCP服务器接口,允许MCP客户端(如兼容MCP的LLM框架)连接并交互。
- 工具检索服务: 核心功能是暴露一个名为 'dynamic_tool_retriever' 的工具。
- 智能工具匹配: 接收LLM客户端发来的任务描述,利用语义embedding和Neo4j图数据库进行查询,找到最匹配的任务工具。
- 结构化返回: 返回匹配到的工具列表,包含工具名称、描述、参数、所属供应商等详细信息。
- Stdio 传输: 支持通过标准输入/输出来进行MCP协议通信。
安装步骤
- 克隆仓库:
git clone https://github.com/pratikjadhav2726/Unified-MCP-Tool-Graph.git cd Unified-MCP-Tool-Graph - 安装依赖: 安装运行MCP服务器所需的Python库。
# 以下是一些必要的库,您可能需要根据实际imports调整或查看是否有requirements.txt文件 pip install fastmcp pydantic sentence-transformers neo4j python-dotenv scikit-learn numpy aiohttp ollama langchain-groq langchain-mcp-adapters langgraph - 准备 Neo4j 数据库:
- 确保您有一个正在运行的Neo4j数据库实例。
- 在项目根目录创建 '.env' 文件,配置连接信息:
NEO4J_URI="bolt://localhost:7687" # 您的Neo4j地址 NEO4J_USER="neo4j" # 您的用户名 NEO4J_PASSWORD="password" # 您的密码
- 构建工具图数据 (必要):
- 这个服务器依赖于Neo4j中构建的工具图数据库。
- 您需要获取或其他MCP服务器的工具元数据(例如 'Data/Glama/all_servers.json' 的格式)。
- 运行 'Ingestion_pipeline' 目录下的脚本(如 'Preprocess_parse_and_embed.py', 'Ingestion_Neo4j.py', 'cluster_vendors_ingestion.py')将工具数据处理并导入到Neo4j。请按照脚本说明操作。
服务器配置 (供 MCP 客户端使用)
这是一个 MCP 服务器,它不直接由用户交互,而是由 MCP 客户端程序(如基于 LangChain, Autogen 或其他自定义框架的 LLM 代理)连接使用。
客户端程序需要知道如何启动和连接到这个服务器。典型的客户端配置(通常在客户端程序的配置文件中)会包含如下信息:
{ "name": "DynamicToolRetrieverMCP", "command": "python", "args": ["Dynamic_tool_retriever_MCP/server.py"], "transport": "stdio" }
- 'name': 给这个MCP服务器连接起一个标识名称。
- 'command': 用于启动服务器进程的命令(这里是 'python')。
- 'args': 传递给启动命令的参数列表,通常是服务器脚本的路径。
- 'transport': 客户端应使用的传输协议(这里是 'stdio')。
客户端会根据这些配置信息启动服务器进程,并通过配置的传输协议与之建立JSON-RPC连接。
基本使用方法
- 启动 Neo4j 数据库 并确保已完成工具图数据的导入。
- 在终端中启动 MCP 服务器:
服务器将以Stdio模式运行,等待客户端连接。python Dynamic_tool_retriever_MCP/server.py - 从您的 MCP 客户端程序连接: 使用兼容 MCP 的客户端库(例如 'langchain-mcp-adapters'),配置上述连接信息,连接到正在运行的服务器进程。
- 调用工具: 客户端程序现在可以通过标准 MCP JSON-RPC 调用名为 'dynamic_tool_retriever' 的工具,并传递一个包含 'task_description' 字符串的参数对象。
服务器将执行检索逻辑并返回匹配的工具信息。{ "jsonrpc": "2.0", "method": "tool_call", "params": { "tool_name": "dynamic_tool_retriever", "parameters": { "task_description": "查找洛杉矶最好的餐厅", "top_k": 5 }, "session_id": "..." }, "id": 123 }
信息
分类
数据库与文件