`pull_request_review_write` 将创建/提交/删除合并为一个工具,使得按方法进行细粒度权限设置变得不可能

作者: kaovilai创建于 2026年5月22日更新于 2026年9月14日
标签request ai review

今天,`pull_request_review_write` 工具将三种不同的审阅操作整合到一个工具名称下,并使用 `method` 枚举: - `create` - `submit_pending` - `delete_pending` 说明如下: > 创建和/或提交、删除 Pull Request 的审阅。 > 可用方法: - `create`: 创建一个新的 Pull Request 审阅。如果提供了 `event` 参数,则提交审阅。如果省略了 `event`,则创建一个待审阅。 - `submit_pending`: 提交现有的 Pull Request 待审阅。 - `delete_pending`: 删除现有的 Pull Request 待审阅。 这种整合与上下文/令牌预算相结合,但这使得 MCP 客户端中的权限对这些三个操作来说实际上是全或空,因为大多数客户端(Claude Code 等)在工具名称层级上附加权限,而不是在 `method` 参数上。 ## 我的用例 - 我希望始终允许 `create` 对于待审阅,这样代理就可以打开一个待审阅并添加内联评论。 - 但我不希望代理被允许自动提交或删除审阅;这些操作始终需要明确的人工批准(或者完全禁止)。 使用当前的 API 接口,客户端无法以以下方式表达这一点: - 允许:`create_pending_review` - 询问/拒绝:`submit_pending_review` - 询问/拒绝:`delete_pending_review` 因为这三者都以不同的 `method` 值编码为 `pull_request_review_write`。在工具级权限模型中无法区分它们。 ## 请求 请提供一种方法,使这些操作在工具/权限层面上可区分。以下几种可能的方法: ### 1. 分割为单独的工具(对于权限设置来说更优先) 例如: - `create_pending_pull_request_review` - `submit_pending_pull_request_review` - `delete_pending_pull_request_review` 这将使 MCP 客户端和策略引擎能够在创建和提交/删除之间分配不同的权限,同时仍然在内部共享实现。 ### 2. 在每个方法上添加服务器端的权限提示或注解 如果不希望完全拆分工具,可以考虑某种形式的元数据/注解,以便客户端了解: - `method: "create"`(不带 `event`)是“低风险,仅待审阅” - `method: "submit_pending"` 和 `method: "delete_pending"` 是“较高风险,最终化/破坏性” 这样它们就可以在单个工具名称下实施更严格的提示或拒绝。 ### 3. 最低限度地记录权限设置的影响 请在 README 或文档中添加一条说明,例如“如果您的客户端权限模型是按工具名称设置,则不能同时允许 `create` 而拒绝 `submit_pending`/`delete_pending`”,这将帮助用户理解这种权衡。 ## 为什么这很重要 目前,客户端如果: - 允许代理“打开一个待审阅并提出评论”,则 - 允许代理“实际提交或删除审阅”而不经过人工监督,这之间存在着有意义的安全和用户体验差异。

内容来源: github/github-mcp-server