# Dify as MCP Server
将Dify工作流作为Model Context Protocol (MCP)服务器暴露给Claude等AI客户端。
## 项目概述
本项目实现了一个Dify插件,允许将Dify工作流通过Model Context Protocol (MCP)协议暴露给支持该协议的AI客户端(如Claude Desktop、Cursor等)。通过这个插件,您可以:
- 将Dify工作流作为工具提供给Claude等AI
- 让AI客户端能够发现并使用您的工作流
- 无需修改工作流即可集成到AI助手中
## 特性
- ✅ 支持MCP标准的JSON-RPC接口
- ✅ 工具自动发现和注册
- ✅ 与Claude Desktop/Cursor等客户端兼容
- ✅ 安全的SSE连接实现
- ✅ 服务器端会话管理
- 🔄 符合最新的MCP Streamable HTTP规范(基于PR #206)
## 背景
Model Context Protocol (MCP) 是一个开放标准,允许AI模型与外部工具和数据源交互。随着MCP的发展,协议正在从HTTP+SSE模式过渡到新的"Streamable HTTP"传输模式,为无状态服务器提供更好的支持。
本项目跟踪并实现了最新的MCP协议变化,特别是:
- 服务器负责生成和管理会话ID
- 支持无状态服务器模式(适合Dify插件环境)
- 标准化的消息格式和流处理
- 安全的会话管理和身份验证
2. 配置插件设置:
- **应用ID**: 您想要暴露的Dify应用ID
- **其他设置**: 根据需要配置
## 使用方法
### 1. 在Dify中配置
确保您的Dify应用包含至少一个工作流,并且已经正确配置。
### 2. 在客户端使用
1. 打开客户端
2. 进入设置 > MCP服务器
3. 添加新的MCP服务器,URL填写:
```
https://您的Dify实例地址/difyapp_as_mcp_server
```
4. 保存并启用服务器
### 3. 在Cursor中使用
1. 打开Cursor
2. 进入设置 > AI > MCP
3. 添加服务器地址:
```
https://您的Dify实例地址/difyapp_as_mcp_server
```
4. 保存并启用
5. 在Cursor Agent中使用您的工具
## 技术细节
### 架构
本插件使用两个端点实现MCP服务器:
- **GET 端点**: 处理SSE连接和HTML页面
- **POST 端点**: 处理JSON-RPC请求
由于Dify插件环境的限制,我们采用了"最小可行"的SSE实现,包括:
- 服务器端会话ID生成
- 有限心跳模式(约5分钟)
- 客户端断开后自动重连
- 符合最新的Streamable HTTP规范
### 工具注册
工具会自动从Dify工作流中生成,并通过MCP协议暴露给客户端。工具定义包括:
- 名称和描述
- 输入参数定义
- 返回值类型
- 参数验证
### 无状态模式支持
本插件支持符合最新MCP规范的无状态服务器模式,这意味着:
- 服务器不需要维护长期连接
- 每个请求都是独立的
- 通过会话ID关联请求
- 适合Dify的无状态API环境
## 故障排除
1. **连接问题**:
- 确保URL正确并可以访问
- 检查是否在防火墙或代理后面
2. **工具不可见**:
- 确保应用ID配置正确
- 检查工作流是否已发布
- 确认Dify API密钥有足够权限
3. **工具执行失败**:
- 检查Dify应用日志
- 确认工作流在Dify中可以正常运行
## 贡献
欢迎提交问题和合并请求。在提交代码之前,请确保遵循代码风格并添加适当的测试。
## 许可证
MIT
## 致谢
本项目参考了[Model Context Protocol](https://github.com/modelcontextprotocol/specification)规范,特别是最新的[Streamable HTTP传输PR #206](https://github.com/modelcontextprotocol/specification/pull/206)。
VIBE CODING 探索产物 不可用状态
**Author:** yevanchen
**Version:** 0.0.1
**Type:** extension
### Description