Appearance
Task 子 Agent 无法执行 MCP 工具(权限未从父 Agent 继承)
问题
通过 Task 工具创建的子 agent 会话中,已在 opencode.json 配置的 MCP 工具出现在工具注册表里(子 agent 可以"看到"这些工具),但实际调用时报错或静默失败:
Error: MCP tool execution failed: missing session permissions父 agent(主会话)可以正常使用这些 MCP 工具,但子 agent 无法执行相同的操作。
典型场景:使用 Task 工具让子 agent 调用 context7 查文档、用 Jenkins MCP 触发构建、或读取自定义 MCP 服务——这些在父 agent 中正常,在子 agent 中都失败。
原因
Task 工具创建的子 agent 会话没有正确继承父 agent 的 MCP 会话权限。MCP 工具的注册(出现在工具列表)和执行权限(实际调用时的鉴权)是两套不同的机制,子 agent 只继承了注册信息,没有继承执行权限。
这是一个已知设计问题(另见 #3808),官方曾尝试通过 PR 修复但 PR 被关闭,尚未有合并的完整修复。
解决方案
临时方案:将 MCP 包装成 opencode plugin
将需要在子 agent 中使用的 MCP 功能封装成 opencode plugin,以原生工具的形式注册。原生工具不受 MCP 权限继承限制,可以在子 agent 中正常使用。
在项目根目录创建插件文件:
typescript
// opencode-plugin.ts(示例:包装 MCP 工具为原生工具)
import { definePlugin } from "opencode/plugin"
export default definePlugin({
tools: {
my_mcp_wrapped_tool: {
description: "包装自 MCP 的工具,子 agent 可用",
parameters: { /* ... */ },
execute: async (params) => {
// 在这里直接调用 MCP 或等效逻辑
// ...
}
}
}
})在 opencode.json 中注册 plugin:
jsonc
{
"plugins": ["./opencode-plugin.ts"]
}注意:这是规避方案,需要为每个 MCP 工具单独包装,有维护成本。
等待官方修复
该问题在 GitHub #16491 追踪,持续关注官方是否提供 MCP 权限继承的正式支持。