项目简介
该项目实现了一个 MCP 网关和注册中心,旨在解决企业在使用多个 MCP 服务器时面临的集中访问和目录管理问题。它作为一个单一入口点,通过一个反向代理(使用 Nginx)将来自 AI 代理等 MCP 客户端的请求路由到不同的后端 MCP 服务器。同时,它提供了一个注册中心功能,用于发现、注册和管理这些 MCP 服务器。
主要功能点
- 服务注册与管理: 通过 Web 界面或 API 注册新的 MCP 服务,支持编辑服务信息。
- Web 用户界面: 提供直观的界面用于管理服务、查看状态和监控健康状况。
- 身份认证: 内置安全的登录系统用于访问 Web 界面和管理 API。
- 健康检查: 定期检查已启用 MCP 服务的健康状态,并在 UI 中显示。
- 实时状态更新: 使用 WebSocket 向客户端实时推送服务健康状态、工具数量等信息。
- 动态 Nginx 配置: 根据注册服务的启用/禁用状态自动生成 Nginx 反向代理配置文件。
- 工具发现: 自动从健康的 MCP 服务获取并显示其提供的工具列表(名称、描述、参数架构)。
- 启用/禁用服务: 方便地在 UI 中控制服务的可用性,动态更新 Nginx 配置。
安装步骤
- 克隆仓库:
git clone https://github.com/aarora79/mcp-gateway.git cd mcp-gateway - 设置 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 - 安装并配置 Nginx: 按照指引安装 Nginx,并配置其主配置文件 ('nginx.conf') 包含本项目生成的 '/path/to/your/mcp-gateway/registry/nginx_mcp_revproxy.conf' 文件(例如,在 'http' 块中使用 'include' 指令)。确保 Nginx 能够监听标准 HTTP/HTTPS 端口(如 80 或 443)。
- 配置环境变量: 在 'mcp-gateway/registry' 目录下创建 '.env' 文件,设置 'SECRET_KEY'(用于会话安全)、'ADMIN_USER' 和 'ADMIN_PASSWORD'(用于登录 UI)。
cp registry/env.template registry/.env # 编辑 .env 文件,设置 SECRET_KEY, ADMIN_USER, ADMIN_PASSWORD - 启动示例 MCP 服务器 (可选但推荐): 如果需要测试,可以启动项目中自带的示例 MCP 服务器。
./start_all_servers.sh - 启动 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 - 重载或重启 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 配置。
基本使用方法
- 访问 Registry UI: 在浏览器中打开您配置的 Nginx 服务器地址(例如 'http://<your-nginx-server-ip>' 或 'https://<your-domain>')。您将被重定向到登录页面。
- 登录: 使用 '.env' 文件中配置的管理员用户名和密码登录。
- 管理服务:
- 在 UI 列表中查看已注册的服务及其健康状态。
- 使用“Register New Service”按钮注册新的 MCP 服务,填写上述配置中的信息(path 和 proxy_pass_url 是关键)。
- 点击服务的开关按钮启用或禁用服务。启用后,如果服务健康,网关将为其生成有效的 Nginx 代理规则。
- 点击刷新图标触发服务的健康检查和工具列表更新。
- 点击工具数量图标查看发现的工具详情。
- 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与计算