项目简介

该项目实现了一个 MCP 网关和注册中心,旨在解决企业在使用多个 MCP 服务器时面临的集中访问和目录管理问题。它作为一个单一入口点,通过一个反向代理(使用 Nginx)将来自 AI 代理等 MCP 客户端的请求路由到不同的后端 MCP 服务器。同时,它提供了一个注册中心功能,用于发现、注册和管理这些 MCP 服务器。

主要功能点

  • 服务注册与管理: 通过 Web 界面或 API 注册新的 MCP 服务,支持编辑服务信息。
  • Web 用户界面: 提供直观的界面用于管理服务、查看状态和监控健康状况。
  • 身份认证: 内置安全的登录系统用于访问 Web 界面和管理 API。
  • 健康检查: 定期检查已启用 MCP 服务的健康状态,并在 UI 中显示。
  • 实时状态更新: 使用 WebSocket 向客户端实时推送服务健康状态、工具数量等信息。
  • 动态 Nginx 配置: 根据注册服务的启用/禁用状态自动生成 Nginx 反向代理配置文件。
  • 工具发现: 自动从健康的 MCP 服务获取并显示其提供的工具列表(名称、描述、参数架构)。
  • 启用/禁用服务: 方便地在 UI 中控制服务的可用性,动态更新 Nginx 配置。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/aarora79/mcp-gateway.git
    cd mcp-gateway
  2. 设置 Python 环境:
    # 使用 uv (推荐)
    uv venv --python 3.12 && source .venv/bin/activate && uv pip install --requirement pyproject.toml
    # 或者使用 venv 和 pip
    # python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
  3. 安装并配置 Nginx: 按照指引安装 Nginx,并配置其主配置文件 ('nginx.conf') 包含本项目生成的 '/path/to/your/mcp-gateway/registry/nginx_mcp_revproxy.conf' 文件(例如,在 'http' 块中使用 'include' 指令)。确保 Nginx 能够监听标准 HTTP/HTTPS 端口(如 80 或 443)。
  4. 配置环境变量: 在 'mcp-gateway/registry' 目录下创建 '.env' 文件,设置 'SECRET_KEY'(用于会话安全)、'ADMIN_USER' 和 'ADMIN_PASSWORD'(用于登录 UI)。
    cp registry/env.template registry/.env
    # 编辑 .env 文件,设置 SECRET_KEY, ADMIN_USER, ADMIN_PASSWORD
  5. 启动示例 MCP 服务器 (可选但推荐): 如果需要测试,可以启动项目中自带的示例 MCP 服务器。
    ./start_all_servers.sh
  6. 启动 MCP 注册中心 (FastAPI 应用): 确保虚拟环境已激活。
    uv run uvicorn registry.main:app --reload --host 0.0.0.0 --port 7860
    # 或者使用 uvicorn (确保虚拟环境激活)
    # uvicorn registry.main:app --reload --host 0.0.0.0 --port 7860
  7. 重载或重启 Nginx: 使新的 Nginx 配置生效。
    sudo nginx -s reload

服务器配置 (Registry 配置示例)

Registry 通过读取位于 'registry/servers/' 目录下的 JSON 文件来获取 MCP 服务定义。每个文件定义一个 MCP 服务在 Registry 中的信息。以下是一个示例 JSON 结构:

{
  "server_name": "我的示例服务",
  "description": "这是一个提供示例功能的 MCP 服务。",
  "path": "/my-service", // MCP 客户端通过网关访问此服务的路径
  "proxy_pass_url": "http://localhost:8001", // 网关将请求代理到的后端 MCP 服务器地址
  "tags": ["示例", "测试"],
  "num_tools": 1, // (由Registry自动更新)
  "num_stars": 0, // (用户可手动设置/编辑)
  "is_python": true, // (用户可手动设置/编辑)
  "license": "MIT", // (用户可手动设置/编辑)
  "tool_list": [] // (由Registry自动更新)
}
  • 'server_name': 在 Registry UI 中显示的服务名称。
  • 'description': 服务的简要描述。
  • 'path': MCP 客户端通过网关地址访问此特定服务的 URL 路径(例如,如果网关部署在 'https://my-gateway.com',且此服务的路径是 '/my-service',则客户端应连接到 'https://my-gateway.com/my-service/')。这是 MCP 客户端配置连接信息时需要指定的重要参数。
  • 'proxy_pass_url': 这是 Registry 读取后用于在 Nginx 配置中生成代理规则的后端 MCP 服务器实际地址。MCP 客户端通常不需要知道这个地址,它们只需要知道网关的地址和 'path'。
  • 'tags': 服务的标签列表。
  • 'num_tools': Registry 从后端 MCP 服务发现的工具数量,此字段通常由 Registry 自动更新。
  • 'num_stars', 'is_python', 'license': 服务的其他元数据,可在 UI 中编辑或手动添加到 JSON 文件中。
  • 'tool_list': Registry 从后端 MCP 服务发现的工具详细信息列表,此字段由 Registry 自动更新。

当您在 Registry UI 中注册或编辑服务时,这些信息会被保存在对应的 JSON 文件中,并用于动态更新 Nginx 配置。

基本使用方法

  1. 访问 Registry UI: 在浏览器中打开您配置的 Nginx 服务器地址(例如 'http://<your-nginx-server-ip>' 或 'https://<your-domain>')。您将被重定向到登录页面。
  2. 登录: 使用 '.env' 文件中配置的管理员用户名和密码登录。
  3. 管理服务:
    • 在 UI 列表中查看已注册的服务及其健康状态。
    • 使用“Register New Service”按钮注册新的 MCP 服务,填写上述配置中的信息(path 和 proxy_pass_url 是关键)。
    • 点击服务的开关按钮启用或禁用服务。启用后,如果服务健康,网关将为其生成有效的 Nginx 代理规则。
    • 点击刷新图标触发服务的健康检查和工具列表更新。
    • 点击工具数量图标查看发现的工具详情。
  4. MCP 客户端使用: LLM 客户端或 AI 代理不需要直接连接到 Registry 的 FastAPI 端口(默认 7860)或后端 MCP 服务器的端口(如 8001, 8002)。它们应该连接到 网关(Nginx)的地址,并指定要访问的服务的 路径 ('path')。例如,如果网关的地址是 'https://my-gateway.com',并且 Registry 中注册了一个路径为 '/weather' 的服务,那么 MCP 客户端应配置连接到 'https://my-gateway.com/weather/'。客户端将通过这个地址与后端的实际天气 MCP 服务器进行通信。

关键词

MCP服务管理, API网关, 微服务代理, AI上下文集成, 工具注册发现

信息

分类

AI与计算