把 Dify 中已经跑通的翻译工作流发布成 translate_tool,再通过 MCP Server 插件暴露成http://192.168.1.100/mcp/sse,这条链路最容易出问题的位置通常不是工作流节点本身,而是 Dify 调用 DeepSeek 时的模型通道配置。本文只处理这个接入槽:在 Dify 的模型供应商/OpenAI-Compatible 里,把 Base URL 指向 TaoToken,把 API Key 换成在 TaoToken 官网创建的新 Key。你可以先打开 TaoToken 官网 创建 Key;后续 Dify 发布tool_12345、安装 MCP Server 插件、填写插件 JSON、修改.env里的EXPOSE_PLUGIN_DEBUGGING_HOST和ENDPOINT_URL_TEMPLATE仍按原 Dify+MCP 流程操作。TaoToken 在这里只负责给 Dify 中的 DeepSeek 模型调用提供 Key 和 Base URL,不替代 MCP Server 插件,也不改变工作流发布工具的逻辑。配通后,外部客户端请求http://192.168.1.100/mcp/sse,translate_tool能返回“你好,世界!”,就说明 Dify+DeepSeek+MCP 链路已经打通。
一、原问题与场景:Dify 工作流发布为 MCP 工具,DeepSeek 通道需要单独配置
很多人在 Dify 里把翻译工作流调通后,会卡在“如何让外部客户端复用”这一步。Dify 本身可以把工作流发布成工具,比如发布一个名为translate_tool的翻译工具,系统会生成类似tool_12345的工具 ID。之后再到 Dify 插件市场安装 MCP Server 插件,把tool_12345暴露成 MCP 服务,外部客户端就可以通过http://192.168.1.100/mcp/sse这样的地址调用。
问题在于,Dify 工作流内部通常还会调用大模型节点。如果工作流里的 DeepSeek 节点仍然使用旧的模型供应商配置,那么即使 MCP Server 插件配置正确,外部请求也可能在 Dify 执行工作流时失败。常见表现包括 Dify 工作流调试时报 401、模型不存在、连接超时,或者 MCP 接口返回 200 但内容为空。这个时候不要先怀疑 MCP 插件,而是先确认 Dify 是否能正常调用 DeepSeek。
本文的处理方式很明确:MCP Server 插件负责把 Dify 工具暴露成 MCP 服务;TaoToken 只负责 Dify 调用 DeepSeek 时的模型 API 通道。两者职责不同。你需要做的是在 Dify 的 OpenAI-Compatible 模型供应商里,把 Base URL 改成https://taotoken.net/api,API Key 填刚创建的 TaoToken Key。这样 Dify 里的 DeepSeek 节点才走 TaoToken 通道,后续发布translate_tool、生成tool_12345、配置 MCP Server 插件才有意义。
二、TaoToken 前置:创建 Key,并在 Dify OpenAI-Compatible 填 Base URL
先到 TaoToken 官网 注册或登录,进入控制台后找到 API Keys 页面,创建一个新的 Key。创建后复制出来,本文示例统一写成YOUR_API_KEY。如果你还没有创建 Key,可以直接打开 API Keys 页面处理。
接下来进入 Dify 控制台。不同版本的 Dify 菜单名称可能略有差异,通常路径是“设置”里的“模型供应商”,找到 OpenAI-Compatible 或 OpenAI-API-compatible。新建一个供应商配置,建议命名为TaoToken-DeepSeek,方便和旧配置区分。关键字段如下:
- 供应商名称:
TaoToken-DeepSeek - API Base / Base URL:
https://taotoken.net/api - API Key:
YOUR_API_KEY - 模型类型:LLM
- 模型名称:填写你在 TaoToken 控制台或文档里看到的 DeepSeek 模型 ID,例如
deepseek-chat,但要以实际可见模型为准 - 上下文长度、最大 token:按你的工作流需求填写,不要随意填超大值
这里最容易错的是 Base URL。按本篇场景,Dify 的 OpenAI-Compatible 配置里填https://taotoken.net/api,不要额外加 UTM 参数,也不要随手写成其他路径。API Key 就填刚创建的 Key。保存后,Dify 通常会提供测试按钮,先测试模型通道是否可用。测试通过后,回到你的翻译工作流,把 LLM 节点绑定到这个新建的模型供应商。注意,TaoToken 只提供模型调用所需的 Key 和 Base URL,MCP Server 插件仍然要在 Dify 里单独安装和配置。
三、可复制配置:translate_tool、MCP Server 插件 JSON 与 .env 修改
模型通道配好后,再处理工作流发布和 MCP Server 插件。第一步是在 Dify 应用管理里找到已经搭好的翻译工作流,选择发布为工具。工具名称填translate_tool,描述写清楚用途,例如“支持中英互译,支持文本输入”。输入参数按你的工作流定义,常见的是text必填,source_lang、target_lang可选,如果支持文件上传还可以加file。发布完成后,记录系统生成的工具 ID,例如tool_12345。
第二步,在 Dify 插件市场搜索 MCP Server 插件并安装。安装后进入插件配置页面,填写类似下面的 JSON。注意server_name可以自定义,url里的 IP、端口、工具 ID 都要换成你的实际值:
{ "dify_translate": { "url": "http://192.168.1.100:5001/mcp/tool_12345", "headers": { "Authorization": "Bearer YOUR_DIFY_TOOL_TOKEN" }, "timeout": 60, "sse_read_timeout": 300 } }如果你要暴露多个 Dify 工具,可以在 JSON 里增加多个键,每个键对应一个工具地址。headers是否必填取决于你的 Dify 工具认证方式;如果工具不需要额外认证,可以省略或保留为空。timeout是普通请求超时,sse_read_timeout是流式读取超时,翻译类工作流如果处理文本较长,可以适当调大。
第三步,修改 Dify 的.env文件。原流程中需要把EXPOSE_PLUGIN_DEBUGGING_HOST和ENDPOINT_URL_TEMPLATE里的localhost替换成外部客户端可以访问的服务器 IP。示例:
EXPOSE_PLUGIN_DEBUGGING_HOST=192.168.1.100 ENDPOINT_URL_TEMPLATE=http://192.168.1.100:5001如果你的原值包含路径或端口,只替换localhost部分,其他结构保留。修改完成后,重启 Dify 相关服务或插件容器,例如使用docker compose restart或重启对应容器。只改.env不重启,配置通常不会生效。这里再次强调,.env修改的是 MCP Server 插件暴露服务的访问地址,和 TaoToken 的 Base URL 不是同一件事。TaoToken 只负责 Dify 里的 DeepSeek 模型调用。
四、验证请求与成功结果:用 Python 请求 http://192.168.1.100/mcp/sse
MCP Server 插件配置完成并重启后,插件会生成一个 MCP 服务地址,例如http://192.168.1.100/mcp/sse。你可以先用 Python 请求验证translate_tool是否可用。下面这段代码可以直接照着改:
import json import requests mcp_endpoint = "http://192.168.1.100/mcp/sse" payload = { "tool_name": "translate_tool", "input": { "source_lang": "en", "target_lang": "zh", "text": "Hello, world!" } } r = requests.post( mcp_endpoint, headers={"Content-Type": "application/json"}, data=json.dumps(payload), timeout=60 ) print("status:", r.status_code) print("body:", r.text)如果链路正常,你期望看到类似下面的返回:
{"result": "你好,世界!"}只要返回里包含result,并且翻译结果是“你好,世界!”,就说明几个关键点都通过了:Dify 里的 DeepSeek 模型通道已经走 TaoToken,工作流能正常执行,translate_tool发布成功,MCP Server 插件已经正确暴露服务,.env里的外部访问地址也已生效。如果状态码是 200 但内容为空,优先检查 SSE 读取超时和反向代理配置;如果返回 401,检查 TaoToken API Key 或 Dify 工具认证头;如果返回 404,检查tool_12345和 MCP 插件 JSON 里的 URL 是否一致;如果返回 500,去看 Dify 和 MCP 插件日志。
五、本篇常见错排查:401、404、SSE 超时与 .env 未生效
第一个高频错误是 Dify 模型供应商 Base URL 填错。OpenAI-Compatible 里应填https://taotoken.net/api,不要随手加/v1、/chat/completions,除非 TaoToken 接入文档明确要求。末尾多余的斜杠也建议去掉。填错后,Dify 测试模型时可能报 404 或连接失败。
第二个错误是 API Key 无效。复制 Key 时可能带上空格,或者创建后没有启用,也可能在 Dify 保存供应商后没有重新选择模型。TaoToken 侧的 Key 错误通常表现为 401 或 invalid api key。此时回到 API Keys 重新创建并替换。
第三个错误是模型名称不匹配。Dify 模型供应商里填写的模型 ID 必须和 TaoToken 控制台或文档里可见的 DeepSeek 模型 ID 一致,否则 Dify 工作流执行时会报模型不存在。不要凭记忆写模型名。
第四个错误是 MCP Server 插件 JSON 写错。url里的tool_12345必须和 Dify 发布工具后生成的 ID 完全一致;协议、IP、端口、路径都要核对。headers如果填了认证头,也要确认 token 没有过期或写错。JSON 本身不能有多余逗号,缩进错误也可能导致插件保存失败。
第五个错误是.env修改后没有重启。EXPOSE_PLUGIN_DEBUGGING_HOST如果仍是localhost,外部客户端访问192.168.1.100时会连不上;ENDPOINT_URL_TEMPLATE如果没替换,插件生成的服务地址可能仍然指向本机。修改后要重启 Dify 和插件容器。
第六个错误是网络和代理层。服务器的防火墙、安全组、Docker 端口映射要放行 MCP 服务端口。如果前面有 Nginx,SSE 长连接需要关闭缓冲并延长读取超时,例如设置proxy_buffering off、proxy_read_timeout 300s。否则请求可能很快断开。
第七个错误是sse_read_timeout太短。翻译工作流如果处理长文本,MCP 插件读取 SSE 流的时间可能超过默认值,导致客户端只拿到半截响应或空响应。可以把插件 JSON 里的sse_read_timeout调大。
第八个错误是请求格式不对。Python 示例里使用 POST,Content-Type为application/json,body 包含tool_name和input。如果客户端发成 GET,或者 body 结构不符合插件要求,也会失败。排查时重点看/var/log/dify/mcp.log和 Dify 容器日志。
第九个错误是工作流节点仍绑定旧模型供应商。即使你在模型供应商里新建了 TaoToken-DeepSeek,如果工作流里的 LLM 节点没有切换过去,它仍然可能走旧通道。打开工作流,逐个检查 DeepSeek 节点绑定关系。
第十个错误是把 TaoToken 当成 MCP Server。TaoToken 只提供 Dify 调用 DeepSeek 的 API Key 和 Base URL,不负责把工作流暴露成 MCP 服务。MCP Server 插件、tool_12345、.env里的暴露地址,仍然属于 Dify 插件层配置。
六、语义一致 CTA:Dify + DeepSeek + MCP 链路的接入入口
如果你正在配 Dify 的 OpenAI-Compatible,准备把 DeepSeek 的 Base URL 改成 TaoToken,建议先创建 Key,再按接入文档核对 Base URL、模型 ID 和调用方式。需要创建或替换 Key,可以打开 TaoToken API Keys;需要确认https://taotoken.net/api的填写位置和模型列表,可以查看 TaoToken 接入文档。把 Dify 的模型通道和 MCP Server 插件分开处理,先在 Dify 里确认 DeepSeek 节点能正常返回,再发布translate_tool、配置 MCP 插件 JSON、修改.env,最后用 Python 请求http://192.168.1.100/mcp/sse验证translate_tool是否返回“你好,世界!”。这样排错路径最清晰,也最容易定位是模型通道问题还是 MCP 暴露问题。