该项目是一个Model Context Protocol (MCP) 代理服务器。它的主要作用是作为一个中心枢纽,连接到其他(后端)的MCP服务器,并将这些后端服务器提供的能力(如工具、资源、提示)聚合成一个单一的接口,然后供大型语言模型(LLM)客户端连接使用。这样,LLM客户端只需连接到这个代理服务器,就能访问所有已配置的后端MCP服务器的能力。

主要功能点

  • 能力聚合: 无缝地将来自多个后端MCP服务器的工具、资源和提示整合成一个统一的服务列表,呈现给LLM客户端。
  • 请求智能路由: 接收LLM客户端发来的请求(如调用工具、访问资源、获取提示),并根据请求的目标自动将其转发到正确的后端服务器。
  • 细粒度工具控制: 提供通过可选的Web管理界面,对聚合的工具进行精细控制,可以方便地启用或禁用特定工具,甚至修改它们呈现给LLM客户端的名称和描述。
  • Web管理界面 (可选): 提供一个直观的网页界面,用于管理代理服务器的配置、后端服务器的连接设置,以及便捷地执行和监控后台服务器的安装过程。
  • 多种协议支持: 自身可以作为标准的Stdio MCP服务器或SSE MCP服务器运行,兼容不同的LLM客户端连接方式。

安装步骤

你可以选择直接安装 Node.js 版本或使用 Docker。

  1. 直接安装 (需要 Node.js 环境)

    • 确保你的系统已安装 Node.js (推荐 LTS 版本) 和 npm 或 yarn。
    • 克隆项目的 GitHub 仓库到本地。
    • 进入项目目录。
    • 运行依赖安装命令:'npm install' 或 'yarn install'。
    • 运行构建命令:'npm run build'。这会将 TypeScript 代码编译到 'build' 目录。
  2. 使用 Docker (推荐)

    • 确保你的系统已安装 Docker。
    • 拉取项目的预构建 Docker 镜像。推荐使用最新标准镜像:'docker pull ghcr.io/ptbsare/mcp-proxy-server/mcp-proxy-server:latest'。如果你需要包含常用预装服务器和 Playwright 的镜像,可以使用:'docker pull ghcr.io/ptbsare/mcp-proxy-server/mcp-proxy-server:latest-bundled-mcpservers-playwright'。
    • 创建一个本地目录用于存放代理服务器的配置文件(例如 '~/mcp-proxy-config')。
    • 在该配置文件目录中,创建一个名为 'mcp_server.json' 的文件,用于定义代理要连接的后端MCP服务器(参考下面的配置示例)。你也可以可选地创建 'tool_config.json' 文件来自定义工具设置。
    • 运行 Docker 容器。你需要挂载本地配置文件目录到容器内的 '/app/config',并映射端口。例如:
      docker run -d \
        -p 3663:3663 \
        -e PORT=3663 \
        -e ENABLE_ADMIN_UI=true \
        -e ADMIN_USERNAME=myadmin \
        -e ADMIN_PASSWORD=yoursupersecretpassword \
        -e MCP_PROXY_SSE_ALLOWED_KEYS="clientkey1" \
        -v /path/on/host/to/my_config:/app/config \
        --name mcp-proxy \
        ghcr.io/ptbsare/mcp-proxy-server/mcp-proxy-server:latest
      请替换 '/path/on/host/to/my_config' 为你本地配置文件目录的实际路径,并根据需要设置环境变量(如管理界面用户名、密码、SSE认证密钥等)。

服务器配置 (供 MCP 客户端连接使用)

这个代理服务器本身运行起来后,就成为一个LLM客户端可以连接的MCP服务器。你需要告诉你的MCP客户端(如 Claude Desktop, VS Code 插件等)如何连接到这个代理服务器。

MCP客户端的配置通常是一个JSON文件,其中包含一个 'mcpServers' 对象,对象里的每个键代表一个你要连接的MCP服务器实例。以下是配置这个代理服务器的示例:

  • 如果代理服务器以 Stdio 模式运行: 在你的MCP客户端配置文件(例如 'claude_desktop_config.json')中添加如下条目:

    {
      "mcpServers": {
        "mcp-proxy-instance": {
          "name": "我的MCP代理 (Stdio)",
          // command:启动MCP代理服务器的命令及其路径
          // 请确保这里的路径正确指向你安装/构建后的 index.js 文件
          "command": "/path/to/mcp-proxy-server/build/index.js",
          // args:传递给MCP代理服务器启动命令的参数列表(通常不需要额外参数)
          "args": [],
          // env:为MCP代理服务器进程设置的环境变量(可选)
          // 例如,你可以通过 TOOLS_FOLDER 设置代理服务器用来安装后端Stdio服务器的默认目录
          "env": {
             "NODE_ENV": "production",
             "TOOLS_FOLDER": "/opt/mcp_backends"
          }
        }
        // ... 其他你可能直接连接的MCP服务器 ...
      }
    }

    请将 '/path/to/mcp-proxy-server/build/index.js' 替换为你系统中该文件的实际路径。

  • 如果代理服务器以 SSE 模式运行: 在你的MCP客户端配置文件中添加如下条目:

    {
      "mcpServers": {
        "mcp-proxy-sse-instance": {
          "name": "我的MCP代理 (SSE)",
          // url:MCP代理服务器的SSE接口地址
          // 默认情况下,如果运行在SSE模式(如Docker或 dev:sse 脚本),端口是 3663,路径是 /sse
          "url": "http://localhost:3663/sse",
          // 如果你的MCP代理服务器配置了API Key认证 (通过 MCP_PROXY_SSE_ALLOWED_KEYS 环境变量),
          // 你需要在 URL 中附加 ?key=<你的客户端API_Key>,例如:
          // "url": "http://localhost:3663/sse?key=mysecretclientkey"
          // 部分客户端也可能支持单独的 apiKey 字段用于SSE认证
          // "apiKey": "mysecretclientkey" // 请参考你的客户端文档
        }
        // ... 其他你可能直接连接的MCP服务器 ...
      }
    }

    请将 'http://localhost:3663/sse' 替换为你实际运行的代理服务器地址和端口。

基本使用方法

  1. 确保你的MCP代理服务器已经在 Stdio 或 SSE 模式下成功启动。
  2. 根据代理服务器的运行模式,按照上面的说明配置你的LLM客户端(例如 Claude Desktop)。
  3. 启动你的LLM客户端。它将连接到你配置的代理服务器。
  4. 代理服务器会连接你在其 'config/mcp_server.json' 文件中配置的所有活跃的后端MCP服务器,并发现它们提供的所有工具、资源和提示。
  5. LLM客户端现在应该能够看到并使用所有这些聚合起来的能力,如同它们是由一个单一的服务器提供的一样。
  6. (可选)如果启用了Web管理界面,你可以通过浏览器访问 'http://localhost:你的端口/admin' (默认端口 3663) 来查看、添加、编辑和删除后端服务器配置,以及管理工具的可见性和属性。

信息

分类

AI与计算