subagent的参数有allowedMcps和allowedTools,这种应该是指定使用mcp的所有工具。是否有办法指定使用某个mcp的一部分工具?
我问iflow,它说目前控制粒度尚不支持在Agent级别配置只能访问某个mcp的部分工具,但提供了两个曲线救国的方案,行不行就得验证下了。
✦ 根据检索到的文档,目前不支持在 agent 级别配置只访问某个 MCP 的部分工具。
当前权限控制粒度
- MCP 服务器级别配置(全局)
在 ~/.iflow/settings.json 中配置 MCP 服务器时,可以使用 includeTools 和 excludeTools:1 { 2 "mcpServers": { 3 "my-server": { 4 "command": "npx", 5 "args": ["-y", "@modelcontextprotocol/server-xyz"], 6 "includeTools": ["tool1", "tool2"], // 只包含这两个工具(白名单) 7 "excludeTools": ["tool3"] // 排除这个工具(黑名单) 8 } 9 }10 }
注意:这种配置是全局的,会影响所有使用该 MCP 的 agent。
- Agent 级别配置
在 agent 配置中,只能控制:
- 访问哪些 MCP 服务器(allowedMcps)
- 使用哪些工具(allowedTools)
1 agentType: “custom-agent”
2 allowedMcps: [“my-server”] # 只能访问这个 MCP 服务器
3 allowedTools: [“Read”, “Grep”] # 只能使用这些工具您的需求与当前能力的对比
┌──────────────────────────────────────┬─────────────────────────────────────┐
│ 需求 │ 当前支持情况 │
├──────────────────────────────────────┼─────────────────────────────────────┤
│ MCP 默认访问所有工具 │支持(不配置 includeTools 即可) │
│ 特定 agent 只能访问该 MCP 的部分工具 │不支持 │
│ 全局限制 MCP 的部分工具 │支持(通过 includeTools) │
└──────────────────────────────────────┴─────────────────────────────────────┘可能的变通方案
虽然无法直接实现您的需求,但可以考虑以下方式:
方案 1:创建多个 MCP 配置
为同一服务创建多个配置,每个配置包含不同的工具集:1 { 2 "mcpServers": { 3 "my-server-full": { 4 "command": "npx", 5 "args": ["-y", "@modelcontextprotocol/server-xyz"] 6 // 默认所有工具 7 }, 8 "my-server-limited": { 9 "command": "npx",10 “args”: [“-y”, “@modelcontextprotocol/server-xyz”],
11 “includeTools”: [“tool1”, “tool2”]
12 }
13 }
14 }然后在 agent 配置中指定使用哪个 MCP:
1 agentType: “limited-agent”
2 allowedMcps: [“my-server-limited”] # 使用受限版本方案 2:通过系统提示约束
在 agent 的 systemPrompt 中明确告知只能使用某些工具:1 agentType: “custom-agent”
2 systemPrompt: |
3 你是一个特定领域的专家。
4 你只能使用 my-server MCP 中的 tool1 和 tool2 工具。
5 不要尝试使用其他工具。总结
您希望的功能(针对特定 agent 限制特定 MCP 的工具访问)目前在 iFlow CLI 中尚未实现。当前的工具访问控制粒度仅限于:
- 全局 MCP 服务器级别(通过 includeTools/excludeTools)
- Agent 级别的 MCP 服务器访问权限(通过 allowedMcps)
- Agent 级别的工具使用权限(通过 allowedTools)
如果您需要这个功能,建议通过官方渠道提交功能请求。
感谢解答!这两个方案感觉都很有效,我试一试