mcpField
K
Knowledge Graph Memory Server

Knowledge Graph Memory Server

本地服务
github.com/T1nker-1220记忆与知识5287 周前更新

关于 Knowledge Graph Memory Server

Knowledge Graph Memory Server 是一个基于本地知识图谱的 MCP 服务,用于跨会话持久化保存用户相关信息。它还通过 lesson 机制记录错误及其解决方案,便于之后检索复用。该项目基于官方 memory 服务进行扩展。

主要功能

  1. 01基于本地知识图谱的实体与关系存储
  2. 02observations 形式记录原子化信息
  3. 03lesson 机制记录错误模式与解决步骤
  4. 04按成功率排序的相似错误检索
  5. 05memory.json 与 lesson.json 分文件存储

适用场景

  1. 01跨对话记住用户的偏好与背景信息
  2. 02查找过去遇到过的类似错误及其解决方法
  3. 03为编码任务提供已记录的排错经验

MCP 相关

该服务以 MCP 服务形式提供 create_entities、search_nodes、find_similar_errors 等工具,供 MCP 客户端读写知识图谱与 lesson 数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"memories-with-lessons": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

知识图谱记忆服务

smithery badge

使用本地知识图谱实现的基础持久记忆功能。它能让 Claude 在不同对话中记住用户信息,并通过经验教训系统从过去的错误中学习。

知识图谱记忆服务 MCP 服务

核心概念

实体

实体是知识图谱中的主要节点。每个实体都有:

  • 唯一名称(标识符)
  • 实体类型(例如,“person”“organization”“event”)
  • 一组观察记录

示例:

{
  "name": "John_Smith",
  "entityType": "person",
  "observations": ["Speaks fluent Spanish"]
}
关系

关系用于定义实体之间的有向连接。关系始终以主动语态存储,用于描述实体之间的互动或关联。

示例:

{
  "from": "John_Smith",
  "to": "Anthropic",
  "relationType": "works_at"
}
观察记录

观察记录是关于某个实体的独立信息片段。它们具有以下特点:

  • 以字符串形式存储
  • 附加到特定实体
  • 可以独立添加或移除
  • 应保持原子性(每条观察记录只包含一个事实)

示例:

{
  "entityName": "John_Smith",
  "observations": [
    "Speaks fluent Spanish",
    "Graduated in 2019",
    "Prefers morning meetings"
  ]
}
经验教训

经验教训是用于记录错误及其解决方案的特殊实体。每条经验教训都包含:

  • 唯一名称(标识符)
  • 错误模式信息(类型、消息、上下文)
  • 解决步骤和验证
  • 成功率跟踪
  • 环境上下文
  • 元数据(严重程度、时间戳、频率)

示例:

{
  "name": "NPM_VERSION_MISMATCH_01",
  "entityType": "lesson",
  "observations": [
    "Error occurs when using incompatible package versions",
    "Affects Windows environments specifically",
    "Resolution requires version pinning"
  ],
  "errorPattern": {
    "type": "dependency",
    "message": "Cannot find package @shadcn/ui",
    "context": "package installation"
  },
  "metadata": {
    "severity": "high",
    "environment": {
      "os": "windows",
      "nodeVersion": "18.x"
    },
    "createdAt": "2025-02-13T13:21:58.523Z",
    "updatedAt": "2025-02-13T13:22:21.336Z",
    "frequency": 1,
    "successRate": 1.0
  },
  "verificationSteps": [
    {
      "command": "pnpm add shadcn@latest",
      "expectedOutput": "Successfully installed shadcn",
      "successIndicators": ["added shadcn"]
    }
  ]
}

API

工具
  • create_entities

    • 在知识图谱中创建多个新实体
    • 输入:entities(对象数组)
      • 每个对象包含:
        • name(字符串):实体标识符
        • entityType(字符串):类型分类
        • observations(字符串[]):关联的观察记录
    • 忽略名称已存在的实体
  • create_relations

    • 在实体之间创建多个新关系
    • 输入:relations(对象数组)
      • 每个对象包含:
        • from(字符串):源实体名称
        • to(字符串):目标实体名称
        • relationType(字符串):以主动语态表示的关系类型
    • 跳过重复关系
  • add_observations

    • 向现有实体添加新的观察记录
    • 输入:observations(对象数组)
      • 每个对象包含:
        • entityName(字符串):目标实体
        • contents(字符串[]):要添加的新观察记录
    • 返回每个实体新增的观察记录
    • 如果实体不存在则失败
  • delete_entities

    • 移除实体及其关系
    • 输入:entityNames(字符串[])
    • 级联删除关联关系
    • 如果实体不存在则静默执行
  • delete_observations

    • 从实体中移除指定的观察记录
    • 输入:deletions(对象数组)
      • 每个对象包含:
        • entityName(字符串):目标实体
        • observations(字符串[]):要移除的观察记录
    • 如果观察记录不存在则静默执行
  • delete_relations

    • 从图谱中移除指定关系
    • 输入:relations(对象数组)
      • 每个对象包含:
        • from(字符串):源实体名称
        • to(字符串):目标实体名称
        • relationType(字符串):关系类型
    • 如果关系不存在则静默执行
  • read_graph

    • 读取整个知识图谱
    • 无需输入
    • 返回包含所有实体和关系的完整图谱结构
  • search_nodes

    • 根据查询搜索节点
    • 输入:query(字符串)
    • 搜索范围包括:
      • 实体名称
      • 实体类型
      • 观察记录内容
    • 返回匹配的实体及其关系
  • open_nodes

    • 按名称检索指定节点
    • 输入:names(字符串[])
    • 返回:
      • 请求的实体
      • 请求实体之间的关系
    • 静默跳过不存在的节点
课程管理工具
  • create_lesson

    • 根据错误及其解决方案创建新课程
    • 输入:lesson(对象)
      • 包含:
        • name(字符串):唯一标识符
        • entityType(字符串):必须为 "lesson"
        • observations(字符串数组):有关错误和解决方案的备注
        • errorPattern(对象):错误详情
          • type(字符串):错误类别
          • message(字符串):错误消息
          • context(字符串):错误发生的位置
          • stackTrace(字符串,可选):堆栈跟踪
        • metadata(对象):其他信息
          • severity("low" | "medium" | "high" | "critical")
          • environment(对象):系统详情
          • frequency(数字):遇到次数
          • successRate(数字):解决方案成功率
        • verificationSteps(数组):解决方案验证
          • 每个步骤包含:
            • command(字符串):要执行的操作
            • expectedOutput(字符串):预期结果
            • successIndicators(字符串数组):成功标志
    • 自动初始化元数据时间戳
    • 验证所有必填字段
  • find_similar_errors

    • 查找相似错误及其解决方案
    • 输入:errorPattern(对象)
      • 包含:
        • type(字符串):错误类别
        • message(字符串):错误消息
        • context(字符串):错误上下文
    • 返回按成功率排序的匹配课程
    • 对错误消息使用模糊匹配
  • update_lesson_success

    • 更新课程的成功情况跟踪
    • 输入:
      • lessonName(字符串):要更新的课程
      • success(布尔值):解决方案是否有效
    • 更新:
      • 成功率(加权平均值)
      • 频次计数器
      • 上次更新时间戳
  • get_lesson_recommendations

    • 获取适用于当前上下文的课程
    • 输入:context(字符串)
    • 搜索范围:
      • 错误类型
      • 错误消息
      • 错误上下文
      • 课程观察记录
    • 返回按以下条件排序的课程:
      • 上下文相关性
      • 成功率
    • 包含完整的解决方案详情

文件管理

该服务现在会处理两种类型的文件:

  • memory.json:存储基本实体和关系
  • lesson.json:存储包含错误模式的课程实体

如果文件超过 1000 行,系统会自动拆分文件以维持性能。

Cursor MCP 客户端设置

要将此记忆服务与 Cursor MCP 客户端集成,请按以下步骤操作:

  1. 克隆仓库:
git clone [repository-url]
cd [repository-name]
  1. 安装依赖项:
pnpm install
  1. 构建项目:
pnpm build
  1. 配置服务:
  • 找到构建后服务文件的完整路径:/path/to/the/dist/index.js
  • 使用 Node.js 启动服务:node /path/to/the/dist/index.js
  1. 在 Cursor 中激活:
  • 使用键盘快捷键 Ctrl+Shift+P
  • 输入 "reload window" 并选择该项
  • 等待几秒钟,让 MCP 服务激活
  • 出现提示时,选择 stdio 类型

现在,记忆服务应已集成到 Cursor MCP 客户端中,可以开始使用了。

在 Claude Desktop 中使用

设置

将以下内容添加到 claude_desktop_config.json:

Docker
{
  "mcpServers": {
    "memory": {
      "command": "docker",
      "args": ["run", "-i", "-v", "claude-memory:/app/dist", "--rm", "mcp/memory"]
    }
  }
}
NPX
{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-memory"
      ]
    }
  }
}
使用自定义设置的 NPX

可以使用以下环境变量配置该服务:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-memory"
      ],
      "env": {
        "MEMORY_FILE_PATH": "/path/to/custom/memory.json"
      }
    }
  }
}
  • MEMORY_FILE_PATH:记忆存储 JSON 文件的路径(默认为服务目录中的 memory.json)
系统提示词

用于利用记忆的提示词取决于具体用例。更改提示词有助于模型确定创建记忆的频率和类型。

以下是一个用于聊天个性化的提示词示例。你可以在 Claude.ai Project 的“Custom Instructions”字段中使用此提示词。

Follow these steps for each interaction:

1. User Identification:
   - You should assume that you are interacting with default_user
   - If you have not identified default_user, proactively try to do so.

2. Memory Retrieval:
   - Always begin your chat by saying only "Remembering..." and retrieve all relevant information from your knowledge graph
   - Always refer to your knowledge graph as your "memory"

3. Memory
   - While conversing with the user, be attentive to any new information that falls into these categories:
     a) Basic Identity (age, gender, location, job title, education level, etc.)
     b) Behaviors (interests, habits, etc.)
     c) Preferences (communication style, preferred language, etc.)
     d) Goals (goals, targets, aspirations, etc.)
     e) Relationships (personal and professional relationships up to 3 degrees of separation)

4. Memory Update:
   - If any new information was gathered during the interaction, update your memory as follows:
     a) Create entities for recurring organizations, people, and significant events
     b) Connect them to the current entities using relations
     b) Store facts about them as observations

构建

Docker:

docker build -t mcp/memory -f src/memory/Dockerfile .

许可证

此 MCP 服务基于 MIT License 许可。这意味着您可以自由使用、修改和分发该软件,但须遵守 MIT License 的条款和条件。更多详情请参阅项目仓库中的 LICENSE 文件。

新工具

  • create_lesson

    • 根据错误及其解决方案创建新课程
    • 输入:lesson(对象)
      • 包含错误模式、解决步骤和元数据
      • 自动记录创建时间和更新情况
      • 验证解决步骤是否完整
  • find_similar_errors

    • 查找类似错误及其解决方案
    • 输入:errorPattern(对象)
      • 包含错误类型、消息和上下文
      • 按成功率排序返回匹配的课程
      • 包含相关解决方案和验证步骤
  • update_lesson_success

    • 更新课程的成功情况记录
    • 输入:
      • lessonName(字符串):要更新的课程
      • success(布尔值):解决方案是否有效
    • 更新成功率和频次指标
  • get_lesson_recommendations

    • 获取与当前上下文相关的课程
    • 输入:context(字符串)
    • 按相关性和成功率排序返回课程
    • 包含完整的解决方案详情和验证步骤

衷心感谢本仓库的所有者提供基础代码,我在此基础上增强了课程和文件管理功能

非常感谢! https://github.com/modelcontextprotocol/servers jerome3o-anthropic https://github.com/modelcontextprotocol/servers/tree/main/src/memory

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。