MCP代理服务
一个基于FastAPI的网关,用于验证传入请求并将它们代理到配置好的模型上下文协议(MCP)服务器。该服务为每个MCP提供一个稳定的接口 /mcp/{name} 命名空间,自动转发请求并暴露上游的OpenAPI模式。
特点/特性
- 对所有入站请求进行静态承载令牌认证。
- 可配置的MCP连接器支持远程HTTP端点、具有内联/文件架构的本地HTTP服务器,以及通过命令启动的MCP工具。
- 通过MCP实现每个的自动OpenAPI发现
GET /mcp/{name}. - 透明请求代理到
/mcp/{name}/{path}对于标准的HTTP方法。 - 通过API密钥或任意自定义标头进行上游身份验证。
- 由……支持的、可投入生产的Dockerfile和docker-compose配置
uv根据可用CPU自动调整工作节点数量。 - 全面的 pytest 测试套件,强制要求达到 80% 以上的覆盖率。
要求
- Python 3.11及以上版本
uv用于依赖管理和执行
安装
uv sync这会在(当前环境中)创建一个本地虚拟环境 .venv 包含所有依赖项(包括测试工具)。
配置
该服务从(某处)读取配置 config.yaml 默认情况下,或者从由(某路径)引用的路径中 MCP_PROXY_CONFIG 环境变量。参见 config.example.yaml 以下是一个完整示例。一个最小配置看起来像这样:
incoming_auth:
token: "example-token"
mcps:
my-remote-mcp:
name: my-remote-mcp
description: Remote MCP server
transport:
type: http
base_url: "https://remote.example"
openapi_path: "/openapi.json"
auth:
type: api_key
header_name: "X-API-Key"
value: "secret"
my-local-mcp:
name: my-local-mcp
description: Local MCP served over HTTP
transport:
type: local-http
base_url: "http://localhost:9001"
schema_path: "./schemas/local-openapi.yaml"
auth:
type: custom_headers
headers:
X-LOCAL-TOKEN: "token"
my-playwright-mcp:
name: my-playwright-mcp
description: Playwright MCP launched from a command
transport:
type: command
command: "npx"
args:
- "@playwright/mcp@latest"
- "--isolated"
base_url: "http://127.0.0.1:8900"
startup_timeout: 60即将进行的身份验证
所有请求必须包含一个 Authorization: Bearer 头部与配置的令牌匹配。
上游认证
每个MCP可以定义以下认证策略之一:
api_key注入一个具有指定名称/值的头部。custom_headers将任意头部信息合并到每个代理请求中。none或省略:转发调用时无需额外认证。
MCP运输
该 transport.type 字段选择代理如何连接到MCP:
http连接到现有的远程HTTP端点并从其中获取模式openapi_path。local-http与……相同http,但允许供应schema_path或者inline_schema未连接到网络。command启动一个本地进程(例如。npx @playwright/mcp@latest)并将其请求代理到它所暴露的HTTP服务上base_url可选schema_path/inline_schema受到尊敬,而startup_timeout控制准备就绪轮询。提供env或者working_dir在需要时。
运行服务
本地执行
uv run mcp-proxy-service --host 0.0.0.0 --port 8000Docker(注:Docker是一个开源的应用容器引擎,用于开发、交付和运行应用程序。)
使用提供的 Dockerfile 进行构建和运行:
docker compose up --build该compose文件挂载 config.yaml 装入容器中作为 /app/config.yaml; 复制或改编 config.example.yaml 在创建您自己的配置时。Docker 镜像会自动为每个检测到的 CPU 启动一个工作进程。要覆盖此行为,请通过设置(相关参数)来实现 MCP_PROXY_WORKERS。
使用方法
GET /mcp/{name}– 获取指定MCP的缓存OpenAPI模式。/{method} /mcp/{name}/{path}– 将请求代理到上游MCP服务器,同时保留方法、查询参数和请求体。
测试
执行完整的测试套件(覆盖率强制要求至少达到80%):
uv run pytest开发说明
- 该项目遵循
src/布局并使用 Pydantic 模型进行配置验证。 - 连接器逻辑存在于
src/mcp_proxy/connectors.py并且设计为可扩展性。 - 在引入新功能或行为变更时,更新相关文档和配置示例。
