Skip to main content
Glama

mnemon-mcp

CI npm version Node.js License: MIT

面向 AI 代理的持久化分层记忆。 本地优先。零云端。单个 SQLite 文件。

Landing Page · npm · GitHub

您的 AI 代理在每次会话后都会忘记一切。Mnemon 解决了这个问题。

它能为任何兼容 MCP 的客户端——OpenClaw、Claude Code、Cursor、Windsurf 或您自己的客户端——提供由您机器上的单个 SQLite 数据库支持的结构化长期记忆。无需 API 密钥,无需云端,无遥测。只需 npm install,您的代理就能记住。


为什么需要分层记忆?

扁平化的键值存储将"昨天发生了什么"与"没有测试绝不提交"混为一谈。这是错误的——不同类型的知识有不同的生命周期和访问模式。

Mnemon 将记忆组织为四个层

存储内容

访问方式

生命周期

情景

事件、会话、日志条目

按日期或时间段

衰减(30 天半衰期)

语义

事实、偏好、关系

按主题或实体

稳定

程序性

规则、工作流、约定

启动时加载

很少更改

资源

参考资料、读书笔记

按需

缓慢衰减(90 天)

上周二的日志条目和一条永不变更的编码规则位于不同的层中——因为本就该如此。

Related MCP server: persistent-kb-mcp

检索质量

检索质量基于真实的 797 条记忆双语(RU/EN)语料库中的 50 个案例黄金集进行衡量,通过实际的 MCP 服务器进行——而非重新实现。当前数据(方法论与历史):

指标

仅 FTS

仅向量

混合(RRF)

综合得分

88.9

89.2

91.7

Recall@5

0.907

0.898

0.919

MRR

0.817

0.832

0.878

nDCG@5

0.816

0.828

0.869

负例精确率

1.000

1.000

1.000

混合模式在两个单独指标上都更优,这正是融合它们的全部意义所在:词法搜索具有更好的原始召回率,向量搜索具有更好的排序,而 RRF 两者兼得,而不是将两者平均掉。

评估文档也跟踪了失败案例——语料库增长时的分数漂移、评估发现的 BM25 字段权重错误、融合仍然输给纯词法搜索的两种情况,以及黄金集覆盖的内容。无法审计的数字只是营销话术;了解这些数据是如何产生的

架构

flowchart LR
    C["MCP client<br/>Claude Code · Cursor · …"] -- "stdio / HTTP" --> T["10 tools · 4 resources · 3 prompts"]
    T --> R["retrieval pipeline<br/>FTS5 · vector · RRF fusion"]
    T --> M["memories + supersede chains"]
    I["KB import pipeline<br/>markdown → memories"] --> M
    M -- triggers --> F["FTS5 index (stemmed EN+RU)"]
    R --> F
    R --> V["sqlite-vec (optional, BYOK)"]

一个 SQLite 文件保存记忆、FTS5 索引和可选的向量索引。写入通过保持取代链不变式的事务进行;读取运行搜索中描述的分阶段检索流水线。

完整图景——模块边界、写入/读取路径、不变式和已知限制——见 docs/ARCHITECTURE.md。设计决策记录为 ADR:SQLite+FTS5 核心混合 RRF 检索同步驱动分层记忆模型

快速开始

安装

npm install -g mnemon-mcp

或从源码构建:

git clone https://github.com/nikitacometa/mnemon-memory-mcp.git
cd mnemon-memory-mcp && npm install && npm run build

配置您的 MCP 客户端

openclaw mcp register mnemon-mcp --command="mnemon-mcp"

或添加到 ~/.openclaw/mcp_config.json

{
  "mnemon-mcp": {
    "command": "mnemon-mcp"
  }
}

添加到 ~/.claude/mcp.json

{
  "mcpServers": {
    "mnemon-mcp": {
      "command": "mnemon-mcp"
    }
  }
}

添加到您客户端的 MCP 配置:

{
  "mcpServers": {
    "mnemon-mcp": {
      "command": "mnemon-mcp"
    }
  }
}

使用编译后入口点的完整路径:

{
  "mnemon-mcp": {
    "command": "node",
    "args": ["/absolute/path/to/mnemon-mcp/dist/index.js"]
  }
}

验证

echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | mnemon-mcp

您应该在响应中看到 10 个工具。数据库(~/.mnemon-mcp/memory.db)在首次运行时自动创建。

就这样。您的代理现在拥有了持久化记忆。

它能做什么

10 个 MCP 工具

工具

功能

memory_add

存储带层、实体、置信度、重要性和可选 TTL 的记忆

memory_search

全文或精确搜索,支持按层、实体、日期、范围、置信度过滤

memory_update

原地更新或创建带版本控制的替换(取代链)

memory_delete

删除记忆;如有前驱则重新激活

memory_inspect

获取层统计信息或追踪单条记忆的版本历史

memory_export

导出为 JSON、Markdown 或 Claude-md 格式,支持过滤

memory_health

运行诊断:过期条目、孤立链、陈旧记忆;可选 GC

memory_session_start

启动代理会话——返回用于分组记忆的会话 ID

memory_session_end

结束会话并附带可选摘要;返回持续时间和记忆数量

memory_session_list

列出会话,支持按客户端、项目或活动状态过滤

MCP 资源与提示词

资源 — 您的代理可以读取的实时数据:

URI

返回内容

memory://stats

每层聚合统计信息

memory://recent

最近 24 小时内创建/更新的记忆

memory://layer/{layer}

某层中的所有活动记忆

memory://entity/{name}

关于某实体的所有活动记忆

提示词 — 预构建的工作流:

提示词

用途

recall

"告诉我你所知道的关于 X 的一切"

context-load

开始任务前加载相关上下文

journal

创建结构化日志条目

搜索

四种模式,均支持层 / 实体 / 范围 / 日期 / 置信度过滤:

FTS 模式(未配置嵌入时的默认模式)— 使用 BM25 排序的标记化全文搜索。多词查询使用 AND;如果结果太少,OR 会以分数惩罚作为补充。渐进式 AND 放宽在回退到完整 OR 之前,会先尝试前 3 个最具体的词项。

混合模式(配置嵌入后的默认模式)— 通过倒数排名融合结合 FTS5 + 向量搜索。检测查询中的带引号实体(例如 'Essentialism'),并运行加权子查询以进行交叉引用检索。

向量模式 — 对嵌入进行纯余弦相似度搜索。

精确模式 — 使用 LIKE 子串匹配进行精确短语查找。

分数:bm25 × (0.3 + 0.7 × importance) × decay(layer) × recency

新近度提升:1 / (1 + daysSince / 365) — 温和地奖励最近创建的回忆,而不会惩罚旧回忆。

词干提取

索引时查询时对英语和俄语应用 Snowball 词干提取器。这意味着 "running" 匹配 "runs""книги" 匹配 "книга"。停用词会从查询中过滤掉以提高精确度。

事实版本控制

知识会演变。Mnemon 不会删除旧事实——而是将它们链接起来:

v1: "Team uses React 17"  →  superseded_by: v2
v2: "Team uses React 19"  →  supersedes: v1 (active)

搜索仅返回最新版本。memory_inspect 配合 include_history: true 显示完整链。memory_delete 会重新激活前一个版本——不会丢失任何内容。

向量搜索(可选,自带密钥)

通过提供您自己的嵌入 API 来启用语义相似度搜索:

# OpenAI
MNEMON_EMBEDDING_PROVIDER=openai MNEMON_EMBEDDING_API_KEY=sk-... mnemon-mcp

# Ollama (local, free)
MNEMON_EMBEDDING_PROVIDER=ollama mnemon-mcp

这解锁了两种额外的搜索模式:

  • mode: "vector" — 纯余弦相似度搜索

  • mode: "hybrid" — 通过倒数排名融合结合的 FTS5 + 向量

需要 sqlite-vec(作为可选依赖安装)。新记忆在添加时嵌入;现有记忆可以回填。

变量

默认值

描述

MNEMON_EMBEDDING_PROVIDER

openaiollama(未设置 = 禁用)

MNEMON_EMBEDDING_API_KEY

API 密钥(OpenAI 必需)

MNEMON_EMBEDDING_MODEL

text-embedding-3-small / nomic-embed-text

模型名称

MNEMON_EMBEDDING_DIMENSIONS

1024 / 768

向量维度

MNEMON_OLLAMA_URL

http://localhost:11434

Ollama 端点

导入知识库

有一堆 Markdown 文件?批量导入:

cp config.example.json ~/.mnemon-mcp/config.json   # edit this first
npm run import:kb -- --kb-path /path/to/your/kb     # incremental (skips unchanged files)

配置将 glob 模式映射到记忆层:

{
  "owner_name": "your-name",
  "extra_stop_words": [],
  "mappings": [
    {
      "glob": "journal/*.md",
      "layer": "episodic",
      "entity_type": "user",
      "entity_name": "$owner",
      "importance": 0.6,
      "split": "h2"
    },
    {
      "glob": "people/*.md",
      "layer": "semantic",
      "entity_type": "person",
      "entity_name": "from-heading",
      "importance": 0.8,
      "split": "h3"
    }
  ]
}

配置字段

字段

类型

描述

owner_name

string

您的姓名——用于 entity_name 中的 $owner 替换

extra_stop_words

string[]

从 FTS 查询中过滤的词(例如您的姓名形式)

glob

string

要匹配的文件模式

layer

string

目标记忆层

entity_type

string

user / person / project / concept / file / rule / tool

entity_name

string

字面名称、"$owner""from-heading"(从 H2/H3 提取)

split

string

"whole"(每个文件一条记忆)、"h2""h3"(按标题拆分)

importance

number

0.0–1.0,影响搜索排名

confidence

number

0.0–1.0,可在搜索中过滤

scope

string

可选命名空间

HTTP 传输

用于远程或多客户端设置:

MNEMON_AUTH_TOKEN=your-secret MNEMON_HOST=0.0.0.0 MNEMON_PORT=3000 npm run start:http

端点

描述

POST /mcp

MCP JSON-RPC(如设置令牌则使用 Bearer 认证)

GET /health

{"status":"ok","version":"..."}

默认绑定到 127.0.0.1。绑定到任何其他主机都需要 MNEMON_AUTH_TOKEN — 服务器拒绝在未认证的情况下将记忆存储暴露到网络(在受信任网络上可使用 MNEMON_ALLOW_INSECURE_HTTP=1 覆盖)。速率限制(默认 100 次请求/分钟/IP)、可选 CORS、1MB 请求体限制、时序安全认证、收到 SIGTERM 时优雅关闭。

配置参考

变量

默认值

描述

MNEMON_DB_PATH

~/.mnemon-mcp/memory.db

数据库路径

MNEMON_KB_PATH

.

导入的知识库根目录

MNEMON_CONFIG_PATH

~/.mnemon-mcp/config.json

导入配置路径

MNEMON_AUTH_TOKEN

HTTP 传输的 Bearer 令牌

MNEMON_HOST

127.0.0.1

HTTP 传输绑定地址

MNEMON_PORT

3000

HTTP 传输端口

MNEMON_CORS_ORIGIN

CORS Access-Control-Allow-Origin(未设置时不发送 CORS 头)

MNEMON_RATE_LIMIT

100

每 IP 每分钟最大请求数(0 = 关闭)

工具参考

参数

类型

必填

描述

content

string

记忆文本(最多 100K 字符)

layer

string

episodic / semantic / procedural / resource

title

string

短标题(最多 500 字符)

entity_type

string

user / project / person / concept / file / rule / tool

entity_name

string

用于筛选的实体名称

confidence

number

0.0–1.0(默认 0.8)

importance

number

0.0–1.0(默认 0.5)

scope

string

命名空间(默认 global

source_file

string

源文件路径 — 触发匹配条目的自动取代

ttl_days

number

N 天后自动过期

valid_from / valid_until

string

时间事实窗口(ISO 8601)

参数

类型

必填

描述

query

string

搜索文本

mode

string

fts(默认)、exactvectorhybrid

layers

string[]

按层筛选

entity_name

string

按实体筛选(支持别名)

scope

string

按作用域筛选

date_from / date_to

string

日期范围(ISO 8601)

as_of

string

时间事实筛选 — 在此日期有效的事实

min_confidence

number

最低置信度

min_importance

number

最低重要性

limit

number

最大结果数(默认 10,最大 100)

offset

number

分页偏移量

参数

类型

必填

描述

id

string

记忆 ID

content

string

新内容

title

string

新标题

confidence

number

新置信度

importance

number

新重要性

supersede

boolean

true = 版本化替换;false(默认)= 原地更新

new_content

string

用于取代条目的内容

参数

类型

必填

描述

id

string

记忆 ID。如果属于取代链的一部分,则重新激活前驱条目

参数

类型

必填

描述

id

string

记忆 ID(省略则显示聚合统计)

layer

string

按层筛选统计

entity_name

string

按实体筛选统计

include_history

boolean

显示取代链

参数

类型

必填

描述

format

string

json / markdown / claude-md

layers

string[]

按层筛选

scope

string

按作用域筛选

date_from / date_to

string

日期范围

limit

number

最大条目数(默认全部,最大 10K)

参数

类型

必填

描述

cleanup

boolean

true = 垃圾回收过期条目(默认:仅报告)

返回:状态(healthy / warning / degraded)、按层统计、过期条目、孤立链、陈旧/低置信度计数,以及 cleanup=true 时的清理计数。

参数

类型

必填

描述

client

string

客户端标识符(例如 claude-codecursorapi

project

string

此会话的项目作用域

meta

object

附加会话元数据

返回:id(会话 UUID)、started_at(ISO 8601)。

参数

类型

必填

描述

id

string

要结束的会话 ID

summary

string

完成内容的摘要(最多 10K 字符)

返回:idended_atduration_minutesmemories_count

参数

类型

必填

描述

limit

number

最大会话数(默认 20,最大 100)

client

string

按客户端筛选

project

string

按项目筛选

active_only

boolean

仅返回尚未结束的会话(默认 false)

返回:会话数组,包含 idclientprojectstarted_atended_atsummarymemories_count

对比

mnemon-mcp

mem0

basic-memory

Engram

Anthropic KG

架构

SQLite FTS5 + vector

Cloud API + Qdrant

Markdown + vector

SQLite FTS5

JSON file

记忆结构

4 个类型化层

扁平

扁平

扁平 + 会话

搜索

FTS5 + hybrid RRF

语义

混合

FTS5

精确

事实版本控制

取代链

部分

词干提取

EN + RU (Snowball)

仅 EN

仅 EN

嵌入

BYOK (OpenAI / Ollama)

内置

FastEmbed

依赖

0 个必需

Qdrant, Neo4j

Python 3.12

Go binary

需要云服务

成本

免费

$19–249/mo

免费

免费

免费

安装

npm install -g

Docker + API 密钥

pip + 依赖

Go install

内置

许可证

MIT

Apache 2.0

AGPL

MIT

MIT

包含来源的扩展竞争分析:docs/COMPETITORS.md

开发

npm run dev        # run via tsx (no build step)
npm run build      # TypeScript → dist/
npm run lint       # eslint (flat config)
npm test           # vitest — unit + integration + MCP dispatch + HTTP transport + hybrid RRF
npm run bench      # performance benchmarks
npm run db:backup  # backup database

CI 在 Node 20 和 22 上运行构建、lint 和测试,然后通过真实 JSON-RPC 对编译后的 服务器进行冒烟测试(tools/list 必须与精确的工具集匹配)。

技术栈: TypeScript 5.9(严格模式)、better-sqlite3、@modelcontextprotocol/sdk、Snowball stemmer、Zod、vitest。

代码指南请参阅 CONTRIBUTING.md

设计原则

  • 默认气隙隔离 — 零遥测,永不例外。开箱即用,不会有任何数据离开本机;唯一与网络通信的组件是可选的嵌入器(embedder),且仅与你配置的提供商通信(包括本地 Ollama)。

  • 单文件 — 单个 SQLite 数据库,零运维,通过文件复制即可即时备份。

  • 确定性搜索 — 默认使用 FTS5 而非嵌入(embeddings)。可解释、可复现,无需 GPU。

  • 结构化优于扁平化 — 层级编码访问模式;取代链编码时间。

  • 极简 — 仅 4 个生产依赖。可在 Node 运行的任何地方工作。

  • 以度量而非断言评估 — 检索变更以黄金集(golden set)为基准进行评判,包含回归测试

许可证

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • Cloud-hosted MCP server for durable AI memory

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nikitacometa/mnemon-memory-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server