内容
<div align="center">
# dify-mcp
### 最完整的MCP服务器和CLI,用于 [Dify](https://github.com/langgenius/dify)
**138种工具。 16个命名空间。 一个注册表。** 让任何AI代理都可以自主地构建、测试和部署Dify工作流——人类在UI上可以做的所有操作,现在都可以通过脚本实现。
[](LICENSE)
[](https://nodejs.org)
[](#tools)
[](#live-verified)
与 **Claude Code** · **Codex** · **Gemini CLI** · **Cursor** · **Cline** · **Windsurf** · **Roo Code** · **Continue** · **Aider** · **Zed** 等兼容。
</div>
---
## 什么是dify-mcp?
Dify是一个强大的开源LLM应用平台——但其工作流构建器是一个**可视化拖拽编辑器**。如果您想让AI代理以编程方式创建工作流、连接节点、测试、迭代和发布——而无需浏览器呢?
**dify-mcp** 就是桥梁。它公开了**整个Dify控制台API**,作为一个统一的工具注册表,拥有**两个接口**:一个CLI,任何具备shell能力的代理都可以驱动;一个MCP服务器(stdio),任何MCP兼容的主机都可以连接。相同的138种工具,相同的JSON接口,相同的安全保证。
```
┌──────────────────────────────────────────────────────────┐
│ dify-mcp │
│ │
│ ┌──────────┐ ┌────────────────────┐ ┌─────────┐ │
│ │ CLI │───▶│ 138-tool │───▶│ Dify │ │
│ │ difywf │ │ registry │ │ API │ │
│ └──────────┘ │ │ └─────────┘ │
│ ┌──────────┐ │ app · workflow │ ▲ │
│ │ MCP │───▶│ provider · rag │─────────┘ │
│ │ stdio │ │ agent · snippet │ │
│ └──────────┘ │ stats · audio ... │ │
│ └────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
## 与您喜欢的代理兼容
dify-mcp的设计是代理无关的——没有SDK锁定,没有专有协议。如果您的代理可以运行shell命令,它就可以使用CLI。如果它支持MCP,它就可以连接服务器。大多数流行的代理都支持这两种方式:
| 代理 | MCP | CLI | 快速设置 |
|-------|:---:|:---:|-------------|
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | ✅ | ✅ | `claude mcp add dify -- difywf mcp serve` |
| [Codex](https://github.com/openai/codex) | ✅ | ✅ | `[mcp_servers.dify]` in `~/.codex/config.toml` |
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | ✅ | ✅ | `mcpServers.dify` in `~/.gemini/settings.json` |
| [Cursor](https://cursor.com) | ✅ | ✅ | `.cursor/mcp.json` |
| [Cline](https://github.com/cline/cline) | ✅ | ✅ | 与Cursor相同 |
| [Windsurf](https://codeium.com/windsurf) | ✅ | ✅ | Windsurf设置中的MCP服务器配置 |
| [Roo Code](https://github.com/RooCodeInc/Roo-Code) | ✅ | ✅ | Roo Code设置中的MCP服务器配置 |
| [Continue](https://github.com/continuedev/continue) | ✅ | ✅ | `experimental.mcpServer` in `config.json` |
| [Zed](https://zed.dev) | ✅ | ✅ | `context_servers` in `~/.config/zed/settings.json` |
| [Aider](https://github.com/Aider-AI/aider) | - | ✅ | 直接在聊天中使用`difywf`命令 |
如果您的代理不支持MCP或运行shell命令?没问题!您可以直接使用CLI。
## 为什么您会喜欢dify-mcp
- **完整的覆盖。** 不是子集。不是公共API的包装器。它与**内部控制台API**通信——与Dify Web UI使用的接口相同。创建应用,编写节点图,验证,测试运行,发布,管理版本,触发器,提供程序,插件,RAG管道,代码片段,代理配置,注释,注解,音频,统计数据。如果UI可以做到,那么您的代理也可以。
- **设计上代理无关。** 没有SDK锁定。CLI适用于任何可以运行shell命令的代理。MCP服务器适用于任何MCP主机。两者都返回结构化的JSON—— `{ ok, data }` 或 `{ ok: false, error: { code, message, retryable } }` ——因此代理永远不会刮取人类可读的文本。
- **Cookie身份验证,已处理。** Dify的控制台使用cookie + CSRF双提交,而不是Bearer令牌。 dify-mcp捕获,存储和自动刷新会话——包括服务器端刷新令牌轮换,静默地使天真客户端失效。
- **默认安全。** 破坏性操作需要明确的`confirm=true` / `--yes`。图形在API调用之前离线验证。每个突变都记录在审计日志中。 `--dry-run`显示差异而不保存。
## 实时验证
每个工具类别都已针对**cloud.dify.ai**进行了实时凭证测试:
- ✅ 完整创作循环:创建应用→同步草稿→运行草稿→发布→列出版本
- ✅ 已使用所有16个命名空间:应用、工作流、提供程序、插件、触发器、代码片段、RAG、代理、统计数据、注释、注解、音频、文件、运行、工作区
- ✅ MCP传输:`tools/call`通过stdio与实时cookie身份验证
- ✅ 42个单元测试 · 类型检查干净 · MCP冒烟测试(138种工具)
## 快速开始
**前提条件:** Node >= 23.6(原生TypeScript类型剥离——无构建步骤)。
```bash
git clone https://github.com/alexjiaguo/dify-mcp.git
cd dify-mcp
npm install
npm link # 将`difywf`放入您的PATH中(可选)
```
### 身份验证
Dify控制台使用**cookie + CSRF身份验证**。最简单的方法:
```bash
# 1. 从浏览器导出cookie(cookie-editor扩展→导出→JSON)
# 2. 保存为cookies.json,然后:
difywf auth import-cookies --base-url https://cloud.dify.ai --file cookies.json
# 或使用电子邮件/密码(无需浏览器):
difywf auth login-console --base-url https://your-dify --email you@x --password '***'
difywf auth status # 确认:显示基本URL + cookie名称(值被遮蔽)
```
### 构建工作流
```bash
difywf agent guide # 代理自助服务手册
difywf app list # 查看您的应用
difywf app create --mode workflow --name "my-agent-workflow"
difywf wf node defaults <app-id> llm # 获取LLM节点的模式
difywf wf validate --graph graph.json # 离线:结构,引用,循环
difywf wf draft sync <app-id> --graph graph.json --dry-run # 预览差异
difywf wf draft sync <app-id> --graph graph.json # 保存草稿
difywf wf test <app-id> --input query="hello" # 测试运行草稿
difywf wf publish <app-id> --yes # 发布
```
### 连接您的代理(MCP)
相同的二进制文件,相同的138种工具。为您的主机复制并粘贴配置:
<details>
<summary><b>Claude Code</b></summary>
```bash
claude mcp add dify -- difywf mcp serve
```
</details>
<details>
<summary><b>Codex</b> (<code>~/.codex/config.toml</code>)</summary>
```toml
[mcp_servers.dify]
command = "difywf"
args = ["mcp", "serve"]
```
</details>
<details>
<summary><b>Cursor</b> (<code>.cursor/mcp.json</code>) · <b>Cline</b> · <b>Roo Code</b> · <b>Continue</b></summary>
```json
{
"mcpServers": {
"dify": {
"command": "difywf",
"args": ["mcp", "serve"]
}
}
}
```
</details>
<details>
<summary><b>Gemini CLI</b> (<code>~/.gemini/settings.json</code>)</summary>
```json
{
"mcpServers": {
"dify": {
"command": "difywf",
"args": ["mcp", "serve"]
}
}
}
```
</details>
<details>
<summary><b>Windsurf</b> (Codeium)</summary>
在Windsurf设置(`Cmd+,` -> MCP Servers)中添加MCP服务器,命令为`difywf`,参数为`["mcp", "serve"]`。
</details>
<details>
<summary><b>Zed</b> (<code>~/.config/zed/settings.json</code>)</summary>
```json
{
"context_servers": {
"dify": {
"command": "difywf",
"args": ["mcp", "serve"]
}
}
}
```
</details>
<details>
<summary><b>Aider</b>(仅限CLI,无MCP)</summary>
Aider不支持MCP,但它可以运行shell命令。直接使用CLI:
```
/run difywf app list
/run difywf wf draft sync <app-id> --graph graph.json
```
</details>
> 如果`difywf`不在PATH中?使用绝对路径:`node /path/to/dify-mcp/bin/difywf.js mcp serve`。
## 工具
**138种工具,涵盖16个命名空间。** 运行`difywf --help`获取完整的实时列表,或运行`difywf agent guide`获取面向代理的指南。
| 命名空间 | 工具 | 功能 |
|-----------|-------|-------------|
| `app` | 13 | 列出、创建、更新、删除、导出、导入、复制、重命名、转换应用 |
| `workflow` | 22 | 获取/同步草稿、验证、运行、发布、节点默认值、变量、版本、HITL |
| `provider` | 3 | 列出提供程序、列出模型、设置凭证 |
| `plugin` | 1 | 列出已安装的插件 |
| `trigger` | 4 | 创建、启用、列出、Webhook触发器;运行触发器 |
| `workspace` | 4 | 列出、获取、切换工作区;列出成员 |
| `file` | 1 | 上传文件用于运行 |
| `runs` | 4 | 列出、获取、节点执行、导出运行轨迹 |
| `stats` | 5 | 每日对话/终端、令牌成本、应用交互、在线用户 |
| `comment` | 3 | 列出、添加、解决工作流注释 |
| `annotation` | 12 | 列出、添加、删除、回复、设置、导出、批量导入、历史记录 |
| `audio` | 3 | 转录(STT)、合成(TTS)、列出语音 |
| `rag` | 20 | 完整的RAG管道生命周期:数据集、模板、草稿、同步、运行、发布、版本 |
| `snippet` | 22 | 自定义代码片段生命周期:创建、导入、草稿、同步、运行、发布、版本 |
| `agent` | 16 | 代理配置技能/文件、驱动文件/技能、沙盒读取/上传 |
| `explore` | 2 | 运行和停止已安装的应用 |
| `auth` | 2 | 状态、登录、导入cookie |
## 安全
| 机制 | 功能 |
|-----------|-------------|
| **确认门控** | 破坏性操作(`delete`、`publish`、`restore`、`set_credentials`)需要`confirm=true` / `--yes`。无则退出码`4`。 |
| **离线验证** | `sync_draft`在调用API之前验证图结构、变量引用、连接性和循环。错误中止,退出`5`。 |
| **干运行** | `sync_draft`上的`--dry-run`返回结构差异而不保存。 |
| **审计日志** | 每个突变都追加到`~/.difywf/audit.jsonl`(已屏蔽的机密)。 |
| **自动刷新** | Cookie会话通过刷新令牌cookie自动刷新,服务器端轮换持续记录。 |
**错误/退出代码:** `USAGE_ERROR(2)`、`AUTH_REQUIRED(3)`、`CONFIRM_REQUIRED(4)`、`VALIDATION_FAILED(5)`、`RBAC_DENIED(6)`、`NOT_FOUND(7)`、`DSL_VERSION_MISMATCH(8)`、`RATE_LIMITED(9)`、`SERVER_ERROR(10)`、`NETWORK_ERROR(11)`。在重试之前检查`error.retryable`。
## 开发
```bash
npm run typecheck # tsc --noEmit
npm test # 42个单元测试
npm run smoke:mcp # MCP stdio冒烟测试(138种工具,JSON-RPC握手)
```
无构建步骤。源代码直接通过Node的类型剥离运行。
## 许可证
Apache-2.0 — 见 [LICENSE](LICENSE)。
<div align="center">
**如果这为您节省了时间,⭐是最好的感谢。**
为代理构建,由代理维护。
</div>