# 虚幻引擎知识图谱 MCP 服务器
[English](README_EN.md) | 中文
这个项目提供虚幻引擎官方文档的 MCP(Model Context Protocol)服务器,支持**基于Neo4j图数据库的概念关系搜索**,帮助开发者发现概念间的学习路径和依赖关系。
## 项目背景
在学习虚幻引擎开发过程中,开发者经常需要理解各种概念之间的关系,比如:
- 蓝图系统与C++代码的关系
- 材质编辑器与节点图编程的关系
- Nanite虚拟几何体与高多边形模型的关系
传统的文档搜索只能找到单个概念的信息,无法揭示概念间的学习路径和依赖关系。本项目通过构建知识图谱,让AI能够理解概念间的关联,提供更智能的学习指导。
## 解决方案
本项目提供了一个基于Neo4j图数据库的MCP服务器,专门用于虚幻引擎概念关系的智能搜索和发现。通过DeepSeek v3模型提取文档中的概念关系,构建完整的知识图谱。
## 功能特性
- 🔗 **概念关系搜索**: 发现任意概念的相关概念和学习路径
- 🧠 **智能概念发现**: 基于图数据库的深度关系挖掘
- 🔍 **概念名称搜索**: 模糊搜索概念名称,支持中英文双语查询
- 📊 **关系统计信息**: 获取概念的关系数量统计,按重要性排序
## 在 MCP Host 中使用
### Cursor 配置
在项目根目录创建或编辑 `.cursor/mcp.json` 配置文件:
```json
{
"mcpServers": {
"unreal-engine-knowledge-graph-mcp": {
"command": "npx",
"args": [
"-y",
"unreal-engine-knowledge-graph-mcp"
],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASSWORD": "password123"
}
}
}
}
```
### VSCode 配置
在项目根目录创建或编辑 `.vscode/mcp.json` 配置文件:
```json
{
"servers": {
"unreal-engine-knowledge-graph-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"unreal-engine-knowledge-graph-mcp"
],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASSWORD": "password123"
}
}
}
}
```
### 环境变量说明
| 环境变量 | 含义 | 默认值 |
|---------|------|--------|
| `NEO4J_URI` | Neo4j数据库连接地址 | `bolt://localhost:7687` |
| `NEO4J_USER` | Neo4j用户名 | `neo4j` |
| `NEO4J_PASSWORD` | Neo4j密码 | `password123` |
| `DEEPSEEK_API_KEY` | DeepSeek API密钥 | 无 |
## MCP工具功能
### search_concept_relations
搜索指定概念的相关概念和关系,支持中英文双语查询。
**使用场景:**
- 🎯 **概念学习扩展**: "我想学习蓝图系统,相关的概念还有哪些?"
- 🔍 **技术关联探索**: "虚幻引擎包含哪些核心功能模块?"
- 🧭 **学习路径规划**: "从材质编辑器出发,我还需要了解什么?"
**提示词示例:**
```
帮我搜索"蓝图系统"和"Blueprint System"的相关概念,我想了解它与其他功能的关系
查找"虚幻引擎"和"Unreal Engine"包含哪些核心功能
搜索"材质编辑器"和"Material Editor"相关的学习内容
```
**参数:**
- `concept` (必需): 要查询的概念名称(中英文双语)
- `cn` (必需): 中文概念名称
- `en` (必需): 英文概念名称
- `limit` (可选): 返回的最大关系数量,默认20
**返回数据格式:**
```json
{
"searchTerms": {
"cn": "虚幻引擎",
"en": "Unreal Engine"
},
"concept": "虚幻引擎 / Unreal Engine",
"found": true,
"totalRelations": 12,
"relatedConcepts": [
{
"concept": "蓝图系统",
"predicate": "包含",
"context": "虚幻引擎的可视化脚本编程系统",
"direction": "outgoing"
}
],
"limit": 20
}
```
### search_concepts
模糊搜索概念名称,支持中英文双语查询。
**使用场景:**
- 🔍 **快速查找概念**: "我记得有个关于'粒子'的功能,叫什么名字来着?"
- 📝 **概念名称确认**: "虚幻引擎中2D相关的功能都有哪些?"
- 🎯 **关键词探索**: "搜索包含'编辑器'的所有概念"
**提示词示例:**
```
搜索包含"粒子"和"Particle"的所有概念
查找与"2D"相关的功能
搜索"编辑器"和"Editor"相关的工具
```
**参数:**
- `searchTerm` (必需): 搜索关键词(中英文双语)
- `cn` (必需): 中文搜索关键词
- `en` (必需): 英文搜索关键词
- `limit` (可选): 返回的最大概念数量,默认10
**返回数据格式:**
```json
{
"searchTerms": {
"cn": "蓝图",
"en": "Blueprint"
},
"concepts": ["蓝图系统", "蓝图编辑器", "Blueprint System", "Blueprint Editor"],
"count": 4,
"limit": 10
}
```
### get_all_concepts
获取所有可用概念列表及其关系统计信息(按关系数量排序,优先显示核心概念)。
**使用场景:**
- 📋 **核心概念优先浏览**: "虚幻引擎知识图谱中最重要的概念有哪些?"
- 🎯 **学习计划制定**: "我想按重要性顺序学习,哪些是核心概念?"
- 📊 **概念关系分析**: "这些概念分别有多少关联,哪些最核心?"
**提示词示例:**
```
显示最重要的虚幻引擎概念,按关系数量排序
列出前50个核心概念,我想了解哪些最重要
获取概念列表及其关系统计,帮我制定学习计划
```
**参数:**
- `limit` (可选): 返回的最大概念数量,默认100
**返回数据格式:**
```json
{
"concepts": [
{
"concept": "蓝图系统",
"relationCount": 25,
"incomingCount": 12,
"outgoingCount": 13
},
{
"concept": "虚幻引擎",
"relationCount": 20,
"incomingCount": 8,
"outgoingCount": 12
}
],
"count": 2,
"limit": 100,
"note": "概念按关系数量从大到小排序,包含入度、出度和总关系数统计"
}
```
## 系统架构
### 核心组件
1. **文档处理**: 读取Markdown文档,使用DeepSeek v3提取概念关系
2. **知识图谱**: 基于Neo4j存储概念和关系数据
3. **MCP服务**: 提供标准化的概念关系查询接口
### 数据流程
```
Markdown文档 → DeepSeek v3分析 → 概念关系提取 → Neo4j图数据库 → MCP工具查询
```
## 开发测试
### 环境要求
- Node.js >= 18.0.0
- Docker (用于运行Neo4j)
- DeepSeek API密钥
### 安装步骤
1. **克隆项目**
```bash
git clone https://github.com/your-username/unreal-engine-knowledge-graph-mcp.git
cd unreal-engine-knowledge-graph-mcp
```
2. **安装依赖**
```bash
npm install
```
3. **配置环境变量**
```bash
# 复制环境变量模板
cp .env.example .env
# 编辑.env文件,添加DeepSeek API密钥
DEEPSEEK_API_KEY=your_deepseek_api_key_here
```
4. **启动Neo4j数据库**
```bash
# 启动Docker容器
docker-compose up -d
# 等待数据库启动完成
npm run test-connection
```
5. **构建项目**
```bash
npm run build
```
6. **提取概念关系(测试模式)**
```bash
# 测试模式:只处理一个文档文件
npm run extract-triplets:test-mode
```
7. **导入数据到Neo4j**
```bash
npm run import-to-neo4j
```
## 知识三元组数据结构
系统使用标准的知识图谱三元组结构存储概念关系:
```json
{
"filename": "文档名称",
"sourceFile": "源文件路径",
"triples": [
{
"subject": "主体概念",
"predicate": "关系谓词",
"object": "客体概念",
"context": "上下文说明",
"direction": "bidirectional"
}
],
"timestamp": "创建时间戳"
}
```
**字段说明:**
- `subject`: 主体概念名称(知识三元组的主语)
- `predicate`: 关系谓词(如:包含、支持、依赖、关联等)
- `object`: 客体概念名称(知识三元组的宾语)
- `context`: 关系的上下文说明,帮助理解关系的具体含义
- `direction`: 关系方向性
- `"unidirectional"`: 单向关系(主体→客体,但客体不一定→主体)
- `"bidirectional"`: 双向关系(主体↔客体,相互关联)
- `confidence`: 置信度(0.0-1.0),表示关系提取的准确性和可靠性
- `0.9-1.0`: 明确的技术关系,文档中有直接、清晰的说明
- `0.7-0.9`: 较为明确的关系,基于上下文推断但证据充分
- `0.5-0.7`: 中等置信度,关系存在但需要一定推理
- `0.3-0.5`: 较弱的关系,主要基于语义相似性
- `0.1-0.3`: 非常弱的关系,仅基于概念共现
## 开发指南
### 项目结构
```
├── scripts/ # 脚本文件
│ ├── extract-triplets.ts # 知识三元组提取
│ ├── import-to-neo4j.ts # 数据导入Neo4j
│ └── test-connection.ts # 数据库连接测试
├── bin/ # 源代码
│ ├── index.ts # MCP服务器实现
│ └── neo4j-search.ts # Neo4j搜索引擎
├── sources/ # 数据文件
│ ├── docs/ # Markdown文档
│ └── triplets/ # 知识三元组JSON文件
├── tests/ # 测试文件
│ └── mcp-client.test.ts # MCP客户端测试
├── docker-compose.yml # Neo4j Docker配置
└── package.json # 项目配置
```
### 可用脚本
```bash
# 构建项目
npm run build
# 测试数据库连接
npm run test-connection
# 生成演示数据
npm run extract-triplets:test-mode
# 提取知识三元组(需要DeepSeek API)
npm run extract-triplets
# 导入数据到Neo4j
npm run import-to-neo4j
# 清空数据库并重新导入
npm run import-to-neo4j -- --clear
# 运行测试
npm test
```
### 添加新文档
1. 将Markdown文档放入 `sources/docs/` 目录
2. 运行概念关系提取:`npm run extract-triplets`
3. 导入到Neo4j:`npm run import-to-neo4j`
### 自定义知识三元组
你可以手动创建知识三元组JSON文件:
```json
{
"filename": "custom-triples",
"sourceFile": "custom/triples.md",
"triples": [
{
"subject": "自定义概念A",
"predicate": "关联",
"object": "自定义概念B",
"context": "这是一个自定义的知识三元组",
"direction": "bidirectional"
}
],
"timestamp": "2025-01-12T10:30:15.387Z"
}
```
将文件保存到 `sources/triplets/` 目录,然后运行导入命令。
## 技术栈
### 核心技术
- **Node.js**: 运行环境
- **TypeScript**: 类型安全的开发语言
- **MCP SDK**: Model Context Protocol 实现
- **Neo4j**: 图数据库
- **Docker**: 容器化部署
### AI集成
- **DeepSeek v3**: 概念关系提取
- **OpenAI SDK**: API调用接口
### 开发工具
- **Vitest**: 单元测试框架
- **tsx**: TypeScript执行器
- **Zod**: 参数验证
## 故障排除
### Neo4j连接问题
```bash
# 检查Docker容器状态
docker-compose ps
# 查看Neo4j日志
docker-compose logs neo4j
# 重启Neo4j容器
docker-compose restart neo4j
```
### 测试连接
```bash
npm run test-connection
```
### 查看Neo4j浏览器界面
访问 http://localhost:7474
- 用户名: neo4j
- 密码: password123
## 许可证
MIT License
## 贡献
欢迎提交Issue和Pull Request!