🚀 Neo4j Agent Memory MCP Server
这是一个专门的MCP服务器,它将Neo4j图数据库与AI智能体连接起来,提供专注于记忆的工具,用于在知识图谱中存储、检索和关联信息。
🚀 快速开始
你可以直接使用npx运行这个MCP服务器:
npx @knowall-ai/mcp-neo4j-agent-memory
或者将其添加到你的Claude桌面配置中:
{
"mcpServers": {
"neo4j-memory": {
"command": "npx",
"args": ["@knowall-ai/mcp-neo4j-agent-memory"],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "your-password",
"NEO4J_DATABASE": "neo4j"
}
}
}
}
✨ 主要特性
- 🧠 持久化记忆存储 - 在不同对话中存储和检索记忆
- 🔗 语义关系 - 在记忆之间创建有意义的连接(如KNOWS、WORKS_AT、CREATED等)
- 🔍 智能搜索 - 对所有记忆属性和关系进行自然语言搜索
- 🏷️ 灵活标签 - 为记忆使用任意标签(如人、地点、项目、想法等)
- ⏰ 时间跟踪 - 自动添加时间戳并支持基于日期的查询
- 🌐 图探索 - 遍历关系以发现关联信息
- 🎯 上下文感知 - 深度搜索以包含相关记忆
- 🔧 大语言模型优化 - 提供简单工具,让AI处理复杂逻辑
- 🏢 企业级支持 - 支持多个Neo4j数据库
- 📚 内置指南 - 获取最佳实践和使用模式的帮助
📦 安装指南
通过Smithery安装

要通过Smithery自动为Claude桌面安装Neo4j Agent Memory MCP服务器,请执行以下命令:
npx -y @smithery/cli install @knowall-ai/mcp-neo4j-agent-memory --client claude
开发环境安装
- 克隆仓库:
git clone https://github.com/KnowAll-AI/mcp-neo4j-agent-memory.git
cd mcp-neo4j-agent-memory
- 安装依赖:
npm install
- 构建项目:
npm run build
💻 使用示例
基础用法
大语言模型(LLM)负责处理决定存储内容和关联记忆的所有复杂逻辑:
存储信息
用户:“记住约翰是谷歌的软件工程师”
助手:我会记住约翰是谷歌的软件工程师。
[幕后,LLM执行以下操作:
1. search_memories({"query": "约翰"}) - 检查约翰是否存在
2. search_memories({"query": "谷歌"}) - 检查谷歌是否存在
3. create_memory({"label": "人", "properties": {"name": "约翰", "occupation": "软件工程师"}})
4. create_memory({"label": "组织", "properties": {"name": "谷歌"}})
5. create_connection({"fromMemoryId": 123, "toMemoryId": 456, "type": "WORKS_AT"})]
用户:“记住莎拉是约翰的经理,她于2019年开始任职”
助手:我会添加关于莎拉的信息。
[LLM搜索约翰,创建莎拉,并使用MANAGES关系将他们关联起来,同时包含开始日期]
检索信息
用户:“谁在谷歌工作?”
助手:让我搜索在谷歌工作的人。
[LLM使用:search_memories({"query": "谷歌", "depth": 2})]
根据我的记忆:
- 约翰 - 谷歌软件工程师
- 莎拉 - 谷歌经理(管理约翰,2019年开始任职)
用户:“关于约翰你记得什么?”
助手:这是我关于约翰的信息:
[LLM使用:search_memories({"query": "约翰", "depth": 2})]
- 在谷歌担任软件工程师
- 莎拉是他的经理
- [搜索中找到的任何其他关联记忆]
建立关系
用户:“约翰和莎拉正在一起参与阿特拉斯项目”
助手:我会将约翰和莎拉与阿特拉斯项目关联起来。
[LLM执行以下操作:
1. 搜索约翰和莎拉以获取他们的ID
2. 创建阿特拉斯项目:create_memory({"label": "项目", "properties": {"name": "阿特拉斯项目"}})
3. 关联他们:create_connection({"fromMemoryId": johnId, "toMemoryId": projectId, "type": "WORKS_ON"})
4. create_connection({"fromMemoryId": sarahId, "toMemoryId": projectId, "type": "WORKS_ON"})]
高级用法
连接到特定数据库
对于使用多个数据库的Neo4j企业版用户,你可以指定要连接的数据库:
{
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "your-password",
"NEO4J_DATABASE": "myCustomDatabase"
}
}
这将连接到“myCustomDatabase”而不是默认的“neo4j”数据库。
更复杂的示例
查找相关信息
用户:“显示销售部门的所有员工”
助手:让我搜索销售部门的员工。
[LLM使用:search_memories({"query": "销售部门", "depth": 2})]
我找到了销售部门的这些员工:
- 约翰·史密斯(销售经理)
- 莎拉·约翰逊(销售代表)
- 迈克·布朗(客户经理)
创建特定领域的记忆
用户:“创建一个名为‘高级咖啡’的产品,价格为24.99美元”
助手:我会为你创建该产品。
[LLM使用:create_memory({"label": "产品", "properties": {"name": "高级咖啡", "price": 24.99}})]
创建了ID为456的高级咖啡产品
管理关系
用户:“高级咖啡使用我们哥伦比亚供应商的咖啡豆”
助手:我会将高级咖啡与哥伦比亚供应商关联起来。
[LLM执行以下操作:
1. search_memories({"query": "高级咖啡"})
2. search_memories({"query": "哥伦比亚供应商"})
3. create_connection({"fromMemoryId": 456, "toMemoryId": 789, "type": "SUPPLIED_BY"})]
已将高级咖啡与哥伦比亚供应商关联起来
高级查询
LLM可以通过智能使用搜索工具处理复杂查询:
基于单词的搜索
用户:“查找本·威克斯”
助手:我会搜索包含“本”或“威克斯”的记忆。
[LLM使用:search_memories({"query": "本·威克斯"})]
我找到了几个与你搜索匹配的人:
- 本·威克斯 - 科技公司的软件工程师(精确匹配)
- 莎拉·本 - 数据公司的数据科学家(包含“本”)
- 约翰·威克斯 - 项目经理(包含“威克斯”)
最可能的匹配似乎是软件工程师本·威克斯。
最近7天的记忆
用户:“我上周结识了哪些新人?”
助手:我会搜索过去7天添加到你记忆中的人。
[LLM计算7天前的日期并使用:
search_memories({
"query": "",
"label": "人",
"since_date": "2024-01-20T00:00:00Z",
"order_by": "created_at DESC"
})]
以下是你上周结识的新人:
- 莎拉·陈 - 周一在科技会议上结识
- 迈克尔·罗伯茨博士 - 新医生,周二首次预约
- 艾玛·威尔逊 - 周三加入你的项目团队
- 詹姆斯·帕克 - 周四喝咖啡讨论潜在合作
消除歧义
用户:“约翰是做什么的?”
助手:我找到了多个名为约翰的人。让我告诉你我所知道的:
[LLM使用:search_memories({"query": "约翰", "type": "人", "depth": 1})]
1. 约翰· Doe - 谷歌软件工程师
2. 约翰·史密斯 - 销售部门的销售经理
3. 约翰·布朗 - 阿特拉斯项目的项目经理
你问的是哪个约翰?
时间查询
用户:“我上个月参加了哪些活动?”
助手:我会搜索活动记忆并检查它们的日期。
[LLM使用:search_memories({"query": "", "label": "活动", "sort_by": "created_at", "sort_order": "desc"})]
[根据created_at或date属性过滤结果到上个月]
以下是你上个月参加的活动:
- 科技创新峰会(3月5 - 6日) - 主旨演讲者
- 团队建设研讨会(3月12日) - 与工程团队一起
- 客户晚宴会议(3月18日) - 与ABC公司的项目启动会
- 网络开发会议(3月25 - 27日) - 参加了5场关于React的会议
灵活的记忆类型
系统不强制使用严格的类型 - 你可以创建任何有意义的记忆类型:
常见类型(小写):人、地点、组织、项目、活动、主题、对象、动物、植物、食物、活动、媒体、技能、文档、会议、任务、习惯、健康、车辆、工具、想法、目标
但你可以使用任何类型(小写):食谱、梦想、记忆、名言、书籍、电影、情感、关系、约会、药物、锻炼、症状、付款、合同等
LLM会在适当的时候智能重用现有类型以保持一致性。
连接的力量
这个记忆系统的真正价值不仅在于存储单个记忆,还在于在它们之间创建连接。随着你建立关系,知识图谱的实用性会呈指数级增长:
为什么连接很重要
- 上下文发现:关联的记忆提供了孤立事实无法提供的丰富上下文
- 关系模式:通过关系分析揭示隐藏的模式和见解
- 时间理解:跟踪关系随时间的演变
- 网络效应:每个新连接都会增加现有记忆的价值
建立连接的最佳实践
- 存储新信息时始终寻找关系:
不好的做法:只存储“约翰是开发者”
好的做法:存储约翰并将他与他的公司、项目、技能和同事关联起来
- 使用具有语义的关系类型:
WORKS_AT、MANAGES、KNOWS、LIVES_IN、CREATED、USES、LEARNED_FROM
- 添加关系属性以提供更丰富的上下文:
create_connection({
"fromMemoryId": 123,
"toMemoryId": 456,
"type": "WORKS_ON",
"properties": {"role": "负责人", "since": "2023-01", "hours_per_week": 20}
})
- 以图的思维思考:检索信息时,使用深度大于1来探索网络:
search_memories({"query": "约翰", "depth": 3}) // 探索最多3跳的关联信息
请记住:没有连接的记忆就像图书馆里没有目录的书 - 它存在,但实用性有限。你关联的记忆越多,知识图谱就越智能和有用。
📚 详细文档
哲学理念:大语言模型驱动的智能
与传统方法将复杂逻辑嵌入工具不同,这个服务器提供简单的原子操作,让大语言模型处理所有智能逻辑:
- 无隐藏逻辑:工具的功能与描述完全一致 - 没有自动消歧或智能匹配
- 大语言模型决定一切:实体识别、关系推断和冲突解决
- 操作透明:每个操作都是明确且可预测的
- 最大灵活性:大语言模型可以实现任何策略,不受工具限制
搜索行为
search_memories工具使用单词分词:
- 查询“约翰·史密斯”会找到包含“约翰”或“史密斯”的记忆
- 这会返回更多结果,让大语言模型选择最相关的结果
- 对于姓名和多词查询,比精确子字符串匹配更好
这种方法使系统更强大和灵活,因为大语言模型能力的提升直接转化为更好的记忆管理。
Neo4j企业版支持
此服务器现在支持连接到Neo4j企业版中的特定数据库。默认情况下,它连接到“neo4j”数据库,但你可以使用NEO4J_DATABASE环境变量指定不同的数据库。
记忆工具
search_memories:从知识图谱中搜索和检索记忆
- 基于单词的搜索:搜索查询中的任何单词(例如,“本·威克斯”会找到包含“本”或“威克斯”的记忆)
- 对所有记忆属性进行自然语言搜索(或留空以获取所有记忆)
- 按记忆类型过滤(人、地点、项目等)
- 使用
since_date参数按日期过滤(ISO格式)
- 控制关系深度和结果限制
- 按任何字段排序(创建时间、名称等)
create_memory:在知识图谱中创建新记忆
- 灵活的类型系统 - 使用任何小写标签(人、地点、项目、技能等)
- 以键值对形式存储任何属性
- 自动添加时间戳以进行时间跟踪
create_connection:在记忆之间创建关系
- 使用语义关系类型(KNOWS、WORKS_AT、LIVES_IN等)关联记忆
- 为关系添加属性(自何时、角色、状态等)
- 构建复杂的知识网络
update_memory:更新现有记忆的属性
- 添加或修改任何属性
- 将属性设置为null以删除它们
update_connection:更新关系属性
delete_memory:删除记忆及其所有连接
delete_connection:删除特定关系
list_memory_labels:列出所有使用的唯一记忆标签
- 显示所有标签及其计数
- 有助于保持一致性
- 防止标签重复变化
get_guidance:获取有效使用记忆工具的帮助
- 主题:标签、关系、最佳实践、示例
- 为大语言模型返回全面的指南
- 在不确定标签/关系命名时使用
配置
环境变量
服务器需要以下环境变量:
NEO4J_URI:Neo4j数据库URI(必需,例如bolt://localhost:7687)
NEO4J_USERNAME:Neo4j用户名(必需)
NEO4J_PASSWORD:Neo4j密码(必需)
NEO4J_DATABASE:Neo4j数据库名称(可选) - 用于具有多个数据库的Neo4j企业版
设置环境变量
开发环境
将.env.example复制到.env并使用你的凭证进行更新:
cp .env.example .env
Claude桌面
将环境变量添加到你的Claude桌面配置中(见上面的快速开始部分)。
🔧 技术细节
测试
运行测试套件:
npm test
使用MCP Inspector进行交互式测试
要进行交互式测试和调试,请使用MCP Inspector:
./run-inspector.sh
NEO4J_URI=bolt://localhost:7687 \
NEO4J_USERNAME=neo4j \
NEO4J_PASSWORD=your-password \
npx @modelcontextprotocol/inspector build/index.js
Inspector提供了一个Web界面,用于:
- 交互式测试所有可用工具
- 查看实时请求/响应数据
- 验证你的Neo4j连接
- 调试工具参数和响应
📄 许可证
MIT