用途:当内置 MCP 工具(截图、语义快照、点击等)不够用时,在 Flutter 进程内注册应用专属工具与资源,供智能体读取或调用,例如购物车总计、功能开关、内部状态快照。
主要能力:提供原生 AgentCallEntry(tool / resource)与旧版桥接 mcpToolkitTool / mcpToolkitResource 两种写法。只读、幂等的数据优先用 resource(配合 fmt_client_resource);带参数或会改变状态的动作、可复用命名操作使用 tool(配合 fmt_client_tool)。工具与资源都在动态注册表中注册,智能体可通过 fmt_list_client_tools_and_resources 枚举。
使用方式:在 pubspec.yaml 中加入 mcp_toolkit;新增 lib/mcp_tools/<domain>_surfaces.dart,返回 Set<AgentCallEntry> 或调用一次 addEntries;在 bootstrapFlutter(additionalEntries: ...) 中统一接线,await addEntries 后再进行发现。工具 schema 需严格:优先 additionalProperties: false,handler 无条件读取的字段标记 required,返回数据必须可 JSON 序列化。资源名与工具名使用 snake_case。
适用场景:需要向智能体暴露应用内部只读状态或可复用操作,例如购物车摘要、功能开关、导航状态、精选调试快照。
限制与注意:仅在 debug 模式生效,release 构建不暴露 VM service 扩展。禁止在 build 或 StatefulWidget 生命周期中注册,热重载加 widget 内 addEntries 会导致重复注册;应在 main() / bootstrap 中注册一次并热重启。命名空间为扁平全局,建议加前缀(cart_、flags_、nav_);与内置条目重名时自定义条目会被静默跳过,调用由内置处理。应用实例名称通过 MCPToolkitBinding.instance.setAppIdentity(label: ...) 设置。handler 应保持轻量并委托给现有服务,避免密钥与不受控 IO。务必注意 addEntries 的 await、不要混用 AgentArguments 与 Map<String, String>、保持 inputSchema 与 handler 一致。旧版 call-entry 类型已在 intentcall Phase 6b 移除,应改用 AgentCallEntry 或 mcpToolkitTool / mcpToolkitResource。上游规范、注册表与会话语义相关改动需在 IntentCall 仓库处理。