项目简介
MCP Host 是一个基于 Node.js 开发的应用程序,它本身并不是一个 MCP 服务器,而是一个 MCP 服务器的主机。你可以把它看作是一个 MCP 服务器的“管理器”或“网关”。
主要作用:
- 连接和管理多个 MCP 服务器: MCP Host 可以同时连接多个独立的 MCP 服务器(例如,分别提供文件系统访问、浏览器控制、GitHub 数据访问等能力的服务器)。
- 统一的 HTTP API 接口: 它对外提供统一的 HTTP API,客户端(如 LLM 应用)只需要通过这一个入口,就可以访问和调用所有连接的 MCP 服务器提供的工具和资源,无需关心底层连接了多少个 MCP 服务器,以及它们是如何通信的。
- 简化 MCP 服务器的使用和测试: 通过 MCP Host,你可以更方便地测试和运行多个 MCP 服务器,并快速集成到你的 LLM 应用中。
你可以将 MCP Host 理解为一个“MCP 服务器的聚合器”或 “API 网关”,它站在客户端和多个 MCP 服务器之间,负责请求转发、数据聚合,并提供统一的访问入口。
主要功能点:
- 多服务器连接管理: 支持同时连接多个 MCP 服务器,并可以动态更新和管理这些连接。
- 支持 STDIO 和 SSE 传输协议: 兼容基于 STDIO (标准输入输出) 和 SSE (服务器发送事件) 两种传输协议的 MCP 服务器。
- 统一 HTTP API: 提供简洁的 HTTP API,用于获取所有服务器的工具列表、调用指定服务器的工具、获取所有服务器的资源列表、读取指定服务器的资源。
- 动态更新服务器连接: 无需重启 Host 服务,即可通过 API 动态更新服务器连接配置。
安装步骤
推荐方式:直接使用 'npx' 运行 (无需本地构建)
-
确保你的系统已安装 Node.js (>=18) 和 npm。
-
打开终端,执行命令:
npx mcp-host-use这将直接下载并运行 MCP Host,无需本地构建。
本地构建 (如果你需要修改代码或自定义构建)
-
克隆仓库: 在终端中执行命令克隆仓库到本地:
git clone https://github.com/liujilongObject/mcp-host-use.git cd mcp-host-use -
安装依赖: 在项目根目录下执行命令安装项目依赖:
npm install -
运行:
-
开发模式: 用于开发调试,执行命令:
npm run dev -
生产模式: 用于生产环境,先构建,然后运行:
npm run build node dist/index.js或者使用项目自带的 'production_node.exe' (Windows 环境):
production_node.exe dist/index.js
-
服务器配置
MCP Host 需要配置文件 'mcp_servers.config.json' 来知道要连接哪些 MCP 服务器。这个文件需要放在 MCP Host 运行的当前工作目录 下。
配置文件 'mcp_servers.config.json' 格式说明:
{ "mcp_servers": [ { "enabled": true, // 是否启用此服务器连接,true 表示启用,false 表示禁用 "type": "stdio", // 连接类型,'stdio' 或 'sse' "server_name": "server-puppeteer", // 服务器自定义名称,用于在 API 请求中指定服务器 "command": "npx", // 启动 MCP 服务器的命令 (当 type 为 'stdio' 时必填) "args": [ // 启动命令的参数 (当 type 为 'stdio' 时必填) "-y", "@modelcontextprotocol/server-puppeteer" ], "env": { // (可选) 环境变量配置,传递给 MCP 服务器进程 // "YOUR_ENV_KEY": "YOUR_ENV_VALUE" }, "cwd": "./" // (可选) 工作目录,默认为 MCP Host 的工作目录 }, { "enabled": true, "type": "sse", "server_name": "server-everything-sse", "sse_url": "http://localhost:3001/sse" // SSE 服务器的 URL (当 type 为 'sse' 时必填) }, { "enabled": true, "type": "stdio", "server_name": "github", "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>" // GitHub 服务器可能需要的 token 等环境变量 } } // 可以配置更多服务器... ] }
配置要点:
- 'mcp_servers' 数组: 包含要连接的 MCP 服务器配置信息。
- 'enabled': 控制是否启用该服务器连接。你可以通过修改这个字段来动态启用/禁用服务器,然后调用更新连接 API 生效。
- 'type': 指定 MCP 服务器的传输协议类型,'stdio' 或 'sse'。
- 'stdio': 通过标准输入输出 (STDIO) 与 MCP 服务器通信。需要配置 'command' 和 'args' 来启动服务器进程。
- 'sse': 通过服务器发送事件 (SSE) 与 MCP 服务器通信。需要配置 'sse_url',指向 SSE 服务器的地址。
- 'server_name': 为每个 MCP 服务器指定一个唯一的名称。这个名称会在 HTTP API 中使用,用于指定要访问哪个服务器的工具或资源。
- 'command' 和 'args': 当 'type' 为 'stdio' 时,用于配置启动 MCP 服务器的命令和参数。 例如,可以使用 'npx' 或 'uvx' 来运行基于 Node.js 或 Python 的 MCP 服务器。
- 'sse_url': 当 'type' 为 'sse' 时,配置 SSE 服务器的 URL。
- 'env': (可选) 配置环境变量,这些环境变量会传递给 'stdio' 类型的 MCP 服务器进程。例如,一些 MCP 服务器可能需要 API 密钥或 token 等环境变量。
- 'cwd': (可选) 配置 'stdio' 类型 MCP 服务器进程的工作目录。
重要提示:
- 确保 'mcp_servers.config.json' 文件存在于 MCP Host 运行的目录。
- 根据你要连接的 MCP 服务器类型 (stdio 或 sse),正确配置 'type'、'command'/'args' 或 'sse_url'。
- 如果是 'stdio' 类型,确保 'command' 配置的命令 (例如 'npx' 或 'uvx') 在你的系统环境中可以执行。
- 如果 MCP 服务器需要环境变量 (例如 token),请在 'env' 字段中配置。
基本使用方法
-
启动 MCP Host: 按照上面的安装步骤启动 MCP Host 服务。默认情况下,它会监听 'http://localhost:17925'。
-
配置 'mcp_servers.config.json': 根据你的需求,配置要连接的 MCP 服务器信息。确保配置文件放在 MCP Host 运行的当前工作目录。
-
使用 HTTP API 访问 MCP 服务器功能:
MCP Host 提供了以下 HTTP API 接口,你可以使用 'curl'、'Postman' 或任何 HTTP 客户端来访问:
-
获取所有服务器的工具列表:
GET http://localhost:17925/api/tools响应示例:
{ "code": 0, "data": [ { "server_name": "server-puppeteer", "tools": [ /* ... server-puppeteer 的工具列表 ... */ ] }, { "server_name": "server-everything-sse", "tools": [ /* ... server-everything-sse 的工具列表 ... */ ] } // ... 更多服务器的工具列表 ] } -
调用指定服务器的工具:
POST http://localhost:17925/api/tools/toolCall Content-Type: application/json { "server_name": "server-everything-sse", // 指定服务器名称 "tool_name": "add", // 要调用的工具名称 "tool_args": { // 工具参数 "a": 1, "b": 20 } }响应示例:
{ "code": 0, "data": { "result": "工具执行结果" } } -
获取所有服务器的资源列表:
GET http://localhost:17925/api/resources响应示例:
{ "code": 0, "data": [ { "server_name": "server-puppeteer", "resources": [ /* ... server-puppeteer 的资源列表 ... */ ] }, { "server_name": "server-everything-sse", "resources": [ /* ... server-everything-sse 的资源列表 ... */ ] } // ... 更多服务器的资源列表 ] } -
读取指定服务器的资源:
POST http://localhost:17925/api/resources/read Content-Type: application/json { "server_name": "server-everything-sse", // 指定服务器名称 "resource_uri": "test://static/resource/1" // 要读取的资源 URI }响应示例:
{ "code": 0, "data": [ { "mimeType": "text/plain", "text": "this is a test resource" } ] } -
更新服务器连接配置:
POST http://localhost:17925/api/connections/update Content-Type: application/json调用此 API 后,MCP Host 会重新读取 'mcp_servers.config.json' 文件,并根据最新的配置更新服务器连接。
-
总结:
MCP Host 作为一个 MCP 服务器的管理工具,可以帮助你更方便地使用和集成多个 MCP 服务器。你只需要配置好 'mcp_servers.config.json' 文件,然后通过 MCP Host 提供的 HTTP API,就可以统一访问所有连接的 MCP 服务器的功能。这对于构建复杂的、需要多种上下文信息和能力的 LLM 应用非常有用。
信息
分类
开发者工具