OpenAI响应API MCP多内容Bug报告
执行摘要
具有远程MCP支持的OpenAI Responses API无法正确处理返回多个 TextContent 数组中的项目。当MCP工具返回一个包含多个文本内容对象的数组时,响应输出中只包含第一个文本项,并自动删除所有后续文本项。
缺陷描述
预期行为
当MCP工具返回一个由多个元素组成的数组时 TextContent 对象,所有文本内容都应包含在响应输出中,格式正确,顺序正确。
实际行为
只有第一 TextContent 数组中的对象包含在响应中。所有后续文本内容项都会自动删除,没有任何错误或警告。
影响
此错误阻止MCP工具返回结构化的多部分响应,严重限制了MCP集成的有用性。主要影响包括:
- 无法从单个工具调用返回多个文本段
- 无法交错文本和图像内容(例如,文本描述后面跟着图像URL,后面跟着更多文本)
- 无法构建文档、教程和报告中常见的结构化多模式响应
繁殖步骤
先决条件
- Python 3.12+
- OpenAI API密钥
- ngrok帐户(用于暴露本地服务器)
快速开始
- 克隆此存储库:
git clone https://github.com/arcaputo3/openai-responses-mcp-bug.git
cd openai-responses-mcp-bug- 安装依赖项:
uv sync- 创建
.env使用您的OpenAI API密钥文件:
echo "OPENAI_API_KEY=your-api-key-here" > .env- 启动MCP服务器:
uv run server.py服务器将在上运行 http://localhost:8000
- 在新终端中,使用ngrok暴露服务器:
ngrok http 8000
# Or if you have a custom domain:
# ngrok http 8000 --url=your-custom-domain.ngrok.app- 从ngrok复制HTTPS URL并将其添加到您的
.env文件:
# Add this line to your .env file
MCP_URL=https://abc123.ngrok.io- 运行OpenAI API调用:
uv run call_openai_with_mcp.py代码概述
MCP服务器(server.py)
服务器定义了一个简单的工具 get_content() 返回一个2的数组 TextContent 物体:
[
TextContent(type="text", text="This is the text description that should appear first."),
TextContent(type="text", text="This is the text description that should appear second.")
]OpenAI客户端(call_openai_with_mcp.py)
通过MCP工具集成向OpenAI Responses API发出请求,要求其调用 get_content 工具并逐字返回其内容。
预期产量与实际产量
预期响应输出
响应应包含MCP工具响应中的两个文本项。两个文本内容对象都应包含在输出中。
实际响应输出
跑步时 uv run call_openai_with_mcp.py,响应显示仅包含第一个文本项:
{
"id": "resp_68d1e53c8d44819688a5a3e5252e20590e5593cefd6820f8",
"output": [
{
"id": "mcp_68d1e542359c819698009274fada4c430e5593cefd6820f8",
"arguments": "{}",
"name": "get_content",
"server_label": "test",
"type": "mcp_call",
"output": "This is the text description that should appear first."
},
{
"id": "msg_68d1e54528648196a499d1e0805f36880e5593cefd6820f8",
"content": [
{
"text": "This is the text description that should appear first.",
"type": "output_text"
}
],
"role": "assistant",
"status": "completed",
"type": "message"
}
]
}⚠️ 关键问题: 响应中完全缺少第二个文本内容项(“这是应该出现在第二个的文本描述。”)。MCP工具返回一个包含两个TextContent对象的数组,但只有第一个出现在OpenAI响应中。
技术分析
根本原因假说
OpenAI响应API似乎未正确处理 TextContent MCP工具返回的对象。它不处理数组中的所有项,而是只处理第一个项,忽略其余项。
MCP协议合规性
根据MCP(模型上下文协议)规范,工具可以返回内容项的数组,所有项都应该被处理并包含在响应中。此错误表示偏离了预期的MCP行为。
权变措施
在修复此错误之前,潜在的解决方法包括:
- 将所有文本内容连接成单个
TextContentMCP服务器端的对象 - 使用多个工具调用,而不是在单个调用中返回多个项目
- 在单个文本内容项中以结构化格式(例如JSON)对多个文本段进行编码
环境详细信息
- OpenAI Python SDK: 1.108.2
- FastMCP: 2.12.3
- Python版本: 3.12+
- 操作系统: 在macOS上测试
相关问题
- 此错误可能与MCP工具响应中的一般阵列处理有关
- 当返回多个项目时,其他内容类型(图像等)也可能存在类似的问题
许可证
此错误演示代码按原样提供,用于错误报告和测试。
