项目简介

MCP Copilot是一个基于Model Context Protocol (MCP) 构建的元服务器。它不直接提供资源或工具,而是作为代理连接到其他多个MCP服务器,并将这些服务器的能力聚合起来。它提供路由功能,帮助LLM客户端发现最相关的服务器和工具,并能代表客户端调用这些工具,从而实现能力的扩展和统一管理。

主要功能点

  • 多服务器连接管理:能够根据配置文件连接并管理多个独立的MCP服务器实例。
  • 服务器能力发现:连接后获取所有托管服务器的能力信息(如可用工具)。
  • 智能路由:提供工具允许LLM根据用户查询路由到最相关的MCP服务器或具体的工具。
  • 跨服务器工具执行:提供工具允许LLM指定服务器名称和工具名称,由Copilot代理调用目标服务器上的工具。
  • 上下文统一入口:为LLM客户端提供一个单一的访问点,无需直接管理多个服务器连接。

安装步骤

  1. 克隆仓库:将项目代码克隆到本地。
    git clone https://github.com/tshu-w/mcp-copilot.git
    cd mcp-copilot
  2. 创建并激活虚拟环境:推荐使用Python虚拟环境。
    python -m venv .venv
    source .venv/bin/activate   # macOS/Linux
    # .venv\Scripts\activate   # Windows
  3. 安装依赖:安装项目的Python依赖。
    pip install -e .
  4. 准备其他MCP服务器:MCP Copilot需要连接到其他MCP服务器才能工作。请根据您的需求安装并准备其他MCP服务器(例如,使用npm或uvx安装 '@modelcontextprotocol/server-everything', 'mcp-server-fetch' 等)。这些服务器需要在Copilot启动前可被启动或已在运行。

服务器配置

MCP Copilot需要一个配置文件来知道要连接哪些MCP服务器。默认配置文件路径是 '~/.config/mcp-server-copilot/config.json'。如果该文件不存在,项目会使用一个包含一些示例服务器的默认配置。

配置文件是一个JSON对象,其核心是 'mcpServers' 字段,它是一个字典,键是您为服务器指定的名称,值是该服务器的连接配置:

{
  "mcpServers": {
    "server_name_1": {
      "command": "your_server_command_1",
      "args": ["arg1", "arg2"],
      "env": {"ENV_VAR": "value"}
    },
    "server_name_2": {
      "url": "http://localhost:port/sse",
      "headers": {"Authorization": "Bearer token"}
    }
    // ... 其他服务器配置
  }
}
  • 'server_name': 您给这个MCP服务器起的名字,LLM在调用Copilot的执行工具时会使用这个名字。
  • 'command': (可选) 如果服务器是通过启动进程连接 (Stdio transport),这里指定启动命令。
  • 'args': (可选) 启动命令的参数列表。
  • 'env': (可选) 启动进程所需的环境变量字典。
  • 'url': (可选) 如果服务器是通过网络连接 (SSE transport),这里指定服务器的URL。
  • 'headers': (可选) 连接网络服务器所需的HTTP头部字典。

注意:'command' 或 'url' 至少需要提供一个。

对于LLM客户端如何连接到MCP Copilot本身:

MCP Copilot默认通过 Stdio transport 运行。LLM客户端可以通过运行以下命令与MCP Copilot建立连接:

  • 连接方式: Stdio
  • 启动命令: 'python -m mcp_server_copilot'
  • 命令参数: 无(或 '-c /path/to/your/config.json' 如果您使用自定义配置)

LLM客户端在配置其MCP连接时,需要提供上述的启动命令和参数。

基本使用方法

启动MCP Copilot服务器:

python -m mcp_server_copilot

或者使用自定义配置文件:

python -m mcp_server_copilot -c /path/to/your/config.json

服务器启动后,会尝试连接配置中的所有其他MCP服务器,并暴露以下工具供LLM客户端调用:

  1. 'router-servers': 根据用户查询,查找并推荐最可能相关的MCP服务器。

    • 输入: 用户查询字符串 ('query'),可选的返回数量 ('top_k')。
    • 输出: 可能相关的MCP服务器列表及其描述。
    • 用途: LLM在处理新用户请求时,第一步可以用此工具判断哪些领域的服务器可能有用。
  2. 'route-tools': 根据用户查询,查找并推荐最可能相关的工具,无论它们位于哪个服务器上。

    • 输入: 用户查询字符串 ('query'),可选的返回数量 ('top_k')。
    • 输出: 可能相关的工具列表,包含工具所属服务器名称。
    • 用途: LLM知道要完成的任务类型,但不确定哪个服务器有相应的工具时使用。
  3. 'execute-tool': 在指定的MCP服务器上执行一个特定的工具。

    • 输入: 目标服务器名称 ('server_name'),要执行的工具名称 ('tool_name'),以及该工具所需的参数字典 ('params')。
    • 输出: 被调用工具的执行结果。
    • 用途: LLM在通过路由工具确定了要使用的服务器和工具后,调用此工具来实际执行操作。

LLM客户端应首先使用 'router-servers' 或 'route-tools' 来发现能力,然后使用 'execute-tool' 来调用具体功能。

信息

分类

AI与计算