关于 dark-memory-mcp
dark-memory-mcp 是基于 Go 和 SQLite 的持久记忆 MCP 服务,供需要跨会话保留项目笔记的 AI Agent 使用。它还包含 vibe-loop,可对照原始规格评估交付物;项目目前处于预发布阶段。
主要功能
- 01跨会话保存和检索 Agent 记忆
- 02按会话、项目或操作者划分笔记范围
- 03用 vibe-loop 对比规格与交付物
- 04支持漂移判定与解决工具
- 05通过本地 SQLite 文件存储
适用场景
- 01在新会话中恢复项目决策与待办
- 02保存并查询数据库或架构约定
- 03检查交付物是否符合任务规格
MCP 相关
该服务通过 MCP over stdio 向 Agent 提供记忆管理和 vibe-loop 工具。服务器作为本地进程运行,数据存储在本地 SQLite 文件中。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
73收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| nli_config | object | 否 | 可选的 v2.20.0 T07 每项目 NLI 配置。启用后,项目的 drift_judge 会使用配置的主要 NLI 提供方(以及可选的备用提供方),而不是回退到 nli.Config{}.DefaultsFor()。 |
| nli_config.enabled | boolean | 否 | |
| nli_config.primary | object | 否 | |
| nli_config.primary.endpoint | string | 是 | |
| nli_config.primary.model_rev | string | 否 | |
| nli_config.primary.auth_token | string | 否 | Bearer 令牌;绝不会在工具结果中回显。 |
| nli_config.primary.timeout_ms | integer | 否 | |
| nli_config.primary.provider_id | string | 是 | |
| nli_config.fallback | object | 否 | |
| nli_config.fallback.endpoint | string | 是 | |
| nli_config.fallback.model_rev | string | 否 | |
| nli_config.fallback.auth_token | string | 否 | Bearer 令牌;绝不会在工具结果中回显。 |
| nli_config.fallback.timeout_ms | integer | 否 | |
| nli_config.fallback.provider_id | string | 是 | |
| nli_config.fallback_enabled | boolean | 否 | |
| nli_config.cache_ttl_seconds | integer | 否 | |
| nli_config.latency_budget_ms | integer | 否 | |
| nli_config.max_cache_entries | integer | 否 | |
| nli_config.max_premise_bytes | integer | 否 | |
| nli_config.max_hypothesis_bytes | integer | 否 | |
| project_id | string | 是 | Kebab-case 公共 ID(3-64 个字符,小写字母数字 + 连字符,必须以字母数字开头和结尾)。 |
| description | string | 否 | 可选的自由格式描述(最多 512 个字符)。 |
| display_name | string | 是 | 面向用户的标签(1-128 个字符)。 |
| constitution_id | string | 否 | 可选的章程 ID,用于将项目绑定到章程(INV-7 章程范围限定)。 |
| constitution_ver | string | 否 | 可选的章程版本(与 constitution_id 配套)。 |
| default_agent_id | string | 否 | 可选的 v2.4.1 Mem0 agent_id(LLM 身份),用于指定项目所有者。session_start 和 publish_vibe 按优先级解析 agent_id(调用方输入 > 此默认值 > 空)。空 = 无默认 Agent(v2.4.0 行为)。为多 Agent 项目设置此项,使每个 LLM 的 ContextRecap 和 drift_judge 增强处理仅筛选其自身记忆。 |
详细介绍
╔════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ██████╗██████╗ ███╗ ███╗ ███╗ ███╗ ██████╗██████╗ ║
║ ██╔═══██╗██╔════╝██╔══██╗████╗ ████║ ████╗ ████║██╔════╝██╔══██╗ ║
║ ██║ ██║██║ ██║ ██║██╔████╔██║ ██╔████╔██║██║ ██████╔╝ ║
║ ██║ ██║██║ ██║ ██║██║╚██╔╝██║ ██║╚██╔╝██║██║ ██╔═══╝ ║
║ ▚██████╔╝╚██████╗██████╔╝██║ ╚═╝ ██║ ██║ ╚═╝ ██║╚██████╗██║ ║
║ ╚═════╝ ╚═════╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ║
║ ║
║ MEMORIA PERSISTENTE PARA AGENTES DE IA ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
Dark Memory 能将你的 Agent 从健忘者变成记得住事的同事。
它是一个保存在你磁盘上的笔记本。你的 Agent 会在其中记录信息,并在 不同会话之间查询,还会自动验证交付结果是否符合你的要求。不需要远程服务,没有遥测,也没有费用。
简介 · 快速开始 · 78 个工具 · Vibe 用例 · 帮助 · 当前状态 · 贡献
状态:v4-alpha.32 — 预发布版。78 个规范工具,schema 32, MIT。哪些功能可用、哪些尚未测量,请查看
docs/v4-status.md— 在考虑将其用于生产环境前, 请先阅读。(alpha.32 发布:tag → HEAD,CI 发布 npm + registry。)
它解决的问题
Lunes: "Vamos a refactorizar el módulo de autenticación."
El agente trabaja. Tomas 5 decisiones de arquitectura.
Cierras la sesión.
Martes: "Continuemos con el refactor."
El agente: "¿Qué refactor? ¿Qué módulo? ¿Quién eres?"
Tienes que explicarle TODO otra vez. 20 minutos perdidos.
使用 Dark Memory:
Lunes: "Vamos a refactorizar el módulo de autenticación."
El agente anota: proyecto, decisión #1, decisión #2...
Todo queda en tu disco.
Martes: Abres sesión. El agente recibe:
- Proyecto: dark-memory-mcp
- Decisiones del lunes: 5 (la #3: "RS256, no HS256")
- Pendientes: 2
"OK, ayer elegimos RS256, terminemos los tests."
0 minutos de re-explicación.
你不需要直接与 Dark Memory 交互。你的 Agent(Claude、opencode、Cursor) 会通过 MCP 使用它,就像查阅笔记本一样。
Vibe 循环
打通你的要求与交付结果之间的闭环。
Sin supervisión:
Tú: "Crea una API que devuelva productos filtrados por categoría."
Agente: [200 líneas]
Tú: "También devuelve los borrados..."
Agente: "Cierto." [150 líneas más]
Tú: "No tiene paginación."
Agente: "..." ← iteración sin fin
Con vibe-loop:
1. CREAS LA PROMESA (spec) → dark_memory_vibe_spec
2. EL AGENTE TRABAJA
3. ENTREGA EL ARTEFACTO → dark_memory_vibe_publish
4. EL JUEZ COMPARA entrega vs promesa:
"aligned" → cumple, adelante ✅
"drift_detected" → se desvió, reintenta 🔄
"needs_human" → no está seguro, te pregunta 🤔
5. CIERRE — queda registrado qué pediste, qué entregaron, qué dijo el juez
你不必逐行检查。由裁判根据最初的承诺评估每次交付,Agent 会自行修正。
快速开始
你需要 Node.js 18+(npm 包装器)或 Go 1.25+(从 source 构建)。
// Agrega esto a la config MCP de tu agente
{
"mcpServers": {
"dark-memory": {
"command": "npx",
"args": ["-y", "@opitacode/dark-memory-mcp"]
}
}
}
| Agent | 配置位置 |
|---|---|
| opencode | opencode.jsonc → mcp.dark-memory |
| Claude Code | .claude.json |
| Claude Desktop | claude_desktop_config.json |
| Cursor | .cursor/mcp.json |
npx 首次运行时会下载适用于你系统的二进制文件。无需编译。
验证是否正常运行
> "Llama a dark_memory_health_ping y dime qué responde."
{
"server": { "version": "4.0.0-alpha.32", "name": "dark-memory-mcp" },
"db": { "live": true, "schema_version": 32 },
"registry": { "canonical_tools": 78 }
}
78 是实时测得的注册数量。server.version 是构建标记
(已发布的 tag 或本地伪版本);重要的是上面的格式:运行状态 + schema + 数量。
server.version 会显示构建标记:如果编译时未使用 -ldflags,你会看到
dev 而不是版本号。这不是错误。
入门
1. "Inicia sesión en dark-memory. Operador: [tu nombre]. Proyecto: mi-proyecto."
2. "Guarda: 'Estamos usando Postgres 16 con uuidv7 como PKs.'"
3. "¿Qué tenemos anotado sobre la base de datos?"
4. "Cierra la sesión."
从 source 构建:go build -o bin/dark-mem-mcp ./cmd/dark-mem-mcp
各主机的详细说明:docs/npm-install.md。
选择你的级别
级别 1 — 笔记本。 Agent 能在不同会话之间记住信息。适合第一天使用。
session_start、agent_memory_save、agent_memory_recall、session_close。
级别 2 — Vibe 循环。 验证交付结果是否符合要求。
用 vibe_spec 作出承诺,用 vibe_publish 交付,用 pipeline_status 获取
判定结果,用 resolve_drift 接受或拒绝。
级别 3 — 委派。 适用于大型任务:delegate_intent 决定直接执行还是交由
子 Agent 执行,mindset_apply 则组合它们的提示词。
级别 4 — 扩展。 添加工具、调整评分标准、改进搜索。
从 CONTRIBUTING.md → 适合新手的议题 开始。
你会在代码中看到的概念
| 术语 | 含义 |
|---|---|
| MCP | Agent 使用外部工具所遵循的标准协议。 |
| 会话 | 一段工作过程。session_start … session_close。 |
| Spec | 承诺:“我将使用任务 T1、T2、T3 完成 X。” |
| Artifact | 交付物:代码、文本、图像,或其他内容。 |
| Drift | 交付物不符合承诺时的偏差。由评判器检测。 |
| Vibe-loop | 循环过程:spec → 工作 → artifact → 评判器 → 重试或接受。 |
| Agent 记忆 | Agent 的持久笔记本,可跨会话保留。 |
| Vibe-case | C1–C8。工件类型;决定评判器使用的评分标准。 |
完整目录:docs/tools.md。
如果出现问题
| 症状 | 可能原因 |
|---|---|
| “我的 Agent 看不到工具” | 更改配置后未重启 Agent。在 Windows 上,二进制文件可能会被锁定:请关闭所有终端。 |
| “提示 ‘session required’” | 几乎所有工具都需要活动会话。请先启动一个会话。 |
| “我保存了东西,却找不到” | 笔记有作用范围:会话、项目或操作员级别。你可能不知不觉切换了项目。 |
| “schema_version 错误” | 你使用的是旧版本;数据库需要迁移。./bin/dark-mem-cli migrate --apply |
目前还做不到的事
坦诚相告,因为只会推销的 README 无助于做出判断:
- 预发布版。 注册表中测得 78 个规范工具
(+3 个通过环境变量组装的额外工具 = 81 个)。工具范围会随着
release 增长,并由 freeze test 固定——相较于 alpha.31,变化量为 +5
(
vibe_compile+ 包含 4 项的 OAUTH 命名空间)。各命名空间的详情见docs/v4-status.md §1。 - Phase 21 只覆盖 9 个原语中的 2 个。 Vibe-loop 引擎是一个已经验证、 正在开始接线的库,而非完成的产品。剩余 7 个原语会改变行为,需要 instrument → measure → decide → flip。
- Postgres 尚未在实际环境中测试。 58 个方法返回
notImpl(SQLite 中为 0 个)。 生产路径使用 SQLite。 - 目前还没有外部使用者。 作者自 2026-10-08 起每天都在使用。
所有这些数据都附有测量时间和来源,详见 docs/v4-status.md。
如果该文档与正在运行的代码不一致,internal/tools/v4_status_consistency_test.go 会导致构建失败,因此内容不会悄无声息地过时。
内部工作原理
Tu agente (Claude / opencode / Cursor)
│ MCP (JSON-RPC sobre stdin/stdout)
▼
dark-mem-mcp.exe ←── proceso local, 78+3 herramientas
│ SQL
▼
SQLite (archivo .db en tu disco) ←── o Postgres con DARK_DRIVER=postgres
- 数据库 Schema: 32,存储在
schema_migrations.version中。运行实例中有 66 张表, 包括 FTS5 的影子表。 - 外部依赖: 运行时无外部依赖。Go 标准库 + 嵌入式 SQLite。
- 测试: 权威数字以 CI 中的为准,而非本 README 中的数字。把数字复制到 README 中, 正是这个项目不再做的事。
贡献
MIT。欢迎各种水平的贡献。
CONTRIBUTING.md— 项目规范- §10 保持已发布声明的准确性 — 项目曾付出惨痛代价才学到的规则
- 所有贡献都必须经过 vibe-loop:spec → artifact → drift_judge → merge
设计原则:
- 仅追加:迁移永不编辑,只能新增
- 规范顺序:工具顺序固定,不重新编号
- 尽力而为:VLP、清理器和遥测永不阻塞主要操作
- 不硬编码:每个数字、名称和版本都只有一个事实来源
由 Opita Code 在哥伦比亚 Huila 省 Neiva 倾心打造 ❤️。
“我们构建软件,不是为了让它在演示文稿中看起来漂亮,而是为了让它每天都能与你并肩工作。”
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。