接入外部 MCP 服务器
入口:控制台 → MCP 服务器(仅 admin,仅数据库)。
本章讲怎么在控制台添加、列表、查看详情、编辑、删除外部 MCP 服务器。快速上手跑通一个示例见 MCP 代理外部工具,配置参考(工具 ACL、上下文预算、REST bridge)见 MCP 配置。
添加 MCP 服务器
控制台 → MCP 服务器 → 新建:
| 字段 | 说明 |
|---|---|
| 名称 | 唯一,作工具前缀,正则 ^[a-z0-9][a-z0-9_-]*$ |
| 描述 | UI 展示用 |
| 传输 transport | streamable_http(默认)/ sse |
| 连接类型 connection_type | stateful(有状态)/ stateless(无状态)/ rest_bridge(REST 桥接) |
| 端点 endpoint | 上游工具服务器 URL |
| 认证头 auth_header | 上游 Authorization 头(如 Bearer ...) |
| 额外头 extra_headers | 额外请求头 |
| 标签 tags | 粗粒度 ACL 过滤 |
| 优先级 priority | 0–999,小=高优先;上下文预算裁剪时按此 |
| 空闲超时 idle_timeout_secs | 默认 300 |
| 延迟加载 defer_loading | 首次调用才加载工具 schema |
| 健康检查 health_check | path / interval(默认 60s)/ timeout(默认 5s) |
| 并发上限 max_concurrency | 每访问密钥对该服务器的并发上限 |
| 限流 rate_limit | requests_per_second / tokens_per_minute |
| extra_config | REST bridge 需在此提供简化的 REST 规范 JSON({title, version, operations[]}) |
| 启用 |
仅 HTTP / SSE / REST-bridge 三种传输,不支持 stdio / command / args / env / OAuth。
连接类型选择
| 类型 | 适用场景 |
|---|---|
stateless(默认) | 无状态工具服务器,每次请求独立 |
stateful | 有状态工具服务器,维护会话 |
rest_bridge | 把普通 REST API 包装成 MCP 工具 |
延迟加载
设 defer_loading = true 时,服务器在首次 tools/list 或 tools/call 时才加载工具 schema。适用于:
- 工具服务器数量多但大部分不常用
- 减少启动时间
健康检查
配置后,网关定期探测工具服务器是否存活:
{
"health_check": {
"path": "/health",
"interval_secs": 60,
"timeout_secs": 5
}
}不健康的服务器的工具会从 tools/list 中排除,连续调用失败时触发临时熔断保护。
REST bridge
把普通 REST API 包装成 MCP 工具:connection_type = rest_bridge,在 extra_config 提供简化的 REST 规范 JSON({title, version, operations[]}),网关按 spec 自动生成工具定义。
注意:规范是简化的操作列表({title, version, operations[]}),不是标准 OpenAPI 3.x 的 paths 形态,也不支持 Swagger 2.0。
控制台 → MCP 服务器 → 新建,连接类型选 REST Bridge,在 spec 编辑器贴入简化规范(每个 operation 含 operation_id / description / method / path / parameters_schema),例如:
{
"title": "Weather API",
"version": "1.0.0",
"operations": [
{
"operation_id": "getForecast",
"description": "Get weather forecast",
"method": "GET",
"path": "/forecast",
"parameters_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
]
}配置后,客户端可通过 tools/call 调用 weather-api.getForecast,网关自动把 MCP 调用翻译为 REST 请求。字段细节见 MCP 配置。
列表与详情
- 列表:显示所有 MCP 服务器,含名称、传输、连接类型、端点、启用状态、健康状态
- 详情:点某行展开详情,看完整配置、健康检查结果、最近调用统计
编辑与删除
- 编辑:列表 → 编辑。所有字段可改。改 endpoint 后下次调用生效。
- 删除:列表 → 删除。彻底移除。若某密钥组的
mcp_tool_acl引用该服务器的工具,需先改 ACL 再删。
完整案例:聚合两个工具服务器并按组授权
1. 添加 MCP 服务器
{
"name": "github",
"transport": "streamable_http",
"endpoint": "http://github-mcp:3001",
"tags": ["dev-tools"]
}{
"name": "slack",
"transport": "streamable_http",
"endpoint": "http://slack-mcp:3002",
"tags": ["communication"]
}2. 配密钥组
{
"name": "dev-team",
"models": ["*"],
"mcp_tool_acl": {
"allowed_tools": ["github.*", "slack.send-message", "slack.list-channels"],
"denied_tools": ["slack.delete-channel", "slack.kick-user"]
}
}3. 配访问密钥
{
"api_key": "sk-dev-team-key",
"name": "dev-alice",
"group": "dev-team"
}4. 客户端调用
POST http://localhost:7890/mcp
Authorization: Bearer sk-dev-team-key
{"jsonrpc": "2.0", "method": "tools/call", "params": {
"name": "github.list_repos",
"arguments": {"owner": "octocat"}
}}常见问题
Q:工具列表里看不到刚加的服务器的工具? 检查:① 服务器是否启用;② defer_loading 是否开了(首次调用才加载 schema);③ 密钥组的 mcp_tool_acl 是否把它过滤掉了。
Q:REST bridge 报 spec 不支持? 规范是简化的 {title, version, operations[]} 结构,不是标准 OpenAPI 3.x 的 paths 形态,也不支持 Swagger 2.0。按 operations[] 重写 spec。
Q:工具调用经常超时? 调该服务器的 max_concurrency(并发上限)和 rate_limit,或检查上游工具服务器本身的响应速度。每个 MCP 服务器有独立熔断保护(连续失败会临时 Open)。
Q:怎么让某个密钥组完全不能用 MCP? 密钥组 MCP 子页签里 allowed_tools 留空、allowed_tags 留空,或不勾选任何工具。
Q:MCP 服务器挂了会影响其他工具吗? 不会。每个服务器有独立的连接管理和熔断保护。一个服务器不可用时,其工具从列表中排除,其他服务器正常工作。
Q:tools/search 是什么? 内置的元工具,用 BM25 关键词在所有可用工具中搜索。工具数量多(50+)时用于快速定位目标工具。
下一步:MCP 代理外部工具 quickstart 看快速跑通示例;MCP 配置 看工具 ACL、上下文预算、REST bridge 字段细节;端点 · 认证 · 协议互通 看完整端点清单。
