跳到主要内容

限流和预算

对于 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 工具调用说明
rpsrpmrphrpd每个 tools/call 在对应窗口内计为一个请求。
concurrency每个进行中的工具调用会占用一个并发许可,直到返回。
tpmtpd间接应用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 相同的请求速率和并发字段:rpsrpmrphrpdconcurrency。它没有 Token 字段,因为 MCP 工具调用不携带可计量的 Token。

PATCH 会替换整个映射,因此一个请求中必须包含要限制的所有服务器。发送 {}null 可移除全部按服务器限制。尚未匹配已注册 MCP 服务器的名称也可接受,并会在同名服务器注册后生效。

重命名 MCP 服务器时,其限额会随之迁移。所有限制该服务器的调用方 API Key 都会继续以新名称限制它。删除服务器会移除这些条目。

工具授权会以相同方式跟随重命名。命名旧服务器的模式会在每把调用方 Key 的 allowed_toolsmcp_access 中,以及环境级和团队级访问策略中重写。只匹配形状而非某个服务器的模式(例如单独的 *)保持不变。

删除服务器不会移除其授权。允许授权命名一个不存在的服务器,因此可以在服务器注册前预配 Key。

未命中已注册服务器的条目会继续等待,这正是可以在服务器存在前限制 Key 的原因。控制台会标记此类条目,并提供 Remove 控件。

若要验证,请在窗口内调用该受限服务器上允许的工具,直到超过限额。这些调用会以 HTTP 429 被拒绝,而对其他 MCP 服务器的工具调用仍会成功。

在控制台中打开 API keys,创建或编辑 Key,然后展开 Per-MCP-server limits,即可为已注册服务器设置相同的值。

开源 AISIX 网关

resources.yaml 的调用方条目上设置整体和按服务器限额:

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_limitmcp_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 与模型限流:查看完整限流字段参考和计数器存储选项。
  • 预算:配置预算目标、拒绝行为和缓存设置。