mcpField
M
mcp-memory-graph

mcp-memory-graph

ローカル
github.comメモリ・ナレッジ216 週間前に更新

mcp-memory-graph について

MCP Memory Graphは、Claude CodeやほかのMCPクライアント向けのローカルメモリーサーバーです。セッションをまたいで知識を検索したい開発者に適しており、SQLite、意味検索とキーワード検索、ナレッジグラフを組み合わせ、データをクラウドに送信しません。

主な機能

  1. 01ローカルSQLiteメモリー保存
  2. 02ベクトル検索とキーワード検索の併用
  3. 03マルチホップ検索対応のナレッジグラフ
  4. 04信頼度ラベルと検索結果の再ランク付け
  5. 05自動記録とセッション想起のフック
  6. 06定期的な重複除去とクリーンアップ

活用シーン

  1. 01後のセッションでプロジェクトの決定事項を想起
  2. 02意味や正確な語句でメモを検索
  3. 03関連メモ間の依存関係をたどる
  4. 04共有ナレッジベースにチームの知識を保存

MCP 対応

51個のMCPツールを通じて、MCPクライアントにメモリーの保存、検索、ナレッジグラフ機能を提供します。Claude Codeではフックによる自動記録と想起も利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"yonasvalentin-mcp-memory-graph": {
"command": "npx",
"args": [
"-y",
"mcp-memory-graph"
],
"env": {
"MCP_MEMORY_DB_PATH": "<MCP_MEMORY_DB_PATH>",
"MCP_MEMORY_MODEL": "<MCP_MEMORY_MODEL>"
}
}
}
}
起動コマンドnpx -y mcp-memory-graph
設定が必要な環境変数
MCP_MEMORY_DB_PATHSQLite database file location (default ~/.mcp-memory/memory.db)
MCP_MEMORY_MODELHuggingFace embedding model name (default Xenova/all-MiniLM-L6-v2)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmcp-memory-graph2.10.3

ツール

51

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
tagsarrayいいえ分類用タグ
scopeenumいいえ分離に使用するメモリーのスコープglobal | project | user | team | department
titlestringいいえメモリーの短いタイトル
authorstringいいえこのコンテンツの作成者
sourcestringいいえコンテンツの出所(例:ファイルパス、URL、システム名)
contentstringはいメモリーとして保存するテキストコンテンツ
agent_idstringいいえマルチエージェントの帰属識別に使用する、書き込みを行ったエージェントの識別子
languagestringいいえコンテンツの言語(ISO 639-1 コード)
metadataobjectいいえドメイン固有のメタデータ(例:{contract_type: 'NDA', parties: ['A','B']})
namespacestringいいえスコープ内の名前空間(例:プロジェクト名、チーム名)
departmentstringいいえ部門(例:legal、engineering、hr、sales、finance)
expires_atstringいいえISO-8601 形式の完全な有効期限タイムスタンプ。例:2026-03-01T00:00:00Z(期限を過ぎると、メモリーは検索対象から自動的に除外されます)
volatilityenumいいえ自動判定された変動性クラスを上書きします。省略すると、内容と document_type に基づいて自動分類します(変動しやすいデプロイ/ステータス情報は、想起時に早めに警告されます)。volatile | normal | stable
on_conflictenumいいえ近似一致する項目がある場合の書き込みポリシーです。"add"(デフォルト):新規として挿入します。ただし完全な重複はスキップします(NOOP)—以前の動作と同じです。"update":既存の一致項目に内容を統合します(追記 + 再埋め込み + バージョン更新)。"supersede":競合する一致項目を廃止(無効化)し、これを現行項目として追加します。add | update | supersede
access_levelenumいいえアクセス分類レベルpublic | internal | confidential | restricted
document_typestringいいえドキュメントの種類(例:契約、ポリシー、コード、インシデント、決定事項)
importance_scorenumberいいえ明示的な重要度スコア 0-1(ガバナンス/重要度)です。省略すると内容から導出されます。min_importance フィルターはこの値に基づいて処理します。
verification_tierenumいいえこの事実の検証状況です:source_verified > tool_verified > asserted > unverified。未検証の主張は根拠性が低く評価されます。省略 ⇒ 中立。source_verified | tool_verified | asserted | unverified
verification_detailstringいいえ自由記述:事実をどのように/いつ/何によって検証したか(例:"checked live UAT DB 2026-06-18")。

詳細

MCP Memory Graph

npm version npm downloads License: PolyForm Noncommercial Node CI MCP server Built for Claude Code Local-first · $0/token

Claude Codeやその他のMCPクライアント向けのメモリーサーバーです。AI アシスタントが、マシン上の1つの SQLite ファイルに保存される、永続的で検索可能なメモリーを利用できるようにします。今日決定したことを保存しておけば、翌月に尋ねたときに答えが返ってきます。埋め込みモデル、検索インデックス、ナレッジグラフはすべてローカルで動作します。クラウドアカウントも API キーも、トークンごとの料金も必要ありません。

**ライセンス:**ソースコードを利用でき、非商用利用は無料です(PolyForm Noncommercial 1.0.0)。個人プロジェクト、趣味、学習、研究、慈善活動、教育、政府機関での利用が対象です。商用利用には有料ライセンスが必要です(COMMERCIAL.md)。

**対象ユーザー:**Claude(または Cursor、Codex、その他の MCP クライアント)に、セッションをまたいで決定事項を記憶させたい開発者です。個人開発者や趣味で使う方は無料で利用できます。チームでは git を通じてナレッジベースを共有できます。また、クラウドメモリーサービス(mem0、Zep、Letta、Supermemory)を、自分のマシンだけで完全に動作するものに置き換えたい方にも適しています。

実際の画面

npx mcp-memory-graph serveを実行すると、Claude の外からメモリーを閲覧・検索できるローカルのウェブダッシュボードが表示されます。

ダッシュボード:メモリー数、スコープ・部門・種類別の内訳、最新のメモリー

検索はキーワードではなく意味に基づいて機能します。以下のクエリ「支払いにはどのように対応しますか」では、そのフレーズが含まれていないにもかかわらず、Stripe、GDPR、Postgres に関するメモが見つかります。各結果には信頼度スコアと一致タイプのバッジが付いています。

信頼度と一致タイプのバッジが付いたセマンティック検索結果

スコープ、種類、タグ、品質スコア、各メモリーの参照回数を含む、保存されたすべてのデータを1つの表で閲覧・並べ替えできます。

保存されたすべてのメモリーを並べ替え可能な表で表示

比較

AI のメモリといえば、mem0、Zep、Letta、Supermemory がよく知られており、そのいくつかはオープンソースのコアを備えています。このツールは異なる前提で作られています。データがマシンの外に出ることはなく、実行するインフラストラクチャもありません。

MCP Memory Graph一般的なホステッド型メモリサービス
実行場所マシン上の単一の SQLite ファイルマネージドクラウドサービス(一部はセルフホストにも対応)
埋め込みNode 内のローカルモデル(MiniLM)、API キー不要通常はクラウドの埋め込み API
トークンあたりのコスト$0 — 使用量の計測なし従量課金、または自分で運用するサーバー
追加のインフラストラクチャなし多くの場合、Postgres/pgvector、Redis、または Python サービス
Claude Code との統合標準搭載:フックが自動で記録・呼び出し手動での接続
ベンチマークコミット済みのコーパスと実行ツールを使い、ローカルで再現可能ほとんどが自己申告

トレードオフを正直に説明すると、単一プロセスの SQLite サーバーが扱えるベクトル数は数十万件程度が上限です(「制限事項」を参照)。一方、ホステッド型サービスなら、意識することなくそれ以上にスケールできます。プライベートで無料、運用作業がゼロのメモリを求める個人開発者や小規模チームにとって、その上限に最初に突き当たることはまずありません。

これが作られた理由

AI アシスタントはセッションが終わるたびにすべてを忘れてしまいます。あなたの決定、作業パターン、先週の火曜日に修正したバグなど、会話が終わるとすべて失われます。このサーバーはそれを解決します。

  • 今日保存した知識を、明日、来週、来年も検索できます。
  • 検索はキーワードだけでなく、意味に基づいて行われます。「契約の通知期間」で検索すると、「90 日前の更新条項」が見つかります。
  • 自ら改善します。利用状況を追跡し、品質を評価し、セッションから学びを抽出して、定期的に不要な情報を整理します。
  • プライバシーを守ります。埋め込みはローカルで行い、クラウド API もテレメトリもありません。唯一の例外は任意の Stop フックです。このフックは、学びの抽出のためにセッションのトランスクリプトを、ローカルにインストールした Claude Code(claude -p)へ送信します。review_on_stop: false に設定すれば無効にできます。
  • あらゆる種類の知識に対応します。エンジニアはアーキテクチャ上の決定を、弁護士は契約のパターンを、会計士は監査手順を保存できます。

クイックスタート(約 5 分)

Node.js 20 以降と Claude Code が必要です。

1. サーバーを入手します。 npm から入手する方法(最も簡単):

npm install -g mcp-memory-graph

または、ソースから入手します:

git clone https://github.com/YonasValentin/mcp-memory-graph.git
cd mcp-memory-graph
npm install
npm run build

2. Claude Code にサーバーを登録します (任意 — 手順 3 の init がユーザースコープで登録します):

# npm install:
claude mcp add memory-server -- npx -y mcp-memory-graph

# from source:
claude mcp add memory-server node /path/to/mcp-memory-graph/dist/index.js

3. フックをインストールします(推奨):

npx mcp-memory-graph init

このコマンドひとつですべてを設定できます。MCP サーバーの登録(ユーザースコープ)、自動記録・呼び出しフックと使用スキルのインストール、設定ファイルの書き込み、夜間のクリーンアップのスケジュール設定を行います。質問に回答するか、--yes を指定して既定値を受け入れてください。(claude mcp を自分で管理している場合は、--no-register を指定して自動登録をスキップしてください。)

4. 試してみます。 Claude Code のセッションを開き、次のように伝えます:

Remember this: we use Postgres for the main app database. Decided 2026-06-01,
because we need JSONB and full-text search in one place.

その後、別のセッションで次のように伝えます:

What database did we decide to use, and why?

Claude がメモリを検索し、保存された決定に基づいて回答します。これで一連の流れは完了です。

5. インストールを確認します。 Claude に次のように尋ねます:

What memory tools do you have available?

51 個のツール(memory_* が 45 個、vault_* が 3 個、core_memory_* が 3 個)がすべて一覧表示されるはずです。

メモリツールを初めて実行すると、埋め込みモデル(約 30 MB)が HuggingFace からダウンロードされ、~/.cache/huggingface/ にキャッシュされます。それ以降の起動は即座に完了します。

すべてを元に戻すには、npx mcp-memory-graph uninstall を実行します。

アップグレード

npm install -g mcp-memory-graph@latest   # or just let `npx -y mcp-memory-graph` pull it
npx mcp-memory-graph init                # re-run to refresh on-disk hooks + the nightly schedule

パッケージをアップグレードすると、各セッションで実行されるコード(フック、ツール、サーバー)が更新されるため、サーバー側の修正は次回ツールを実行すると適用されます。これらについては、ほかに何もする必要はありません。

ただし、以前に init が書き込んだファイルは、パッケージをアップグレードしても書き換えられません。対象は、settings.json 内の Claude Code フック登録と、macOS の launchd plist(~/Library/LaunchAgents/com.mcp-memory.consolidate.plist)です。2.6.3 より前にインストールした場合、この plist は node を直接指定していました。launchd の最小限の PATH には nvm が含まれていないため、実行できず、夜間の統合処理がひそかに一度も実行されていませんでした。アップグレード後に npx mcp-memory-graph init を一度再実行して、絶対パスで node を指定し、出力ログも記録する plist を再生成してください。その後、次のように実行されることを確認します。

launchctl start com.mcp-memory.consolidate
cat ~/.mcp-memory/consolidation.log      # should show a "Consolidation complete" report

ジョブが実行されていなかった間に蓄積した競合ノイズを解消するには、npx mcp-memory-graph consolidate を実行してください。

仕組みを簡単に説明

メモリーを保存すると、サーバーは Node.js 内で動作する小さなモデルを使って、テキストをベクトル(意味を表す384個の数値のリスト)に変換します。また、キーワード検索用にテキストをインデックス化します。どちらも1つの SQLite ファイルに保存され、デフォルトでは ~/.mcp-memory/memory.db にあります。

検索時には、サーバーが両方の種類の検索を同時に実行し、ランキングを統合して、信頼度ラベル付きで最適な結果を返します。さらに別のモデルで上位の結果を並べ替えることで、精度を高めることもできます(これがリランカーです。MCP クライアントではデフォルトで有効で、約200ミリ秒かかります)。

その上にはナレッジグラフがあり、メモリーがエンティティやほかのメモリーとつながっています。そのため、「決済サービスは何に依存しているか?」のように、複数のホップを必要とする質問にもサーバーが回答できます。夜間の「ドリームサイクル」では、重複を排除し、スコアを再計算し、不要なものを削除して、不足している情報を報告します。

ベンチマークとその読み方

以下の数値はすべてローカルで測定したものです。実際の埋め込みモデルと本番用ハンドラーを使用し、ネットワークは使っていません。すべてご自身のマシンで再実行できます。

ベンチマークに馴染みのない方に向けて、簡単に説明します。ゴールドセットとは、正解が事前にわかっている質問のリストです。Precision@1 は、最上位の結果が正解だったかを示します。Recall@5 は、上位5件の中に正解があったかを示します。MRR(平均逆順位)は、正解が上位にあるほど高く評価します。リランカーは2つ目のモデルで、上位50件の結果を並べ替えます。処理は遅くなりますが、精度は目に見えて向上します。

ローカルのゴールドセット
精度@1精度@3MRR検索 p95
ハイブリッド(RRF)0.5630.7500.704約4 ms
+ クロスエンコーダーによる再ランキング(MCP のデフォルト)0.8130.8750.867約230 ms

npm run bench で再現できます。方法の詳細、ゴールドセットそのもの、およびすべての失敗例は、docs/BENCHMARKS.md に出力され、記載されています。

スケール

実際の埋め込みモデルとファイルベースの SQLite データベースを使った場合、ベクトル数が10,000件のとき検索の p95 は9.1 ms、50,000件のときは30 msです。再ランキング処理には、その上にほぼ一定の200 msが加わります。多くのメモリー製品は自己申告によるクラウド上の数値を公開していますが、これらの数値はローカルで測定され、コミット済みのコーパスと実行スクリプトから再現できます。

公開ベンチマーク

4つの公開メモリベンチマークで、調整なし(標準のMiniLMエンベッダー、本番用ハンドラー、ベンチマーク固有の調整なし)で実行し、4つすべてでMemPalaceと同等以上の結果を達成しています。

ベンチマーク当プロジェクトの結果比較
LongMemEval-SR@5 = 97.8%公開値の96.6%に対して
ConvoMemR@10 = 93.5%92.9%に対して
LOCOMOセッション R@10 = 82.2%、R@50 = 100%ベースラインの60.3%に対して
MemBenchhit@5 = 78.7%調整済みの同プロジェクトの80.3%に対して

次のコマンドで、ご自身でも実行できます:npm run bench:longmemeval、bench:locomo、bench:convomem、bench:membench。再ランキングが役立つケースと悪影響を及ぼすケース、MemBenchの重複排除の上限、正解セットのサイズに関する注意点など、率直な考察はdocs/BENCHMARKS.mdに記載しています。

機能

コア機能
  • 51個のMCPツール:CRUDと検索、信頼度タグ付きナレッジグラフ、自己修正型の書き込みゲート、署名付きの来歴と検証、SSRF対策済みウェブフックを備えたイベントバス、変更の伝播とアドバイザー機能、再開可能なセッション状態、専門知識プロファイル、メモリ階層、Obsidian Vaultとの双方向変換、GDPR準拠の削除と履歴機能を備えています。全リストは以下をご覧ください。
  • ハイブリッド検索:ベクトル類似度(意味)とキーワード照合(完全一致語句)を、Reciprocal Rank Fusionで統合します。rerank: trueを指定すると、クロスエンコーダーによる再ランキングを追加します。use_graph: trueを指定すると、HippoRAGのPersonalized PageRankによるマルチホップスコアを組み合わせます。as_of: <timestamp>を指定すると、過去の時点におけるグラフを検索します。
  • ローカル埋め込み:Node.js内でall-MiniLM-L6-v2(384次元)を実行するTransformers.jsを使用します。Python、クラウドAPI、GPUは不要です。
  • SQLiteストレージ:better-sqlite3と2つの拡張機能(ベクトル近傍検索用のsqlite-vec、BM25ランキングによるキーワード検索用のFTS5)を使用する単一ファイルです。
  • 構造を考慮したチャンク分割:テキストは段落ごと、Markdownは見出しごと(各チャンク内に見出しのコンテキストを保持)、コードは関数とクラスの境界ごと、法律文書は文ごとに分割します。
  • スコープ:メモリをglobal、project、user、team、departmentに整理します。
  • バージョン履歴:更新のたびに直前のバージョンを保存します。誰が、いつ、何を変更したかの完全な監査証跡を残します。
  • 時間減衰:新しいメモリを優先する、時間ベースのスコアリングを任意で利用できます(指数型または線形)。
  • 信頼度スコアリング:すべての検索結果に0から1までの信頼度と、平易なラベル(高、中、低)が付与されます。
  • 有効期限:時間的制約のあるメモリには有効期限を設定でき、期限が切れると自動的に検索対象から除外されます。
自己改善
  • アクセス追跡:検索、取得、関連メモリの呼び出しごとに、参照されたメモリを記録します。
  • 品質スコアリング:アクセス頻度、新しさ、内容のシグナルに基づき、すべてのメモリにimportance_scoreとconfidence_scoreを自動で付与します。
  • 学習内容の抽出:セッション終了時に、ヘッドレスのclaude -pがトランスクリプトを確認し、厳選した学習内容を0~5件保存します。(これは、macOSで通知されずに動作しなくなる以前のtype: "agent" Stopフックを置き換えるものです。anthropics/claude-code#39184を参照してください。)
  • ドリームサイクル:スケジュール実行またはオンデマンドで、重複排除、再スコアリング、整理、有効期限の適用、ナレッジギャップの検出を行います。
  • ギャップ検出:検索で何も見つからなかった場合に記録し、不足している知識を確認できるようにします。
Claude Code フック

init でインストールされる、オプトインのフックが5つあります。

フック実行タイミング動作
SessionStartセッション開始時ステータスを確認し(メモリ数、期限切れ、古いドキュメント)、プロジェクトの上位メモリを表示します
UserPromptSubmitタスクを示す情報(チケット/PR ID、または2つ以上のキーワード)を含む各プロンプトの送信時ストアをキーワード検索し、一致するメモリを表示します。以前の作業を思い出してから再調査できるようにします。簡単なプロンプトには反応しません
PostToolUseメモリ検索の後検索のヒットとミスを search-log.jsonl に記録します
PreCompactコンテキスト圧縮の前学習内容の抽出をオプションで実行します(デフォルトではオフ)
Stopセッション終了時ヘッドレスの claude -p を起動して、セッションを確認し、学習内容を保存します

Stop フックは約30 msで処理を切り離し、バックグラウンドで10~60秒かけて確認します。認証済みの claude CLI が $PATH(または $CLAUDE_BIN)上に必要です。~/.mcp-memory/config.json で review_on_stop: false にすると無効になります。

すべてのメモリのメタデータ
フィールド目的例
scope分離レベルglobal、project、user、team、department
namespaceサブスコープのグループ化"my-project"、"legal-team"、"q4-audit"
department組織単位legal、engineering、hr、sales、finance
document_typeコンテンツの分類contract、policy、code、incident、decision、report
access_levelデータの機密性public、internal、confidential、restricted
tags柔軟な分類["renewal", "notice-period", "compliance"]
languageコンテンツの言語(ISO 639-1)"en"、"da"、"de"
source出所ファイルパス、URL、システム名
author作成者人またはシステムの名前
metadataドメイン固有の JSON{contract_type: "NDA", parties: ["A","B"]}
expires_at自動失効日ISO 8601 タイムスタンプ

scope と namespace は、1つのデータベース内でコンテンツをグループ化します。共有データベースの MCP_API_NAMESPACE ピンを使うと、対応する名前空間ごとのマルチテナント分離を実現できます(スキーマ v14)。テナントごとに別のデータベースファイルを使う方法が、最も強固な境界となります。docs/MULTI-TENANCY.md を参照してください。

ナレッジグラフとバイテンポラルモデル
  • バイテンポラルな有効性:すべてのメモリは、トランザクション時間とともに有効時間(valid_from、valid_to)を持ちます。更新時は削除ではなく無効化します。以前の事実は上書きされず、valid_to のタイムスタンプが付与されるため、履歴は失われません。読み取りでは現在有効な行がデフォルトで返されますが、特定時点の情報を取得するために as_of: <timestamp> を指定できます。memory_history は、1つのメモリの全履歴を返します。
  • 信頼度付きリンク:メモリは、ウィキリンク、共起、類似性のエッジを介して接続され、それぞれに信頼度の重みが付きます。memory_graph は、最大3ホップまでエンティティと関係をたどります。memory_extract_entities は、LLM が抽出したエンティティと関係を保存します。
  • HippoRAG のマルチホップ検索:検索で use_graph: true を指定すると、エンティティとリンクのグラフに Personalized PageRank を実行し、連想検索を行います。
  • トークン予算に合わせた回答:memory_query は、絞り込んだサブグラフを使って質問に回答します。ハイブリッド検索で起点を見つけ、ハブを避けながら max_hops までグラフをたどり、コンテキストウィンドウに情報を詰め込みすぎる代わりに、トークン予算に合わせたコンテキスト文字列を返します。
  • コミュニティ:memory_communities は、密に接続されたエンティティのクラスターを検出します。「ここにある主なテーマは何ですか?」といった質問に使えます。
自己修正型の書き込み
  • 書き込みゲート:保存時に ADD、UPDATE、DELETE、NOOP のいずれかを判断します(on_conflict)。新しい事実を重複して蓄積するのではなく、既存の事実と整合させます。
  • 矛盾検出:クロスエンコーダーの NLI モデルが、追加されるメモリとすでに保存されている情報との矛盾を検出します。
  • 忘却曲線:メモリには stability シグナルが付きます。あまり再確認されない知識は、人間の記憶が薄れるように、ランキングで徐々に下がります。
Agent-OS メモリ
  • コアメモリブロック:エージェントが自ら管理する、(scope, namespace) ごとの小さく容量に上限のある、常にコンテキスト内にあるメモです(core_memory_get、core_memory_append、core_memory_replace)。上限を超える追記は拒否されるため、意図的な圧縮が促されます。
  • 階層:memory_tiers は MemGPT 方式のホット/リコール/アーカイブの分布を報告し、ホットワーキングセットを一覧表示します。
  • リフレクション:memory_reflect はリフレクションに最も適したメモリを集め、ストアモードでは、元の情報源にリンクした統合済みの洞察を永続化します。
Obsidian ボルト
  • 双方向同期:vault_sync はボルトを読み込みます。memory_export_vault はメモリを .md ファイルとして書き出し、YAML フロントマターによって、作成されたすべてのフィールド(id、scope、namespace、tags、access_level、importance、timestamps)を損失なく往復できるようにします。派生スコアのうち2つはフロントマターに含まれず、再インポート時にリセットされます。confidence_score は 0.6 に、stability は 1.0 にリセットされます。バイト単位で完全なバックアップには memory_export(JSON)を使用してください。メタデータキーの1つは予約済みです。metadata._vault は内部同期の管理情報を保持し、ツールの出力やエクスポートされたファイルには表示されません。
  • JSON Canvas:memory_canvas はグラフを JSON Canvas 1.0 の .canvas ファイルとしてエクスポートします。このファイルは Obsidian で空間的なボードとして開けます。
  • 読み取り専用ウィキ:serve は /publish/:namespace(インデックス、ページ、検索、グラフ)を読み取り専用ウィキとして公開します。意図的にベアラ認証を設けていませんが、公開対象のアクセスレベル(MCP_PUBLISH_ACCESS_LEVELS、デフォルトは public)に厳密に限定されています。
  • セッションノートとテンプレート:memory_session_note はセッションごとに1つの「デイリーノート」に追記します。memory_template はドキュメントの種類ごとに、構造化されたノートのひな形を返します。
チームおよび個人での共有(git)
  • memory init ウィザード:対話形式のセットアップ(またはデフォルト値を使う --yes)を実行し、~/.mcp-memory/config.json(またはプロジェクトスコープの設定)と Claude Code の接続設定を書き込みます。
  • コミット可能なグラフ成果物:memory export-graph は、コミットして共有できる決定論的な memory-graph.json を書き出します。memory git-setup は .gitattributes エントリと memory-union マージドライバーを設定し、並行して行われたコミットを競合させずにマージできるようにします。
  • 帰属情報:MCP_AGENT_ID を設定する(または保存ごとに agent_id を渡す)と、memory_attribution で各エージェントが書き込んだ有効なメモリの数を確認できます。
信頼とガバナンス
  • 確認すべき事項:memory_questions は、グラフが検出するのに適した情報、つまり確認が必要な曖昧なリンク、頻繁に言及される一方で文書化が不十分なエンティティ、孤立したメモリや古くなったメモリを提示します。
  • GDPR 準拠の忘却:memory_forget はデフォルトでソフト削除を行います(valid_to による墓標を設定し、復元可能な状態にして、as_of から引き続き参照可能にします)。hard: true を指定すると、最初にポータビリティ用のエクスポートを返してから、完全に消去します。memory_delete の動作は変更されていません。
  • 出力のサニタイズ:すべてのツール結果は、サーバーから出る前に、ANSI および VT エスケープ、制御文字、ゼロ幅文字、BiDi による Trojan Source のなりすましを単一の要所で除去されます。保存されたコンテンツは、保存時には生のままです。
  • ホットリロード:設定の変更は再起動なしで適用されます。

Web ダッシュボード

サーバーには、Claude 以外でメモリを表示、管理するためのブラウザーダッシュボードが付属しています。MCP HTTP トランスポートと同じ Express サーバー上で動作するため、別のプロセスは必要ありません。

6 つのページがあります。

  • ダッシュボード:メモリ数、コンテンツサイズ、スコープ、部門、種類別の内訳に加え、最近更新されたメモリ 10 件を表示します。
  • 検索:信頼度と一致タイプのバッジ付きハイブリッド検索と、入力中にすぐ表示されるあいまい検索候補を利用できます。
  • 一覧:スコープで絞り込み、品質インジケーターを表示できる、並べ替えとページ分割に対応した全メモリのテーブルです。
  • メモリ詳細:コンテンツ全体、メタデータ、バージョン履歴、関連メモリを表示し、インライン編集と削除を行えます。
  • ナレッジグラフ:D3 の力学モデルによるグラフ表示です。ノードのサイズは重要度、色はスコープを表します。ズーム、パン、ドラッグ、ダブルクリックによる移動ができます。
  • ツール:すべてのツール機能を備えたコンソールです。サーバーが公開するすべてのツールを一覧表示し、各スキーマからフォームを生成して、認証済み MCP エンドポイント経由で実行します。破壊的な操作の前には確認を求めます。

技術構成:React 19、Vite、Tailwind CSS v4、shadcn/ui、Fuse.js、D3、Recharts。

実行方法:

# Development (hot reload)
npm run build && npm run serve   # Terminal 1: server on :3100
npm run dev:web                   # Terminal 2: Vite on :5173 (proxies /api to :3100)

# Production (single process)
npm run build:all                 # Builds server + frontend
npm run serve                     # http://localhost:3100 serves both API and UI

Docker: イメージにはビルド済みのフロントエンドが含まれています。docker compose up の実行後、MCP エンドポイントと同じ場所で、http://<host>:3200 からダッシュボードにアクセスできます。チームメンバーは Claude Code を必要とせず、どのブラウザーからでも共有ストアを閲覧できます。

REST API(16 エンドポイント)

REST API は読み取りと管理のためのものです。メモリの作成には MCP(POST /mcp 経由の memory_store)を使用します。意図的に POST /api/memories は用意していません。

メソッドパス説明
GET/api/statsメモリ数と内訳
GET/api/search?q=...フィルター対応のハイブリッド検索
GET/api/memoriesページ分割と並べ替えに対応した一覧
GET/api/memories/:idメタデータ付きの単一メモリ
GET/api/memories/:id/versionsバージョン履歴
GET/api/memories/:id/related意味的に関連するメモリ
PATCH/api/memories/:idコンテンツまたはメタデータを更新
DELETE/api/memories/:idメモリを削除
GET/api/graphグラフ表示用のノードとエッジ
GET/api/manifest整合性マニフェスト(Merkle ルートとメモリごとのハッシュ)
GET/api/insights傾向とテーマの概要
GET/api/healthナレッジギャップレポート(結果が繰り返し 0 件になる検索)
GET/api/webhooksWebhook ターゲットの一覧(MCP_WEBHOOKS による制限あり)
POST/api/webhooksSSRF 検証済みの送信先を登録
DELETE/api/webhooks/:idWebhook ターゲットを削除
POST/api/webhooks/dispatch永続化され、HMAC 署名された配信キューを処理

最初の 9 つはダッシュボードが使用します。すべての REST エンドポイントは MCP ツールと同じハンドラーを呼び出すため、ビジネスロジックは重複していません。

自己改善の詳細

サーバーはナレッジの利用状況を追跡し、品質を評価し、セッションから学習して、時間の経過とともに自身を統合します。

学習ループ
 ┌──────────────────────────────────────────────────────────┐
 │                    SESSION                                │
 │  Claude searches → access_count++ on matched memories     │
 │  Claude stores   → new memory with initial scores         │
 │  Zero results    → knowledge gap recorded                 │
 └─────────────┬────────────────────────────────────────────┘
               │
               ▼
 ┌──────────────────────────────────────────────────────────┐
 │            SESSION END (Stop command hook)                │
 │  Hook spawns detached `claude -p` headless review         │
 │  --allowedTools restricts to memory_store only            │
 │  Claude judges → 0-5 curated entries via memory_store     │
 │  Deduplicates against existing memories                   │
 └─────────────┬────────────────────────────────────────────┘
               │
               ▼
 ┌──────────────────────────────────────────────────────────┐
 │              DREAM CYCLE (nightly or manual)              │
 │  1. Score    : Recalculate importance from access data    │
 │  2. Expire   : Enforce expiration dates                   │
 │  3. Prune    : Remove low-quality, never-accessed items   │
 │  4. Dedup    : Merge near-duplicate memories              │
 │  5. Gaps     : Surface zero-result search patterns        │
 └──────────────────────────────────────────────────────────┘
品質スコアリング

すべてのメモリには、0〜1 の importance_score が設定されます。

importance = 0.3 * current_score + 0.4 * normalized_access_frequency + 0.3 * recency_factor

経過期間の係数:

経過期間係数
7 日未満1.0
30 日未満0.7
90 日未満0.4
90 日超0.1

アクセスされないメモリは、時間とともに重要度が徐々に低下します。自動抽出されたメモリは低めの値から始まり、有用性が示されなければ削除されます。

アクセスによる強化について。 上記の数式は、consolidate の Score ステージで定期的に再計算される値です。各読み取り(memory_get、memory_search、memory_related)でも、小さな即時加算(importance_score += 0.03、上限は 1.0)が適用されます。また、検索では重要度が軽いランキング係数として使われます(1 + importance * 0.5)。20 回以上読み取られたメモリは、読み取りだけで上限に近づき、次回の consolidate 実行時に基準値が再設定されます。この人気度による重み付けは意図的なものです。読み取りによって値が変動しない固定値にしたい場合は、memory_store または memory_update で明示的な importance_score を設定してください。

ナレッジギャップの検出

検索結果が見つからない場合、クエリが記録されます。dream サイクルのギャップ段階でこれらが表面化するため、ストアに不足しているものを確認できます。

インストールのリファレンス

前提条件
  • Node.js 20 以降。すべてのクライアントで必要です。
  • MCP クライアント。 Claude Code が最も充実した環境です。自動キャプチャと想起のフックは Claude Code 専用です。ほかの MCP クライアント(Codex、Cursor など)でも 51 個すべてのツールを利用できますが、手動で実行する必要があります。以下の「ほかの MCP クライアント」を参照してください。
  • Stop フックのみ: $PATH(または $CLAUDE_BIN)に claude バイナリがあり、プロンプトなしで認証されている必要があります。任意です。review_on_stop: false で無効にできます。
init の動作
npx mcp-memory-graph init                  # user scope: hooks apply to all projects
npx mcp-memory-graph init --scope project  # this project only

ユーザースコープでは、フックは ~/.claude/settings.json に書き込まれ、すべての Claude Code セッションで実行されます。プロジェクトスコープでは、フックはカレントディレクトリの .claude/settings.json に書き込まれ、自動的なサーバー検出のために .mcp.json が作成されます。プロジェクトをクローンした共同作業者には、メモリーサーバーが自動的に登録されます。

Init は次の 7 つの処理を行います。

  1. フックスクリプトが dist/hooks/ に存在することを確認します。
  2. 5 つのフックを settings.json に登録します。
  3. 適切なデフォルト値で設定ファイルを作成します。ユーザースコープでは ~/.mcp-memory/config.json、プロジェクトスコープでは <project>/.mcp-memory/config.json に作成されます(生成される .mcp.json により MCP_MEMORY_CONFIG_PATH が設定されます)。
  4. メモリーの使用手順を、プロジェクトスコープでは .claude/CLAUDE.md に書き込み、ユーザースコープではスニペットを表示します。
  5. MCP サーバーを Claude Code に登録します — ユーザースコープでは claude mcp add -s user memory-server -- npx -y mcp-memory-graph を実行します(冪等で、ベストエフォートです。claude CLI が PATH にない場合は、手動で実行するコマンドを警告とともに表示します。--no-register でスキップできます)。プロジェクトスコープでは、コミット可能な .mcp.json を通じて登録されます。これにより、クイックスタートの手順 2 は任意になります。
  6. mcp-memory-graph の使用スキルを ~/.claude/skills/ にインストールし、Claude Code が 51 個すべてのツール、注意点、ワークフローのインラインガイダンスを利用できるようにします。--no-skill でスキップできます。
  7. 夜間の統合スケジュールを設定します(macOS:launchd。ログインし直さなくても実行されるよう、直ちに読み込みます。Linux:cron の設定例を表示します。プロジェクトスコープではスキップされます)。

非対話型シェル(エージェント/CI)ではウィザードをスキップし、デフォルト値を適用して、設定内容と各値の変更方法を示すレポートを表示します。--yes を渡すと、デフォルト値を適用し、レポートを表示せずに終了します。

主なフラグ:--scope user|project、--schedule HH:MM[,HH:MM](夜間の統合時刻。デフォルトは 03:00)、--vault <path>(Obsidian vault とのラウンドトリップを有効化)、--no-review-on-stop(セッション終了時の学習レビューを無効化)、--no-skill(スキルのインストールをスキップ)、--no-register(ユーザースコープの claude mcp add をスキップ)、--remote <url>(チームサーバーモード)。

npx mcp-memory-graph uninstall は、init が行ったすべての処理を元に戻します。フック、夜間スケジュール、CLAUDE.md のブロック、インストールしたスキルを削除します。

無人セットアップ(CI、プロビジョニング、エージェント)

すべての手順をスクリプト化できます。対話型でしか実行できない手順はありません。

git clone https://github.com/YonasValentin/mcp-memory-graph.git
cd mcp-memory-graph
npm install && npm run build
npx mcp-memory-graph init --scope project --yes   # local: hooks + .mcp.json, no prompts
# or point at a shared self-hosted server instead:
# npx mcp-memory-graph init --remote https://memory.example.com --token-env MEMORY_MCP_TOKEN

その他の MCP クライアント(Codex、Cursor など)

Claude Code ではフックが使えますが、それ以外のクライアントでは同じ 51 個のツールを手動で実行します。このサーバーは標準的な MCP サーバーなので、どのクライアントでも動作します。クライアントのルールファイルに一行追加すれば、ほぼ自動で使えるようになります。

サーバーを登録します。Codex の場合は、~/.codex/config.toml(グローバル)または .codex/config.toml(プロジェクト。信頼済みの場合のみ)に次のように記述します。

[mcp_servers.memory-graph]
command = "node"
args = ["/abs/path/to/mcp-memory-graph/dist/index.js"]
tool_timeout_sec = 180   # the first call downloads the ~30 MB model once; the 60s default can be tight

[mcp_servers.memory-graph.env]
MCP_MEMORY_DB_PATH = "/abs/path/to/.mcp-memory/memory.db"

# or a shared self-hosted server over HTTP (see Self-hosting below):
# url = "https://memory.example.com/mcp"
# bearer_token_env_var = "MEMORY_MCP_TOKEN"

または、codex mcp add memory-graph -- node /abs/path/to/mcp-memory-graph/dist/index.js を実行します。Cursor、Windsurf、その他のクライアントではそれぞれ独自の MCP 設定形式を使用しますが、サーバーコマンド(node .../dist/index.js)と HTTP オプションは同じです。

次に、エージェントの指示ファイル(Codex:AGENTS.md、Cursor:プロジェクトルール)に以下を追加します。

アーキテクチャ、決定事項、パターン、または過去の修正について質問に回答する前に、まず memory-graph サーバーで memory_search を呼び出してください。新しい決定事項、パターン、修正は memory_store で保存してください。

メモリ基盤のセルフホストと共有

このサーバーは、単一ユーザーのキャッシュから複数のマシンで共有するナレッジベースまで、3 通りの方法で実行できます。いずれもローカル優先で、実行するマシンとして選んだもの以外にデータが送信されることはありません。

1. ローカル(単一ユーザー)、デフォルト

npx mcp-memory-graph init は、ローカルの stdio サーバーとフックを登録します。メモリはマシン上の 1 つの SQLite ファイルに保存されます。それ以外に実行するものはありません。個人利用に適しています。

2. 共有サーバー(複数のマシンまたはグループ)

複数のクライアントが HTTP 経由で接続するサーバーを 1 つ実行します。全員が同じメモリ基盤をリアルタイムで共有します。

サーバーを起動します(いずれかを選択):

# From source: build the server (and the dashboard, if you want it) first
npm run build:all
MCP_AUTH_TOKEN=$(openssl rand -hex 32) MCP_BIND=0.0.0.0 npm run serve
# MCP at /mcp, REST at /api, dashboard at /, all on :3100

# Or with Docker (frontend included; publishes host port 3200 by default)
MCP_AUTH_TOKEN=$(openssl rand -hex 32) docker compose up -d

サーバーがループバック以外からアクセス可能な場合は、必ず MCP_AUTH_TOKEN を設定してください。すべてのクライアントで共有する、1 つのベアラートークンです。ループバック以外にバインドする際、MCP_AUTH_OPTIONAL=1 を設定しない限り、認証なしでサーバーが起動することはありません。ホスト外からアクセスする場合は、リバースプロキシまたはトンネルで TLS を終端してください。

クライアントを接続します。各マシンで次のコマンドを実行します。

npx mcp-memory-graph init --remote https://memory.example.com --token-env MEMORY_MCP_TOKEN
export MEMORY_MCP_TOKEN=<the server token>     # in your shell or .env

Claude Code の場合、共有サーバーを指すプロジェクトの .mcp.json が書き込まれます。トークンは環境変数への参照("Authorization": "Bearer ${MEMORY_MCP_TOKEN}")として保存されるため、コミットした .mcp.json にシークレットが含まれることはありません。Claude 以外のクライアントも、それぞれの MCP 設定を通じて同じサーバーを指定します。

フラグ効果
--token-env <NAME>トークンにこの環境変数を参照します(デフォルトは MEMORY_MCP_TOKEN)
--token <value>代わりにトークンを直接指定します(コミットしないでください)
--no-auth認証ヘッダーを省略します(ループバックまたは信頼できるネットワークでのみ使用)

リモートモードでは、ローカルの記録・想起フックはインストールされません。メモリはサーバー上に保存され、フックが読み取れるローカルファイルには保存されないためです。エージェントは memory_search と memory_store を直接使用します(CLAUDE.md のガイダンスは引き続き書き込まれます)。

3. Git ボルト(非同期のバージョン管理による共有)

サーバーを実行せず、プルリクエストでレビューしながらナレッジベースを git で管理したい場合は、メモリをプレーンな Markdown にエクスポートして、フォルダーを git リポジトリとして共有します。

npx mcp-memory-graph vault-init                    # make the vault a git repo (union merge driver + rebuild hook)
git add -A && git commit -m "memory snapshot" && git push
# collaborators, once after cloning:
#   npx mcp-memory-graph vault-init                # registers the union merge driver + post-merge hook in THEIR clone
# collaborators, thereafter: git pull && npx mcp-memory-graph rebuild

各コラボレーターは、自分のクローンで一度 vault-init を実行する必要があります。 マージドライバーとマージ後の再構築フックは、リポジトリではなくローカルの git 設定(.git/)に保存されます。vault-init を実行していない新しいクローンでは、最初に並行してプルしたときに .memory/graph.json に競合マーカーがそのまま残ります。vault-init は何度実行しても安全で、コミット済みのサイドカーを上書きしません。

チームボルトの復旧に関する注意事項が 2 つあります。

  • 手動で解決したマージ後(マージがクリーンに完了した場合にのみ、マージ後フックが実行されます)は、.memory/manifest.json が古いため、memory rebuild が VaultIntegrityError で失敗することがあります。このファイルを削除して rebuild を再実行してください。このファイルは派生状態であり、再生成されます。
  • データベースの状態が新しいのに .md を手動編集しましたか? まずインポート(vault_sync または rebuild)し、その後エクスポート(memory sync)してください。古いデータベースから全件エクスポートすると、手動編集した内容も含め、ボルト内のファイルが上書きされます。
セキュリティに関する注意事項
  • MCP_AUTH_TOKEN は信頼できるグループでの利用に適した、単一の共有シークレットです。新しい値を指定してサーバーを再起動すると、ローテーションできます。キーごとの RBAC(1 台のサーバーで N 個のキーを使用し、それぞれに名前空間のセットとアクセスレベルの上限を固定する)には、memory keys create|list|revoke(スキーマ v16)を使用してください。従来の共有トークンも引き続き使用でき、最初にチェックされます。docs/MULTI-TENANCY.md を参照してください。
  • トークンをコミットしないでください。--remote のデフォルトでは、設計上、トークンは環境変数に保持されます。
  • TLS を終端するプロキシをサーバーの前段に置かない限り、127.0.0.1(デフォルト)にバインドしてください。その場合は MCP_BIND=0.0.0.0 を設定してください。

組織全体で利用する AI ブレインを構築しますか? 1 台のサーバーに従業員ごとのキーを用意し、AI がたどれる組織図(人物、チーム、SOP、ツールを型付きグラフノードとして表現)を作成して、誰が何を見られるかを適用できます。既存のプリミティブを基にした手順は、docs/ENTERPRISE-BRAIN.md にあります。

設定

環境変数
変数デフォルト説明
MCP_MEMORY_DB_PATH~/.mcp-memory/memory.dbデータベースファイルの場所です。ディレクトリは自動的に作成されます。
MCP_MEMORY_MODELXenova/all-MiniLM-L6-v2HuggingFace 埋め込みモデル名です。Transformers.js と互換性のある ONNX モデルである必要があります。
MCP_MEMORY_DIMENSIONS384埋め込みベクトルの次元数です。モデルの出力と一致している必要があります。
MCP_MEMORY_CONFIG_PATH~/.mcp-memory/config.json設定ファイルの場所を上書きします。

環境変数の完全なリファレンス(認証、レート制限、Webhook、ボルト、公開)については、docs/ENV.md を参照してください。

カスタムデータベースの場所
claude mcp add memory-server --env MCP_MEMORY_DB_PATH=/path/to/project/.memory.db node /path/to/dist/index.js
代替埋め込みモデル
# Swap the embedding model (same 384 dimensions; drop-in for the existing index
# AFTER a re-embed; see the warning below)
claude mcp add memory-server \
  --env MCP_MEMORY_MODEL=Xenova/bge-small-en-v1.5 \
  --env MCP_MEMORY_DIMENSIONS=384 \
  node /path/to/dist/index.js

モデルの識別情報は記録され、適用されます。 データベースには、構築に使用された埋め込みモデル(schema_meta.embedding_model)が記録されます。異なる MCP_MEMORY_MODEL でサーバーを起動すると、すべての検索結果がひそかに劣化するのではなく、明示的にエラーになります(次元数が同じでも、同じベクトル空間とは限りません)。モデルを切り替えるには、新しいモデルを設定して memory rebuild を実行するか(ボルトから再度埋め込みます)、エクスポートして再インポートしてください。

設定ファイル

設定ファイルでは、自己改善の動作、フックの設定、プロジェクトごとの上書きを制御します。解決順序は、まず環境変数 MCP_MEMORY_CONFIG_PATH、次に <cwd>/.mcp-memory/config.json(プロジェクトスコープの初期化時に作成されます)、最後に ~/.mcp-memory/config.json です。npx mcp-memory-graph init で作成するか、手動で記述してください:

{
  "defaults": {
    "scope": "project",
    "namespace": "auto"
  },
  "projects": [
    {
      "path": "~/Documents/MyApp",
      "namespace": "my-app",
      "watch": ["README.md", "docs/**/*.md"]
    }
  ],
  "consolidation": {
    "similarity_threshold": 0.85,
    "prune_after_days": 30,
    "min_importance_to_keep": 0.1,
    "max_operations": 100,
    "schedule": [
      { "hour": 11, "minute": 30 },
      { "hour": 16, "minute": 0 }
    ]
  },
  "hooks": {
    "extract_on_compact": false,
    "extract_on_session_end": false,
    "track_searches": true,
    "review_on_stop": true
  },
  "extraction": {
    "categories": ["decision", "pattern", "error_fix", "convention"],
    "min_confidence": 0.4
  }
}
セクションキーデフォルト説明
defaultsscope"project"新しいメモリーのデフォルトスコープ
defaultsnamespace"auto"デフォルトの名前空間("auto" の場合、プロジェクトディレクトリ名から決定されます)
projects[]pathプロジェクトのルートディレクトリ
projects[]namespaceこのプロジェクトの名前空間の上書き値
projects[]watch変更を追跡するファイルのグロブパターン
consolidationsimilarity_threshold0.85重複排除に使うコサイン類似度のしきい値(0.5~1.0)
consolidationprune_after_days30低品質のメモリーを整理するまでの日数
consolidationmin_importance_to_keep0.1整理後も保持するために必要な最低重要度スコア
consolidationmax_operations1001 回の統合処理あたりの最大操作数
consolidationschedule[{ "hour": 3, "minute": 0 }]{ hour, minute } エントリを 1 つ以上指定します(24 時間制)。変更後に init を再実行すると、launchd plist が再生成されます。
hooksextract_on_compactfalseコンテキスト圧縮前にトランスクリプトから情報を抽出します(正規表現ベース、デフォルトでは無効)
hooksextract_on_session_endfalseセッション終了時に学びを抽出します(正規表現ベース、デフォルトでは無効)
hookstrack_searchestrue検索のヒットとミスを search-log.jsonl に記録します
hooksreview_on_stoptrueセッション終了時にヘッドレスの claude -p を起動し、トランスクリプトを確認して学びを保存します。フックを削除せずに無効にするには、false に設定します。
extractioncategories["decision", "pattern", "error_fix", "convention"]抽出する学びのカテゴリ
extractionmin_confidence0.4抽出する学びに必要な最低信頼度
storagedb_pathスコープに依存SQLite ファイルの場所(ユーザースコープでは ~/.mcp-memory/memory.db、プロジェクトスコープでは <project>/.mcp-memory/memory.db)。MCP_MEMORY_DB_PATH で上書きされます。
vaultpath未設定明示的なパスが指定されていない場合に vault_sync、memory_export_vault、rebuild が使用する Obsidian Vault のルート。MCP_VAULT_PATH と --vault <path> で上書きされます。
vaultwrite_throughtrueVault が設定されている場合、メモリーへの書き込みを .md ファイルとして Vault にも反映します。MCP_VAULT_WRITE_THROUGH=0 で上書きされます。

CLI コマンド

コマンド説明
npx mcp-memory-graphstdio で MCP サーバーを起動します(デフォルト)
npx mcp-memory-graph serveHTTP サーバーを起動します:MCP トランスポート、REST API、Web ダッシュボード
npx mcp-memory-graph init対話形式のセットアップウィザード:フック、設定、夜間スケジュール(ユーザースコープ)。非対話形式にするには --yes/-y を追加します
npx mcp-memory-graph init --scope project現在のプロジェクトのみを対象にセットアップします(.mcp.json と .claude/settings.json を作成します)
npx mcp-memory-graph uninstallinit を元に戻します:フックとスケジュールを削除します
npx mcp-memory-graph consolidateドリームサイクルを手動で実行します
npx mcp-memory-graph export-graph [--out <path>] [--scope <s>] [--namespace <n>]Git で共有できる、コミット可能な決定論的な memory-graph.json を書き出します
npx mcp-memory-graph git-setup競合のないグラフ共有のため、.gitattributes のエントリーと memory-union マージドライバーをインストールします
npx mcp-memory-graph merge-graphs <ours> <theirs> <out>memory-graph.json 用の Git ユニオンマージドライバーです(手動ではなく Git によって呼び出されます)
npx mcp-memory-graph vault-init [--vault <path>]Vault を Git リポジトリにします:ユニオンマージドライバー、pull.rebase=false、マージ後およびチェックアウト後の再構築フック
npx mcp-memory-graph syncすべての有効なメモリとグラフのサイドカーファイルを Vault に書き出します(.md ファイル)
npx mcp-memory-graph rebuild [--vault <path>]Vault の .md ファイルから SQLite インデックスを再構築します(共同作業者は git pull の後に実行します)
npx mcp-memory-graph migrateデータベースを現在のスキーマバージョンにアップグレードします
npx mcp-memory-graph backup [--out <path>]WAL セーフなオンラインスナップショットを作成します(保持数:MCP_MEMORY_MAX_BACKUPS、デフォルトは 10)
npx mcp-memory-graph keys create|list|revokeキーごとの RBAC:API キーの発行、確認、失効(名前空間の設定とアクセス上限)

ツールリファレンス

1. memory_store

新しいメモリを保存します。ベクトル埋め込みは自動的に生成されます。

パラメーター型必須デフォルト説明
contentstringはい保存するテキストコンテンツ
titlestringいいえメモリの短いタイトル
scopeenumいいえglobal¹global、project、user、team、department
namespacestringいいえ¹サブスコープ(例:プロジェクト名)
importance_scorenumberいいえ算出値手動で設定する重要度の上書き値(0~1)
agent_idstringいいえMCP_AGENT_ID envmemory_attribution の集計用の帰属情報
on_conflictenumいいえaddadd、supersede、skip:類似した重複に対する書き込みゲートの動作
document_typestringいいえcontract、policy、code、incident、decision など
sourcestringいいえこのコンテンツの出所
authorstringいいえ作成者
departmentstringいいえlegal、engineering、hr、sales、finance
tagsstring[]いいえ分類用のタグ
access_levelenumいいえinternalpublic、internal、confidential、restricted
languagestringいいえenISO 639-1 言語コード
metadataobjectいいえドメイン固有のキーと値のペア
expires_atstringいいえISO 8601 の有効期限

¹ 省略した場合、読み込まれた設定ファイルの defaults.scope と defaults.namespace("auto" = プロジェクトディレクトリ名)が先に適用されます。ハードコードされたフォールバックは、名前空間なしの global です。

プロンプトの例:

Store this memory with department=legal and tags=["compliance","gdpr"]:
"All customer data processing agreements must include a GDPR Article 28 addendum effective January 2025."
2. memory_search

保存されたメモリを対象に、ベクトル検索とキーワード検索を組み合わせて検索します。

仕組み:

  1. クエリを埋め込み表現に変換し、保存されたすべてのベクトルと比較します(意味的類似性)。
  2. キーワードを FTS5 でメモリのテキストと照合します(完全一致)。
  3. 両方の検索結果リストを Reciprocal Rank Fusion で統合します。
  4. オプションの時間減衰により、最近のメモリを優先します。
  5. 結果に信頼度スコアとラベルを付与します。
  6. 品質スコアリングのため、アクセスを記録します。
パラメーター型必須デフォルト説明
querystringはい自然言語のクエリまたはキーワード
scopeenumいいえスコープで絞り込み
namespacestringいいえ名前空間で絞り込み
departmentstringいいえ部門で絞り込み
document_typestringいいえドキュメントタイプで絞り込み
tagsstring[]いいえ絞り込み:指定したすべてのタグを含むもの
access_levelenumいいえアクセスレベルで絞り込み
languagestringいいえ言語で絞り込み
limitnumberいいえ10最大結果数(1~100)
offsetnumberいいえ0ページネーションのオフセット
search_modeenumいいえhybridhybrid、vector、または keyword
temporal_decayobjectいいえ{type: "exponential", half_life_days: 30} または {type: "linear", max_age_days: 365}
date_fromstringいいえこの日付以降のメモリのみ
date_tostringいいえこの日付以前のメモリのみ
min_confidencenumberいいえ信頼度の最小しきい値(0~1)

プロンプトの例:

Search memories for "contract renewal notice requirements" in the legal department

Search memories for "authentication" with search_mode=keyword

Search memories for "deployment patterns" with temporal_decay={type:"exponential", half_life_days:60}

各結果には、メモリの内容とメタデータ、統合された RRF score、正規化された confidence(0~1)、confidence_level ラベル(0.7 以上は高、0.4 以上は中、それ未満は低)、および match_type(hybrid、vector、または keyword)が含まれます。

デフォルトの detail_level: "summary" 投影では、トークンを節約するために confidence_level を返しますが、数値の confidence と完全な content は省略されます。これらが必要な場合は、detail_level: "full" を指定してください。

3. memory_get

ID を指定して特定のメモリを取得します。取り込み済みのドキュメントでは、すべての子チャンクを含めることもできます。

パラメーター型必須デフォルト説明
idstringはいメモリの UUID
include_chunksbooleanいいえfalse取り込み済みドキュメントの子チャンクを含める
4. memory_update

既存のメモリを更新します。内容が変更されると、埋め込み表現が自動的に再生成されます。以前のバージョンは履歴に保存されます。

パラメーター型必須デフォルト説明
idstringはい更新するメモリの ID
contentstringいいえ新しい内容(埋め込み表現の再生成を実行)
titlestringいいえ新しいタイトル
metadataobjectいいえ置き換えるメタデータ
tagsstring[]いいえ置き換えるタグ
expires_atstring/nullいいえ新しい有効期限。削除する場合は null
changed_bystringいいえこの変更を行ったユーザー
5. memory_delete

ID またはフィルターを指定してメモリを削除します。id または filter の少なくとも一方が必要です。

パラメーター型必須説明
idstringいいえ特定のメモリを削除
filter.scopeenumいいえスコープ内のすべてを削除
filter.namespacestringいいえ名前空間内のすべてを削除
filter.departmentstringいいえ部門内のすべてを削除
filter.before_datestringいいえ指定日より古いものを削除
filter.expired_onlybooleanいいえ期限切れのメモリのみ削除
6. memory_list

フィルタリング、ページネーション、並べ替えを使用してメモリを参照します。

ParameterTypeDefaultDescription
scopeenumスコープでフィルタリングします
namespacestring名前空間でフィルタリングします
departmentstring部門でフィルタリングします
document_typestring種類でフィルタリングします
limitnumber20最大結果数(1-100)
offsetnumber0ページネーションのオフセット
sort_byenumcreated_atcreated_at、updated_at、または title
sort_orderenumdescasc または desc
7. memory_ingest

ドキュメント全体を取り込みます。コンテンツの種類に応じてチャンクに分割し、各チャンクを埋め込み、親子関係を付けてすべて保存します。大きなドキュメントに使用してください。

ParameterTypeDefaultDescription
contentstringドキュメント全体のテキスト(必須)
titlestringドキュメントのタイトル
content_typeenumtextチャンク分割方式:text、markdown、code、legal、structured
chunk_sizenumber512チャンクの目標サイズ(文字数。トークンあたり約4文字)
chunk_overlapnumber50コンテキストを保つためのチャンク間の重複
sourcestring元のファイルまたは URL
document_typestringドキュメントの分類
departmentstring部門
authorstring作成者
tagsstring[]タグ
metadataobjectドメイン固有のメタデータ

コンテンツの種類ごとのチャンク分割:

TypeStrategySplits on
text段落二重改行(\n\n)
markdown見出しを考慮#、##、### の見出し
code関数を考慮function、class、const、interface の境界
legal文ピリオド、感嘆符、疑問符
structured段落二重改行(text と同じ)
8. memory_related

指定したメモリに意味的に関連するメモリを検索します。ベクトル類似度を使用するため、キーワード検索では見つからない関連性を見つけられます。

ParameterTypeDefaultDescription
idstring関連項目を検索するメモリ ID(必須)
limitnumber5最大結果数(1-50)
min_similaritynumber類似度の最小しきい値(0-1)
9. memory_versions

メモリのバージョン履歴を表示します。更新のたびにバージョンレコードが作成されます。

ParameterTypeDefaultDescription
idstringメモリ ID(必須)
limitnumber10最大バージョン数(1-50)
10. memory_stats

保存されているメモリの使用統計情報です。

ParameterTypeDescription
scopeenumスコープで統計情報をフィルタリングします
namespacestring名前空間で統計情報をフィルタリングします
departmentstring部門で統計情報をフィルタリングします

メモリ、ドキュメント、チャンクの合計数、スコープ、部門、種類ごとの内訳、ストレージサイズ、有効期限切れの件数を返します。

11. memory_export

移植や移行のために、現在のメモリ内容を JSON としてエクスポートします。完全なバックアップではありません。現在有効なトップレベルのメモリのみをシリアライズします。編集履歴、ナレッジグラフ、condense-undo の元データ、取り込まれた子チャンク、ソフト削除された行は含まれません。災害復旧には、SQLite ファイルをコピーしてください(cp ~/.mcp-memory/memory.db ...。RUNBOOK を参照)。インポート時に埋め込みは決定論的に再計算されます。

ParameterTypeDefaultDescription
scopeenumエクスポート対象をフィルタリングします
namespacestringエクスポート対象をフィルタリングします
departmentstringエクスポート対象をフィルタリングします

エクスポートあたりの最大レコード数は 1000 件です。

12. memory_import

JSON からメモリをインポートします。各項目は埋め込み化され、保存されます。

パラメーター型デフォルト説明
dataarrayメモリオブジェクトの配列(必須)
overwritebooleanfalse既存の ID を上書きします
13. vault_sync

Obsidian の保管庫をスキャンし、Markdown を解析して埋め込み化し、保存します。詳しくは、以下のObsidian Vault の統合をご覧ください。

14. vault_status

保管庫の同期状況を表示します。同期済み、保留中、変更済みのファイル数と、最終同期時刻を確認できます。

15. vault_search

1 つの保管庫のメモリに限定してハイブリッド検索を行います。

デフォルトでは、保管庫のフォルダー名と同じ名前の名前空間を検索します。別の名前空間からエクスポートされたメモリは、フロントマターに元の名前空間が保持されます。新しく同期した保管庫を検索しても結果が返らない場合は、namespace(および/または scope)を明示的に指定して上書きしてください。

16. memory_consolidate

夢のサイクルです。重複の排除、スコア付け、整理、期限切れの処理、ナレッジの不足の検出を行います。

パラメーター型必須デフォルト説明
scopeenumいいえ統合の対象範囲を限定します
namespacestringいいえ統合の対象を名前空間に限定します
similarity_thresholdnumberいいえ0.85重複排除に用いるコサイン類似度(0.5~1.0)
prune_expiredbooleanいいえtrue期限切れのメモリを削除します
prune_low_qualitybooleanいいえfalse重要度の最小値を下回るメモリを削除します
dry_runbooleanいいえfalse適用せずに変更内容をプレビューします
max_operationsnumberいいえ1001 回の実行あたりの操作数の上限

5 つの段階を順番に実行します。Score(重要度を再計算)、Expire(expires_at を適用)、Prune(有効にすると品質の低いメモリを削除)、Dedup(類似した重複を統合)、Gaps(結果がゼロ件だった検索を提示)です。各段階の件数を含むレポートを返します。

プロンプトの例:

Run a dream cycle consolidation with dry_run=true to preview what would change

Consolidate memories in namespace=my-project with similarity_threshold=0.9

Run consolidation with prune_low_quality=true to clean up unused memories
17. memory_extract_learnings

ヒューリスティックなパターンマッチングを用いて、セッションのトランスクリプトから意思決定、パターン、エラーの修正、規約を抽出します。外部の LLM は不要です。

パラメーター型必須デフォルト説明
transcriptstringはい抽出対象となるセッションのトランスクリプトテキスト
scopeenumいいえ抽出したメモリの対象範囲
namespacestringいいえ抽出したメモリの名前空間
departmentstringいいえ抽出したメモリの部門
tagsstring[]いいえ追加のタグ
sourcestringいいえソースの帰属情報
categoriesenum[]いいえalldecision、pattern、error_fix、convention に絞り込みます
auto_storebooleanいいえtrue抽出した学びを自動的に保存します

意思決定を示す表現(「we decided」「the fix was」)、パターンを示す表現(「always use」「never do」)、エラーの修正を示す表現(「the problem was」「solved by」)、規約を示す表現(「our convention is」「standard practice」)を探します。見つかった項目は既存のメモリと重複していないか照合され、初期信頼度を低めに設定して保存されます。

18-42. グラフ、Agent-OS、Vault のラウンドトリップ、およびガバナンスツール

残りのツールのパラメーターは src/schemas/ の Zod スキーマで検証されます。各登録の詳細な説明は src/server.ts にあります。

#ツール目的
18memory_tiersMemGPT 形式のホット/リコール/アーカイブ各階層の分布と、ホットな作業セット
19memory_export_vaultメモリーを YAML フロントマター付きの .md ファイルとして Obsidian の Vault に書き出します(vault_sync の逆方向)
20memory_canvasグラフを Obsidian 用の JSON Canvas 1.0 .canvas としてエクスポートします
21memory_manifest何が存在するかを見つけるための、コンテンツを含まない軽量インデックス(タイトル、種類、タグ、スコア)
22memory_graphナレッジグラフを検索します。エンティティ、関係、リンクされたメモリー、複数ホップのたどり(深さ 1~3)に対応します
23memory_extract_entitiesLLM が抽出したエンティティと関係をメモリーに保存します
24memory_condenseエージェントが生成した要約を適用して古いメモリーを簡潔にします(元の内容は保持されます)
25memory_restore簡潔化したメモリーを元の内容に戻し、再度埋め込みます
26memory_queryコンテキストを溢れさせる代わりに、トークン予算を厳密に制限したサブグラフを使って質問に回答します
27core_memory_get(scope, namespace) に対応する、ピン留めされ常にコンテキストに含まれるコアメモリーブロックを読み取ります
28core_memory_appendコアメモリーブロックに追記します(char_limit を超える場合は拒否されます)
29core_memory_replaceコアメモリーブロック内のテキストを置換します(更新や圧縮に使用します)
30memory_reflectGenerative Agents 形式のリフレクションです。素材を集めるか、統合した知見を保存します
31memory_communitiesコーパス全体のテーマを見つけるため、エンティティグラフ上で GraphRAG のコミュニティ検出を行います
32memory_templateドキュメントの種類ごとに構造化されたノートのひな形を取得します
33memory_session_noteセッションごとの「デイリーノート」です(session_id ごとに 1 つのメモリーに追記します)
34memory_attribution各 agent_id が書き込んだ有効なメモリーの数を集計します
35memory_questions「質問事項」のダイジェストです。曖昧なリンク、記録が不十分なエンティティ、孤立した項目を示します
36memory_forgetGDPR 準拠の消去機能です。デフォルトではソフト削除(復元可能)、または hard を指定してエクスポート後に消去します
37memory_history1 つのメモリーについて、指定時点の二時点タイムラインと編集バージョン履歴を表示します
38memory_unlinked_mentionsメモリーのテキストに記載されているものの、グラフのエッジがまだないエンティティ名(リンク候補)
39memory_query_structuredトップレベルのメモリーに対する厳密なメタデータフィルター検索(セマンティックランキングなし)
40memory_version_diff保存された 2 つのメモリーバージョン間の行単位の差分
41memory_version_restoreメモリーを以前のバージョンに戻します(先に現在のバージョンをスナップショットとして保存します)
42memory_verifyメモリーの署名付き来歴エンベロープを検証します(content_hash と origin に対する ed25519)。メモリーごとに ok/unsigned/content_mismatch/bad_signature/untrusted を示し、概要も返します。MCP_SIGN_MEMORIES で署名をオプトインできます。複数マシンの許可リストには MCP_TRUSTED_PUBKEYS/trusted_pubkeys を使用します
43-50. アクティブなインフラストラクチャと型付きシェイプ
#ツール目的
43memory_webhookイベントバスを管理します(MCP_WEBHOOKS によって制御)。SSRF 検証済みの送信先の登録、一覧表示、削除、または永続化され HMAC 署名された配信キューの実行(再試行、サーキットブレーカー、デッドレター)を行います。変更時には created/updated/superseded/deleted/forgotten イベントを出力します
44memory_insightsアドバイザー向けダイジェスト:未解決の競合、古くなったメモリ、最も矛盾の多い事実、証拠のない判断
45memory_healthストアの健全性の概要:有効/廃止/古くなったメモリの件数、経過期間別の区分、未解決の競合、Webhook 配信の健全性
46memory_revalidate変更の伝播:古くなったメモリの一覧表示、変更の影響範囲のプレビュー(ドライラン)、またはメモリが最新であることの確認
47memory_session_state再開可能な「どこまで進んだか」のセッション状態を保存、再開します(バージョン管理)
48memory_expertiseユーザーごとの専門知識プロフィール:トピックを記録し、プロフィールを取得します
49memory_export_datasetファインチューニング用の JSONL トレーニングペア(pairs/chatml/alpaca)として、学習内容と振り返りをエクスポートします
50memory_lesson構造化された教訓またはインシデントを 1 回の呼び出しで記録します。フィールド値から対応するセクションテンプレート(インシデント → 症状/根本原因/修正/予防、教訓 → 内容/重要である理由/適用方法)を埋め、通常の重複排除付き書き込みパスを通じて保存します

アーキテクチャ

システム概要
Claude Code ──stdio──> MCP Memory Graph
                            │
                    ┌───────┴───────┐
                    │               │
              Transformers.js   SQLite DB
              (embeddings)    (~/.mcp-memory/memory.db)
                                    │
                       ┌────────────┼────────────┐
                       │            │            │
                   memories    memories_fts  memories_vec
                   (data +     (FTS5 index)  (vec0 index)
                    scores)
                       │
              ┌────────┼────────┐
              │        │        │
        memory_    memory_    ingest_
        versions   access_    source_
                   log        tracking


Claude Code Hooks (opt-in)
    │
    ├── SessionStart ──> memory_stats (status check)
    ├── PostToolUse ───> search-log.jsonl (hit/miss tracking)
    ├── PreCompact ────> learning extraction (disabled by default)
    └── Stop ──────────> spawn detached `claude -p` headless review
                              │
                              └─> --allowedTools mcp__memory-server__memory_store
                                  Claude reviews transcript → memory_store calls

Nightly Schedule (opt-in)
    └── 3:00 AM ───────> memory_consolidate (dream cycle)
ハイブリッド検索の仕組み
Query: "contract renewal notice"
         │
    ┌────┴────┐
    │         │
 Embed     Tokenize
    │         │
    ▼         ▼
 sqlite-vec  FTS5
 (semantic)  (keyword)
    │         │
    │  rank   │  rank
    │  1: A   │  1: A
    │  2: C   │  2: B
    │  3: B   │  3: D
    │         │
    └────┬────┘
         │
   Reciprocal Rank Fusion
   RRF(d) = Σ 1/(60 + rank)
         │
         ▼
   [A: 0.033, B: 0.026, C: 0.016, D: 0.016]
         │
   Temporal Decay (optional)
         │
   Confidence Scoring
         │
   Access Tracking (record hit)
         │
         ▼
   Final ranked results
データベーススキーマ

SQLite データベースのスキーマバージョンは 18 で、以前のすべてのバージョンから自動的に前方移行できます。主なテーブルは次のとおりです。

  • memories:すべてのメモリデータを格納します。主キーは TEXT(UUID)で、ドキュメントチャンクの親子関係をサポートし、access_count、last_accessed_at、importance_score、confidence_score も保持します。
  • memories_fts:BM25 ランキングによるキーワード検索用の FTS5 仮想テーブルで、memories テーブルと同期されます。
  • memories_vec:ベクトル検索用の vec0 仮想テーブルです。事前フィルタリング用のスコープおよび名前空間メタデータとともに、384 次元の float32 埋め込みを格納します。
  • memory_versions:すべての変更のバージョン履歴です。
  • memory_access_log:検索、取得、関連メモリへのアクセスをすべて、タイムスタンプとクエリコンテキストとともに記録します。
  • ingest_source_tracking:再取り込み時の変更検出に使用する、取り込み済みファイルの情報です。

後続のスキーマバージョンでは、ナレッジグラフのテーブル(エンティティ、リンク、競合、コミュニティ)、Webhook、セッション状態、RBAC の api_keys テーブルが追加されます。すべての変更で、SQLite トランザクション内において 3 つのコアテーブルの整合性が原子的に保たれます。これを repository.ts レイヤーが保証し、それ以外からテーブルに直接アクセスすることはありません。

プロジェクトの構成
src/
├── index.ts        # Entry point (stdio transport)
├── server.ts       # All 51 tool registrations
├── config/         # Config file loading + validation
├── db/             # Connection, schema, migrations, repository (three-table sync)
├── embeddings/     # Embedding providers (Transformers.js, registry, Ollama)
├── search/         # Hybrid search, reranker, temporal decay, scoring
├── chunking/       # Per-content-type chunking strategies
├── graph/          # Entities, links, PageRank, communities
├── vault/          # Obsidian round-trip, write-through, bookkeeping
├── tools/          # One handler per MCP tool
├── api/            # REST routes + security middleware
├── events/         # Webhook bus (SSRF guard, HMAC, retry)
├── cli/            # init, serve, vault, backup, keys, migrate, ...
├── hooks/          # Claude Code lifecycle hooks
└── schemas/        # Zod schemas for every tool input

部門別のユースケース

エンジニアリング:

Store memory: "We chose event sourcing over CRUD for the order service because
we need full audit trail and the ability to replay events for debugging.
ADR-042, decided 2026-03-15."
department=engineering, document_type=decision, tags=["architecture","event-sourcing"]

法務:

Ingest this contract template with content_type=legal, department=legal,
document_type=contract, tags=["template","nda","standard"]

財務:

Store memory: "Q4 2025 revenue recognition policy change: SaaS contracts
over 12 months now recognized ratably per ASC 606 guidance."
department=finance, document_type=policy, tags=["revenue-recognition","asc-606"]

人事:

Ingest the employee handbook with department=hr, content_type=text,
document_type=policy, tags=["handbook","onboarding"]

営業:

Store memory: "When prospect objects on price vs CompetitorX, lead with
our 99.9% uptime SLA and dedicated support. This converted 3 deals in Q1."
department=sales, document_type=pattern, tags=["objection-handling","pricing","competitorx"]

Obsidian Vault 連携

サーバーに Vault フォルダーを指定すると、すべての Markdown ファイルが検索可能なメモリーになり、フロントマター、タグ、Wiki リンクが抽出されます。Obsidian アプリは不要で、ディスク上のファイルを直接読み取ります。

ツール説明
vault_syncVault をスキャンし、ファイルを解析して、埋め込みを生成して保存します。増分処理(mtime ベース)です。
vault_status同期状況:同期済み、保留中、変更済みのファイル数、最終同期時刻です。
vault_searchVault のメモリーを対象としたハイブリッド検索です。

抽出される情報:

Obsidian の機能メモリーフィールド
YAML フロントマターの title:title
YAML フロントマターの tags: [...]tags(インラインのタグと統合)
YAML フロントマターの author:author
YAML フロントマター(すべてのフィールド)metadata.frontmatter
コンテンツ内のインライン #tagstags(フロントマターのタグと統合)
[[wiki-links]]metadata.links 配列
Vault からの相対ファイルパスsource
Vault ディレクトリ名namespace

使用例:

Sync my Obsidian vault at ~/Documents/my-vault

Check vault sync status for ~/Documents/my-vault

Search my vault for "meeting action items about hiring"

Sync vault but only the notes/ and projects/ folders:
  vault_sync with include_patterns=["notes/**", "projects/**"]

Force re-sync everything (ignore modification times):
  vault_sync with force=true

vault_sync のパラメーター:

パラメーター型デフォルト説明
vault_pathstringVault ディレクトリへの絶対パス(必須)
chunk_sizenumber1024大きなファイルの目標チャンクサイズ
chunk_overlapnumber50チャンク間のオーバーラップ
forcebooleanfalsemtime に関係なく、すべてのファイルを再同期します
include_patternsstring[]一致する glob のみを同期します(例:["notes/**"])
exclude_patternsstring[]一致する glob をスキップします(例:["templates/**"])

同期の仕組み:Vault を再帰的にスキャンして .md ファイルを探し(.obsidian/、.trash/、.git/ はスキップ)、更新時刻を前回の同期時刻と比較します。新規ファイルまたは変更されたファイルからフロントマター、Wiki リンク、タグを抽出し、埋め込みを生成して保存します。削除されたファイルのメモリーは削除されます。チャンクサイズを超えるファイルは、Markdown の構造を考慮したチャンク分割で分割されます。変更のない Vault を再同期する場合、1 ミリ秒もかかりません。

セキュリティとプライバシー

  • モデルの初回ダウンロード後は、ネットワークへの呼び出しはありません(ローカルにキャッシュされます)。
  • テレメトリー、アナリティクス、トラッキングはありません。
  • フックはオプトインです。npx mcp-memory-graph init を実行した場合にのみインストールされます。
  • 夜間スケジュールもオプトインで、npx mcp-memory-graph uninstall によって削除されます。
  • すべてが単一の SQLite ファイルに保存されるため、簡単にバックアップ、移動、削除できます。
  • 組織での把握に役立つ access_level メタデータ(public、internal、confidential、restricted)を使用できます。
  • データがマシンの外部に送信されることはありません。

バックアップ:

# WAL-safe online snapshot with retention
npx mcp-memory-graph backup

# Or a simple file copy
cp ~/.mcp-memory/memory.db ~/.mcp-memory/memory.db.backup

リセット:

# Delete the database to start fresh
rm ~/.mcp-memory/memory.db

夜間の統合

npx mcp-memory-graph init でインストールすると、夜間ジョブによって 5 つのドリームサイクル段階すべてとアクセスログのローテーションが実行されます(90 日より古いエントリーは削除されます)。

macOS では、~/Library/LaunchAgents/com.mcp-memory.consolidate.plist に launchd plist が作成され、午前 3 時にスケジュールされます。Linux では、init によって cron の設定例が表示されます:

# Add to crontab -e
0 3 * * * /usr/local/bin/npx mcp-memory-graph consolidate

いつでも手動で実行できます:

npx mcp-memory-graph consolidate

制限事項

  • 規模の上限。 ベクトル検索は全件スキャン方式です。10K ベクトルで p95 は 9.1 ms、50K では約 30 ms で、そこからは線形に遅くなります。数十万件までは快適に使えますが、それ以上では専用の ANN インデックスが必要になります。現時点で、このサーバーにはまだありません。
  • 英語に最適化されています。 デフォルトの MiniLM モデルは、実質的に英語専用です。言語をまたいだマッチングの精度は低くなります。MCP_MEMORY_MODEL で多言語モデルを設定できます(再ビルドが必要です)が、公開済みのベンチマークで検証しているのはデフォルトモデルのみです。
  • 初回呼び出し時のコールドスタート。 初回の使用時は、埋め込みモデルの読み込みに 3~5 秒かかります。それ以降はキャッシュされます。
  • ヒューリスティックな抽出。 memory_extract_learnings はパターンマッチングを使用し、LLM は使用しません。よくある言い回しは検出できますが、微妙な表現は見逃します。(Stop フックの claude -p によるレビューが、LLM 品質で処理する方法です。)
  • 単一プロセス。 RBAC キーと失効情報はサーバープロセス内に保持されます。水平スケーリングするには、テナントを複数のプロセスに分散するか、テナントごとに独自のデータベースファイルを割り当てます。

ロードマップ

現時点で次に予定していることを、おおよその順に示します。

  • オプトイン方式の多言語埋め込み。 多言語 ONNX モデルのオプションを提供します(埋め込みモデルのレジストリとモデル ID のガードはすでにあるため、安全かつ明確に切り替えられます)。
  • オフィス文書の取り込み。 PDF、DOCX、XLSX などを、ローカルでの抽出のみを使う取り込みモードで処理します。
  • Vault ファイル監視。 手動で rebuild する代わりに、.md の変更時に自動で再構築します。
  • as_of によるコンテンツの再構築。 現在の時点指定クエリでは、有効性(どの事実が有効だったか)を再構築できます。残る課題は、その時点に編集されたメモリの内容を再構築することです。
  • 数十万件を超えるコーパス向けの ANN インデックス。
  • Windows テストスイートの移植。 サーバーは Windows 上で動作しますが、テストスイートには POSIX パスを前提とした箇所があります。対応が完了するまでは、Windows CI の実行はブロッキングではありません。

技術スタック

コンポーネントパッケージ用途
MCP SDK@modelcontextprotocol/sdk ^1.29Model Context Protocol サーバー用フレームワーク
埋め込み@huggingface/transformers ^3.8Node.js でのローカル ONNX モデル推論
データベースbetter-sqlite3 ^12.10ネイティブバインディングを使用する同期 SQLite
ベクトル検索sqlite-vec 0.1.10-alpha.4KNN 検索用の vec0 仮想テーブル
検証zod ^3.25ツール入力のスキーマ検証
TypeScripttypescript ^5厳格モード、ES2022 ターゲット
フロントエンドReact 19, Vite, Tailwind CSS v4Web ダッシュボード SPA
UI コンポーネントshadcn/uiアクセシブルなコンポーネントプリミティブ
あいまい検索fuse.js ^7クライアント側のオートコンプリート候補
グラフの可視化d3-force, d3-zoom, d3-dragナレッジグラフのレイアウト

ライセンス

ソースコードは利用可能ですが、オープンソースではありません。PolyForm Noncommercial License 1.0.0 の下でライセンスされており、あらゆる非商用目的(個人プロジェクト、趣味、学習、研究、慈善、教育、公的研究、政府機関での利用)で無料で利用できます。商用利用には有償ライセンスが必要です。詳細は COMMERCIAL.md をご覧ください。

ご自身の利用が商用に該当するか不明な場合は、ライセンスのセーフハーバーを確認するか、こちらにお問い合わせください:[email protected]。

キーワード

MCP メモリーサーバー · Model Context Protocol · Claude Code メモリー · 永続的な AI メモリー · LLM の長期記憶 · AI エージェントのメモリー · ローカルファーストのメモリー · $0/token のメモリー · ベクトル検索とキーワード検索のハイブリッド · セマンティック検索 · ナレッジグラフ · 双時間メモリー · HippoRAG / Personalized PageRank · クロスエンコーダーによる再ランキング · RAG メモリー · SQLite ベクトルデータベース · sqlite-vec · FTS5 / BM25 · ローカル埋め込み(all-MiniLM-L6-v2、Transformers.js) · Obsidian Vault 同期 · JSON Canvas · GDPR に基づく削除 · 署名付きプロベナンス · セルフホスト可能なメモリー。

次の名称でも検索されています:mem0、Zep、Letta、Cognee、Supermemory に代わる、セルフホスト可能でプライバシーを重視したソリューション · Claude / Cursor / Codex 向け長期記憶 · AI エージェント向け Obsidian ベースのナレッジベース · マシンの外に出ないローカルナレッジグラフメモリー。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。