Dify Workflows MCP Server

  • build
import axios from 'axios'; /** * 封装 Axios 客户端,处理通用配置和请求。 */ class HttpClient { client; /** * 构造函数,创建 HttpClient 实例。 * @param baseUrl 基础 URL * @param appSk 应用密钥 */ constructor(baseUrl, appSk) { this.client = axios.create({ baseURL: baseUrl, headers: { Authorization: `Bearer ${appSk}`, 'Content-Type': 'application/json', }, }); } /** * 发起 GET 请求。 * @param url 请求 URL * @returns 响应数据 * @throws 当请求失败时抛出错误 */ async get(url) { try { const response = await this.client.get(url); return response.data; } catch (error) { throw new Error(`GET 请求失败: ${error.message}`); } } /** * 发起 POST 请求。 * @param url 请求 URL * @param data 请求数据 * @returns 响应数据 * @throws 当请求失败时抛出错误 */ async post(url, data) { try { const response = await this.client.post(url, data); return response.data; } catch (error) { throw new Error(`POST 请求失败: ${error.message}`); } } } /** * 提供与 Dify API 交互的方法。 */ export class DifyClient { httpClient; /** * 构造函数,创建 DifyClient 实例。 * @param baseUrl Dify API 的基础 URL * @param appSk 应用程序的密钥 */ constructor(baseUrl, appSk) { this.httpClient = new HttpClient(baseUrl, appSk); } /** * 获取 Dify 应用的信息。 * @returns 包含应用信息的 Promise * @throws 当获取应用信息失败时抛出错误 */ async getAppInfo() { try { return await this.httpClient.get('/info'); } catch (error) { throw new Error(`获取应用信息失败: ${error.message}`); } } /** * 获取 Dify 应用的参数。 * @returns 包含应用参数的 Promise * @throws 当获取参数失败时抛出错误 */ async getParameters() { try { return await this.httpClient.get('/parameters'); } catch (error) { throw new Error(`获取参数失败: ${error.message}`); } } /** * 运行 Dify 工作流。 * @param inputs 工作流的输入数据 * @returns 包含工作流输出的 Promise * @throws 当运行工作流失败时抛出错误 */ async runWorkflow(inputs) { try { const randomUser = this.generateRandomUser(); const responseData = await this.httpClient.post('/workflows/run', { inputs, response_mode: 'blocking', user: randomUser, }); const { code, checkResult } = responseData.data.outputs; const result = [code, checkResult].join('\n\n'); return result || 'No response from workflow'; } catch (error) { throw new Error(`运行工作流失败: ${error.message}`); } } /** * 停止指定 ID 的任务执行。 * @param taskId 要停止的任务的 ID * @throws 当停止执行任务失败时抛出错误 */ async stopExecution(taskId) { try { await this.httpClient.post(`/chat-messages/${taskId}/stop`, null); // 修改点:不传递请求体 } catch (error) { throw new Error(`停止执行任务失败: ${error.message}`); } } /** * 生成一个随机的用户名。 * @returns 随机生成的用户名 */ generateRandomUser() { return `dify-mcp-server-ts-${Math.random().toString(16).slice(0, 12)}`; } }