Open Multiple Model MCP Client: 多源MCP服务器代理网关

本项目作为一个代理(Gateway),连接大型语言模型(LLM)如Anthropic Claude,使其能够统一调用来自不同Model Context Protocol (MCP) 服务器提供的工具和服务。它本身不直接托管工具资源,而是作为中间层,管理多个下游MCP服务器,并将它们的工具能力暴露给LLM客户端。

主要功能点

  • 连接多个MCP服务器: 可以同时连接并管理多个不同的MCP服务器。
  • 支持多种连接类型: 支持通过标准输入输出(Stdio)或SSE(Server-Sent Events)方式连接MCP服务器。
  • 动态工具管理: 可以在运行时启用或禁用连接的MCP服务器及其提供的工具。
  • 提供统一API: 对LLM客户端暴露一个统一的接口(通过FastAPI),LLM可以通过这个接口发现并调用所有已连接MCP服务器的工具。
  • 简化LLM交互: 提供一个简化的聊天接口,LLM通过此接口进行对话并调用工具,本项目负责与下游MCP服务器的通信。

安装步骤

  1. 克隆项目仓库到本地。
  2. 进入项目目录。
  3. 创建并激活Python虚拟环境(推荐)。
    python -m venv venv
    # Linux/macOS
    source venv/bin/activate
    # Windows
    venv\Scripts\activate
  4. 安装项目依赖。
    uv sync
  5. 复制示例环境变量文件。
    cp .env-example .env
  6. 编辑 '.env' 文件,填写你的Anthropic API Key(或OpenAI等其他LLM平台密钥,取决于你配置和使用的模型)。

服务器配置

本项目通过读取 'mcp_servers.json' 文件来配置需要连接的下游MCP服务器。你可以根据实际情况修改此文件。

'mcp_servers.json' 文件是一个JSON对象,其中包含一个名为 'mcpServers' 的字段,该字段是一个字典,键是服务器的逻辑名称(你自己定义,如"time", "remote_server"),值是该服务器的配置信息。

每个服务器配置信息是一个JSON对象,至少需要包含以下两种连接方式之一的配置:

  • Stdio 连接方式: 用于启动一个本地MCP服务器进程。需要包含:
    • '"command"': 字符串,要执行的服务器启动命令(例如 '"docker"')。
    • '"args"': 字符串数组,启动命令的参数列表(例如 '["run", "-i", "--rm", "mcp/time"]')。
    • 可选的 '"env"': JSON对象,为子进程设置环境变量。
  • SSE 连接方式: 用于连接一个已经运行的远程MCP服务器。需要包含:
    • '"url"': 字符串,远程MCP服务器的SSE endpoint URL(例如 '"https://your-remote-mcp-server.com/mcp/sse"')。

示例配置结构说明(不是实际代码,用于理解):

{
  "mcpServers": {
    "服务器名称1": {
      "command": "你的服务器启动命令",
      "args": ["命令", "参数"]
      // 可选的 "env": { "KEY": "VALUE" }
    },
    "服务器名称2": {
      "url": "远程服务器的SSE地址"
    }
    // 可以添加更多服务器配置...
  }
}

请根据你要连接的实际MCP服务器类型(本地进程Stdio或远程SSE)填写相应的 'command'/'args' 或 'url'。

基本使用方法

  1. 启动本项目服务器:
    python main.py
    服务器默认运行在 'http://localhost:3333'。
  2. 通过'/chat_stream'接口与LLM及连接的工具进行交互。这是一个流式API,可以使用curl等工具进行测试:
    curl -X POST "http://localhost:3333/chat_stream" \
      -H "Content-Type: application/json" \
      -d '{"message": "请问现在几点?"}'
    你也可以使用GET请求:
    curl "http://localhost:3333/chat_stream?message=请问现在几点?"
    你还可以在请求中指定LLM平台和模型(如果你的'.env'配置了相应API Key):
    curl "http://localhost:3333/chat_stream?message=用OpenAI的gpt-4告诉我明天的天气&platform=openai&model=gpt-4"
    服务器将返回LLM的回复,其中可能包含工具调用的结果。

信息

分类

AI与计算