dark-memory-mcp について
dark-memory-mcpは、セッションをまたいでメモを保持したいAIエージェント向けの、GoとSQLiteを使うMCPサーバーです。vibe-loopで成果物を元の仕様と照合できますが、プロジェクトは現在プレリリース段階です。
主な機能
- 01セッションをまたいでエージェントの記憶を保存・取得
- 02セッション・プロジェクト・操作者ごとにメモを管理
- 03vibe-loopで仕様と成果物を照合
- 04ドリフト判定と解決のツール
- 05ローカルSQLiteファイルにデータを保存
活用シーン
- 01新しいセッションでプロジェクトの決定事項とタスクを復元
- 02データベースやアーキテクチャの選択を記録・検索
- 03成果物がタスク仕様に沿うか確認
MCP 対応
このサーバーはstdio経由のMCPで、エージェントに記憶管理とvibe-loopのツールを提供します。ローカルプロセスとして動作し、データはローカルSQLiteファイルに保存されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
73掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| nli_config | object | いいえ | 任意の v2.20.0 T07 プロジェクト別 NLI 設定です。有効にすると、プロジェクトの drift_judge は nli.Config{}.DefaultsFor() にフォールバックせず、設定されたプライマリ NLI プロバイダー(および任意のフォールバックプロバイダー)を使用します。 |
| 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 | いいえ | プロジェクトを紐付ける任意の constitution ID(INV-7 constitution スコープ設定)。 |
| constitution_ver | string | いいえ | 任意の constitution バージョン(constitution_id と組み合わせて指定)。 |
| default_agent_id | string | いいえ | プロジェクトを所有する任意の v2.4.1 Mem0 agent_id(LLM の ID)です。session_start と publish_vibe は、呼び出し元の入力 > このデフォルト値 > 空の優先順位で agent_id を解決します。空 = デフォルト Agent なし(v2.4.0 の動作)。マルチエージェントプロジェクトではこれを設定し、各 LLM の ContextRecap と drift_judge のエンリッチメントが自身の記憶のみを対象とするようにします。 |
詳細
╔════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ██████╗██████╗ ███╗ ███╗ ███╗ ███╗ ██████╗██████╗ ║
║ ██╔═══██╗██╔════╝██╔══██╗████╗ ████║ ████╗ ████║██╔════╝██╔══██╗ ║
║ ██║ ██║██║ ██║ ██║██╔████╔██║ ██╔████╔██║██║ ██████╔╝ ║
║ ██║ ██║██║ ██║ ██║██║╚██╔╝██║ ██║╚██╔╝██║██║ ██╔═══╝ ║
║ ▚██████╔╝╚██████╗██████╔╝██║ ╚═╝ ██║ ██║ ╚═╝ ██║╚██████╗██║ ║
║ ╚═════╝ ╚═════╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ║
║ ║
║ MEMORIA PERSISTENTE PARA AGENTES DE IA ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════╝
Dark Memory は、あなたのエージェントを記憶喪失の状態から、記憶してくれる同僚へと変えます。
ディスク上に保存されるノートです。エージェントはセッションをまたいでノートに書き込み、内容を参照します。また、提出物が依頼内容を満たしているかを自動で検証します。リモートサーバーも、テレメトリーも、費用もありません。
概要 · クイックスタート · 78 個のツール · Vibe-cases · ヘルプ · 実際のステータス · コントリビューション
STATUS: 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 と直接やり取りすることはありません。エージェント(Claude、opencode、Cursor)が、ノートを参照するように MCP 経由で使います。
Vibe-loop
依頼した内容と提出された内容の間をつなぎます。
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
あなたがすべての行を確認するのではありません。判定役が元の約束に照らして提出物を評価し、エージェントが自分で修正します。
クイックスタート
Node.js 18+(npm ラッパー)または Go 1.25+(ソースからのビルド)が必要です。
// Agrega esto a la config MCP de tu agente
{
"mcpServers": {
"dark-memory": {
"command": "npx",
"args": ["-y", "@opitacode/dark-memory-mcp"]
}
}
}
| エージェント | 貼り付け先 |
|---|---|
| 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 はビルドスタンプ(公開済みタグまたはローカルの疑似バージョン)です。重要なのは上記の形式、つまりライブ状態 + 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."
ソースからビルドする場合:go build -o bin/dark-mem-mcp ./cmd/dark-mem-mcp
ホストごとの詳細については、docs/npm-install.md をご覧ください。
レベルを選ぶ
レベル 1 — ノート。 エージェントがセッションをまたいで記憶します。初日におすすめです。
session_start、agent_memory_save、agent_memory_recall、session_close。
レベル 2 — Vibe-loop。 提出物が依頼内容を満たしているかを検証します。
約束するには vibe_spec、提出するには vibe_publish、判定結果には pipeline_status、受け入れるか拒否するかを決めるには resolve_drift を使います。
レベル 3 — 委任。 大規模な作業向けです。delegate_intent が直接実行するかサブエージェント間で実行するかを判断し、mindset_apply がプロンプトを組み立てます。
レベル 4 — 拡張。 ツールの追加、評価基準の調整、検索の改善を行います。
CONTRIBUTING.md → good first issues から始めましょう。
コード内で見かける用語
| 用語 | 意味 |
|---|---|
| MCP | エージェントが外部ツールを使うための標準プロトコルです。 |
| セッション | ひとまとまりの作業です。session_start … session_close。 |
| Spec | 約束です。「タスク T1、T2、T3 で X を実行する」。 |
| Artifact | 成果物です。コード、テキスト、画像など、あらゆるものが含まれます。 |
| Drift | 成果物が約束を満たしていない状態です。ジャッジがこれを検出します。 |
| Vibe-loop | spec → 作業 → artifact → ジャッジ → 再試行または承認、というサイクルです。 |
| Agent memory | エージェントの永続的なノートです。セッションをまたいで保持されます。 |
| Vibe-case | C1–C8。成果物の種類で、ジャッジのルーブリックを決定します。 |
全カタログはこちら:docs/tools.md。
問題が起きた場合
正直に記載しています。売り込みだけの README では、判断の役に立ちません。
| 症状 | 考えられる原因 |
|---|---|
| 「エージェントにツールが表示されない」 | 設定を変更した後にエージェントを再起動していません。Windows ではバイナリがロックされることがあります。すべてのターミナルを閉じてください。 |
| 「'session required' と表示される」 | ほとんどのツールにはアクティブなセッションが必要です。まずセッションを開始してください。 |
| 「保存したものが見つからない」 | メモにはスコープがあります。セッション単位、プロジェクト単位、またはオペレーター単位です。気づかないうちに別のプロジェクトに切り替えた可能性があります。 |
| 「schema_version エラー」 | 古いバージョンを使用しています。DB のマイグレーションが必要です。./bin/dark-mem-cli migrate --apply |
まだできないこと
判断の役に立たない README にはしたくないので、正直に記載します。
- プレリリースです。 レジストリで計測された正式なツールは 78 個です
(環境変数で有効にする追加ツール 3 個を加えると 81 個)。対応範囲は
リリースごとに拡大し、freeze test で確定します。これは alpha.31 からの差分で +5
です(
vibe_compile+ OAuth 名前空間の 4 個)。名前空間ごとの詳細はdocs/v4-status.md §1をご覧ください。 - Phase 21 は 9 個のプリミティブのうち 2 個までです。 vibe-loop エンジンは 検証済みのライブラリで、配線を開始した段階であり、完成した製品ではありません。残りの 7 個の プリミティブは挙動を変更するため、計測 → 測定 → 判断 → 切り替えが必要です。
- 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
- DB スキーマ:
schema_migrations.versionに記録された整数は 32 です。稼働中の インスタンスには、FTS5 のシャドウテーブルを含めて 66 個のテーブルがあります。 - 外部依存関係: 実行時の依存関係はありません。Go 標準ライブラリと組み込み SQLite を使用します。
- テスト: 正式な数値は CI のものであり、この README の数値ではありません。README に数値をコピーすることは、このプロジェクトがやめたことそのものです。
コントリビューション
MIT ライセンスです。あらゆるレベルのコントリビューションを歓迎します。
CONTRIBUTING.md— プロジェクトのルール- §10 公開情報の正確性を保つ — このプロジェクトが痛い経験から学んだルール
- すべてのコントリビューションは vibe-loop を経由します:spec → artifact → drift_judge → マージ
設計原則:
- 追記のみ: マイグレーションは編集せず、追加のみ行います
- 正規の順序: ツールには固定の順序があり、番号を振り直しません
- ベストエフォート: VLP、スイーパー、テレメトリーが主要な処理をブロックすることはありません
- ハードコーディングなし: 数値、名前、バージョンごとに唯一の信頼できる情報源を設けます
コロンビア、ウイラ県ネイバから Opita Code が ❤️ を込めて開発しました。
"プレゼンテーションで見栄えがするだけのソフトウェアは作りません。毎日あなたと共に働くソフトウェアを作ります。"
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。