dify-knowledge-mcp-server
Version:
MCP server for Dify knowledge base retrieval
75 lines • 2.72 kB
JavaScript
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