🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

纯文本记忆 WANGJINSHAN-11/mem-plain

DeepSeek Harness
WANGJINSHAN-1110 天前有提交已提供中文文档扫描:无法判定

一个通用的全局记忆的mcp插件

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add WANGJINSHAN-11/mem-plain
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/20·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/20) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
memplain 让 AI 记住你,但记忆存在你自己磁盘上的文本文件里。 本地优先、纯文本的长期记忆,任何 MCP 客户端都能用。 安装 pip install memplain 或者从源码装(开发用): git clone https://github.com/WANGJINSHAN-11/mem-plain.git cd mem-plain pip install -e . 装完有两个入口,效果一样: memplain # 命令行脚本 python -m memplain # 模块方式 English quick start A local-first, plain-text long-term memory server for any MCP client (Cherry Studio, Claude Desktop, DeepSeek Harness, …
展开完整文档(README 剩余 1 节)
memplain

让 AI 记住你,但记忆存在你自己磁盘上的文本文件里。
本地优先、纯文本的长期记忆,任何 MCP 客户端都能用。

安装

pip install memplain

或者从源码装(开发用):

git clone https://github.com/WANGJINSHAN-11/mem-plain.git
cd mem-plain
pip install -e .

装完有两个入口,效果一样:

memplain # 命令行脚本
python -m memplain # 模块方式

English quick start

A local-first, plain-text long-term memory server for any MCP client (Cherry Studio, Claude Desktop, DeepSeek Harness, …). Memory lives in four human-readable files under MEMORY_DIR — FACT.md, JOURNAL.jsonl, SOUL.md, USER.md — so you can open, edit, back up and git diff it.

- No database, no vector store, no network calls.
- Five tools: memory_read, memory_update, memory_append, memory_search, memory_stats.
- Safety: shrink protection on FACT.md (refuses writes that shrink it below 1 KB or to less than 1/3 of its size), automatic *.bak-<timestamp> backup before every overwrite, read whitelist.
- Requires Python ≥ 3.10 and mcp >= 2.3.0.

git clone https://github.com/WANGJINSHAN-11/mem-plain.git
cd mem-plain
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt # macOS/Linux: .venv/bin/python

Client config for any MCP client — command = venv python, args = [server.py], env = MEMORY_DIR:

{
"mcpServers": {
"memory": {
"command": "C:\\path\\to\\mem-plain\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\mem-plain\\server.py"],
"env": { "MEMORY_DIR": "E:\\memory" }
}
}
}

Ready-made configs for Cherry Studio / Claude Desktop / DeepSeek Harness are in examples/.

30 秒看懂

- 记忆 = 4 个纯文本文件(+ 可选的 FACT.archive.md 归档):FACT.md(长期事实)、JOURNAL.jsonl(事件流水)、SOUL.md(人格)、USER.md(用户档案)
- 工具 = 一个 MCP 服务器:只负责读写上面这几个文件,不联网、不建库、不上云
- 结果:Cherry Studio、Claude Desktop、DeepSeek Harness……接上同一个目录,就共享同一份记忆

记忆长这样(JOURNAL.jsonl 的一行,人眼可读,git diff 可看):

{"ts":"2026-10-19T06:59:54.413Z","tags":["项目","进度"],"text":"一句话结论,不抄原文。"}

代码公开,数据私有。 仓库里只有代码;记忆文件永远留在你本机,.gitignore 已经把它们挡死了。

它解决什么问题

每个 AI 客户端(Cherry Studio、Claude Desktop、Cursor、各种 Agent 框架)都有自己的「记忆」,但数据往往锁在平台里:换个客户端,记忆就断了;导出是一堆看不懂的 JSON;同步全靠平台。

这个项目只做一件事:把记忆从平台里拿出来,变成你能打开、能改、能备份、能进 git 的文本文件,再用 MCP 把这几个文件开放给任何客户端。

安装

克隆源码

git clone https://github.com/WANGJINSHAN-11/mem-plain.git
cd mem-plain

python -m venv .venv

Windows
.venv\Scripts\pip install -r requirements.txt
macOS / Linux
.venv/bin/pip install -r requirements.txt

自检:在临时目录里跑,不碰你的真实记忆 .venv\Scripts\python.exe _test.py

要求:Python ≥ 3.10(实测 3.13.3)、mcp ≥ 2.3.0。
⚠️ 本版用 mcp 2.x 的 MCPServer 接口,1.x 的 FastMCP 写法不兼容。

接到客户端

三要素就三个字段:

| 字段 | 值 |
| 命令 | 仓库 venv 里的 Python:<仓库路径>\.venv\Scripts\python.exe(macOS/Linux 用 .venv/bin/python) |
| 参数 | <仓库路径>/server.py 的绝对路径 |
| 环境变量 | MEMORY_DIR=<你的记忆目录>(建议显式填,默认是 E:\memory) |

Cherry Studio / Claude Desktop / 任何 mcpServers 格式的客户端

{
"mcpServers": {
"memory": {
"command": "E:\\memory-mcp\\.venv\\Scripts\\python.exe",
"args": ["E:\\memory-mcp\\server.py"],
"env": { "MEMORY_DIR": "E:\\memory" }
}
}
}

DeepSeek Harness(cordis.patch.yml)

- insert:
- id: mcp-memory
name: '@deepseek-ai/dsh-mcp-client'
config:
transport: stdio
serverName: memory
command: 'E:\memory-mcp\.venv\Scripts\python.exe'
args: ['E:\memory-mcp\server.py']
env:
MEMORY_DIR: 'E:\memory'

macOS / Linux 路径对照

把上面的 Python 换成 <仓库路径>/.venv/bin/python、server.py 换成 <仓库路径>/server.py 即可。
examples/ 里有三个现成文件:cherry-studio.json、claude-desktop.json、deepseek-harness.patch.yml。

⚠️ 多个客户端同时开着时:memory_update 是整篇覆盖 FACT.md,两个客户端同时写会互相覆盖。
约定同一时间只让一个客户端写长期记忆;memory_append(追加)可以随便并发。

五个工具

| 工具 | 作用 |
| memory_read(filename="FACT.md", tail=0, offset=0, limit=0) | 读记忆文件;tail=N 读末尾 N 行;offset/limit 按行号读一段(读归档时最省 token) |
| memory_update(content) | 整篇覆盖 FACT.md;写入前自动备份 + 缩水保护 |
| memory_append(text, tags=[], merge=True) | 往 JOURNAL.jsonl 追加一条事件;默认「巩固」:与今天某条相似度 ≥90% 就并进那条,不新增 |
| memory_search(query="", limit=20, tag="", after="", before="", include_archive=True) | 检索:JOURNAL 关键词 + tag/日期过滤(YYYY-MM-DD,本地日期);默认连归档文件一起搜(include_archive=False 关掉) |
| memory_stats() | 记忆体检(只读):各文件体积/行数/条数、最后修改时间与距今天数、JOURNAL 首末时间与今日新增、备份占用;超阈值给整理提示 |

给模型用的习惯:

| 想做的事 | 调用 |
| 读长期记忆 | memory_read() |
| 只读 FACT 末尾几节(省 token) | memory_read(tail=50) |
| 按行号读归档的一段(配合 search 给的行号) | memory_read(filename="FACT.archive.md", offset=88, limit=12) |
| 记一条事件(只写结论,不抄原文) | memory_append(text="...", tags=["项目"]) |
| 手动补一条重复内容(不想合并) | memory_append(text="...", merge=False) |
| 找以前记过的事 | memory_search(query="关键词")(默认连归档一起搜) |
| 找已经搬进归档的旧事 | 同上,不用额外参数;需要看原文就 memory_read(filename="FACT.archive.md") |
| 看某个方向最近都发生了什么 | memory_search(tag="项目") 或 memory_search(after="2026-10-01", before="2026-10-31") |
| 先看记忆整体状态、该不该整理 | memory_stats() |
| 重写整篇 FACT(谨慎) | memory_update(content="...") |

记忆文件格式

目录结构(默认 E:\memory,用环境变量 MEMORY_DIR 可改到任意位置):

<MEMORY_DIR>\
├── FACT.md 长期记忆:身份、项目、环境、约定……(整篇覆盖) ├── FACT.archive.md 归档(可选):从 FACT 搬出的旧段落,不进固定注入,靠 memory_search 找回 ├── JOURNAL.jsonl 事件日志:每行一条 JSON(只追加) ├── SOUL.md 人格定义(只读) └── USER.md 用户档案(只读)

JOURNAL.jsonl 每行格式(时间戳统一 UTC、Z 结尾、毫秒,方便跨机器合并排序):

{"ts":"2026-10-19T06:59:54.413Z","tags":["项目","进度"],"text":"一句话结论,不抄原文。"}

templates/ 里有一份空的 FACT 骨架和 JOURNAL 示例,可以先照着抄。
FACT 太大怎么办(归档):新会话往往得把 FACT.md 整篇读进来,所以它越短越好。用 memory_stats() 看体积,超过约 60 KB 就把「日期流水」这类旧段落整节剪到 FACT.archive.md(原文不动,FACT 原位留一行指针),并且先备份。归档文件不参与固定注入,但 memory_read 能读、memory_search 默认会搜——归档 = 搬家,不是丢弃。

安全设计

1. 🔒 缩水保护:memory_update 若发现新内容不足 1KB、且旧内容是它的 3 倍以上,直接拒绝——防一次误写/截断毁掉全部记忆。真要整篇覆盖,请直接编辑文件(记得先备份)。
2. 💾 自动备份:每次覆盖写入前,旧文件先备份成 FACT.md.bak-<时间戳>。
3. 📖 读取白名单:memory_read 只能读 FACT / FACT.archive / JOURNAL / SOUL / USER,../../secret.txt 这类越权路径会被拒。
4. 🏠 数据不出本机:服务器只读写本地文件,没有任何网络请求。
5. 🔧 路径不写死:MEMORY_DIR 环境变量,换机器只改一处。

项目结构

memory-mcp/
├── memplain/
│ ├── __init__.py 包入口(导出 main、__version__) │ ├── __main__.py 支持 python -m memplain │ └── server.py MCP 服务器主体(约 370 行,中文注释,可当源码读) ├── server.py 兼容层:老配置里写 server.py 路径照样能跑 ├── pyproject.toml 打包配置(预留,暂未发布到 PyPI) ├── requirements.txt 源码方式的依赖(只有 mcp) ├── _test.py 本地自检:临时目录 + 完整握手 + 五个工具 + 越权断言 ├── README.md / CHANGELOG.md / LICENSE ├── examples/ 三个客户端的接入配置示例 └── templates/ 记忆文件骨架

设计取舍:为什么不用数据库 / 向量库

- 可读:出问题打开文件就能看,不用工具、不用查询语句
- 可迁移:换机器拷一个目录就完事,没有导出/导入格式
- 可版本化:git diff 能看见记忆是怎么长出来的
- 便宜:一个进程、零 embedding、零索引,不额外烧 token
- 缺点:memory_search 只是关键词子串匹配,没有语义检索;FACT.md 变大后要配合 tail 分页读,或先用 memory_stats() 看体积再决定是否整理

这些缺点是有意接受的——记忆量在"几千条事件、几十 KB 正文"这个量级时,纯文本完全够用,而可读、可改、可迁移的价值远大于语义检索。

常见问题

- 装了没反应? 先确认 MEMORY_DIR 存在且可写;客户端里手动调用 memory_read 看返回。
- Windows 路径怎么写? JSON 里反斜杠要转义:"E:\\memory";YAML 里用单引号:'E:\memory'。
- 换机器怎么办? 拷整个记忆目录过去,只改 MEMORY_DIR,其他不动。
- 能和官方 memory MCP 一起用吗? 能,它们各管各的目录;本项目的记忆是纯文本,随时能肉眼检查。
- mcp 1.x 报错? 升级:pip install -U "mcp>=2.3.0"。

版本

见 CHANGELOG.md。当前 v0.6.0(2026-10-24)。

许可

MIT,见 LICENSE。

致谢

基于 MCP 官方 Python SDK(modelcontextprotocol/python-sdk)实现;接口设计参考了社区里常见的 memory_read / memory_update / memory_append / memory_search 四工具约定;memory_stats 是本项目额外加的只读"体检"口,不参与读写。
预览分享卡片长什么样 ↓WANGJINSHAN-11/mem-plain
分享 · DeepSeek Harness Hub
WANGJINSHAN-11/mem-plain

一个通用的全局记忆的mcp插件

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部