AttributeError: ‘str’ object has no attribute ‘get’

用户在使用 RAGFlow v0.26.3(或同期的 nightly 版本)时启用了 MCP Server,通过 streamable-HTTP 协议(路径 /mcp )发送 tools/list 请求。MCP 客户端(如 Cursor)或直接通过 curl 调用时,返回了 JSON-RPC 错误响

AttributeError: 'str' object has no attribute 'get'

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 请求的工具)。

解决步骤

  1. 确认当前版本是否已包含修复:该问题已于 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", [])
  2. 更新至修复版本:可优先尝试拉取最新的 nightly 镜像,或等待下一个正式发布版本(v0.26.3 之后的版本)。
  3. 如果无法立即升级,可临时修改源代码:找到 mcp/server/server.py,在 list_chats() 函数中将对 res_json.get("data", []) 的迭代结果增加字典类型检查,提取 "chats" 字段后继续迭代。

验证方法

修复后,重新发送 tools/list 请求,应返回正常的 JSON-RPC 成功响应,包含 result 字段,其中列出 ragflow_retrievalragflow_list_datasetsragflow_list_chats 等可用工具,而不再出现 AttributeError 错误码。

参考来源

infiniflow/ragflow #16715

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14995

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注