DynamicToolCall(命名陷阱)

名称易与 MCP 动态发现混淆,实际语义是 tool call 解析失败的降级路径,AI SDK 6 计划重命名为 InvalidToolCall。

命名陷阱

DynamicToolCall 这个名字极易产生误解——字面意思让人联想到"运行时动态注册的工具调用",实际上它是 tool call 解析失败时的降级路径,与 MCP 动态工具发现没有任何关系。

真实语义(基于 tool-call.ts:L33-L52

DynamicToolCall 在以下情况产生:

  • toolName 在编译时无法解析到 TOOLS 泛型(工具名不在已知工具集中)
  • input 无法通过工具的 schema 校验
  • 工具不存在

本质上是 TypedToolCall<TOOLS> 联合类型的降级分支——解析成功用 TypedToolCall,失败降级为 DynamicToolCall

与 providerExecuted 的区别

  • dynamic: true → 解析失败降级路径
  • providerExecuted: true → Provider 服务端执行的工具(如 code_execution

两个字段独立,可同时为 true(server-side 工具调用解析失败的情况)。

演化状态

tool-call.ts:L44 有明确 TODO:AI SDK 6 计划重命名为 InvalidToolCall,语义将更清晰。

引用本术语的文章