项目简介

MCP服务聚合网关 ('mcp-one') 是一个“一体化”的MCP服务器入口,它不像传统的MCP服务器那样直接提供资源、工具或Prompt,而是作为代理和管理器,连接到您配置的多个后台MCP服务器。它将这些后台服务器的能力(主要是工具)聚合起来,并通过自身的MCP接口统一暴露给LLM客户端。这样,LLM客户端只需要连接到一个'mcp-one'实例,就能访问其背后管理的众多MCP服务的工具能力。

主要功能点

  • 连接和管理后台MCP服务: 支持通过配置文件定义需要连接和管理的多个MCP服务器实例。
  • 能力聚合: 自动发现后台MCP服务提供的工具,并将它们聚合到自身的可用工具列表中。
  • 统一接口: 作为单一的MCP服务器暴露接口,LLM客户端只需连接到此网关即可调用后台聚合的工具。
  • 请求代理: 当LLM客户端调用聚合的工具时,'mcp-one'会将请求转发(代理)到相应的后台MCP服务器进行处理。
  • 支持多种传输: 支持通过SSE和Stdio协议连接后台MCP服务。
  • 配置文件管理: 通过简单的YAML配置文件管理所有后台MCP服务的注册信息。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/MCPHubCloud/mcp-one.git
    cd mcp-one
  2. 构建可执行文件:
    make build
    构建成功后,可执行文件 'mcp-one' 会生成在 '_output/' 目录下。
  3. 使用Docker构建和运行 (可选):
    make dockerbuild
    docker run -it --rm -p 9090:9090 localhost/mcp-one:latest
    此命令会构建一个Docker镜像并在容器中运行,将容器的9090端口映射到主机的9090端口。您需要提供配置文件(通过挂载卷等方式)。

服务器配置

'mcp-one' 主要通过一个YAML配置文件 ('mcpserver-config.yaml') 来注册和管理后台MCP服务器。您需要创建或修改这个文件来指定'mcp-one'需要连接哪些后台MCP服务。

以下是 'mcpserver-config.yaml' 文件的示例结构及参数说明:

mcpServers:
  # 您可以定义多个后台MCP服务器,每个服务器用一个唯一的名称作为键
  my-fetch-server: # 后台服务器的唯一名称,用于标识
    enable: true # 是否启用此后台服务器 (布尔值: true/false)
    name: mcp-fetch # 后台MCP服务器的名称 (字符串)
    transType: sse # 连接此后台服务器使用的传输协议类型 (字符串: "sse" 或 "stdio")
    # 如果 transType 是 "sse"
    url: "http://localhost:8080/sse" # 后台SSE MCP服务器的URL (字符串)
    # 如果 transType 是 "stdio"
    # command: "/path/to/your/mcp-server" # 后台Stdio MCP服务器的可执行文件路径 (字符串)
    # env: # 后台Stdio进程的环境变量列表 (字符串数组)
    #   - "ENV_VAR=value"
    # args: # 启动后台Stdio进程的命令行参数列表 (字符串数组)
    #   - "--some-arg"
    #   - "another-value"

  my-time-server: # 另一个后台服务器示例
    enable: true
    name: mcp-timeserver
    transType: stdio
    command: "./time-mcp-server" # 假设 time-mcp-server 是另一个Stdio MCP服务器的可执行文件
    args:
      - "--format"
      - "iso8601"

给MCP客户端的配置信息:

MCP客户端连接 'mcp-one' 时,只需要知道 'mcp-one' 自身作为MCP服务器的启动命令及参数。假设您将 'mcp-one' 可执行文件放在 './_output/' 目录下,配置文件放在 './' 目录下,并计划在 9090 端口启动,则给MCP客户端的配置信息大致如下:

{
  "name": "mcp-one-gateway", # 您可以给网关起一个客户端能识别的名称
  "command": "./_output/mcp-one", # mcp-one 可执行文件的路径
  "args": [
    "-c", "mcpserver-config.yaml", # 指定 mcp-one 的配置文件
    "--baseurl", "0.0.0.0:9090" # 指定 mcp-one 监听的地址和端口
  ]
}

重要提示: 实际的 'command' 和 'args' 需要根据您存放 'mcp-one' 可执行文件和配置文件的位置以及您希望监听的地址端口进行调整。某些MCP客户端可能直接支持配置URL连接SSE服务,此时您只需提供 'mcp-one' 启动后监听的SSE URL(例如:'http://localhost:9090/sse')。

基本使用方法

  1. 准备您的 'mcpserver-config.yaml' 文件,在其中配置您希望 'mcp-one' 管理的后台MCP服务器列表。可以参考仓库中的 'examples/mcpserver-config.yaml' 文件。
  2. 确保您配置的后台MCP服务器已经在运行或者'mcp-one'有权限启动它们(如果是Stdio类型)。
  3. 运行 'mcp-one' 可执行文件,指定配置文件路径和监听地址:
    ./_output/mcp-one -c ./mcpserver-config.yaml --baseurl 0.0.0.0:9090
    (请根据实际文件路径和希望监听的地址调整命令)
  4. 'mcp-one' 启动后,会尝试连接并初始化配置的后台MCP服务器,并聚合它们的工具。
  5. 将 'mcp-one' 作为MCP服务器配置到您的LLM客户端中,使用 'mcp-one' 监听的地址(例如 'http://localhost:9090/sse')。客户端现在应该能够发现并调用通过 'mcp-one' 聚合的工具了。注意,'mcp-one' 会在聚合的工具名前加上 'mcpone@' 前缀以区分来源。

信息

分类

AI与计算