mcpField
M
Memory MCP Server

Memory MCP Server

本地服务
github.com记忆与知识035 周前更新

关于 Memory MCP Server

Memory MCP Server 是为 MCP 助手提供持久记忆的 SQLite 服务。它将全文搜索、关系图遍历和按令牌预算检索整合在本地 stdio 服务中。

主要功能

  1. 01在 SQLite 中持久保存记忆
  2. 02使用 FTS5 搜索内容和标签
  3. 03通过 BFS 遍历记忆关系
  4. 04按令牌预算检索上下文
  5. 05批量管理记忆和关系

适用场景

  1. 01在助手会话之间保留信息
  2. 02按文本、类型或重要性查找记忆
  3. 03通过关系图找回关联记忆
  4. 04选择符合令牌上限的记忆上下文

MCP 相关

通过 stdio 提供记忆增删改查、批量操作、搜索、图谱回忆、上下文检索、关系管理和统计工具。还提供使用说明资源及记忆 URI 模板。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"j0hanz-memory": {
"command": "npx",
"args": [
"-y",
"@j0hanz/memory-mcp"
]
}
}
}
启动命令npx -y @j0hanz/memory-mcp

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

安装包
npm@j0hanz/memory-mcp1.7.0

工具

13

收录的工具列表 · 更新于 2 周前

参数类型必填说明
tagsarray是记忆标签
contentstring是记忆内容
importanceinteger否优先级(0-10)
memory_typeenum否记忆类别general | fact | plan | decision | reflection | lesson | error | gradient

详细介绍

Memory MCP

npm version License: MIT Node.js TypeScript

Install in VS Code Install in VS Code Insiders

Install in Cursor

基于 SQLite 的 MCP 服务,用于持久化存储记忆、全文检索和关系图遍历。

概述

Memory MCP 为启用 MCP 的助手提供本地持久化记忆层。它使用 SQLite 存储以 SHA-256 寻址的记忆条目,并提供由 FTS5 驱动的全文搜索、有向关系图、BFS 回忆遍历和感知令牌预算的上下文检索——所有功能均通过 stdio 传输访问,且无需外部依赖。

主要功能

  • 13 个 MCP 工具,支持 CRUD、批量操作、FTS5 搜索、BFS 图回忆、令牌预算上下文检索、关系和统计。
  • 全文搜索:通过 SQLite FTS5 搜索内容和标签,并支持重要性和类型筛选。
  • 图回忆:支持 BFS 遍历、有限前沿,以及每跳发送 MCP 进度通知。
  • 令牌预算检索(retrieve_context):选择符合调用方指定令牌预算的记忆——无需手动分页。
  • 严格的 Zod 输入验证,提供类型化输出信封和 SHA-256 哈希寻址。
  • 资源支持:提供 internal://instructions(Markdown 指南)和带哈希自动补全的 memory://memories/{hash} URI 模板。
  • stdio 传输:支持干净关闭处理(SIGINT、SIGTERM),且不提供 HTTP 端点。 |

要求

  • Node.js >=24。
  • 支持 FTS5 的 SQLite(启动时验证)。
  • 任何支持 stdio 命令服务的 MCP 客户端。

快速开始

直接通过 npx 使用 npm 包——无需安装:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

提示

服务仅使用 stdio 传输;不会公开 HTTP 端点。不得让自定义日志污染 stdout。

或者使用 Docker 运行:

docker run --rm -i ghcr.io/j0hanz/memory-mcp:latest

客户端配置

在 VS Code 中安装

在 VS Code 中安装

工作区文件 .vscode/mcp.json:

{
  "servers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

命令行:

code --add-mcp '{"name":"memory-mcp","command":"npx","args":["-y","@j0hanz/memory-mcp@latest"]}'
在 VS Code Insiders 中安装

在 VS Code Insiders 中安装

命令行:

code-insiders --add-mcp '{"name":"memory-mcp","command":"npx","args":["-y","@j0hanz/memory-mcp@latest"]}'
在 Cursor 中安装

在 Cursor 中安装

~/.cursor/mcp.json:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}
在 Claude Desktop / Claude Code 中安装

claude_desktop_config.json:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

命令行:

claude mcp add memory-mcp -- npx -y @j0hanz/memory-mcp@latest
在 Windsurf 中安装

MCP 配置:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}
使用 Docker 运行
# Pull and run (stdio mode)
docker run --rm -i \
  -e MEMORY_DB_PATH=/data/memory.db \
  -v memory-data:/data \
  ghcr.io/j0hanz/memory-mcp:latest

MCP 客户端配置:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MEMORY_DB_PATH=/data/memory.db",
        "-v",
        "memory-data:/data",
        "ghcr.io/j0hanz/memory-mcp:latest"
      ]
    }
  }
}

文档维护

  • 负责人:在 src/ 中更新 MCP 行为的维护者,必须在同一个 PR 中更新 README.md 和受影响的 mcp/ 镜像页面。
  • 链接/版本策略:协议参考链接使用固定版本的 https://modelcontextprotocol.io/specification/2025-11-25/...;避免使用 latest 和混杂的旧版目标。
  • 漂移检查清单:
    • 重新核对 src/server.ts 中的能力声明。
    • 将工具/资源/提示词文档与 src/tools/index.ts、src/resources/index.ts 和 src/prompts/index.ts 对照并协调一致。
    • 确认 src/instructions.md 中的限制/注意事项与运行时行为一致。
  • 验证命令:npm run type-check、npm run test:fast、npm run build。

MCP 接口

工具摘要
工具类别说明
store_memory写入按内容和排序后的标签哈希实现幂等
store_memories写入批量(1–50),由事务包装
get_memory读取哈希查找
update_memory写入返回 old_hash + new_hash
delete_memory写入级联删除关系
delete_memories写入批量(1–50),由事务包装
search_memories读取FTS5 + 重要性/类型筛选 + 游标
create_relationship写入幂等创建有向边
delete_relationship写入删除指定的有向边
get_relationships读取方向筛选 + 关联记忆字段
recall读取FTS5 种子 + BFS 遍历(深度 0–3)
retrieve_context读取根据 Token 预算检索上下文
memory_stats读取存储聚合统计和类型细分

store_memory

存储一条包含内容、标签以及可选类型和重要性的新记忆。幂等——存储相同的内容和标签时,会返回现有哈希,且 created: false。

NameTypeRequiredDefaultDescription
contentstringYes—记忆内容(1–100000 个字符)
tagsstring[]Yes—1–100 个标签,每个最多 50 个字符,不含空白字符
memory_typeenumNogeneralgeneral、fact、plan、decision、reflection、lesson、error、gradient
importanceintegerNo0优先级 0–10

返回:{ hash, created }


store_memories

在一个事务中存储多条记忆(最多 50 条)。

NameTypeRequiredDescription
itemsArray<StoreMemoryItem>Yes1–50 项,每项包含 content、tags,以及可选的 memory_type 和 importance

返回:{ items, succeeded, failed }


get_memory

通过 SHA-256 哈希获取一条记忆。

NameTypeRequiredDescription
hashstringYes64 个字符的小写 SHA-256 十六进制字符串

返回:Memory;若发生 E_NOT_FOUND,则返回 { ok: false, error }。


update_memory

更新现有记忆的内容,并可选择更新标签。返回新旧两个哈希。

NameTypeRequiredDefaultDescription
hashstringYes—现有记忆的哈希
contentstringYes—替换后的内容
tagsstring[]NoExisting tags替换后的标签

返回:{ old_hash, new_hash }


delete_memory

通过哈希删除一条记忆,并级联删除相关的关系行。

NameTypeRequiredDescription
hashstringYes记忆哈希

返回:{ hash, deleted }


delete_memories

在一个事务中通过哈希删除多条记忆。

NameTypeRequiredDescription
hashesstring[]Yes1–50 个记忆哈希

返回:{ items, succeeded, failed }


search_memories

使用 FTS5 对记忆内容和标签进行全文搜索。支持按重要性和类型筛选,并使用游标分页。

名称类型必填默认值说明
querystring是—搜索文本(1–1000 个字符)
limitinteger否20每页结果数(1–100)
cursorstring否—上一条响应中的分页游标
min_importanceinteger否—仅返回重要性 >= 此值的记忆(0–10)
max_importanceinteger否—仅返回重要性 <= 此值的记忆(0–10)
memory_typeenum否—按记忆类型筛选

返回:{ memories, total_returned, nextCursor? }


create_relationship

在两条记忆之间创建有向关系边。此操作具有幂等性。

建议的 relation_type 值:related_to、causes、depends_on、parent_of、child_of、supersedes、contradicts、supports、references。

名称类型必填说明
from_hashstring是源记忆哈希
to_hashstring是目标记忆哈希
relation_typestring是边标签(1–50 个字符,不含空格,可自由填写)

返回:{ created }


delete_relationship

删除一条有向关系边。

名称类型必填说明
from_hashstring是源哈希
to_hashstring是目标哈希
relation_typestring是关系类型

返回:{ deleted };若出现 E_NOT_FOUND,则返回 { ok: false, error }。


get_relationships

获取某条记忆的关系,可选按方向筛选。

名称类型必填默认值说明
hashstring是—记忆哈希
directionenum否bothoutgoing、incoming 或 both

返回:{ relationships, count }

每条关系包含 from_hash、to_hash、relation_type、created_at、linked_hash、linked_content 和 linked_tags。


recall

通过全文查询搜索记忆,然后使用 BFS 遍历关系图,最多跳转 depth 次。每次跳转都会发出 MCP 进度通知。

名称类型必填默认值描述
querystring是—初始搜索查询(1–1000 个字符)
depthinteger否1BFS 跳数(0–3)
limitinteger否10初始记忆数量(1–50)
cursorstring否—上一响应中的分页游标
min_importanceinteger否—初始筛选:仅包含重要性 >= 此值(0–10)的记忆
max_importanceinteger否—初始筛选:仅包含重要性 <= 此值(0–10)的记忆
memory_typeenum否—初始筛选:仅包含此类型的记忆

返回:{ memories, graph, depth_reached, aborted?, nextCursor? }

graph 中的每个项目都采用以下结构:

{ "from_hash": "...", "to_hash": "...", "relation_type": "..." }

说明

aborted: true 表示遍历触及安全限制(RECALL_MAX_FRONTIER_SIZE、RECALL_MAX_EDGE_ROWS 或 RECALL_MAX_VISITED_NODES)。仍会返回部分结果。


retrieve_context

搜索记忆并返回按相关性排序、符合调用方指定令牌预算的结果。无需手动分页和计算令牌即可管理上下文窗口。

名称类型必填默认值描述
querystring是—搜索查询(1–1000 个字符)
token_budgetinteger否4000返回的最大估算令牌数(100–200000)
strategyenum否relevance排序方式:relevance(FTS 排名)、importance(优先级最高)、recency(时间最新)

返回:{ memories, estimated_tokens, truncated }

提示

令牌数为近似估算(内容长度 ÷ 4)。truncated: true 表示达到预算时仍有候选项未被纳入。


memory_stats

返回记忆和关系的汇总统计信息。不接受输入。

返回:

{
  "memories": {
    "total": 0,
    "oldest": null,
    "newest": null,
    "avg_importance": null
  },
  "relationships": { "total": 0 },
  "by_type": {}
}

资源
URIMIME描述
internal://instructionstext/markdown所有工具和工作流的 Markdown 使用指南
memory://memories/{hash}application/json以 JSON 格式返回一条记忆;支持补全 hash
提示词
名称参数用途
get-help无返回所有工具的完整使用说明

配置

环境变量
变量描述默认值必填
MEMORY_DB_PATHSQLite 数据库文件路径memory_db/memory.db否
RECALL_MAX_FRONTIER_SIZE每跳 BFS 前沿节点数上限(100–50000)1000否
RECALL_MAX_EDGE_ROWS每次遍历获取的关系行数上限(100–50000)5000否
RECALL_MAX_VISITED_NODES整个遍历过程中已访问节点数上限(100–50000)5000否

重要

如果 MEMORY_DB_PATH 是相对路径(包括默认值 memory_db/memory.db),则相对于进程的工作目录解析。

提示

将 memory_db/ 添加到 .gitignore,以避免将数据库纳入版本控制——其中包含本地会话数据,不应共享或提交。

限制与约束
项目值
内容长度1–100000 个字符
标签数量每条记忆 1–100 个
标签长度1–50 个字符,不含空白字符
哈希格式64 位小写十六进制 SHA-256
搜索查询长度1–1000 个字符
search_memories.limit1–100(默认值为 20)
recall.depth0–3(默认值为 1)
recall.limit1–50(默认值为 10)
retrieve_context.token_budget100–200000(默认值为 4000)
批次大小1–50 项(store_memories、delete_memories)
召回前沿保护上限RECALL_MAX_FRONTIER_SIZE(每跳默认值为 1000)
SQLite 忙碌超时5000 毫秒

说明

游标值是不透明的 base64url 编码令牌。请将其视为不透明值,不要解析。

安全

  • 传输仅使用 stdio(StdioServerTransport)——没有 HTTP 端点。
  • 致命进程错误会写入 stderr;为确保 MCP 协议正常工作,stdout 必须保持干净。
  • 在访问数据库前,所有输入都会通过严格的 Zod 模式和有界字段约束进行验证。
  • 哈希会根据小写 64 位 SHA-256 十六进制正则表达式进行验证。
  • 搜索输入会先被拆分为字母数字词项,再执行 FTS MATCH(非字母数字字符会充当分隔符,从而防止 FTS 注入)。
  • SQLite 已启用外键;删除记忆时,相关关系行会级联删除。

开发

安装依赖:

npm install

核心脚本:

脚本命令用途
buildnpm run build清理、编译、验证说明、复制资源并设置可执行权限
devnpm run devTypeScript 监视模式
dev:runnpm run dev:run使用 .env 和文件监视运行构建后的服务
startnpm run start启动构建后的服务
testnpm run test通过任务运行器执行完整构建和测试
test:fastnpm run test:fast使用 Node 测试运行器直接运行 TS 测试
lintnpm run lintESLint 检查
lint:fixnpm run lint:fixESLint 自动修复
type-checknpm run type-check严格的 TypeScript 检查
formatnpm run formatPrettier 格式化
inspectornpm run inspector构建并打开 MCP Inspector,以检查 stdio 服务

使用 MCP Inspector 检查:

npx @modelcontextprotocol/inspector node dist/index.js

构建与发布

GitHub Actions 发布工作流(.github/workflows/release.yml)通过单个 workflow_dispatch 触发器处理版本管理、验证和发布:

workflow_dispatch (patch / minor / major / custom)
    │
    ▼
  release — bump package.json + server.json → lint → type-check → test → build → tag → GitHub Release
    │
    ├──► publish-npm ──► publish-mcp   (npm Trusted Publishing OIDC → MCP Registry)
    │
    └──► publish-docker                (GHCR, linux/amd64 + linux/arm64)

触发发布:

gh workflow run release.yml -f bump=patch

也可以使用 GitHub 界面:Actions → Release → Run workflow。

说明

npm 发布使用 OIDC Trusted Publishing——无需 NPM_TOKEN 密钥。MCP Registry 使用 GitHub OIDC。Docker 使用内置的 GITHUB_TOKEN。

故障排查

症状原因解决方法
启动失败并出现 FTS5 错误Node.js 构建不含 FTS5使用支持 SQLite FTS5 的 Node.js 24+
get_memory 返回 E_NOT_FOUND哈希不存在先通过 search_memories 验证
E_INVALID_CURSOR游标已过期或格式错误不带 cursor 参数重试请求
MCP 客户端无法连接添加了自定义 stdout 日志确保服务进程没有向 stdout 写入任何内容
回忆结果中出现 aborted: true遍历达到安全限制减小 depth,或调整 RECALL_MAX_* 环境变量
数据库锁定错误并发写入负载过高SQLite 忙碌超时为 5000 ms;减少并发写入

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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