
AttributeError: ‘str’ object has no attribute ‘get’
快速结论:该报错通常出现在 RAGFlow MCP Server 处理 tools/list 请求时,因 list_chats() 函数对 GET /api/v1/chats 接口返回的嵌套结构未做兼容处理,将字典的字符串键误当作聊天对象迭代,导致调用 .get("id") 时抛出 AttributeError。优先排查 RAGFlow 版本是否低于 v0.26.3,或使用的镜像是否未包含最新修复。
问题场景
用户在使用 RAGFlow v0.26.3(或同期的 nightly 版本)时启用了 MCP Server,通过 streamable-HTTP 协议(路径 /mcp)发送 tools/list 请求。MCP 客户端(如 Cursor)或直接通过 curl 调用时,返回了 JSON-RPC 错误响应,MCP 完全不可用,无法获取任何工具列表。
报错原文
{"jsonrpc":"2.0","id":1,"error":{"code":0,"message":"'str' object has no attribute 'get'"}}
原因分析
在 mcp/server/server.py 中的 list_chats() 函数中,代码直接对 res_json.get("data", []) 进行迭代,期望该值为一个扁平列表,每个元素是一个聊天(chat)字典。然而后端 GET /api/v1/chats 接口(chat_api.py 第 368 行)实际返回的是一个嵌套字典:
{
"code": 0,
"data": {
"chats": [ { "id": "...", "name": "...", ... } ],
"total": 5
}
}
在 Python 中对字典进行迭代,得到的是该字典的字符串键(如 "chats"、"total")。随后代码对迭代出的字符串调用 .get("id"),即触发了 AttributeError: 'str' object has no attribute 'get'。
由于 list_chats() 在 list_tools() 中被无条件调用,该异常会传播到所有 tools/list 请求,导致整个 MCP 功能完全失效。
环境排查
- RAGFlow 版本:v0.26.3 或 2026-07-07 之前的 nightly 构建。
- 部署方式:Docker Compose。
- MCP 传输协议:streamable-HTTP(路径
/mcp)。 - MCP 客户端:Cursor(或任何发送
tools/list请求的工具)。
解决步骤
- 确认当前版本是否已包含修复:该问题已于 2026-07-06 通过 PR #16639 合并。修复代码位于
mcp/server/server.py中,添加了类型判断以规范化响应:_chats_data = res_json.get("data", []) if isinstance(_chats_data, dict): _chats_data = _chats_data.get("chats", []) - 更新至修复版本:可优先尝试拉取最新的 nightly 镜像,或等待下一个正式发布版本(v0.26.3 之后的版本)。
- 如果无法立即升级,可临时修改源代码:找到
mcp/server/server.py,在list_chats()函数中将对res_json.get("data", [])的迭代结果增加字典类型检查,提取"chats"字段后继续迭代。
验证方法
修复后,重新发送 tools/list 请求,应返回正常的 JSON-RPC 成功响应,包含 result 字段,其中列出 ragflow_retrieval、ragflow_list_datasets、ragflow_list_chats 等可用工具,而不再出现 AttributeError 错误码。



