跳到正文

接入外部 MCP 服务器

入口:控制台 → MCP 服务器(仅 admin,仅数据库)。

本章讲怎么在控制台添加、列表、查看详情、编辑、删除外部 MCP 服务器。快速上手跑通一个示例见 MCP 代理外部工具,配置参考(工具 ACL、上下文预算、REST bridge)见 MCP 配置

添加 MCP 服务器

控制台 → MCP 服务器新建

字段说明
名称唯一,作工具前缀,正则 ^[a-z0-9][a-z0-9_-]*$
描述UI 展示用
传输 transportstreamable_http(默认)/ sse
连接类型 connection_typestateful(有状态)/ stateless(无状态)/ rest_bridge(REST 桥接)
端点 endpoint上游工具服务器 URL
认证头 auth_header上游 Authorization 头(如 Bearer ...
额外头 extra_headers额外请求头
标签 tags粗粒度 ACL 过滤
优先级 priority0–999,小=高优先;上下文预算裁剪时按此
空闲超时 idle_timeout_secs默认 300
延迟加载 defer_loading首次调用才加载工具 schema
健康检查 health_checkpath / interval(默认 60s)/ timeout(默认 5s)
并发上限 max_concurrency每访问密钥对该服务器的并发上限
限流 rate_limitrequests_per_second / tokens_per_minute
extra_configREST 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/listtools/call 时才加载工具 schema。适用于:

  • 工具服务器数量多但大部分不常用
  • 减少启动时间

健康检查

配置后,网关定期探测工具服务器是否存活:

json
{
  "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),例如:

json
{
  "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 服务器

json
{
  "name": "github",
  "transport": "streamable_http",
  "endpoint": "http://github-mcp:3001",
  "tags": ["dev-tools"]
}
json
{
  "name": "slack",
  "transport": "streamable_http",
  "endpoint": "http://slack-mcp:3002",
  "tags": ["communication"]
}

2. 配密钥组

json
{
  "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. 配访问密钥

json
{
  "api_key": "sk-dev-team-key",
  "name": "dev-alice",
  "group": "dev-team"
}

4. 客户端调用

json
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 字段细节;端点 · 认证 · 协议互通 看完整端点清单。