1. Dify v1.6.0 双向 MCP 到底解决了什么问题
Dify v1.6.0 最核心的变化是支持双向 MCP:既能从 Dify 的 Agent 和工作流里调用外部 MCP 服务,也能把 Dify 自己的应用反向暴露成标准 MCP 端点给别的客户端用。说白了就是“与己方便,与人方便”——你既可以用别人的工具,也能把自己的工作流打包成工具给别人调。
这个功能适合谁?如果你已经在用 Dify 搭 Agent 或 Chatflow,但受限于插件生态不够全,想接本地文件、数据库、第三方图表服务,那双向 MCP 就是最直接的扩展方式。另一个场景是团队内部:你把一个知识库问答工作流发布成 MCP 服务,其他同事在 Cursor、Trae、VS Code 里直接调用,不用重复搭一套。
但实际配置时有个绕不开的问题:每个 MCP 服务、每个客户端都要单独配 Key 和 API 地址,Agent 调外部工具一套凭证,工作流反向暴露又一套,客户端接入再来一套。管理起来很碎。我试过用 TaoToken 做统一 Key 和 API 通道,把模型调用和 MCP 接入收敛到一个入口,配置量能明显降下来。下面按“前置准备 → 配置骨架 → 双向注册 → 连通性验证 → 报错排查”的顺序走一遍,目标是你复制配置就能跑通。
2. TaoToken 前置:统一 Key 与 API 通道准备
TaoToken 在这里的角色是统一模型调用入口。Dify 里 Agent 节点、工作流里的 LLM 节点、以及 MCP 服务背后如果涉及模型推理,都可以走同一个 API 通道,不用每个服务单独申请和轮换 Key。
先拿到 API Key。打开控制台页面:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite在 API Keys 页面创建一个新 Key,复制保存。这个 Key 后面会填到 Dify 的模型供应商配置里,也会用在 MCP 服务端的环境变量中。
API 基础地址统一用:
https://taotoken.net/api注意这个地址不加 UTM 参数,直接作为 base_url 填。模型对话调试可以在模型对话页先验证 Key 是否可用:
https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite如果你后续要长期跑编码类 Agent 或高频工作流,可以看下 Coding Plan 的额度方案:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite接入文档在这里,配置格式和参数说明以文档为准:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite前置准备就三样:一个 API Key、base_url 用https://taotoken.net/api、以及确认 Dify 版本 ≥ v1.6.0。版本不够的话先升级,双向 MCP 的入口在旧版里没有。
3. 可复制配置:settings.json 与 config.toml 骨架
这一节给两份可直接改的配置骨架。settings.json 用于 MCP 客户端侧(比如 Cursor、Claude Code 这类支持 MCP 的终端),config.toml 用于 Dify 侧或 MCP 服务端的模型通道配置。两份都围绕 TaoToken 统一 Key 来写。
先看 settings.json。这是 MCP 客户端注册 Dify 反向暴露出来的 MCP 服务时用的:
{ "mcpServers": { "dify-file-chat": { "type": "http", "url": "http://127.0.0.1/mcp/server/ACmAf7BOpaoUP8Fs/mcp", "headers": { "Authorization": "Bearer YOUR_TAOTOKEN_API_KEY" } }, "dify-chart-agent": { "type": "http", "url": "http://127.0.0.1/mcp/server/REPLACE_WITH_YOUR_ID/mcp", "headers": { "Authorization": "Bearer YOUR_TAOTOKEN_API_KEY" } } } }关键点:type填http,url填 Dify 应用启用 MCP 服务后给出的地址,headers里带上 TaoToken 的 Key。如果你的客户端不支持 headers 字段,就把 Key 放到环境变量里,在配置中用${TAOTOKEN_API_KEY}引用。
再看 config.toml。这是 MCP 服务端或 Dify 模型通道的配置骨架:
[model_provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "YOUR_TAOTOKEN_API_KEY" model = "claude-sonnet-4-20250514" timeout = 120 [mcp_server] enabled = true transport = "http" host = "0.0.0.0" port = 8080 [mcp_server.auth] type = "bearer" token = "YOUR_TAOTOKEN_API_KEY"base_url固定用https://taotoken.net/api,api_key填控制台创建的 Key。model按你实际要用的模型名填,接入文档里有完整模型列表。timeout建议给到 120 秒,MCP 工具调用链路比普通对话长,超时太短容易断。
两份配置改完,先别急着启动,确认三个值:Key 没有多余空格、base_url 没有尾部斜杠、MCP 服务 URL 里的 ID 是真实应用生成的。
4. 双向注册:MCP 服务端与客户端配置链路
双向 MCP 的“双向”要分开配:一个方向是 Dify 作为客户端去调外部 MCP 服务,另一个方向是 Dify 作为服务端把应用暴露出去。
4.1 Dify 调用外部 MCP 服务
进入 Dify 工具页,新增 MCP 配置。弹窗里填服务名称和 URL。以图表类 MCP 为例,名称写mcp-server-chat,URL 从 MCP 广场对应服务页面复制。授权完成后能看到详细工具列表,确认工具数量对得上。
然后在 Agent 应用里,工具一栏添加这个 MCP 服务,默认全开,按需关掉不用的。系统指令参考:
你是一个智能代理,连接到 mcp-server-chat 并访问其工具。根据用户意图灵活创建图表。在工作流里用的话,新增 Agent 节点,安装插件、选择策略、配置模型、添加工具、写系统指令。模型配置这里就填 TaoToken 的 base_url 和 Key,这样 Agent 节点和 MCP 工具走同一条通道。
4.2 Dify 应用反向暴露为 MCP 服务端
打开一个 Chatflow 应用,先发布。在编排页面左上角找到 MCP 服务板块,编写服务描述,点击启用。绿灯亮起说明运行成功,拿到 MCP 服务 URL。
如果开始节点有必填参数,启用 MCP 服务时还要配置参数描述,否则外部客户端调用时不知道传什么值。服务描述要写清楚这个工作流干什么,外部 LLM 才知道什么时候该调它。
4.3 客户端接入 Dify MCP 服务
以支持 MCP 的客户端为例,创建 MCP 服务器,类型选 HTTP,URL 填 Dify 给出的地址,保存后绿灯亮起表示创建成功。然后在对话页面选择这个 MCP 服务,直接对话就能用上你发布的工作流。
Cursor、Trae、VS Code 的配置逻辑一样,把 settings.json 里的 mcpServers 段贴到对应配置文件即可。Claude Code 的接入方式参考:
https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claude-code&utm_campaign=rewrite5. 连通性验证与成功结果
配置完必须验证,不然等到用的时候才发现不通,排查成本更高。
第一步,验证 TaoToken Key 可用。用 curl 直接打模型接口:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer YOUR_TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 10 }'返回里有choices字段且内容正常,说明 Key 和通道没问题。
第二步,验证 Dify 调外部 MCP。在 Agent 应用里发一条会触发工具调用的消息,比如“生成一个饼图,数据是 18-25:32.5, 26-35:41.2”。观察日志里是否有 MCP 工具调用记录,返回结果里是否包含图表数据。
第三步,验证 Dify 反向 MCP 服务。在客户端里选中 Dify 的 MCP 服务,发一条该工作流能处理的 query。成功的话会返回工作流执行结果,而不是报连接错误。
三个验证都过,说明双向链路通了。任何一步失败,看下一节的排查表。
6. 本篇常见错排查
配置过程中容易踩的坑集中在这几类,对照排查:
| 报错现象 | 可能原因 | 处理方式 |
|---|---|---|
| 401 Unauthorized | Key 错误或带了多余空格 | 重新复制 Key,检查 headers 格式 |
| 连接超时 | base_url 写错或网络不通 | 确认用https://taotoken.net/api,不加尾部斜杠 |
| MCP 服务绿灯不亮 | URL 里的应用 ID 不对 | 重新从 Dify 应用页复制 MCP 服务 URL |
| 工具列表为空 | 授权未完成或工具被全部关闭 | 重新授权,检查工具开关 |
| 客户端调用无响应 | 开始节点必填参数未配置描述 | 在 MCP 服务配置里补参数描述 |
| 工作流执行报参数缺失 | 客户端传参名与开始节点不一致 | 核对参数名,大小写敏感 |
| 模型调用 404 | model 名写错 | 查接入文档里的模型列表 |
| 反向 MCP 调用返回空 | 工作流未发布 | 先发布应用再启用 MCP 服务 |
排查顺序建议从外到内:先 curl 验证 Key,再验证 Dify 内部模型通道,最后验证 MCP 双向链路。这样能快速定位是凭证问题、配置问题还是应用逻辑问题。
如果排查中需要重新生成 Key 或查看调用记录,回控制台:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite接入细节和参数说明以文档为准:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite生产环境升级前务必备份 docker-compose.yaml 和 volumes 目录,非生产环境可以先升 v1.6.0 体验双向 MCP。配置跑通后,把 settings.json 和 config.toml 存一份模板,下次接新 MCP 服务只改 URL 和名称就行。