审查并批准 MCP 服务器
MCP 服务器注册表条目为 Agent 提供由网关管理的工具面,其后端可以是上游 MCP 服务器或 REST API。发布条目后,Agent 可以使用调用方提供的参数调用远程操作。因此,控制面将注册与发布分离:每个 MCP 服务器都有一个 approval_status,只有已批准的服务器才会发送到网关。
等待审查或已被拒绝的服务器完全不会出现在网关上。即使调用方 API Key 明确把其工具加入白名单,该服务器也不会出现在 tools/list 中,工具也无法调用。服务器必须先获批准才能发布;获批后,enabled 标志控制服务器能否提供工具。
这种分离允许成员提议 MCP 服务器,但不能自行发布。它还可以防止不同配置沿用既有批准:变更要么来自拥有批准权限的人,要么等待审查。提议的变更等待审查时,已上线服务器仍会提供其 已批准配置,因此审查不会造成停机。
前置条件
开始前,请准备以下环境:
对于 AISIX Enterprise,AISIX Enterprise 快速入门会创建组织、环境和具有写入权限的管理员 Token。如需申请 AISIX Cloud 访问权限,请联系 API7。导出示例使用的值:
# AISIX_CP 包含 /api,末尾不带斜杠
# 本地 AISIX Enterprise 快速入门使用 http://localhost:8080/api
export AISIX_CP="YOUR_AISIX_CONTROL_PLANE_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
审查工作流的工作原理
approval_status | 网关上的状态 | 进入该状态的操作 |
|---|---|---|
pending_review | 不投射 | 提交服务器或修改提案。 |
approved | 投射到 allowed_environments | 批准服务器,或通过 POST /mcp_servers 注册服务器。 |
rejected | 不投射 | 拒绝服务器。 |
对已上线服务器提出变更时,其状态不会离开 approved。变更会在 单独的 pending_change 字段中等待审查,其他字段仍描述网关当前提供的配置。请参阅对已上线服务器提交变更。
此功能推出前注册的服务器会被视为已批准,因此升级不会中断工具流量。
配置审查者权限
批准和注册使用相同权限:对 mcp_servers 的 write 权限。所有者和管理员拥有该权限。拥有此权限的用户本来就能直接发布服务器,因此额外的审查不会增加控制。这也允许只有一名管理员的组织批准自己的提交。
可以分离的是另一项权限:对 mcp_server_submissions 的 write 权限。拥有该权限、但没有 mcp_servers write 权限的自定义角色,可以提交服务器、修改提案,以及对已上线服务器提出变更,但不能发布任何内容。应将此角色授予负责集成自身工具的团队。
提交服务器以供审查
通过 POST /mcp_server_submissions 提交服务器。请求体与 POST /mcp_servers 相同:
curl -sS -X POST "$AISIX_CP/mcp_server_submissions" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "runbooks",
"url": "https://mcp.example.com/runbooks",
"auth_type": "none",
"allowed_environments": ["'"$ENV_ID"'"]
}'
服务器已经注册,但尚未发布:
{
"mcp_server": {
"id": "6f64f080-17d7-44d9-b995-6a353e71f6bc",
"name": "runbooks",
"url": "https://mcp.example.com/runbooks",
"enabled": true,
"allowed_environments": ["YOUR_ENVIRONMENT_ID"],
"approval_status": "pending_review",
"submitted_at": "2026-07-29T09:30:00Z"
}
}
❶ enabled 和 allowed_environments 描述获批后将生效的配置。
❷ pending_review 使服务器保持未发布状态,因此任何网关都无法访问它。
在控制台中,MCP 服务器页面会在对应行显示 待审批 徽标,页面顶部还会显示等待审查的服务器数量。
审查待处理服务器
通过读取 GET /mcp_servers 返回的 approval_status 列出等待审查的服务器:
curl -sS "$AISIX_CP/mcp_servers" \
-H "Authorization: Bearer $AISIX_TOKEN" \
| jq '.data[] | select(.approval_status == "pending_review") | {id, name, url}'
批准前请审查服务器:
- 确认名称不是现有服务器名称的近似仿冒,且 URL 指向预期上游。
- 检查
allowed_environments和enabled,确认获批后服务器会在哪里可用。 - 检查身份认证模式,并通过你的提交流程验证凭证来源。存储的凭证只写不可读,无法从 API 或控制台查看;如果无法确定来源,请通过批准者路由替换凭证。
- 对于 OpenAPI 后端服务器,请审查生成的工具名称和存储的文档。请参阅在 AISIX Enterprise 和 AISIX Cloud 中查看生成的工具。
批准服务器后,它会发布到 allowed_environments 指定的环境:
export MCP_SERVER_ID="YOUR_MCP_SERVER_ID"
curl -sS -X POST "$AISIX_CP/mcp_servers/$MCP_SERVER_ID/approve" \
-H "Authorization: Bearer $AISIX_TOKEN"
也可以附带原因拒绝服务器。备注会随服务器返回,提交者可以据此修改:
curl -sS -X POST "$AISIX_CP/mcp_servers/$MCP_SERVER_ID/reject" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"review_notes": "Not on the trusted registry. Use the internal mirror."}'
批准已经批准的服务器或拒绝已经拒绝的服务器会返回 400。带有暂存变更的服务器属于例外,请参阅对已上线服务器提交变更。
修改待处理提交
PATCH /mcp_server_submissions/{id} 会修正提交内容并将其重新放回审查队列:
curl -sS -X PATCH "$AISIX_CP/mcp_server_submissions/$MCP_SERVER_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://mcp.internal.example.com/runbooks"}'
对于尚未发布的服务器,变更会应用到记录上,服务器继续留在队列中。对于已上线服务器,相同调用会暂存变更,而不会立即应用。
对已上线服务器提交变更
只拥有 mcp_server_submissions write 权限的角色不能发布,因此它对已上线服务器的修改不能自行生效;但变更等待审查期间也不能让服务器下线,所以 PATCH /mcp_server_submissions/{id} 会暂存该变更:
curl -sS -X PATCH "$AISIX_CP/mcp_server_submissions/$MCP_SERVER_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://mcp.internal.example.com/runbooks"}'
响应会返回 服务器当前状态,并在旁边显示提案:
{
"mcp_server": {
"id": "6f64f080-17d7-44d9-b995-6a353e71f6bc",
"name": "runbooks",
"url": "https://mcp.example.com/runbooks",
"approval_status": "approved",
"pending_change": {
"changes": { "url": "https://mcp.internal.example.com/runbooks" },
"submitted_by": "YOUR_USER_ID",
"submitted_at": "2026-07-30T09:30:00Z"
}
}
}
❶ pending_change 以外的字段描述网关当前提供的配置。整个审查窗口内,Agent 仍可列出并调用服务器的现有工具。
❷ pending_change 包含提议的替换值和提交元数据。
提案会在提交时验证,无效变更会立即被拒绝,而不会等到批准阶段。提议的凭证与正式凭证一样会加密存储且不会返回;pending_change.secret_set 表示提案设置了凭证。同一时间只保留一个提案,再次修改会替换它。