项目简介

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' 运行 (无需本地构建)

  1. 确保你的系统已安装 Node.js (>=18) 和 npm。

  2. 打开终端,执行命令:

    npx mcp-host-use

    这将直接下载并运行 MCP Host,无需本地构建。

本地构建 (如果你需要修改代码或自定义构建)

  1. 克隆仓库: 在终端中执行命令克隆仓库到本地:

    git clone https://github.com/liujilongObject/mcp-host-use.git
    cd mcp-host-use
  2. 安装依赖: 在项目根目录下执行命令安装项目依赖:

    npm install
  3. 运行:

    • 开发模式: 用于开发调试,执行命令:

      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' 字段中配置。

基本使用方法

  1. 启动 MCP Host: 按照上面的安装步骤启动 MCP Host 服务。默认情况下,它会监听 'http://localhost:17925'。

  2. 配置 'mcp_servers.config.json': 根据你的需求,配置要连接的 MCP 服务器信息。确保配置文件放在 MCP Host 运行的当前工作目录。

  3. 使用 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 应用非常有用。

信息

分类

开发者工具