Slim 模式:最小工具集设计
Slim 模式:最小工具集设计
学习目标
本章分析 Chrome DevTools MCP 的 Slim 模式设计。你将理解:
- 为什么需要最小工具集(简单任务不需要 40+ 工具)
- 3 个核心工具的选择逻辑:导航、截图、脚本执行
SlimMcpResponse与McpResponse的差异--slim如何影响 pageId routing、输入 schema 等
项目实践
3 个核心工具的选择逻辑
Slim 模式仅暴露 3 个工具:
| 工具 | 对应能力 | 为什么必须 |
|---|---|---|
navigate | 去到(Go) | Agent 需要加载目标页面 |
screenshot | 看到(See) | Agent 需要查看页面外观 |
evaluate | 执行(Do) | Agent 需要与页面交互 |
这三个工具覆盖了看到、去到、执行的最小闭环,适合不需要 DevTools 高级能力(性能分析、网络调试、无障碍快照)的简单场景。
工具切换逻辑
createTools(args): if (args.slim): return slimTools (3 tools) else: return all tools (40+ tools from 13 modules)SlimMcpResponse 与 McpResponse 的差异
SlimMcpResponse 是 McpResponse 的精简版:
| 方法 | McpResponse | SlimMcpResponse |
|---|---|---|
appendResponseLine | ✅ | ✅ |
attachImage | ✅ | ✅ |
includeSnapshot | ❌ | ❌(Slim 无 AXTree) |
setIncludeNetworkRequests | ❌ | ❌(Slim 无 NetworkCollector) |
setIncludeConsoleData | ❌ | ❌(Slim 无 ConsoleCollector) |
attachTraceSummary | ❌ | ❌(Slim 无性能工具) |
attachLighthouseResult | ❌ | ❌(Slim 无 Lighthouse) |
pageIdRouting 在 Slim 模式中被禁用
const inputSchema = tool.pageScoped && serverArgs.experimentalPageIdRouting && !serverArgs.slim // ← Slim 模式不注入 pageId ? { ...pageIdSchema, ...tool.schema } : tool.schema;原因:Slim 模式面向简单场景,不需要多 Agent 并发操作。
何时使用 Slim 模式
适合 Slim 的场景:
- 只需要”打开网页 → 截图 → 填表”的任务
- Token 预算有限(Agent 的上下文窗口小)
- 工具列表过短降低 Agent 选择负担
不适合 Slim 的场景:
- 需要性能分析(Lighthouse、Trace)
- 需要网络调试(请求检查)
- 需要无障碍树导航(复杂表单/动态内容)
- 需要多 Agent 并发
设计取舍
| 取舍 | 选择 | 原因 |
|---|---|---|
| 复用 Response 基类 vs 独立实现 | 复用 + 精简 | 保持 API 一致,减少维护成本 |
| 3 个 vs 5 个核心工具 | 3 个 | Go + See + Do 覆盖最小闭环 |
| Slim 独立代码 vs 子集过滤 | 独立工具模块 | 避免运行时判断,构建时即可确定 |
陷阱与对策
| 陷阱 | 后果 | 对策 |
|---|---|---|
| 在 Slim 模式下调用不支持的工具 | Agent 看不到该工具 | 注册时过滤(createTools 中判断 slim) |
| Agent 期望 AXTree 但 Slim 不支持 | 快照功能不可用 | 使用 evaluate 代替 |
| 忘记同时更新两套 Response | 行为不一致 | SlimMcpResponse 和 McpResponse 共享基类/接口 |