UNPKG

dify-knowledge-mcp-server

Version:

MCP server for Dify knowledge base retrieval

75 lines 2.72 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import axios from "axios"; // 从环境变量读取配置 const BASE_URL = process.env.DIFY_BASE_URL; const DATASET_ID = process.env.DIFY_DATASET_ID; const DATASET_TOKEN = process.env.DIFY_DATASET_TOKEN; const TITLE = process.env.TITLE || "Dify Dataset"; const DESCRIPTION = process.env.DESCRIPTION || "Dify Dataset"; const TOP_K = process.env.TOP_K ? parseInt(process.env.TOP_K, 10) : 1; const SEARCH_METHOD = process.env.SEARCH_METHOD || "hybrid_search"; const RERANKING_ENABLE = process.env.RERANKING_ENABLE === "true" || true; // Create an MCP server const server = new McpServer({ name: "dify-knowledge-mcp-server", version: "1.0.0" }); // Register Dify knowledge retrieval tool server.registerTool("dify_retrieve", { title: TITLE, description: DESCRIPTION, inputSchema: { query: z.string(), } }, async ({ query }) => { // 验证必需参数 const finalDatasetId = DATASET_ID; const finalDatasetToken = DATASET_TOKEN; const finalBaseUrl = BASE_URL; if (!finalDatasetId) { throw new Error("dataset_id is required. Please provide it as a parameter or set DIFY_DATASET_ID environment variable."); } if (!finalDatasetToken) { throw new Error("dataset_token is required. Please provide it as a parameter or set DIFY_DATASET_TOKEN environment variable."); } try { const response = await axios.post(`${finalBaseUrl}/v1/datasets/${finalDatasetId}/retrieve`, { query, retrieval_model: { search_method: SEARCH_METHOD, reranking_enable: RERANKING_ENABLE, reranking_mode: null, weights: null, top_k: TOP_K, score_threshold_enabled: false, score_threshold: null, } }, { headers: { Authorization: `Bearer ${finalDatasetToken}`, "Content-Type": "application/json" } }); return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }] }; } }); // Start the server const transport = new StdioServerTransport(); server.connect(transport).catch(console.error); //# sourceMappingURL=index.js.map