shared-memory
shared-memory
一个独立、零桥依赖的 MCP 服务器:让多个 Agent(Claude Code / Codex / DSH / 任意 MCP 客户端)跨会话、跨进程共享三种记忆。
价值主张:给拥有一群 AI Agent 的团队一块「共享大脑」——键值记忆、时间线笔记、语义记忆,三种粒度、一次挂载、跨工具复用。
目录
Related MCP server: Selti
核心特性
零三方依赖的核心:KV 与笔记仅使用 Node.js 标准库,开箱即用。
三种记忆:KV 键值、append-only 时间线笔记、向量语义记忆(可选)。
跨会话 / 跨进程:数据落盘,任何 Agent、任何 MCP 客户端读写同一份状态。
懒加载向量层:未安装向量运行时(
onnxruntime-node/sqlite-vec)时,纯文本 / KV / 笔记功能完整可用,绝不拖慢启动。作用域分层:
global→platform:<name>→project:<name>三级隔离 + 前缀匹配检索,项目知识可复用、可提级。安全第一:向量库写入前自愈(防坏库静默吞数据)、删除必须显式给条件(杜绝全表误删)、提级默认
dry_run预览。
三种记忆
记忆 | 工具前缀 | 存储 | 用途 |
KV 键值记忆 |
|
| 轻量键值对、feature flag、跨 Agent 变量 |
共享笔记时间线 |
|
| handoff、决策记录、事件流水 |
向量语义记忆 |
|
| 按「含义」而非「关键词」找回跨 Agent 经验 / 结论 |
安装
核心仅需 Node.js(node:sqlite 要求 ≥ Node 22.5,故向量层需 22.5+;KV / 笔记层 Node 20 即完整可用)。
DSH 原生安装(dsh plugin add)
本包声明了 dsh.bundle manifest,可作 DeepSeek Harness 原生插件一键安装(工具以 mcp__shared-memory__* 前缀出现在会话中):
dsh plugin add agent-shared-memory安装后重启 DSH 生效。也可以在 awesome-dsh-plugin 社区列表中发现本插件。
一键安装(推荐)
node bin/install.mjs --list # 列出支持平台 + 已装 CLI
node bin/install.mjs --target claude # 装到 Claude Code
node bin/install.mjs --target all # 装到所有已检测到的 CLI
node bin/install.mjs --target claude --dry-run # 只预览,不落盘
node bin/install.mjs --target claude --bootstrap-vector安装器优先调用官方 <cli> mcp add,失败回退幂等合并配置文件,绝不整体重写你已有的 MCP 条目(写入前自动备份 .bak)。支持 claude / codex / qwen / opencode / cursor / windsurf / vscode / gemini / claude-desktop / manual。
挂载到 Claude Code
在项目根目录(或 ~/.claude.json / claude_desktop_config.json)中加入:
{
"mcpServers": {
"shared-memory": {
"command": "node",
"args": ["<PATH-TO-PLUGIN>/src/shared-memory-server.mjs"],
"env": {
"SHARED_MEMORY_DIR": "<YOUR_SHARED_DIR>"
}
}
}
}挂载到 Codex
在 config.toml 中加入:
[mcp_servers.shared-memory]
command = "node"
args = ["<PATH-TO-PLUGIN>/src/shared-memory-server.mjs"]
[mcp_servers.shared-memory.env]
SHARED_MEMORY_DIR = "<YOUR_SHARED_DIR>"任何遵循 MCP stdio 协议的客户端(DSH 等)均可通过相同方式挂载;完整对照见
adapters/manual-install/README.md与docs/install.md。
工具速查(12 个)
KV 键值记忆
工具 | 参数 | 说明 |
|
| 写入 / 覆盖一个键值对,对所有 Agent 可见 |
|
| 按键读取;不存在返回空字符串 |
| — | 列出当前全部键 |
|
| 删除键;返回移除结果(不存在则 |
共享笔记时间线
工具 | 参数 | 说明 |
|
| 追加一条带时间戳的笔记(append-only)。 |
|
| 读取笔记,可选按 tag 过滤 |
向量语义记忆(可选向量层)
工具 | 参数 | 说明 |
|
| 存入一条带 384 维 embedding 的记忆;category 自动构造为 |
|
| 语义检索,按余弦相似度返回 top-k;带分层保底配额 |
|
| 列出记忆(不含向量),按 category 精确 / 前缀过滤 + 分页 |
|
| 按 id 单删 / 按 category 或前缀批删;幂等,无匹配即 0 |
| — | 统计:总数、按 category 分组、embedding 维度、模型路径 |
|
| 手动把记忆提级到更宽的 scope(如 |
memory_*工具与实际 backend 名(vec_memory.mjs导出)一一对应,命名保持一致,便于调试定位。
配置项
环境变量 | 默认值 | 说明 |
|
| KV 与笔记所在目录(与 multi-agent bridge 共用) |
|
| KV 存储文件 |
|
| 笔记时间线文件 |
|
| 向量层目录(模型 + 数据库 + 原生库) |
|
| sqlite-vec 数据库 |
|
| 量化 ONNX 模型路径 |
|
| BERT WordPiece 分词器词表 |
|
| sqlite-vec 原生扩展库(按平台选扩展名) |
|
| 从 |
VEC0_SO为旧名,仍被兼容;VEC0_LIB优先。
架构
┌──────────────────────────────────┐
MCP 客户端 │ src/shared-memory-server.mjs │
(Claude/Codex/DSH) │ stdio JSON-RPC (2024-11-05) │
────────────────────▶│ │
│ ┌────────────┐ ┌─────────────┐ │
│ │ KV 层 │ │ 笔记层 │ │
│ │ kv.json │ │ notes.log │ │
│ │ 原子写/末写 │ │ O_APPEND │ │
│ └────────────┘ └─────────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ 向量层 vec_memory.mjs (懒加载)│ │
│ │ onnxruntime-node → 384 维 │ │
│ │ node:sqlite + vec0 KNN │ │
│ │ BertTokenizer (手写 WordPiece)│ │
│ └─────────────────────────────┘ │
└──────────────────────────────────┘传输:标准
stdio+ 每行一条 JSON-RPC;每个客户端连接一个实例,多实例并发写 KV 为「最后写赢」语义。懒加载:模块加载时不初始化 ONNX / sqlite,首次调用
memory_*才建会话,避免无关调用时占内存、拖慢启动。作用域分层:category 形如
<scope>:<platform>:<domain>,检索时按global:、platform:<猜>:、project:<name>:前缀集合做逻辑隔离,自动从 cwd 或内容关键词发现项目平台归属。自愈与并发:向量库开启 WAL +
busy_timeout,跨进程读者不被写者阻塞;打开前_doctorDb()校验 SQLite magic,坏库先备份重建,绝不静默覆盖。分词兼容:内置 BERT WordPiece 分词器,兼容经典 MiniLM 词表与句法分词多语言词表两种形状;CJK 自动加边界空格。
快速示例
1) Agent A 存一个约定:
tools/call shared_memory_set { key: "released_android_api", value: "34" }2) Agent B 读它:
tools/call shared_memory_get { key: "released_android_api" }
→ 343) 记录一次 handoff:
tools/call shared_notes_append { note: "已定位到崩溃根因,交由负向 Agent 复现", tag: "handoff:crash-9f" }4) 需要交接时读回:
tools/call shared_notes_read { tag: "handoff:crash-9f" }5) 沉淀一条语义记忆供日后按含义找回:
tools/call memory_add {
content: "启用 WAL + busy_timeout 后,多进程并发写 SQLite 不再报 database is locked",
source: "agent:debug-session"
}6) 语义检索(跨关键词匹配):
tools/call memory_search { query: "并发写库锁表怎么解决", top_k: 5 }
→ [global:general] d=0.184 (src:agent:debug-session)
启用 WAL + busy_timeout 后,多进程并发写 SQLite 不再报 database is locked7) 把某项目经验提级为全局公共知识(先预览):
tools/call memory_promote { id: 42, to_scope: "global" } # dry_run 默认 true,仅预览
tools/call memory_promote { id: 42, to_scope: "global", dry_run: false } # 确认后真改可选:向量层
向量层让 memory_* 工具具备语义检索能力。未安装时这些工具返回「vector layer not initialized」,其余功能不受影响。
依赖
onnxruntime-node- 运行量化 ONNX 模型(paraphrase-multilingual-MiniLM-L12-v2,384 维,中文检索效果优于英文版;英文原版 MiniLM 仍可回退)node:sqlite(内置)+sqlite-vec扩展vec0(Linux 为vec0.so,Windows 为vec0.dll)
安装步骤
准备模型与矢量扩展,放入
VECTOR_DIR(默认~/.agents/vector):模型:
model-multilingual/model_quantized.onnx+model-multilingual/tokenizer.json原生库:
vec0.so(或vec0.dll),或用VEC0_LIB指定路径
安装运行时依赖:
npm i onnxruntime-node通过环境变量指到你的路径(如非默认布局):
VECTOR_DIR=<YOUR_VECTOR_DIR> \ VECTOR_MODEL=<path-to-model_quantized.onnx> \ VECTOR_TOK=<path-to-tokenizer.json> \ VEC0_LIB=<path-to-vec0.so> \ node src/shared-memory-server.mjs自检:调用
memory_stats应返回count、dim=384、按 category 的分组统计。
平台提示:Linux 上
onnxruntime-node在个别发行版可能有原生库兼容差异;若启动报符号缺失,请参阅 onnxruntime 官方文档。
目录结构
shared-memory/
├── src/ # 平台无关核心(零依赖)
│ ├── shared-memory-server.mjs # MCP server(12 工具,stdio)
│ └── vec_memory.mjs # 向量层(懒加载 node:sqlite + onnxruntime)
├── bin/install.mjs # 统一 CLI 安装器(--target/--list/--dry-run/--bootstrap-vector/--uninstall)
├── adapters/ # 各平台挂载模板 + 手抄指引
├── marketplace/ # 插件市场清单
├── install/ # 一键装 bootstrap 壳(.sh / .ps1)
├── docs/ # install.md + tools.md
├── skills/ # 技能(shared-memory/SKILL.md,随包分发)
├── .github/workflows/ # CI(语法 + npm pack --dry-run + install smoke)
├── package.json # 双 bin + files 白名单 + engines >=20
└── LICENSE / README.md / README_EN.md许可证
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Hosted memory for AI agents over MCP. One memory shared by all your agents.
An MCP memory server. One memory your agents share — across models, devices and apps.
Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA local MCP server that provides semantic memory storage and retrieval for coding and AI agents, enabling durable context across chat sessions.28 npm4-
- FlicenseNot gradedqualityBmaintenanceA persistent memory server for AI agents using MCP protocol, enabling semantic storage and retrieval of dialogues, documents, and agent states.-
- AlicenseNot gradedqualityDmaintenanceA lightweight, local-first MCP memory server for LLM agents that enables storing, searching, and retrieving agent memories with zero external dependencies.1MIT
- AlicenseNot gradedqualityCmaintenanceA self-hostable MCP server that provides permanent memory for AI agents using Postgres + pgvector for semantic search and Markdown file sync.4 npmMIT