快速结论:该报错出现在 Dify 1.17.0 中删除 MCP Provider 时,原因是后端 `model_validate` 装饰器对 DELETE 请求只读取查询参数而忽略 JSON Body,导致 `provider_id` 校验失败返回 HTTP 422。优先检查 `wraps.py` 中 `model_validate` 对 DELETE 请求的处理逻辑。
适用环境:Dify 1.17.0,Self Hosted(Docker 部署),从 1.16.1 升级后更易触发。
最快修复方案:暂无官方发布的一步修复方案,可优先尝试修改 `api/controllers/console/wraps.py` 中 `model_validate` 装饰器(约 673-676 行),让 DELETE 请求在查询参数为空时回退读取 JSON Body:
raw = request.args.to_dict(flat=True) or (request.get_json(silent=True) or {})
注意事项:该修改会改变所有 DELETE 端点的参数解析行为,可能存在兼容性影响,建议先在测试环境验证;前端改用查询参数传 `provider_id` 也可绕过,但不够健壮。
问题场景
用户在 Dify 1.17.0(Docker 自托管)中通过 工具 > MCP 页面删除已配置的 MCP Provider 时触发。升级自 1.16.1 且已有 MCP Provider 配置的环境更容易复现。前端在 DELETE 请求的 JSON Body 中携带了 `provider_id`,但后端返回 HTTP 422,MCP Provider 无法删除。
报错原文
DELETE /console/api/workspaces/current/tool-provider/mcp HTTP/1.1 422
[
{
"type": "missing",
"loc": ["provider_id"],
"msg": "Field required",
"input": {},
"url": "https://errors.pydantic.dev/2.12/v/missing"
}
]
原因分析
可能原因是 api/controllers/console/wraps.py 中 model_validate 装饰器的参数源选择逻辑存在回归。该装饰器目前对 GET 和 DELETE 请求统一只读取查询参数(request.args),完全忽略 DELETE 请求携带的 JSON Body,导致 provider_id 校验时得到空对象。此问题由 PR #40238 引入——该 PR 将 ToolProviderMCPApi.delete 从手动读取 console_ns.payload 改为使用 @model_validate(MCPProviderDeletePayload),破坏了原有的请求契约。这与 #41109 是独立问题,即使 Body 中包含有效 UUID 也会因 Body 被忽略而删除失败。
环境排查
- Dify 版本是否为 1.17.0(包含 Docker 自托管部署方式)
- 是否从 1.16.1 或更早版本升级,且配置过 MCP Provider
- 检查部署环境是否修改过
api/controllers/console/wraps.py或相关依赖 - 确认部署方式为官方 Docker Compose 部署
解决步骤
- 进入 Dify API 容器或后端源码目录,定位
api/controllers/console/wraps.py文件。 - 找到
model_validate装饰器中处理请求参数来源的代码段(约 673-676 行),当前逻辑为:
if request.method in ("GET", "DELETE"): raw = request.args.to_dict(flat=True) - 修改为回退逻辑,使 DELETE 请求在查询参数为空时读取 JSON Body:
if request.method in ("GET", "DELETE"): raw = request.args.to_dict(flat=True) or (request.get_json(silent=True) or {}) - 重启 Dify API 服务,使修改生效。
- 回到前端,重新尝试删除 MCP Provider,确认 DELETE 请求返回成功。
验证方法
修改并重启后,在 Dify 界面重新尝试删除测试 MCP Provider。若删除成功且返回 200 响应,说明问题已修复。也可直接对 /console/api/workspaces/current/tool-provider/mcp 发送带 JSON Body 的 DELETE 请求,观察是否仍返回 422。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Models + Endpoints list blank for SSO internal_user when access is via team/org model access groups](https://www.chat-gpts.plus/wp-content/uploads/2026/08/34998-1fdffe87-768x403.jpg)
![[Bug]: OpenAI GPT-5 Chat model does not support "temperature" parameter](https://www.chat-gpts.plus/wp-content/uploads/2026/08/13781-6524073e-768x403.jpg)
