Skip to content

[Bug] Subagent 调用需授权 MCP 工具时不弹权限确认并一直等待 #85

Description

@Likhixang

提交前确认 · Pre-submission checklist

  • 我已搜索过现有 issue,确认这不是重复 / I searched existing issues and confirmed this isn't a duplicate.
  • 我已阅读 CONTRIBUTING.md / I've read CONTRIBUTING.md.

问题类别 · Category

工具调用 / MCP · Tool use / MCP

涉及的 Agent 框架 · Agent framework

ZCode Agent(自研)

严重程度 · Severity

阻塞使用 · Blocking (无法使用核心功能 / core function unusable)

复现频率 · Reproducibility

必现 · Always

问题描述 · Description

通过主 Agent 派生 Subagent(子代理 / 子智能体)后,Subagent 在调用部分需要用户授权的 MCP 工具时,没有触发权限请求 / 安全确认弹窗。结果不是继续执行,也不是明确失败,而是 Subagent 一直停在等待状态,用户界面没有可操作的授权入口,任务无法继续。

这与现有 issue #12(Subagent 无法使用 MCP 工具)不是同一个问题:#12 关注的是 Subagent 工具列表 / MCP 能力继承;本 issue 关注的是 Subagent 已经尝试调用 MCP 工具后,遇到需要授权的 MCP 操作时,权限确认链路没有正确弹出,导致 Subagent 挂起等待。

复现步骤 · Steps to reproduce

  1. 在 ZCode 中配置一个需要授权确认的 MCP 工具 / MCP server。
  2. 确认主 Agent 直接调用该 MCP 工具时,会正常弹出权限请求 / 安全确认,用户确认后可继续执行。
  3. 让主 Agent 派生一个 Subagent(例如 Explore 或自定义子智能体)。
  4. 让 Subagent 调用同一个或同类需要授权的 MCP 工具。
  5. 观察 Subagent 状态和任务界面。

期望表现 · Expected behavior

Subagent 调用需要用户授权的 MCP 工具时,应与主 Agent 一样触发权限请求,展示具体 MCP 工具调用内容,并等待用户选择“允许 / 始终允许 / 拒绝 / 始终拒绝”后再继续。

权限确认应至少满足:

  1. MCP 工具调用来自 Subagent 时,也必须进入同一套 permission / safety-confirm 链路。
  2. UI 应显示可操作的授权弹窗或确认卡片,而不是让 Subagent 静默等待。
  3. 权限请求应清楚标明是哪个 Subagent 发起、调用哪个 MCP 工具、参数是什么。
  4. 用户拒绝后,该 MCP 调用应返回明确错误给 Subagent,Subagent 可以继续处理或向主 Agent 汇报失败。

实际表现 · Actual behavior

Subagent 调用部分需要授权的 MCP 工具时,没有看到权限确认弹窗 / 授权请求。Subagent 会一直处于等待状态,任务无法继续,用户也没有地方点击允许或拒绝。

也就是说,问题不是“Subagent 绕过权限直接执行”,而是“Subagent 等待权限授权,但权限确认 UI 没有出现 / 没有转发到当前任务界面”。

ZCode 版本 · ZCode version

待官方确认;用户侧在当前 ZCode 版本中观察到该行为(建议在 v3.2.x 及之后版本重点核查)。

设备 / 系统 / 浏览器 · Device / OS / Browser

待补充;该问题主要涉及 ZCode Agent / Subagent / MCP 权限确认链路。

截图 / 录屏 / 日志 · Screenshots / Recordings / Logs

暂无。

建议排查方向:

  • 检查 MCP 工具的 permission request 是否只绑定主 Agent 会话,没有正确转发 Subagent 会话的授权请求。
  • 检查 Subagent 发起 MCP tool call 后,权限请求事件是否生成但没有被 UI 订阅 / 展示。
  • 检查当前任务的“等待确认”状态是否没有关联到 nested agent / subagent 的 pending permission。
  • 检查主 Agent 与 Subagent 之间的 tool call bridge 是否遗漏了 MCP permission callback / approval callback。
  • 检查被挂起的 Subagent 是否在等待一个永远不会 resolve 的授权 Promise。

影响:

该问题会导致 Subagent 无法完成依赖 MCP 的任务,并且表现为无限等待,用户无法从 UI 判断是需要授权、工具卡住还是 Agent 卡死。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions