限流和预算
对于 MCP 流量,调用方 API Key 仍是流量控制边界。MCP 工具调用与模型流量共享该 Key 的请求和并发限制,但不消耗模型 Token。在 AISIX Cloud 中,它们还受覆盖同一调用方 API Key 的预算约束。
调用方 API Key 还可以为其访问的每个 MCP 服务器单独设置限额。这样,Agent 在一个服务器上循环调用时,不会耗尽同一 Key 访问其他服务器所需的限额。请在 resources.yaml 或 AISIX Cloud 中配置这些限额,然后在 MCP 路径上验证行为。预算仅在 AISIX Cloud 中可用,始终作用于整个 Key,且没有按服务器设置。
前置条件
开始前,请准备以下环境:
- 对于 AISIX Cloud,准备一个环境、一把调用方 API Key 和写入作用域管理员 Token。对于本地部署,请按照 AISIX Cloud 快速入门操作。若要申请 混合云访问权限,请联系 API7。
- 对于开源 AISIX 网关,在
resources.yaml中准备一把调用方 API Key 和已注册的 MCP 服务器。设置 MCP 网关提供了可运行的配置以及验证和重新加载工作流。 - AISIX Cloud 示例需要 cURL。
控制的应用范围
网关仅对 tools/call 请求应用限流和预算检查。MCP 握手(包括 initialize)以及通过 tools/list 进行的工具发现不会被限流。被限流的调用方仍可连接并列出其 Key 允许的工具,但必须等到窗口重置后才能再次调用工具。
限流或预算拒绝工具调用时,AISIX 会在联系上游 MCP 服务器前返回,并且仍会把被拒绝的调用记录为用量事件。
适用的限流
调用方 API Key 的 rate_limit 对象可以定义请求速率、Token 速率和并发限制。在 MCP 路径上,只有请求速率和并发限制直接计量工具调用:
| 限制 | 是否应用于 MCP 工具调用 | 说明 |
|---|---|---|
rps、rpm、rph、rpd | 是 | 每个 tools/call 在对应窗口内计为一个请求。 |
concurrency | 是 | 每个进行中的工具调用会占用一个并发许可,直到返回。 |
tpm、tpd | 间接应用 | MCP 工具调用不携带模型 Token,因此不会增加 Token 窗口计数。如果调用方 Key 的模型流量已耗尽某个 Token 窗口,该 Key 的工具调用仍会以 HTTP 429 被拒绝,直到窗口重置。 |
每个字段都是可选的。省略字段时,AISIX 不执行对应限制。
请使用请求速率限制或 concurrency 限制 MCP 调用量。仅设置 Token 限制无法约束 MCP 工具调用。若要分别限制每个 MCP 服务器,而不是限制整个调用方,请使用 mcp_rate_limits。
完整的限流字段参考和计数器存储选项,请参阅 API Key 与模型限流。
配置限流
请通过与你的部署对应的管理路径配置限流。
AISIX Cloud
使用 Admin API 配置调用方整体限额,以及可选的单个 MCP 服务器限额。
设置调用方限流
设置 AISIX Cloud 组织的控制面 URL、管理员 Token 和环境 ID:
export AISIX_CP="http://localhost:8080/api"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
使用 rate_limit 更新调用方 API Key。下面的示例让 Key 保持仅用于 MCP,并把它限制为每分钟一次工具调用。PATCH 请求只更改发送的字段,其他 Key 字段保留当前值。请把 YOUR_API_KEY_ID 替换为创建响应中的调用方 API Key ID。
curl -sS -X PATCH "$AISIX_CP/environments/$ENV_ID/api_keys/YOUR_API_KEY_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"allowed_models": [],
"allowed_tools": ["github__*"],
"rate_limit": {
"rpm": 1
}
}'
❶ 当该 Key 仅用于 MCP 流量时,使用空的模型白名单。如果同一 Key 还需要调用模型,请保留现有模型访问权限。
❷ rpm: 1 把此调用方 API Key 限制为每分钟一个请求。
更新后的限额会自动投射到已连接的网关。若要验证限额,请使用此调用方 API Key 连接 MCP 客户端,并在同一分钟内调用允许的工具两次。第一次 tools/call 成功。第二次会在 AISIX 联系上游 MCP 服务器前以 HTTP 429 被拒绝。调用方被限流时,握手和 tools/list 仍可正常工作。
按 MCP 服务 器限制调用方
上面的 rate_limit 是对该 Key 所有行为的统一上限。若要为每个 MCP 服务器设置独立上限,请在调用方 API Key 上添加 mcp_rate_limits。它把 MCP 服务器名称映射到该 Key 对应的服务器限额:
curl -sS -X PATCH "$AISIX_CP/environments/$ENV_ID/api_keys/YOUR_API_KEY_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mcp_rate_limits": {
"github": { "rpm": 100, "concurrency": 5 },
"payments": { "rpm": 10 }
}
}'
❶ 使用 MCP 服务器的注册名称作为限额键;该名称也会为工具添加前缀,例如 github__create_issue。
❷ 不同服务器可以设置不同上限。未在映射中命名的服务器只 受 Key 自身 rate_limit 的约束。
每个命名服务器独立计数,因此调用方耗尽 payments 的限额后仍保留完整的 github 限额,其他调用方访问 payments 的流量也不受影响。工具调用必须通过所有匹配的限制:调用 github 同时计入 github 条目和 Key 的 rate_limit。
mcp_rate_limits 接受与 rate_limit 相同的请求速率和并发字段:rps、rpm、rph、rpd 和 concurrency。它没有 Token 字段,因为 MCP 工具调用不携带可计量的 Token。
PATCH 会替换整个映射,因此一个请求中必须包含要限制的所有服务器。发送 {} 或 null 可移除全部按服务器限制。尚未匹配已注册 MCP 服务器的名称也可接受,并会在同名服务器注册后生效。
重命名 MCP 服务器时,其限额会随之迁移。所有限制该服务器的调用方 API Key 都会继续以新名称限制它。删除服务器会移除这些条目。
工具授权会以相同方式跟随重命名。命名旧服务器的模式会在每把调用方 Key 的 allowed_tools 和 mcp_access 中,以及环境级和团队级访问策略中重写。只匹配形状而非某个服务器的模式(例如单独的 *)保持不变。
删除服务器不会移除其授权。允许授权命名一个不存在的服务器,因此可以在服务器注册前预配 Key。
未命中已注册服务器的条目会继续等待,这正是可以在服务器存在前限制 Key 的原因。控制台会标记此类条目,并提供 Remove 控件。
若要验证,请在窗口内调用该受限服务器上允许的工具,直到超过限额。这些调用会以 HTTP 429 被拒绝,而对其他 MCP 服务器的工具 调用仍会成功。
在控制台中打开 API keys,创建或编辑 Key,然后展开 Per-MCP-server limits,即可为已注册服务器设置相同的值。
开源 AISIX 网关
在 resources.yaml 的调用方条目上设置整体和按服务器限额:
api_keys:
- display_name: mcp-caller
key_env: MCP_CALLER_KEY
allowed_models: []
allowed_tools: ["github__*", "payments__*"]
rate_limit:
rpm: 120
concurrency: 10
mcp_rate_limits:
github:
rpm: 100
concurrency: 5
payments:
rpm: 10
每次工具调用必须同时通过调用方整体限额和匹配的服务器限额。在此示例中,对 github 的调用同时计入 rate_limit 和 mcp_rate_limits.github。未在 mcp_rate_limits 中列出的服务器只受调用方整体限额约束。
若要更改这些限额,请编 辑完整映射、验证资源文件并重新加载网关。有关命令,请参阅设置 MCP 网关。
应用 AISIX Cloud 预算
预算在 AISIX Cloud 控制面中配置,并由 AISIX 网关执行。当覆盖调用方 API Key 的预算耗尽时,网关会在联系上游 MCP 服务器前,以 budget_exceeded 错误拒绝该 Key 的 tools/call 请求。模型路径会执行相同检查。
MCP 工具调用没有 Token 成本,因此本身不会增加基于 Token 的支出。当同一预算同时覆盖模型和工具流量时,如果调用方的模型流量耗尽预算,该调用方的 MCP 工具调用仍会被阻止。有关预算目标、拒绝响应和缓存行为,请参阅预算。
对于开源 AISIX 网关,请使用调用方 API Key 限流治理 MCP 工具调用量。AISIX Cloud 预算配置详情请参阅预算。
后续步骤
你现在已将调用方 API Key 控制应用到 MCP 流量。使用以下指南观察结果,或进一步调整共享的限额和预算设置:
- 可观测性:查看 MCP 工具调用发出的用量事件和指标。
- API Key 与模型限流:查看完整限流字段参考和计数器存储选项。
- 预算:配置预算目标、拒绝行为和缓存设置。