项目简介
MCP Copilot是一个基于Model Context Protocol (MCP) 构建的元服务器。它不直接提供资源或工具,而是作为代理连接到其他多个MCP服务器,并将这些服务器的能力聚合起来。它提供路由功能,帮助LLM客户端发现最相关的服务器和工具,并能代表客户端调用这些工具,从而实现能力的扩展和统一管理。
主要功能点
- 多服务器连接管理:能够根据配置文件连接并管理多个独立的MCP服务器实例。
- 服务器能力发现:连接后获取所有托管服务器的能力信息(如可用工具)。
- 智能路由:提供工具允许LLM根据用户查询路由到最相关的MCP服务器或具体的工具。
- 跨服务器工具执行:提供工具允许LLM指定服务器名称和工具名称,由Copilot代理调用目标服务器上的工具。
- 上下文统一入口:为LLM客户端提供一个单一的访问点,无需直接管理多个服务器连接。
安装步骤
- 克隆仓库:将项目代码克隆到本地。
git clone https://github.com/tshu-w/mcp-copilot.git cd mcp-copilot - 创建并激活虚拟环境:推荐使用Python虚拟环境。
python -m venv .venv source .venv/bin/activate # macOS/Linux # .venv\Scripts\activate # Windows - 安装依赖:安装项目的Python依赖。
pip install -e . - 准备其他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客户端调用:
-
'router-servers': 根据用户查询,查找并推荐最可能相关的MCP服务器。
- 输入: 用户查询字符串 ('query'),可选的返回数量 ('top_k')。
- 输出: 可能相关的MCP服务器列表及其描述。
- 用途: LLM在处理新用户请求时,第一步可以用此工具判断哪些领域的服务器可能有用。
-
'route-tools': 根据用户查询,查找并推荐最可能相关的工具,无论它们位于哪个服务器上。
- 输入: 用户查询字符串 ('query'),可选的返回数量 ('top_k')。
- 输出: 可能相关的工具列表,包含工具所属服务器名称。
- 用途: LLM知道要完成的任务类型,但不确定哪个服务器有相应的工具时使用。
-
'execute-tool': 在指定的MCP服务器上执行一个特定的工具。
- 输入: 目标服务器名称 ('server_name'),要执行的工具名称 ('tool_name'),以及该工具所需的参数字典 ('params')。
- 输出: 被调用工具的执行结果。
- 用途: LLM在通过路由工具确定了要使用的服务器和工具后,调用此工具来实际执行操作。
LLM客户端应首先使用 'router-servers' 或 'route-tools' 来发现能力,然后使用 'execute-tool' 来调用具体功能。
信息
分类
AI与计算