项目简介
'mcp-proxy-hub' 是一个MCP(Model Context Protocol)代理服务器,它能够连接到多个下游的MCP服务器,并将这些服务器提供的资源、工具和Prompt进行聚合。通过一个统一的MCP接口,'mcp-proxy-hub' 将这些聚合后的能力提供给LLM客户端(如Claude Desktop)使用。这简化了LLM客户端直接管理多个MCP服务器连接的复杂性。
主要功能点
- 多服务器连接与管理: 支持连接到多个基于Stdio或SSE协议的下游MCP服务器。
- 能力统一聚合: 将所有连接的下游服务器提供的资源、工具和Prompt整合到一个统一的接口下。
- 智能请求路由: 根据请求类型和标识(如资源URI、工具名称、Prompt名称),将来自LLM客户端的请求自动转发到正确的下游服务器处理。
- 工具筛选与重命名: 收集所有下游服务器的工具,并允许您根据配置选择性地暴露、隐藏或重命名这些工具。
- 自定义组合工具: 支持创建新的“自定义工具”,这些工具可以在内部协调调用一个或多个下游服务器的现有工具。
- Prompt聚合与内置功能: 收集所有下游服务器的Prompt,并提供统一的列表。此外,内置了一个特殊的Prompt,允许LLM通过Prompt请求重启一个或所有连接的下游服务器。
安装步骤
- 准备环境: 确保您的系统安装了Node.js(推荐LTS版本)和npm。
- 克隆仓库: 打开终端,运行以下命令克隆项目仓库:
git clone https://github.com/naotaka3/mcp-proxy-hub.git - 进入项目目录:
cd mcp-proxy-hub - 安装依赖:
npm install - 构建项目: 运行构建命令生成可执行文件:
构建完成后,可执行文件将位于 'build/' 目录中。npm run build
服务器配置
'mcp-proxy-hub' 需要一个JSON格式的配置文件(通常命名为 'config.json')来指定要连接哪些下游MCP服务器。您可以复制示例配置文件并进行修改:
cp config.example.json config.json
编辑 'config.json' 文件。其基本结构如下:
{ "mcpServers": { // 在这里配置您要连接的每一个下游MCP服务器 "your_server_name_1": { // 这是连接Stdio类型服务器的配置 // type: "stdio", // 可选,省略或设置为"stdio"表示使用Stdio协议 "command": "/path/to/your/stdio_mcp_server", // **必需**:下游MCP服务器可执行文件的路径或命令 "args": ["--some-arg", "value"], // 可选:传递给下游服务器启动命令的参数列表 "env": { "ENV_VAR_NAME": "value" }, // 可选:为下游服务器进程设置额外的环境变量 "exposedTools": ["tool_alpha", {"original": "tool_beta_raw", "exposed": "tool_beta"}], // 可选:一个字符串数组或对象数组,只暴露指定的工具。对象用于工具重命名。 "hiddenTools": ["tool_gamma"] // 可选:一个字符串数组,隐藏指定的工具。 }, "your_server_name_2": { // 这是连接SSE类型服务器的配置 "type": "sse", // **必需**:指定使用SSE协议 "url": "http://localhost:port/sse/endpoint", // **必需**:下游SSE MCP服务器的URL "exposedTools": ["tool_delta"], // 可选:同上 "hiddenTools": [] // 可选:同上 } // 可以添加更多下游服务器配置... }, "tools": { // 可选:在这里定义自定义组合工具 "my_composite_tool": { "description": "这个工具组合了下游服务器的几个功能。", // **必需**:自定义工具的描述 "subtools": { // 定义这个组合工具可以调用哪些下游服务器的工具 "your_server_name_1": { // 引用上面mcpServers中定义的服务器名称 "tools": [ { "name": "tool_alpha", "description": "调用server_name_1的tool_alpha" } // **必需**:下游工具的名称 // description是可选的,会添加到组合工具的描述中 ] }, "your_server_name_2": { "tools": [ { "name": "tool_delta" } // 如果不提供描述,会尝试从下游服务器获取 ] } // 可以添加更多子工具定义... } } // 可以定义更多自定义工具... } }
您可以通过设置环境变量来覆盖默认配置:
- 'MCP_PROXY_CONFIG_PATH': 指定 'config.json' 文件的绝对路径。
- 'MCP_PROXY_LOG_DIRECTORY_PATH': 指定日志文件存放的目录(默认为 '/tmp/mcp-proxy-hub')。
- 'MCP_PROXY_LOG_LEVEL': 设置日志级别,可以是 "debug" 或 "info"(默认为 "info")。
- 'PORT': SSE模式下,服务器监听的端口号(默认为 '3006')。
- 'KEEP_SERVER_OPEN': SSE模式下,客户端断开连接后是否保持服务器进程运行,设置为 '1' 启用(默认关闭)。
基本使用方法
- 根据上述步骤完成项目的安装、构建和配置。
- 启动 'mcp-proxy-hub' 服务器:
- Stdio模式: 适用于作为子进程由LLM客户端启动的情况。在项目根目录运行:
或者直接运行构建好的文件:npm run startnode build/index.js - SSE模式: 适用于作为独立服务在后台运行,允许多个客户端连接的情况。在项目根目录运行:
或者直接运行构建好的文件:npm run start:ssenode build/sse.js
- Stdio模式: 适用于作为子进程由LLM客户端启动的情况。在项目根目录运行:
- 配置您的LLM客户端: 打开您的LLM客户端(例如Claude Desktop)的MCP服务器配置界面。添加一个新的MCP服务器配置,指向您启动的 'mcp-proxy-hub'。
例如,对于Claude Desktop(MacOS),编辑 '~/Library/Application Support/Claude/claude_desktop_config.json' 文件,在 'mcpServers' 对象中添加一项:
注意: '/path/to/your/mcp-proxy-hub/' 应该替换为您实际的项目路径。'MCP_PROXY_CONFIG_PATH' 也应是您 'config.json' 文件的绝对路径。{ "mcpServers": { "mcp-proxy-hub-alias": { // 您可以给这个代理服务器起一个别名 "command": "/path/to/your/mcp-proxy-hub/build/index.js", // 指向构建好的主文件路径 (如果是SSE模式则指向 build/sse.js) // 如果使用了自定义 config.json 路径,需要在这里指定环境变量 "env": { "MCP_PROXY_CONFIG_PATH": "/absolute/path/to/your/config.json", "KEEP_SERVER_OPEN": "1" // 如果在SSE模式下希望保持服务器运行 } } // 您可能已经配置的其他MCP服务器... } } - 保存客户端配置并重启客户端。现在,您的LLM客户端应该能够通过 'mcp-proxy-hub' 发现并使用所有下游MCP服务器聚合后的功能了。
信息
分类
AI与计算