MCP 访问点 是一个轻量级协议转换网关工具,旨在在传统 HTTP 服务与 MCP(模型上下文协议)客户端之间建立通信桥梁。它使 MCP 客户端能够直接与现有的 HTTP 服务进行交互,而无需对服务器端接口进行任何修改。

该项目基于 Pingora 构建——这是一个超高性能的网关代理库,能够支持大规模请求代理服务。Pingora 已被用于构建处理 Cloudflare 平台核心流量的服务,多年来一直以每秒超过 4000 万次请求的速度提供服务。它已成为支持 Cloudflare 平台上大量流量的技术基石。
此模式允许像 Cursor Desktop 这样的客户端通过 SSE 与远程 HTTP 服务器通信,即使这些服务器本身不支持 SSE 协议。
127.0.0.1:8090api.example.comMCP 访问点,这两个服务可以转换为 MCP 服务,而无需进行任何代码修改。服务 1 和 服务 2 进行通信。MCP 访问点会自动区分 MCP 请求并将其转发到相应的后端服务。graph LR
A["Cursor Desktop"] <--> |SSE| B["MCP 访问点"]
A2["其他桌面"] <--> |可流式传输的 HTTP| B["MCP 访问点"]
B <--> |http 127.0.0.1:8090| C1["现有 API 服务器"]
B <--> |https//api.example.com| C2["现有 API 服务器"]
style A2 fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style B fill:#e6e6af,stroke:#333,color:black,stroke-width:2px
style C1 fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
style C2 fill:#e6ffd6,stroke:#333,color:black,stroke-width:2px
目前支持 SSE 和 可流式传输的 HTTP 协议:
✅ 可流式传输的 HTTP(无状态) 2025-03-26
ip:port/mcpip:port/api/{service_id}/mcp✅ SSE 2024-11-05
ip:port/sseip:port/api/{service_id}/sse使用 IP:PORT/sse 对应 SSE
使用 IP:PORT/mcp 对应 可流式传输的 HTTP
# 从源码安装
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
cargo run -- -c config.yaml
# 使用 inspector 调试(先启动服务)
npx @modelcontextprotocol/inspector node build/index.js
# 访问 http://127.0.0.1:6274/
# 选择 "SSE" 并输入 0.0.0.0:8080/sse,然后点击连接
# 或者选择 "可流式传输的 HTTP" 并输入 0.0.0.0:8080/mcp
MCP 访问网关支持多租户,每个租户可以配置多个 MCP 服务,可通过以下方式访问:
/api/{mcp-service-id}/sse(对于 SSE)/api/{mcp-service-id}/mcp(对于可流式传输的 HTTP)示例配置:
# config.yaml 示例(支持多个服务)
mcps:
- id: service-1 # 通过 /api/service-1/sse 或 /api/service-1/mcp 访问
... # 服务配置
- id: service-2 # 通过 /api/service-2/sse 或 /api/service-2/mcp 访问
... # 服务配置
- id: service-3 # 通过 /api/service-3/sse 或 /api/service-3/mcp 访问
... # 服务配置
要同时访问所有服务,请使用:
0.0.0.0:8080/mcp(可流式传输的 HTTP)0.0.0.0:8080/sse(SSE)-c config.yaml
-c(或 --config)指定配置文件路径(config.yaml)。配置文件支持多租户,允许独立配置上游服务和路由规则,适用于每个 MCP 服务。关键配置项包括:
mcps - MCP 服务列表
id: 唯一的服务标识符,用于生成访问路径upstream_id: 关联的上游服务 IDpath: OpenAPI 规范文件路径。支持本地文件(例如 config/openapi.json)和远程 HTTP/HTTPS URL(例如 https://petstore.swagger.io/v2/swagger.json)。支持 JSON 和 YAML 格式。routes: 自定义路由配置(可选)upstream: 上游服务特定配置(可选)upstreams - 上游服务配置
id: 上游服务 IDnodes: 后端节点地址及其权重type: 负载均衡算法(roundrobin/random/ip_hash)scheme: 上游协议(http/https)pass_host: HTTP Host 头处理upstream_host: 覆盖 Host 头值完整配置示例:
# config.yaml 示例(支持多个服务)
mcps:
- id: service-1 # 唯一标识符,可通过 /api/service-1/sse 或 /api/service-1/mcp 访问
upstream_id: 1
path: config/openapi_for_demo_patch1.json # 本地 OpenAPI 规范路径
- id: service-2 # 唯一标识符
upstream_id: 2
path: https://petstore.swagger.io/v2/swagger.json # 远程 OpenAPI 规范
- id: service-3
upstream_id: 3
routes: # 自定义路由
- id: 1
operation_id: get_weather
uri: /points/{latitude},{longitude}
method: GET
meta:
name: 获取天气
description: 通过坐标获取天气信息
inputSchema: # 可选输入验证
type: object
required:
- latitude
- longitude
properties:
latitude:
type: number
minimum: -90
maximum: 90
longitude:
type: number
minimum: -180
maximum: 180
upstreams: # 必需的上游配置
- id: 1
headers: # 发送到上游服务的头部
X-API-Key: "12345-abcdef" # API 密钥
Authorization: "Bearer token123" # Bearer 令牌
User-Agent: "MyApp/1.0" # 用户代理
Accept: "application/json" # 接受头部
nodes: # 后端节点(IP 或域名)
"127.0.0.1:8090": 1 # 格式:地址:权重
- id: 2
nodes:
"127.0.0.1:8091": 1
- id: 3
nodes:
"api.weather.gov": 1
type: roundrobin # 负载均衡算法
scheme: https # 协议
pass_host: rewrite # Host 头处理
upstream_host: api.weather.gov # 覆盖 Host
要运行 MCP 访问网关并使用配置文件:
cargo run -- -c config.yaml
# 注意:替换 /path/to/your/config.yaml 为实际路径
docker run -d --name mcp-access-point --rm \
-p 8080:8080 \
-e port=8080 \
-v /path/to/your/config.yaml:/app/config/config.yaml \
ghcr.io/sxhxliang/mcp-access-point:main
# 克隆仓库
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
# 构建镜像
docker build -t liangshihua/mcp-access-point:latest .
# 使用环境变量(服务在主机上运行)
# 注意:替换 /path/to/your/config.yaml 为实际路径
docker run -d --name mcp-access-point --rm \
-p 8080:8080 \
-e port=8080 \
-v /path/to/your/config.yaml:/app/config/config.yaml \
liangshihua/mcp-access-point:latest
port: MCP 访问点监听端口(默认:8080)示例场景: 当基于 MCP 的 AI 客户端需要与遗留 HTTP 微服务交互时,MCP 访问网关充当中间件层,实现无缝协议转换。
感谢 @limcheekin 编写了一篇带有实际示例的文章:https://limcheekin.medium.com/building-your-first-no-code-mcp-server-the-fabric-integration-story-90da58cdbe1f
MCP 访问点现在支持通过 RESTful 管理 API 动态配置管理,允许您在不重启服务的情况下更新配置。
在您的 config.yaml 中添加以下内容以启用管理 API:
access_point:
admin:
address: "127.0.0.1:8081" # 管理 API 监听地址
api_key: "your-api-key" # 可选的 API 密钥用于身份验证
GET /admin/resources - 获取资源摘要和统计信息GET /admin/resources/{type} - 列出特定类型的全部资源GET /admin/resources/{type}/{id} - 获取特定资源POST /admin/resources/{type}/{id} - 创建新资源PUT /admin/resources/{type}/{id} - 更新现有资源DELETE /admin/resources/{type}/{id} - 删除资源POST /admin/validate/{type}/{id} - 验证资源配置POST /admin/batch - 执行批量操作POST /admin/reload/{type} - 重新加载特定资源类型POST /admin/reload/config - 从文件重新加载完整配置(默认为 config.yaml)。可选 JSON 体:{ "config_path": "path/to/config.yaml" }upstreams - 后端服务器配置services - 服务定义routes - 路由规则global_rules - 全局插件规则mcp_services - MCP 服务配置ssls - SSL 证书配置curl -X POST http://localhost:8081/admin/resources/upstreams/my-upstream \
-H "Content-Type: application/json" \
-d '{
"id": "my-upstream",
"type": "RoundRobin",
"nodes": ["127.0.0.1:8001", "127.0.0.1:8002"],
"timeout": {
"connect": 5,
"read": 10,
"send": 10
}
}'
curl -X POST http://localhost:8081/admin/resources/services/my-service \
-H "Content-Type: application/json" \
-d '{
"id": "my-service",
"upstream_id": "my-upstream",
"hosts": ["api.example.com"]
}'
curl -X POST http://localhost:8081/admin/batch \
-H "Content-Type: application/json" \
-d '{
"dry_run": false,
"operations": [
{
"operation_type": "create",
"resource_type": "upstreams",
"resource_id": "batch-upstream",
"data": {
"id": "batch-upstream",
"type": "Random",
"nodes": ["192.168.1.10:8080"]
}
},
{
"operation_type": "create",
"resource_type": "services",
"resource_id": "batch-service",
"data": {
"id": "batch-service",
"upstream_id": "batch-upstream"
}
}
]
}'
curl http://localhost:8081/admin/resources
GET /admin 提供内置仪表板 (static/admin_dashboard.html)。
mcp_services,2) ssls,3) global_rules,4) routes,5) upstreams,6) services。count 和从 API 响应中提取的格式化的 last_updated。# 使用默认 config.yaml
curl -X POST http://localhost:8081/admin/reload/config \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key"
# 或指定不同的配置路径
curl -X POST http://localhost:8081/admin/reload/config \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key" \
-d '{"config_path": "./config.yaml"}'
使用提供的测试脚本来验证管理 API 功能:
# 将测试脚本设为可执行
chmod +x test-admin-api.sh
# 运行全面的 API 测试