配置 mcp_unexpected_response_type api proxy

Codex MCP 报错 Unexpected response type

如果 MCP 工具能被发现、调用后才报 Unexpected response type,问题通常在工具结果的解析或兼容层,不应先归因于登录、权限或模型。先用同一工具做客户端和版本对照。

错误摘要

Codex MCP 报 Unexpected response type 时,先确认错误发生在 tools/call 返回之后,再用 MCP Inspector、直接客户端或旧版 Codex 做对照;服务端可临时简化返回内容,普通用户则应保留版本和工具名等待兼容修复。

#codex mcp unexpected response type #codex tool call failed unexpected response type #codex mcp tool call error #codex mcp 调用失败 #mcp unexpected response type

Codex 能看到 MCP 工具,但调用时返回:

Error: tool call error: tool call failed for `<server>/<tool>`

Caused by:
    Unexpected response type

这个错误是什么意思

Unexpected response type 表示 Codex 收到了 MCP 调用结果,但没有把它识别为当前 tools/call 路径能够接受的结果类型。

这和“工具不存在”不同:工具已经被发现并发起调用,失败发生在结果返回之后。也不要先把它解释成 API Key、MCP OAuth 或模型权限问题,因为已公开案例中,同一个 MCP 服务通过直接客户端或其他 MCP 客户端可以正常返回结果。

已确认的触发场景

公开 issue 至少出现了三类兼容问题:

  1. 合法的工具结果被 MCP 库解析成 CustomResult,Codex 只接受预期的 CallToolResult
  2. content 中包含 resource_link 时失败,只返回普通 text 时成功。
  3. 结果中的 annotationsstructuredContent 或特定组合触发解析差异。

这些案例说明 Unexpected response type 是一层通用报错,不能只凭这一句话断定具体是哪个字段。服务端返回了非法 JSON、使用了不匹配的 MCP 协议版本,也可能产生相似结果。

快速排查

  1. 运行 codex mcp list,确认服务处于 enabled 状态。
  2. 记录失败的 MCP server 名、tool 名、Codex 版本和传输方式,例如 stdio 或 Streamable HTTP。
  3. 用 MCP Inspector、服务端自带客户端或直接 JSON-RPC 调用同一个工具。
  4. 如果其他客户端成功、只有 Codex 失败,重点看 Codex 与返回结构的兼容,而不是反复登录。
  5. 如果所有客户端都失败,先修 MCP 服务本身,不要套用 Codex 回归结论。

服务端开发者可以做一次最小 A/B:先只返回一个 text 内容块,再逐项加入 structuredContentannotationsresource_link。哪一步开始失败,哪一项就是当前兼容边界。

怎么解决

你只是 MCP 使用者

先升级到最新稳定版 Codex,再用新任务复测。如果问题仍在,临时停用这个 MCP 工具或改用能正确处理该结果的客户端,并把以下信息提交给 Codex 和 MCP 服务维护者:

  • 完整错误原文;
  • Codex 版本;
  • MCP server 与 tool 名;
  • stdio 或 HTTP 传输方式;
  • 同一工具在 MCP Inspector 中是否成功。

不要因为 Unexpected response type 就重置账号、扩大 Full Access 权限或更换模型,这些动作通常没有触及工具结果解析层。

你维护 MCP 服务

如果业务允许,可临时把结果简化为标准 text 内容,或移除触发问题的可选 resource_linkannotations。这只是兼容性绕过,不应长期牺牲协议能力。

Eclipse MCP 的公开案例显示,Codex 0.138.0 可用,从 0.139.0 开始失败。可以用旧版做一次 A/B 来证明版本回归,但不要把降级写成适用于所有 MCP 的永久修复。

一句话结论

Codex MCP 的 Unexpected response type 通常是工具结果解析或协议兼容问题:先证明同一工具在其他 MCP 客户端是否成功,再决定修服务端返回、等待 Codex 修复还是短期回退版本。

相关错误

Claude Code / Codex 503 No available accounts:中转站账号池不可用排查 先不要盲目换 Key。这个错误通常说明账号池、供应商、分组或模型路由暂时不可用。先测最小请求、确认模型和分组,再判断是等待恢复、降低上下文,还是换 provider。 Codex: Selected model is at capacity. 模型容量已满排查 报错:Selected model is at capacity. Please try a different model. 先把它当作模型级容量、Admission 或流式中断问题处理。它可能出现在官方 ChatGPT 登录态 Codex CLI,也可能来自中转站账号池或 Sub2API 上游 overloaded 透传。 Codex 提示:你的对话中有多个可能的网络安全风险的标记 提示:你的对话中有多个可能的网络安全风险的标记。先把它当作 OpenAI/Codex 安全路由触发,而不是直接判断账号或中转站故障;再检查是否使用了中转 API、敏感关键词、超长代码上下文或不透明模型路由。 Error 429 Too Many Requests:AI API 中转站限流排查 报错:exceeded retry limit, last status: 429 Too Many Requests, request id: <request-id>。AI 中转站里连续 429 多半是上游账号池限流、冷却或额度耗尽,先让服务商换号、换线路或换模型。 Error 401 Unauthorized:AI API 中转站认证排查 401 是认证失败信号。先检查当前加载的是哪一个 Key、请求打到哪个 Base URL、header 格式是否正确,以及这个 Key 是否仍然在对应 provider 中有效。 中转站报错 API Error 502 origin_bad_gateway 排查步骤 报错:API Error 502、Error 502: Bad gateway、error_name: origin_bad_gateway、cloudflare_error: true。先看中转站状态页;如果目标模型或线路全红,停止反复改 Key 和重试,直接联系在线客服或站长确认号池与恢复时间。 Codex 提示:此聊天已被标记为可能存在网络安全风险 Codex 提示“此聊天已被标记为可能存在网络安全风险”时,先不要把它当作中转站故障或封号。它更像是系统级网络安全风险标记;普通开发误触发时,优先新开会话、缩小上下文、重新表述任务。 Codex: gpt-5.6-sol model is not supported with a ChatGPT account 报错:The 'gpt-5.6-sol' model is not supported when using Codex with a ChatGPT account. 先把它当作 ChatGPT 账号权限、订阅层级或灰度入口问题处理;可先切到 Terra/Luna,或改用 API Key/provider 配置。 Codex 找不到 MCP 工具:tool does not exist in this session's available toolset Codex 提示 MCP tool does not exist in this session's available toolset 时,先核对服务和工具发现状态,再用全新会话、codex doctor、官方 provider 与版本 A/B 判断是缓存、客户端回归还是自定义 provider 没有暴露工具。 Codex:当前环境没有提供可用的终端或文件编辑工具怎么解决 先 fork 当前对话,在新任务中回复“继续”让 Codex 重新执行。如果仍然没有工具,用 GPT-5.5 和手动 `!命令` 做一次对照测试。 Codex 报错 stream disconnected before completion Codex 报 stream disconnected before completion: error sending request for url 时,先不要急着换账号或改模型。它通常是终端网络、代理继承、中转站 Responses 兼容性或上游 SSE 流断开的信号。 Codex 报错 stream disconnected before completion: Upstream request failed Codex 报 stream disconnected before completion: Upstream request failed 时,不要只凭浏览器能上网就排除网络,也不要只凭 curl hello 能通就认定中转站没问题。先看 URL、upstream_error、response.failed、request id 和是否使用自定义 provider,再按官方链路、本地代理和中转站链路分开排查。 Codex 报错 Error creating task: Timeout / Unable to start task Codex 报 Error creating task: Timeout、Task creation timeout 或 Unable to start task 时,先测试已有任务,再临时禁用无法连接或路径失效的 MCP 服务并完全重启桌面端。

相关主题

常见问题

常见问题

Unexpected response type 是 MCP 登录失败吗?

通常不是。已公开的案例中,MCP 初始化、工具发现和直接 tools/call 都可以成功,Codex 是在解析工具返回结果时失败。认证错误通常会返回更明确的未授权或 OAuth 提示。

换模型能解决吗?

通常没有针对性。这个错误发生在 MCP 工具结果进入 Codex 的解析链路时,往往早于模型消费结果。先比较 Codex 版本、MCP 客户端和返回结构。

降级 Codex 是永久解决办法吗?

不是。Eclipse MCP 案例里 0.138.0 可用、0.139.0 及之后失败,只能证明该场景存在版本边界;其他 MCP 的触发结构可能不同。降级仅适合短期 A/B 验证。