控制 MCP 工具访问
对于 MCP 流量,调用方 API Key 是工具访问边界。只有显式授予访问权限后,某把 Key 才能列出或调用 MCP 工具。
当不同客户端需要通过同一个网关访问不同上游工具时,请配置工具访问。本指南说明 AISIX 如何命名聚合工具、如何创建或更新带工具访问权限的 Key,以及调用方列出或调用工具时如何执行权限检查。
前置条件
开始前,请准备以下环境:
- 对于 AISIX Enterprise 或 AISIX Cloud,准备一个环境、已注册的 MCP 服务器和写入作用域管理员 Token。对于 AISIX Enterprise,请按照 AISIX Enterprise 入门操作。若要申请 AISIX Cloud 访问权限,请联系 API7。
- 对于开源 AISIX 网关,在
resources.yaml中准备一把调用方 API Key 和已注册的 MCP 服务器。设置 MCP 网关提供了可运行的配置以及验证和重新加载工作流。 - 控制面示例需要 cURL 和 jq。
工具访问的工作原理
工具访问存储在调用方 API Key 的 mcp_access 字段中,它是一个包含 allow 列表和可选 deny 列表的对象。该配置块是这把 Key 在工具 ACL 中自己的那一层:在 AISIX Enterprise 和 AISIX Cloud 中,它会与环境和团队的 MCP 访问策略取交集,因此 Key 只能收窄这些层允许的范围,不能扩大。
省略该配置块时,这把 Key 不施加自己的约束,也就是取得各策略层留下的全部权限——而当任何一层都没有配置时,它没有任何 MCP 工具访问权限。权限总是被显式授予。
AISIX 采用 <server>__<tool> 形式命名每个公开的工具。<server> 是已注册 MCP 服务器的 name,<tool> 是上游工具名称。例如,github__create_issue 会调用已注册 github 服务器上的上游 create_issue 工具。
每个 allow 条目都会与带前缀的工具名称匹配:
| 条目 | 授权范围 | 示例 |
|---|---|---|
| 精确名称 | 一个指定工具。 | github__create_issue 只允许该工具。 |
<server>__* | 一个已注册服务器上的全部工具。 | github__* 允许 github__create_issue、github__list_repos 以及任何其他 github 工具。 |
* | 所有已注册服务器上的全部工具。 | * 允许当前和未来的所有工具。 |
精确名称提供最窄访问权限。当调用方可以使用某个服务器的所有工具时,使用按服务器通配符;只有当这把 Key 不需要收窄任何范围时才使用 *——它通常与 deny 搭配,用于只做扣除的场景。allow 为空列表则表示该 Key 完全没有 MCP 访问权限。
条目是单星号 glob,因此通配符可以出现在末尾按服务器形式之外。例如,*__search 会授权每个已注册服务器上名为 search 的工具。除非确实需要跨服务器模式,否则应优先使用按服务器或精确授权。
deny 使用相同的模式,且始终优先:被它匹配到的工具不可用,无论这把 Key 或任何策略层如何允许。
Key 自身的配置块提供最细粒度的控制。在 AISIX Enterprise 和 AISIX Cloud 中,使用通过策略管理 MCP 访问可在环境或团队级别授予访问权限。没有配置自己那一层的 Key 会跟随共享层,包括后来注册、被匹配通配符覆盖到的工具。