
OpenAI Agent Node Strict Tool Calling Mode fails on json schema validation with Custom MCP Tool
快速结论:启用“Strict Tool Calling”模式时,使用 Custom MCP Tool 的 OpenAI Agent 节点会报错。优先排查是否需要关闭 Strict Tool Calling,或确认 MCP Tool 的 JSON Schema 在 Flowise 内部转换过程中是否丢失了 type 字段。
问题场景
用户在 Flowise v3.0.5 中通过 Docker 部署,创建一个 Agentflow (v2) 并使用 ChatOpenAI 类型的 Agent 节点。当启用了“Strict Tool Calling”属性,并添加了一个 Custom MCP Tool(例如自定义 get_table_schema 函数)时,运行工作流触发报错。用户尝试了多种 JSON Schema 变体,但均无法避免该错误。
报错原文
Error in Agent node: 400 Invalid schema for function 'get_table_schema': In context=('properties', 'tableName'), schema must have a 'type' key.
原因分析
根据 issue 提交者与 Claude 协助分析,根本原因在于 Flowise 内部的 JSON Schema → Zod → JSON Schema 转换管道中存在有损转换:
- MCP Server 返回的
inputSchema(JSON Schema)先在packages/components/nodes/tools/MCP/core.ts中被createSchemaModel()处理。 - 在
createSchemaModel()的第 159-175 行,所有属性被强制转换为z.any(),导致原始 JSON Schema 中的type信息丢失。 - 随后在
packages/components/nodes/agents/OpenAIAssistant/OpenAIAssistant.ts的 1158 行附近,通过zodToJsonSchema()将 Zod Schema 转回 JSON Schema 时,生成的参数对象缺少type键,从而触发 OpenAI API 的验证错误。 - 另外,MCP Tool 是普通
Tool对象(非DynamicStructuredTool),即使启用 Strict Tool Calling,其isStrict()方法也不会对 MCP 工具生效——该逻辑仅适用于 OpenAPI 工具。
环境排查
- Flowise 版本:v3.0.5(确认是否影响更早或更新版本)
- 部署方式:Docker(但问题与部署方式无关,属于代码逻辑问题)
- Agent 节点类型:ChatOpenAI(OpenAI Assistant 模式)
- Strict Tool Calling 属性:已启用
- Custom MCP Tool:任何带有简单属性(如
tableName: string)的 JSON Schema - 操作系统:Linux(浏览器为 Chrome,不影响核心问题)
解决步骤
- 临时规避方案(可优先尝试):在 Agent 节点属性中,将“Strict Tool Calling”设置为禁用(关闭)。这可以绕过由于 Schema 转换导致
type字段丢失的问题,但会牺牲严格模式带来的某些验证功能。 - 排查 MCP Tool 声明方式:检查 Custom MCP 工具的
inputSchema在 Server 端是否正确。示例参考 Brave Search MCP(modelcontextprotocol/server-brave-search),该工具在非 Strict 模式下正常工作。可以先用一个已知正常的 MCP 工具测试,以排除自定义 Schema 本身的问题。 - 等待或提交框架修复:由于问题根源在 Flowise 核心代码中(
createSchemaModel()丢失 type 信息以及 Strict Tool Calling 未对 MCP 生效),需要 Flowise 维护者在后续版本中修复。用户可关注对应 Issue 的更新(见参考来源)。
验证方法
关闭“Strict Tool Calling”后,重新运行包含 Custom MCP Tool 的 Agent 节点。如果不再出现 schema must have a 'type' key 报错,且工具调用返回正确结果,则表明问题被临时逃避。如需验证根本修复,需等待 Flowise 发布包含修复的新版本,或自行修改 core.ts 中的 createSchemaModel() 逻辑,保留原始 JSON Schema 的 type 信息。



