# dify_workflow_edit_mcp
**Repository Path**: awol2010ex/dify_workflow_edit_mcp
## Basic Information
- **Project Name**: dify_workflow_edit_mcp
- **Description**: 一个基于 Rust 的 MCP(Model Context Protocol)服务器,用于通过 Dify 控制台 API 编辑和管理 Dify 工作流
- **Primary Language**: Rust
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-09
- **Last Updated**: 2026-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Dify Workflow Edit MCP
一个基于 Rust 的 MCP(Model Context Protocol)服务器,用于通过 Dify 控制台 API 编辑和管理 Dify 工作流。


---
**仅 5 个精简工具**,通过 action/mode/view 子命令做功能分流。
**敏感信息零泄露**:`base_url`, `app_id`, `email`, `password` 全部从启动参数注入 MCP 服务器,启动时自动登录并拉取草稿,不经过 JSON-RPC 通道。
---
## 快速开始
### 编译
```bash
cargo build --release
```
产物在 `target/release/dify_workflow_edit_mcp.exe`(Windows)或对应平台可执行文件。
### 在 mcp.json 中配置
> 需要先将编译产物放到合适的路径,以下 `` 请替换为实际路径。
```json
{
"mcpServers": {
"dify-workflow-edit": {
"command": "dify_workflow_edit_mcp",
"args": [
"--base-url", "http://localhost:5001",
"--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12",
"--email", "admin@example.com",
"--password", "your_password"
]
}
}
}
```
或者用 API Key(如果只需运行已发布工作流):
```json
{
"mcpServers": {
"dify-workflow-edit": {
"command": "dify_workflow_edit_mcp",
"args": [
"--base-url", "http://localhost:5001",
"--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12",
"--api-key", "app-xxxxxxxxxxxxx"
]
}
}
}
```
需要走 HTTP 代理(如局域网 Dify 需科学上网):
```json
{
"mcpServers": {
"dify-workflow-edit": {
"command": "dify_workflow_edit_mcp",
"args": [
"--base-url", "http://localhost:5001",
"--app-id", "4c1e7f32-abcd-1234-ef56-7890abcdef12",
"--email", "admin@example.com",
"--password", "your_password",
"--proxy", "http://127.0.0.1:7890"
]
}
}
}
```
启动后自动:
1. 登录控制台 API(获取 session cookie)
2. 拉取指定应用的草稿工作流(graph + features)
3. 进入 STDIO 循环等待 MCP 请求
---
### 在 Trae IDE 中安装
[Trae IDE](https://www.trae.ai) 内置 MCP 支持,配置步骤如下:
1. 打开 Trae → 左侧底部 **⌘ M**(Mac)/ **Ctrl M**(Windows)→ **启用 Agent 模式**
2. 点击 Input 框附近的 **MCP 配置** 按钮(或 Settings → MCP Server)
3. 在 `mcp.json` 编辑器中填入上述配置
4. 点击「启动」/「重载」使配置生效
> 也可直接编辑 Trae 配置文件 `~/.config/trae/mcp.json`(macOS/Linux)或 `%APPDATA%\Trae\mcp.json`(Windows)。
完成后在对话中直接调用 MCP 工具即可编辑 Dify 工作流。
---
## CLI 参数
| 参数 | 必填 | 说明 |
|------|------|------|
| `--base-url` | ✅ | Dify 服务地址,如 `http://localhost:5001` |
| `--app-id` | ✅ | 工作流应用 ID(UUID 格式) |
| `--email` | ⚠️ | 管理员邮箱(与 `--api-key` 二选一) |
| `--password` | ⚠️ | 管理员密码 |
| `--api-key` | ⚠️ | 公有 API Key(备选认证) |
| `--proxy` | ❌ | HTTP 代理地址,如 `http://127.0.0.1:7890` |
| `--info` | ❌ | 打印服务器信息后退出 |
| `--help` / `-h` | ❌ | 显示帮助 |
| `--version` / `-v` | ❌ | 显示版本 |
---
## 工具概览
| # | 工具 | 作用 | 子命令 |
|---|------|------|--------|
| 1 | **get_workflow** | 查看工作流(首次自动拉取草稿并缓存) | `graph`, `node`, `stats`, `features`, `env_vars`, `conv_vars`, `block_configs` |
| 2 | **edit_workflow** | 编辑图(节点/边 CRUD),操作本地缓存 | `add_node`, `update_node`, `remove_node`, `add_edge`, `remove_edge` |
| 3 | **sync_workflow** | 将本地缓存同步推送到 Dify 服务器 | — |
| 4 | **run_workflow** | 运行草稿/单节点调试/运行已发布 | `draft`, `node`, `published` |
| 5 | **publish_workflow** | 版本管理:发布/从版本恢复/列表 | `publish`, `restore`, `list` |
---
## 详细使用
### 1. get_workflow
```
get_workflow view=graph # 完整图结构(首次自动拉取草稿)
get_workflow view=node node_id=xxx # 单个节点详情
get_workflow view=stats # 统计信息
get_workflow view=features # 特征配置
get_workflow view=env_vars # 环境变量
get_workflow view=conv_vars # 对话变量
get_workflow view=block_configs # 默认块模板
```
### 2. edit_workflow(图编辑)
```
# 节点操作
edit_workflow action=add_node type=llm title="问答助手"
edit_workflow action=add_node type=code title="代码节点" x=100 y=200 data={...}
edit_workflow action=update_node node_id=xxx title="新标题"
edit_workflow action=update_node node_id=xxx x=100 y=200
edit_workflow action=update_node node_id=xxx data={...} # 完整替换配置
edit_workflow action=update_node node_id=xxx field=variables.prompt_template data={...} # 局部字段更新
edit_workflow action=remove_node node_id=xxx
# 边操作
edit_workflow action=add_edge source_node_id=A target_node_id=B
edit_workflow action=remove_edge source_node_id=A target_node_id=B
```
### 3. sync_workflow
将本地缓存编辑推送到 Dify 服务器。会发送 hash 做冲突检测。
```
sync_workflow # 无参数
```
### 4. run_workflow
```
run_workflow mode=draft [inputs={...}] # 运行草稿
run_workflow mode=node node_id=xxx [inputs={...}] # 单节点调试
run_workflow mode=published [inputs={...}] [user=...] # 运行已发布(需启动时 --api-key)
```
### 5. publish_workflow
```
publish_workflow action=publish # 发布
publish_workflow action=publish marked_name="v1.0" marked_comment="初始版本"
publish_workflow action=restore workflow_id=xxx # 从版本恢复
publish_workflow action=list # 查看版本列表
```
---
## 典型工作流
```mermaid
graph LR
A[启动: 参数注入] --> B[自动登录 + 拉取草稿]
B --> C[get_workflow view=graph]
C --> D[edit_workflow]
D --> E[sync_workflow]
E --> F[publish_workflow]
F --> G[run_workflow mode=published]
```
1. **mcp.json 配置**`--base-url --app-id --email --password`
2. **查看** → `get_workflow view=graph`(已自动拉取)
3. **编辑** → `edit_workflow action=add_node / update_node / remove_node / add_edge`
4. **同步** → `sync_workflow`(推回 Dify)
5. **发布** → `publish_workflow action=publish`
6. **运行** → `run_workflow mode=published inputs={...}`
---
## 架构
```
src/
├── main.rs # CLI 参数解析 + 自动登录 + 拉取草稿 + STDIO 主循环
├── lib.rs # 模块导出
├── core.rs # 核心类型(DifyServer, WorkflowGraph, Node, Edge 等)
├── client.rs # Dify HTTP API 客户端(含 login + 自动重登 + 代理支持)
├── handlers.rs # JSON-RPC 处理器 + 5 工具分发
└── tools/
├── mod.rs # 工具入口
├── graph.rs # edit_workflow 图操作核心
├── workflow.rs # get/sync/publish 工作流生命周期
├── run.rs # run_workflow 运行
└── config.rs # get_workflow 配置相关视图
```
## 凭据安全设计
| 方面 | 实现 |
|------|------|
| 敏感信息传递 | 仅通过 mcp.json 的 CLI 参数,不经过 JSON-RPC |
| 会话过期处理 | client.rs 自动检测 401 → 重新登录并重试一次 |
| API Key 备选 | `--api-key` 模式无需暴露控制台凭据 |
| 代理支持 | `--proxy` 参数透传给 reqwest |
# LICENSE
Apache-2.0