用途
本技能用于在 mcp_toolkit 硬性移除 MCPCallEntry 之后,把 Flutter 应用代码从旧的 MCPCallEntry 迁移到 AgentCallEntry。AgentCallEntry 来自 intentcall_core,并由 mcp_toolkit 重新导出。规范的迁移文档为 migration_mcp_call_entry_to_agent_call_entry.md。
何时使用
- 升级 mcp_toolkit 后,dart analyze 报告 MCPCallEntry 未定义。
- 用户要求将自定义工具或资源迁移到新 API。
- 在向消费者发布重大 mcp_toolkit 版本之前。
使用方式(CLI,推荐)
# 预览(有改动待处理时退出码为 1)
flutter-mcp-toolkit migrate agent-entries --check lib/
# 应用
flutter-mcp-toolkit migrate agent-entries --write lib/
flutter-mcp-toolkit migrate agent-entries --write --namespace my_app lib/main.dart
别名:migrate mcp-call-entry(行为相同)。
迁移后的注册
- MCPToolkitBinding.addEntries(entries: Set<AgentCallEntry>)
- bootstrapFlutter(additionalEntries: { ... })
- addMcpTool(AgentCallEntry) —— 仍是单个条目的快捷方式
处理器应返回 AgentResult(AgentResult.success / AgentResult.failure)。对于旧的 MCPCallResult 加 MCPToolDefinition 处理器,使用 mcpToolkitTool / mcpToolkitResource(参见 flutter-mcp-toolkit-custom-tools)。
代码对照
旧模式(迁移前,不应在新代码中发布):
// BEFORE (removed in Phase 6b)
final tool = MCPCallEntry.tool(
handler: (request) async => MCPCallResult(
message: 'ok',
parameters: {'n': request['n']},
),
definition: MCPToolDefinition(
name: 'my_tool',
description: 'Example',
inputSchema: {'type': 'object', 'properties': {}},
),
);
目标模式(迁移后):
import 'package:mcp_toolkit/mcp_toolkit.dart';
final tool = AgentCallEntry.tool(
namespace: 'app',
name: 'my_tool',
description: 'Example',
inputSchema: const {
'type': 'object',
'additionalProperties': false,
'properties': {'n': {'type': 'string'}},
'required': ['n'],
},
handler: (final args) async {
final n = args['n']?.toString() ?? '';
return AgentResult.success(
message: 'ok',
data: {'n': n},
);
},
);
await MCPToolkitBinding.instance.addEntries(entries: {tool});
平台同步(可选)
在工具界面可编译后:
flutter-mcp-toolkit codegen sync --platform web
flutter-mcp-toolkit codegen sync --platform android,ios,macos --check
关于小米/华为,参见 docs/platform-notes/android-oem.md(使用与 AOSP 相同的 shortcuts XML)。
MCP 迁移工具
fmt_migrate_agent_entries 已随附(默认仅报告;apply: true 才改写)。CLI 等价命令为 flutter-mcp-toolkit migrate agent-entries。
维护者检查清单(仓库内产品关口)
- 在 flutter_test_app/lib 上运行 flutter-mcp-toolkit migrate agent-entries --check
- 任何 plugin/skills/ 编辑后运行 make sync-skills
- cd mcp_server_dart && dart test test/contract/
- Grep:除本文件的 BEFORE 示例外,skills 中不应出现 MCPCallEntry
托管 IntentCall 包
IntentCall 现在位于本仓库之外。正常消费者状态使用托管的 intentcall_* 包。
- 已提交的消费者状态使用托管 intentcall_*: ^0.6.0 依赖。
- 仅在有意对本地 IntentCall 检出进行跨仓库开发时使用本地路径覆盖。
- 依赖变更后运行 flutter pub get 并再次执行 migrate agent-entries --check。
- CI:使用 make check-intentcall-hosted-consumer 进行托管 mcp_flutter 证明;仅在有意对本地 IntentCall 检出做矩阵证明时使用 make check-intentcall-sibling-matrix。历史 make check-intentcall-integration 目标是 sibling-matrix 通道的兼容别名,而非新采用者的托管关口。
相关技能
- flutter-mcp-toolkit-custom-tools —— 编写 AgentCallEntry 界面
- flutter-mcp-toolkit-repo-maintainer —— CHANGELOG、版本固定、sync-skills