使用说明
Graphiti MCP服务器扩展
的扩展版本 Graphiti MCP服务器 具有用于高级知识图操作的附加图操作工具。
此存储库是从原始Graphiti MCP Server分叉而来的,并添加了用于路径查找和子图提取的自定义工具,从而实现了更复杂的图分析功能。
🆕 附加功能
这个扩展版本增加了三个强大的图形操作工具:
1. find_paths_between_entities
在知识图中找到两个实体之间的所有路径。
特征:
- 发现实体之间的多条路径
- 可配置的最大路径深度
- 返回详细的节点和边缘信息
- 排除情节节点以获得更清晰的知识路径
- 仅针对实体到实体关系进行了优化
参数:
from_uuid:启动实体UUIDto_uuid:目标实体UUIDmax_depth:最大路径长度(默认值:5)max_paths:要返回的最大路径数(默认值:10)
2. build_subgraph
提取以指定实体为中心的子图。
特征:
- 从多个实体起点构建子图
- 可配置的扩展深度(max_hop)
- 子图中实体之间的可选路径查找
- 返回带有邻接表的完整图结构
- 自动排除较小响应大小的嵌入字段
参数:
entity_uuids:要包含的实体UUID列表max_hop:与起始图元的最大距离(默认值:1)include_paths:是否查找实体之间的路径(默认值:False)
3. traverse_knowledge_graph
从单个起始节点遍历知识图。
特征:
- 具有可配置深度的单节点遍历
- 嵌套结构,按层次显示关系
- 循环检测,防止无限递归
- 包含事实和关系的详细边缘信息
参数:
start_node_uuid:起始实体的UUIDdepth:横向深度(0=仅节点,1=直接关系等)
🎯 设计理念
此扩展遵循Graphiti核心的设计原则:
- 以实体为中心:结果中仅包含实体节点和RELATES_TO边
- 偶发性排除:情节节点被有意排除在外,因为它们是用于数据来源,而不是知识结构
- 嵌入优化:所有嵌入字段都会自动排除,以保持响应大小可控
- MCP兼容性:响应大小已优化,以保持在MCP的25000个令牌限制范围内
📊 性能优化
- 响应大小减少94% 通过智能嵌入排除
- 单独查询 用于节点和边,以最大限度地减少数据传输
- Pydantic模型_泵 通过嵌套字段排除实现高效序列化
- Graphiti核心功能 始终用于一致性和性能
🚀 快速开始
选项1:使用Docker(推荐)
# Pull the pre-built image
docker pull ghcr.io/mkxultra/graphiti-mcp-server-extended:latest
# Run with docker-compose
docker compose up
# Or run standalone
docker run -p 8000:8000 \
-e NEO4J_URI=bolt://your-neo4j:7687 \
-e NEO4J_USER=neo4j \
-e NEO4J_PASSWORD=your-password \
-e OPENAI_API_KEY=your-api-key \
ghcr.io/mkxultra/graphiti-mcp-server-extended:latest
选项2:本地安装
先决条件:
- Python 3.10或更高版本
- Neo4j数据库(5.26+版本)
- 用于LLM操作的OpenAI API密钥
# Clone this repository
git clone https://github.com/mkXultra/graphiti-mcp-server.git
cd graphiti-mcp-server
# Install dependencies with uv
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync
配置
创建一个 .env 文件:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_password
OPENAI_API_KEY=your_api_key
MODEL_NAME=gpt-4-mini
运行服务器
# Run with uv
uv run graphiti_mcp_server.py
# Or with Docker
docker compose up
🔧 MCP客户端配置
适用于克劳德桌面(stdio传输)
{
"mcpServers": {
"graphiti-extended": {
"transport": "stdio",
"command": "/path/to/uv",
"args": [
"run",
"--directory",
"/path/to/graphiti-mcp-server",
"graphiti_mcp_server.py",
"--transport",
"stdio"
],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASSWORD": "password",
"OPENAI_API_KEY": "sk-XXXXXXXX"
}
}
}
}
用于光标(SSE传输)
{
"mcpServers": {
"graphiti-extended": {
"transport": "sse",
"url": "http://localhost:8000/sse"
}
}
}
📚 可用工具
原始图形工具
add_memory:将剧集添加到知识图中search_memory_nodes:搜索实体节点search_memory_facts:搜索关系delete_entity_edge:删除边缘delete_episode:删除剧集get_entity_edge:获取边缘细节get_episodes:检索最近的剧集clear_graph:重置图形
🆕 扩展工具(此叉)
find_paths_between_entities:发现实体之间的路径build_subgraph:提取实体周围的子图traverse_knowledge_graph:单节点图遍历
💡 使用示例
在实体之间查找路径
# Find how two people are connected
result = await find_paths_between_entities(
from_uuid="person1_uuid",
to_uuid="person2_uuid",
max_depth=3,
max_paths=5
)
# Returns multiple paths showing relationships
构建子图
# Extract a local graph around specific entities
result = await build_subgraph(
entity_uuids=["entity1_uuid", "entity2_uuid"],
max_hop=2, # Include entities up to 2 hops away
include_paths=True # Find paths between included entities
)
# Returns complete subgraph with nodes, edges, and adjacency list
从单个节点遍历
# Traverse the graph from a single starting point
result = await traverse_knowledge_graph(
start_node_uuid="entity_uuid",
depth=2 # Traverse 2 levels deep
)
# Returns nested structure showing relationships hierarchically
🏗️ 建筑
graphiti-mcp-server/
├── graphiti_mcp_server.py # Main MCP server
├── src/
│ └── tools/
│ ├── __init__.py
│ └── graph_functions.py # New graph manipulation tools
├── tests/
│ └── test_graph_functions.py # Comprehensive test suite
└── docker-compose.yml # Docker setup with Neo4j
🧪 测试
先决条件
测试套件需要一个单独的Neo4j测试数据库,以避免影响您的主要数据。
运行测试
# 1. Start the test database
docker-compose -f docker-compose.test.yml up -d
# 2. Wait for the database to be ready
sleep 5
# 3. Run all tests (using uv for dependency management)
OPENAI_API_KEY=dummy uv run python -m pytest src/tests/ -v
# Or run specific test class
OPENAI_API_KEY=dummy uv run python -m pytest src/tests/test_graph_functions.py::TestFindPathsBetweenEntities -v
# Or run specific test method
OPENAI_API_KEY=dummy uv run python -m pytest src/tests/test_graph_functions.py::TestFindPathsBetweenEntities::test_find_direct_path -v
# Alternative: without uv (requires manual dependency installation)
# OPENAI_API_KEY=dummy python3 -m pytest src/tests/ -v
# 4. Stop the test database when done
docker-compose -f docker-compose.test.yml down
测试数据库配置
- 端口:7688(螺栓)
- 端口:7475(HTTP)
- 用户名:neo4j
- 密码:testpassword
注: 这 OPENAI_API_KEY 可以是Graphiti核心所要求的任何虚拟值,但实际上并未在测试中使用。
🤝 贡献
欢迎投稿!此分叉在添加扩展功能的同时保持了与上游Graphiti项目的兼容性。
开发指南
- 遵循Graphiti核心设计模式
- 从知识操作中排除偶发节点
- 优化MCP令牌限制
- 尽可能使用Graphiti核心功能
- 为新功能添加全面的测试
📄 许可证
此项目与父Graphiti项目保持相同的许可证。
🙏 致谢
- 原创 图形 Zep项目
- 基于Graphiti核心框架构建
- Anthropic的MCP协议
📊 技术细节
响应大小优化
- 使用Pydantic的嵌套字段排除排除排除嵌入
- 响应大小从约93596个令牌减少到约5861个令牌(减少94%)
- 25000令牌限制下的MCP兼容响应
查询优化
- 对路径、节点和边进行单独查询
- 使用RELATES_TO边进行仅实体遍历
- 多个实体的批处理
工具比较
| 工具 | 起点 | 结构 | 最适合 |
|---|---|---|---|
find_paths_between_entities |
2个实体 | 仅路径 | 关系发现 |
build_subgraph |
多个实体 | 全图 | 邻里探索 |
traverse_knowledge_graph |
单个实体 | 嵌套层次结构 | 深度遍历 |
代码质量
- 110+次综合测试,通过率100%
- 全程键入提示
- 一致的错误处理
- 用于调试的广泛日志记录