启用以图形数据库格式存储和检索知识的功能,允许用户通过自然语言在由 Neo4j 驱动的知识图谱中创建、更新、搜索和删除实体与关系。
3.2k 查看 · 2026-07-07 更新
简介
启用以图形数据库格式存储和检索知识的功能,允许用户通过自然语言在由 Neo4j 驱动的知识图谱中创建、更新、搜索和删除实体与关系。
简介
启用以图形数据库格式存储和检索知识的功能,允许用户通过自然语言在由 Neo4j 驱动的知识图谱中创建、更新、搜索和删除实体与关系。
Neo4j MCP 服务器
这是一个使用 Neo4j 作为后端存储的知识图谱管理的内存控制协议 (MCP) 服务器实现。它提供了一个基于标准输入输出接口,用于以图数据库格式存储和检索知识。
前提条件
- Python 3.8+
- Neo4j 数据库(本地或远程)
- Poetry(Python 包管理器)
- Docker 和 Docker Compose(用于运行 Neo4j)
- Go Task(可选,用于任务自动化)
安装
- 克隆仓库:
git clone <repository-url> cd neo4j_mcp_server
- 如果你还没有安装 Poetry,请先安装:
curl -sSL https://install.python-poetry.org | python3 -
- 安装依赖项:
poetry install
配置
Claude 桌面配置
对于在 Ubuntu 上运行 Claude 桌面的用户,可以通过在以下位置添加 MCP 服务器到你的 Claude 桌面配置文件来配置 MCP 服务器:
~/.config/Claude/claude_desktop_config.json
在配置之前,你需要构建独立的可执行文件:
task build
这将在 dist/neo4j_mcp_server 创建一个二进制文件。确保在你的配置中更新路径指向这个构建的可执行文件。
示例配置文件在 example_mcp_config.json 中提供。你可以复制并修改这个文件:
cp example_mcp_config.json ~/.config/Claude/claude_desktop_config.json
然后编辑配置文件中的 command 路径,使其指向你构建的可执行文件:
{ "mcpServers": [ { "name": "neo4j-knowledge-graph", "command": ["/path/to/your/dist/neo4j_mcp_server"], ... } ] }
配置包括:
- 服务器名称和描述
- 启动服务器的命令(指向构建的可执行文件的路径)
- 可用工具及其参数
- 必需字段和数据类型
运行服务器
使用 Task(推荐)
如果你已经安装了 Go Task,可以使用提供的 Taskfile 来管理服务器:
# Show available tasks task # Start everything (Docker + Server) task run # Start development environment (Docker + Server + Test) task dev # Stop all services task down
直接使用 Docker Compose
- 启动 Neo4j 容器:
docker-compose up -d
- 等待 Neo4j 准备就绪(容器将在
docker ps中显示为 "healthy")
直接运行 MCP 服务器
使用以下命令启动服务器:
poetry run python mcp_neo4j_knowledge_graph/mcp/server.py
服务器将以标准输入输出模式启动,准备好接收 MCP 协议消息。
可用工具
1. 创建实体
在知识图谱中创建新实体。每个实体必须有类型和属性。如果未明确提供 ID,则会从 name 属性自动设置 ID。
参数:
entities: 实体对象列表,每个包含:type: 字符串 - 实体类型(例如,Person, Organization)properties: 对象 - 实体属性的键值对(必须包含 'id' 或 'name')
示例输入:
{ "entities": [{ "type": "Person", "properties": { "name": "John Doe", "occupation": "Developer", "age": 30 } }] }
2. 创建关系
在现有实体之间创建关系。所有引用的实体在创建关系之前必须存在。
参数:
relations: 关系对象列表,每个包含:type: 字符串 - 关系类型(例如,KNOWS, WORKS_FOR)from: 字符串 - 源实体的 IDto: 字符串 - 目标实体的 ID
示例输入:
{ "relations": [{ "type": "KNOWS", "from": "john_doe", "to": "jane_smith" }] }
3. 搜索实体
搜索知识图谱中的实体。 (原文似乎在此处中断,没有提供关于“搜索实体”的更多详细信息或示例。)
在知识图谱中搜索实体,具有强大的文本匹配和过滤功能。可以用于按文本搜索、按类型列出实体、查找具有特定属性的实体,或这些过滤器的任意组合。
参数:
search_term: 字符串(可选)- 在实体属性中搜索的文本。如果未提供,则根据其他过滤条件返回实体。entity_type: 字符串(可选)- 按实体类型(例如,人、组织)过滤结果。如果单独提供,将返回该类型的全部实体。properties: 字符串列表(可选)- 用于过滤的属性名称列表:- 结合
search_term使用:在这些属性中搜索指定的术语 - 不结合
search_term使用:返回定义了这些属性中的任何一个的实体
- 结合
include_relationships: 布尔值(可选,默认为 false)- 是否包含连接的实体及其关系fuzzy_match: 布尔值(可选,默认为 true)- 当提供了search_term时,是否使用不区分大小写的部分匹配
示例输入:
// Search by text with type filter { "search_term": "John", "entity_type": "Person", "properties": ["name", "occupation"], "include_relationships": true } // List all entities of a type { "entity_type": "Person" } // Find entities with specific properties { "properties": ["email", "phone"], "entity_type": "Contact" } // Combine filters { "entity_type": "Person", "properties": ["email"], "search_term": "example.com", "fuzzy_match": true } // Return all entities (no filters) {}
返回:
{ "results": [ { "id": "john_doe", "type": ["Entity", "Person"], "properties": { "name": "John Doe", "email": "john@example.com" }, "relationships": [ // Only included if include_relationships is true { "type": "WORKS_AT", "direction": "outgoing", "node": { "id": "tech_corp", "type": "Company", "properties": { "name": "Tech Corp" } } } ] } ] }
注意事项:
- 当没有提供任何过滤条件时,返回所有实体
- 实体类型过滤是精确匹配(非模糊)
- 属性存在性检查通过
IS NOT NULL完成 - 当
fuzzy_match为真时,文本搜索支持不区分大小写的部分匹配 - 空结果以空数组形式返回,而不是错误
- 性能考虑:
- 按类型过滤比文本搜索更高效
- 属性存在性检查经过优化
- 考虑使用特定属性而非搜索所有属性
- 大量的结果集可能在未来版本中进行分页
4. 更新实体
更新知识图谱中的现有实体。支持添加/移除属性和标签。
参数:
updates: 更新对象列表,每个对象包含:id: 字符串(必填)- 要更新的实体IDproperties: 对象(可选)- 要更新或添加的属性remove_properties: 字符串列表(可选)- 要移除的属性名称add_labels: 字符串列表(可选)- 要添加到实体的标签remove_labels: 字符串列表(可选)- 要从实体移除的标签
示例输入:
{ "updates": [{ "id": "john_doe", "properties": { "occupation": "Senior Developer", "salary": 100000 }, "remove_properties": ["temporary_note"], "add_labels": ["Verified"], "remove_labels": ["Pending"] }] }
5. 删除实体
从知识图谱中删除实体,并可选择级联删除关联的关系。
参数:
entity_ids: 字符串列表(必填)- 要删除的实体ID列表cascade: 布尔值(可选,默认为 false)- 是否删除关联的关系dry_run: 布尔值(可选,默认为 false)- 预览删除影响而不实际更改
示例输入:
{ "entity_ids": ["john_doe", "jane_smith"], "cascade": true, "dry_run": true }
返回:
{}
success: 布尔值 - 操作是否成功deleted_entities: 已删除实体的列表deleted_relationships: 已删除关系的列表errors: 错误消息列表(如果有)impacted_entities: 会受到影响的实体列表(仅在 dry_run 时有效)impacted_relationships: 会受到影响的关系列表(仅在 dry_run 时有效)
6. 反省模式
检索有关 Neo4j 数据库模式的全面信息,包括节点标签、关系类型及其属性。
参数:无需提供
返回:
schema: 包含以下内容的对象:node_labels: 数据库中所有节点标签的列表relationship_types: 所有关系类型的列表node_properties: 标签到属性名称列表的映射relationship_properties: 关系类型到属性名称列表的映射
示例输入:
{}
测试
测试脚本
项目包含了针对系统不同方面的多个测试脚本:
-
mcp_neo4j_knowledge_graph/test_mcp_client.py- 测试 MCP 客户端功能- 验证服务器启动
- 测试工具列表
- 测试模式反省
- 测试实体创建
task test-client # 仅运行客户端测试 -
mcp_neo4j_knowledge_graph/test_mcp_config.py- 测试 MCP 配置- 验证配置文件加载
- 使用官方 MCP SDK 测试服务器连接
- 确认所有必需工具可用
task test-config # 仅运行配置测试 -
mcp_neo4j_knowledge_graph/test_neo4j_connection.py- 测试 Neo4j 数据库连接- 验证数据库连通性
- 测试基本查询功能
- 检查环境配置
task test-db # 仅运行数据库测试
运行测试
你可以通过多种方式运行测试:
-
同时运行所有测试:
task test # 运行所有测试,包括 pytest 和集成测试 -
单独运行特定类型的测试:
task test-client # 运行 MCP 客户端测试 task test-config # 运行 MCP 配置测试 task test-db # 运行 Neo4j 连接测试 task test-integration # 运行集成测试 -
直接使用 pytest 运行测试:
poetry run pytest # 运行所有与 pytest 兼容的测试
开发
使用 Task
项目包含几个开发任务:
# Format code task format # Run linter task lint # Run tests task test # Start development environment task dev
直接运行
该项目使用了几个开发工具,这些工具会随着 Poetry 自动安装:
black用于代码格式化isort用于导入排序flake8用于代码检查pytest用于测试
你可以使用 Poetry 运行这些工具:
# Format code poetry run black . # Sort imports poetry run isort . # Run linter poetry run flake8 # Run tests poetry run pytest
错误处理
服务器对以下情况进行了全面的错误处理:
- 数据库连接问题
- 无效查询
- 缺失节点
- 无效请求格式
- 模式验证错误
- 关系创建失败
- 实体更新冲突
所有错误都将以MCP协议格式返回适当的错误消息。
Docker配置
Neo4j容器配置了以下设置:
- 端口:7474(HTTP)和7687(Bolt)
- 默认凭据:neo4j/password
- 启用了APOC插件
- 文件导入/导出已启用
- 配置了健康检查
您可以在docker-compose.yml文件中修改这些设置。
任务命令参考
task- 显示可用任务task run- 启动Docker和MCP服务器task dev- 启动开发环境(Docker + 服务器 + 测试)task docker- 启动Neo4j数据库task server- 运行MCP服务器task test- 运行所有测试task test-client- 运行MCP客户端测试task test-config- 运行MCP配置测试task test-db- 运行数据库测试task test-integration- 运行集成测试task down- 停止所有Docker服务task format- 使用black和isort格式化代码task lint- 运行flake8 lintertask help- 显示所有任务的详细帮助信息
来源
- 来源:github
- 链接:https://github.com/mjftw/mcp_neo4j_knowledge_graph