跳到主要内容

审查并批准 MCP 服务器

MCP 服务器注册表条目为 Agent 提供由网关管理的工具面,其后端可以是上游 MCP 服务器或 REST API。发布条目后,Agent 可以使用调用方提供的参数调用远程操作。因此,AISIX Cloud 将注册与发布分离:每个 MCP 服务器都有一个 approval_status,只有已批准的服务器才会发送到网关。

等待审查或已被拒绝的服务器完全不会出现在网关上。即使调用方 API Key 明确把其工具加入白名单,该服务器也不会出现在 tools/list 中,工具也无法调用。服务器必须先获批准才能发布;获批后,enabled 标志控制服务器能否提供工具。

这种分离允许成员提议 MCP 服务器,但不能自行发布。它还可以防止不同配置沿用既有批准:变更要么来自拥有批准权限的人,要么等待审查。提议的变更等待审查时,已上线服务器仍会提供其已批准配置,因此审查不会造成停机。

前置条件

开始前,请准备以下环境:

  • AISIX Cloud 组织和环境。
  • 用于审查和批准示例的写入作用域管理员 Token。
  • cURLjq

对于本地部署,AISIX Cloud 快速入门会创建组织、环境和写入作用域管理员 Token。导出示例使用的值:

# AISIX_CP 包含 /api,末尾不带斜杠。
# 本地部署快速入门使用 http://localhost:8080/api。
export AISIX_CP="http://localhost:8080/api"
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_serverswrite 权限。Owner 和 Admin 拥有该权限。拥有此权限的用户本来就能直接发布服务器,因此额外的审查不会增加控制。这也允许只有一名管理员的组织批准自己的提交。

可以分离的是另一项权限:对 mcp_server_submissionswrite 权限。拥有该权限、但没有 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"
}
}

enabledallowed_environments 描述获批后将生效的配置。

pending_review 使服务器保持未发布状态,因此任何网关都无法访问它。

在控制台中,MCP 服务器页面会在对应行显示 Pending review 徽标,页面顶部还会显示等待审查的服务器数量。

审查待处理服务器

通过读取 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_environmentsenabled,确认获批后服务器会在哪里可用。
  • 检查身份认证模式,并通过你的提交流程验证凭证来源。存储的凭证只写不可读,无法从 API 或控制台查看;如果无法确定来源,请通过批准者路由替换凭证。
  • 对于 OpenAPI 后端服务器,请审查生成的工具名称和存储的文档。请参阅在 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 表示提案设置了凭证。同一时间只保留一个提案,再次修改会替换它。

审查已上线服务器的变更

批准操作会在一个步骤中应用并发布暂存变更:

curl -sS -X POST "$AISIX_CP/mcp_servers/$MCP_SERVER_ID/approve" \
-H "Authorization: Bearer $AISIX_TOKEN"

批准时会再次检查提案指定的环境。如果某个环境在等待期间被删除,变更会被拒绝,而不会只应用一部分。

拒绝操作会丢弃提案。服务器保持 approved 并继续提供原有配置,网关不会发生任何变化:

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": "Point it at the internal mirror instead."}'

在控制台中,带有暂存变更的记录会显示变更涉及哪些字段。状态筛选器的 Awaiting review 选项会同时列出未发布的提交和等待变更审查的已上线服务器。

以批准者身份更新已上线服务器

PATCH /mcp_servers/{id} 需要 mcp_servers write 权限,与批准服务器的权限相同。通过该端点进行的编辑本身就是一次发布。服务器保持已批准状态,控制面会投射新配置,无需让现有配置下线等待另一次审查。批准者因此可以轮换上游凭证,而无需先撤回服务器。

是否视为新审查取决于变更的字段。修改以下任一字段都会更新 reviewed_at。通过用户会话发出的请求还会把 reviewed_by 设置为该用户;管理员 Token 操作则不包含此字段。

  • name:Agent 用来寻址工具的命名空间
  • url:上游本身
  • transport
  • auth_typesecretclient_idtoken_urlscopes:凭证及其提交位置
  • allowed_environments:服务器公开到哪些环境
  • OpenAPI 后端服务器上的 spec_content / spec_urlapi_key_header:工具面

enabledtimeout_ms 是已审查配置中的运维参数。修改它们不构成新审查,因此不会改变 reviewed_byreviewed_at

缩小 allowed_environments 后,异步投射到达各网关时,服务器会从不再列出的每个环境中撤回。

仅拥有 mcp_server_submissions write 权限的角色不能使用该端点;其变更会进入审查队列。请参阅对已上线服务器提交变更。如需让已上线服务器退出网关,请拒绝该服务器。

撤销批准

拒绝没有暂存变更的已批准服务器,会撤销服务器本身的批准:服务器从所有正在提供服务的环境中撤回,调用方将失去其工具。当上游不再可信时使用此操作。

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": "Upstream credential compromised."}'

撤销会异步投射到网关,无需重启网关。如需彻底移除注册项,请删除服务器。

拒绝带有暂存变更的服务器时,会先丢弃该变更。要撤销此类服务器,需要调用两次:第一次丢弃提案,第二次撤回服务器。

审计记录

此工作流中的每次变更都会记录在组织审计日志中,包括时间以及适用时的服务器变更前后状态。用户会话操作包含执行用户;管理员 Token 操作不包含用户 ID。

操作记录时机
submit提交服务器进行审查,或对已上线服务器提出变更。
create直接注册并发布服务器。
approve批准服务器,或应用暂存变更。
reject拒绝服务器、撤销批准或丢弃暂存变更。
update修改服务器配置。
delete删除服务器。

可以在控制台的审计日志中查看这些记录,也可以调用 GET /audit_events?resource_type=mcp_server

后续步骤

你现在已经了解 AISIX Cloud 如何把 MCP 服务器提交与发布分开。使用以下指南直接注册服务器或治理调用方访问: