基于官方 TypeScript SDK 的企业级 MCP 服务器,用于 Dify 知识库集成,遵循 MCP 2025-06-18 标准。
@modelcontextprotocol/sdk V1.17.4 构建# 1. 克隆项目
git clone <repository-url>
cd dify-knowledge-mcp-server
# 2. 设置环境变量
export DIFY_API_KEY="your-dify-api-key"
# 3. 启动服务
docker-compose up -d
# 4. 查看服务状态
docker-compose logs -f
服务将在 http://localhost:3000 启动,访问 http://localhost:3000/health 检查服务状态。
# 安装依赖
npm install
# 构建项目
npm run build
# 启动开发服务器
npm run dev
创建 .env 文件或设置以下环境变量:
# 必需配置
export DIFY_API_KEY="your-dify-api-key" # Dify API 密钥
# 可选配置
export DIFY_API_BASE_URL="https://api.dify.ai/v1" # Dify API 端点(默认)
export DIFY_TIMEOUT="30000" # API 超时时间(毫秒)
export DDIFY_MAX_RETRIES="3" # 最大重试次数
# 服务器配置
export MCP_HOST="127.0.0.1" # 服务器主机
export MCP_PORT="3000" # 服务器端口
export MCP_LOG_LEVEL="INFO" # 日志级别
export MCP_ALLOWED_ORIGINS="*" # CORS 来源
💡 提示:可以复制
.env.example文件并修改其值。
dify_list_knowledge_bases列出所有可用的知识库
limit(可选) - 返回的最大结果数dify_show_knowledge_base获取特定知识库的详细信息
knowledge_base_id(必需) - 知识库 IDdify_list_documents_bases列出知识库中的文档
knowledge_base_id(必需) - 知识库 IDlimit(可选) - 返回的最大结果数dify_show_document_details获取特定文档的详细信息
knowledge_base_id(必需) - 知识库 IDdocument_id(必需) - 文档 IDdify_get_document_segments查询文档分段列表
dataset_id(必需) - 知识库 IDdocument_id(必需) - 文档 IDkeyword(可选) - 关键词搜索status(可选) - 分段状态(如“已完成”)page(可选) - 页码limit(可选) - 每页返回数量(默认 20,最大 100)dify_get_child_segments查询文档子分段列表
dataset_id(必需) - 知识库 IDdocument_id(必需) - 文档 IDsegment_id(必需) - 分段 IDkeyword(可选) - 关键词搜索page(可选) - 页码(默认 1)limit(可选) - 每页返回数量(默认 20,最大 100)dify_get_segment_detail查询文档分段详情
dataset_id(必需) - 知识库 IDdocument_id(必需) - 文档 IDsegment_id(必需) - 分段 IDdify_search_knowledge_base在知识库中进行智能搜索,支持多种搜索方法和高级参数
knowledge_base_id(必需) - 知识库 IDquery(必需) - 搜索查询内容top_k(可选) - 返回的结果数量(默认 3)search_method(可选) - 搜索方法:
semantic_search(默认) - 语义搜索keyword_search - 关键词搜索full_text_search - 全文搜索hybrid_search - 混合搜索score_threshold(可选) - 最小相关性分数阈值score_threshold_enabled(可选) - 是否启用分数过滤reranking_enable(可选) - 是否启用重新排序(默认 true)# 使用 stdio 传输启动服务器
npm start
# 或直接使用 Node.js
node dist/index.js
# 在默认主机启动 HTTP 服务器(127.0.0.1:3000)
npm run start:http
# 启动外部访问服务器(0.0.0.0:8080)
npm run start:http:external
# 或使用 Node.js 直接启动并自定义参数
node dist/index.js --http --host 0.0.0.0 --port 8080
# 使用 npm 传递参数的替代方法
npm start -- --http --host 0.0.0.0 --port 8080
# 使用 Docker Compose(推荐)
docker-compose up -d
# 或手动构建和运行
docker build -t dify-mcp-server .
docker run -d \
-p 3000:3000 \
-e DIFY_API_KEY=your-api-key \
-v $(pwd)/logs:/app/logs \
--name dify-mcp-server \
dify-mcp-server
请参阅详细的 Docker 部署说明 DOCKER.md。
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const client = new Client({
name: 'dify-knowledge-client',
version: '1.0.0'
});
const transport = new StdioClientTransport({
command: 'node',
args: ['dist/index.js']
});
await client.connect(transport);
// 列出知识库
const knowledgeBases = await client.callTool({
name: 'dify_list_knowledge_bases',
arguments: { limit: 10 }
});
// 搜索知识库
const searchResults = await client.callTool({
name: 'dify_search_knowledge_base',
arguments: {
knowledge_base_id: 'kb-123',
query: '机器学习基础',
top_k: 5
}
});
此服务器遵循官方 MCP TypeScript SDK 架构:
McpServer(官方 SDK)
├── 工具注册(registerTool)
├── 传输层(stdio/HTTP)
├── 业务逻辑(DifyKnowledgeTools)
└── API 客户端(DifyApiClient)
McpServer**官方 SDK 服务器实例,负责工具注册DifyKnowledgeTools**业务逻辑和工具实现DifyApiClient**Dify API 集成的 HTTP 客户端# 运行测试
npm test
# 运行代码检查
npm run lint
# 代码格式化
npm run format
# 构建验证
npm run build
# 使用 Docker Compose
export DIFY_API_KEY="your-api-key"
docker-compose up -d
# 构建镜像
docker build -t dify-mcp-server .
# 运行容器
docker run -d \
-p 3000:3000 \
-e DIFY_API_KEY=your-api-key \
-e DIFY_API_BASE_URL=https://api.dify.ai/v1 \
-v $(pwd)/logs:/app/logs \
--name dify-mcp-server \
dify-mcp-server
# 检查容器状态
docker ps
# 检查服务健康
curl http://localhost:3000/health
# 查看日志
docker-compose logs -f dify-mcp-server
📖 详细描述请参阅完整的 Docker 部署指南 DOCKER.md。
从自定义 Python 实现迁移到官方 TypeScript SDK,在版本 v2.0 中:
@modelcontextprotocol/sdk我们欢迎社区贡献!请按照以下步骤操作:
npm install如果您发现 bug 或有功能建议,请前往 GitHub Issues 提交。
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
⭐ 如果这个项目对您有帮助,请给我们一个 Star!