项目简介

该项目包含一个实现了 Model Context Protocol (MCP) 的服务器组件。其核心功能是利用一个预先构建好的工具图数据库(存储了从其他MCP服务器采集的工具信息)来响应客户端(如LLM代理)的工具检索请求。当LLM需要执行一个任务时,它可以调用此服务器提供的工具,传入任务描述,服务器将返回与任务最相关的外部工具列表,辅助LLM决策。

主要功能点

  • MCP 端点: 提供一个标准的MCP服务器接口,允许MCP客户端(如兼容MCP的LLM框架)连接并交互。
  • 工具检索服务: 核心功能是暴露一个名为 'dynamic_tool_retriever' 的工具。
  • 智能工具匹配: 接收LLM客户端发来的任务描述,利用语义embedding和Neo4j图数据库进行查询,找到最匹配的任务工具。
  • 结构化返回: 返回匹配到的工具列表,包含工具名称、描述、参数、所属供应商等详细信息。
  • Stdio 传输: 支持通过标准输入/输出来进行MCP协议通信。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/pratikjadhav2726/Unified-MCP-Tool-Graph.git
    cd Unified-MCP-Tool-Graph
  2. 安装依赖: 安装运行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
  3. 准备 Neo4j 数据库:
    • 确保您有一个正在运行的Neo4j数据库实例。
    • 在项目根目录创建 '.env' 文件,配置连接信息:
      NEO4J_URI="bolt://localhost:7687" # 您的Neo4j地址
      NEO4J_USER="neo4j" # 您的用户名
      NEO4J_PASSWORD="password" # 您的密码
  4. 构建工具图数据 (必要):
    • 这个服务器依赖于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连接。

基本使用方法

  1. 启动 Neo4j 数据库 并确保已完成工具图数据的导入。
  2. 在终端中启动 MCP 服务器:
    python Dynamic_tool_retriever_MCP/server.py
    服务器将以Stdio模式运行,等待客户端连接。
  3. 从您的 MCP 客户端程序连接: 使用兼容 MCP 的客户端库(例如 'langchain-mcp-adapters'),配置上述连接信息,连接到正在运行的服务器进程。
  4. 调用工具: 客户端程序现在可以通过标准 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
    }
    服务器将执行检索逻辑并返回匹配的工具信息。

信息

分类

数据库与文件