Memory Vault について
Memory Vault は、Postgres と pgvector を基盤とするセルフホスト可能な AI メモリレイヤーで、ハイブリッド検索、ナレッジグラフ、MCP 連携を備えています。複数のセッションにわたって決定事項やプロジェクトの文脈を保持したい開発者に向けられています。MIT ライセンスです。
主な機能
- 01セマンティック検索とキーワード検索の併用
- 02MCP 経由のメモリの読み書き
- 03ソースを表示するローカル LLM チャット
- 04エンティティと関係の自動抽出
- 05プロジェクトごとのメモリスペース
- 06REST API と Docker によるワンコマンド起動
活用シーン
- 01セッションをまたいだプロジェクト決定事項の記憶を Claude に持たせる
- 02LM Studio を使った個人ノートのローカル検索
- 03REST API を通じた独自 AI ツールへの永続メモリの追加
MCP 対応
stdio 経由で recall、remember、forget、memory_status のツールと、memory://spaces および memory://stats のリソースを公開します。MCP_HTTP_ENABLED を有効にすると、トークン認証付きの SSE 経由でも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e DB_HOST -e DB_PORT -e DB_NAME -e DB_USER -e DB_PASSWORD ghcr.io/mihaibuilds/memory-vault-mcp:1.6.1DB_HOSTHostname of the Postgres+pgvector instance Memory Vault connects to (e.g. 'host.docker.internal' when Postgres runs on the host, 'localhost' when running natively, or the service name when both run in compose)DB_PORTPostgres portDB_NAMEPostgres database nameDB_USERPostgres user with read/write access to the memory vault databaseDB_PASSWORDシークレットPostgres password for DB_USERローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/mihaibuilds/memory-vault-mcp:1.6.1stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Memory Vault
AI アプリケーション向けのメモリデータベースです。 ハイブリッド検索を備え、MCP ネイティブで、ナレッジグラフを組み込んだセルフホスト可能な Postgres + pgvector です。
Claude や ChatGPT との会話は、毎回ゼロから始まります。先週作ったものも、先月決めたことも、すでに解決した問題も記憶していません。すべてを一から説明し直すか、コンテキストを大量に貼り付けて、制限内に収まることを願うしかありません。
Memory Vault は、その下支えとなる永続化レイヤーです。AI に記憶させたいもの――決定事項、会話、メモ、プロジェクトのコンテキスト――を、ハイブリッドなセマンティック検索とキーワード検索に対応した単一の Postgres データベースに保存します。MCP 経由で、Claude は任意のセッション中に記憶を呼び出して保存できます。また、ローカル LLM を使って自分の記憶とチャットしたり、REST API をベースに独自の AI ツールを構築したりできます。

ローカル LLM を使って Vault とチャットできます。回答ごとに、根拠となった正確な記憶が表示されます。出典をクリックすれば内容を確認できます。
ステータス
v1.0 — 2026-05-07 リリース。 Memory Vault の最初の安定版です。M1〜M7(ハイブリッド検索、Docker、MCP、REST API、ダッシュボード、ナレッジグラフ、ローカル LLM チャット)はすべてリリース済みで、安定しています。
リリースごとの完全な履歴はCHANGELOG.mdを、プラットフォームネイティブな表示はGitHub Releasesをご覧ください。
今後はセマンティックバージョニングに従います。公開インターフェース(REST API エンドポイント、MCP ツールのシグネチャ、DB スキーマ)は安定しています。破壊的変更はメジャーバージョンの更新時にのみ行われます。
クイックスタート(Docker)
git clone https://github.com/MihaiBuilds/memory-vault.git
cd memory-vault
docker compose up -d
これで完了です。PostgreSQL + pgvector + Memory Vault が起動し、すぐに使えます。初回起動時にマイグレーションが自動実行されます。
# Check it's working
docker compose exec app memory-vault status
# Ingest a file
docker compose exec app memory-vault ingest /path/to/file.md --space default
# Search
docker compose exec app memory-vault search "your query here"
データは Docker ボリュームに保持されるため、docker compose down の後に再び起動しても、記憶はそのまま残っています。
ブラウザーで http://localhost:8000 を開くと、ダッシュボード(チャット、検索、閲覧、グラフ、取り込み、統計)を利用できます。
Windows ユーザー向け: Windows のパスではなく WSL2 内にクローンし、行末エラーが発生した場合は docs/windows.md をお読みください。
Docker を使わないクイックスタート
Docker を使わずに実行する場合:
前提条件
uv を使ったセットアップ(推奨)
# Clone
git clone https://github.com/MihaiBuilds/memory-vault.git
cd memory-vault
# Create virtual environment and install dependencies
uv sync
# Install the spaCy language model
uv run python -m spacy download en_core_web_sm
# Configure
cp .env.example .env
# Edit .env with your PostgreSQL credentials
# Run migrations
uv run memory-vault migrate
# Verify
uv run memory-vault status
pip + venv を使ったセットアップ(代替方法)
uv をインストールしたくない場合は、標準の pip + venv でも動作します。
# Clone
git clone https://github.com/MihaiBuilds/memory-vault.git
cd memory-vault
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -e .
# Install the spaCy language model
python -m spacy download en_core_web_sm
# Configure
cp .env.example .env
# Edit .env with your PostgreSQL credentials
# Run migrations
memory-vault migrate
# Verify
memory-vault status
使い方
uv でセットアップした場合は、コマンドの先頭に uv run を付けてください(例:uv run memory-vault search ...)。pip + venv を使った場合は、最初に venv を有効化し(source .venv/bin/activate)、コマンドをそのまま実行してください。
# Ingest a file
memory-vault ingest notes.md --space default
# Search memories
memory-vault search "hybrid search architecture" --limit 5
# Check status
memory-vault status
特長
- ハイブリッド検索 — 意味的な類似性とキーワードマッチングを組み合わせるため、正確な言葉を覚えていなくても適切なメモリを見つけられます
- MCP 連携 — Claude がセッション中にネイティブに利用できる4つのツール(
recall、remember、forget、memory_status) - ローカル LLM チャット — クラウドに何も送信せずに、LM Studio 経由で自分のメモリに問い合わせられます。すべての回答にソースが表示されます
- ナレッジグラフ — エンティティと関係性を自動的に抽出し、時間とともに項目間のつながりが見えてきます
- メモリスペース — プロジェクトやドメインごとに名前空間を分けられます
- REST API — あらゆるアプリケーションに AI メモリを統合できます
- ワンコマンドでセットアップ —
docker compose upを実行するだけで起動します - セルフホスト可能 — データは常に自分のマシンに保存されます
アーキテクチャ

中核をなすのは Postgres + pgvector です。同じメモリレイヤーに、MCP(Claude)、ダッシュボードのチャットページ、REST API、そしてその上に構築するあらゆるアプリからアクセスできます。
このスタックには、意図的に採用している点が3つあります。
- データベースは2つではなく1つ。 ベクトル埋め込み、全文検索インデックス、リレーショナルデータはすべて Postgres に格納されます。同期を維持するための別個のベクトルデータベースは不要です。
- フロントエンドに依存しません。 ダッシュボードは API の利用者の1つであり、API 自体ではありません。MCP、REST、CLI、自作のアプリはいずれも対等な第一級クライアントです。
- デフォルトでは CPU のみで動作します。 GPU は不要です。埋め込み(sentence-transformers)とエンティティ抽出(spaCy)はどちらも一般的なノート PC で動作します。
技術スタック
- PostgreSQL 16 + pgvector — ベクトルストレージとハイブリッド検索を1つのデータベースで実現
- Python 3.11+ — psycopg 3 を使用した非同期バックエンド
- sentence-transformers —
all-MiniLM-L6-v2の埋め込み(384次元、CPU で動作) - spaCy — エンティティ抽出用の
en_core_web_sm(CPU のみで動作し、LLM の呼び出しは不要) - FastAPI — ベアラートークン認証、レート制限、OpenAPI ドキュメントを備えた REST API
- React 19 + Vite + TanStack Query — メインの Docker イメージに組み込まれた Web ダッシュボード
- Cytoscape.js + cose-bilkent — ダッシュボード上での力指向ナレッジグラフの描画
- Docker —
docker compose upによるワンコマンドのデプロイ - MCP — FastMCP(stdio トランスポート)経由の Claude 連携
MCP 連携(Claude Desktop と Claude Code)
Memory Vault は、Model Context Protocol 経由で6つのツールを公開し、Claude が会話中にメモリを読み書きできるようにします。
ツール
| ツール | 説明 |
|---|---|
recall | ハイブリッド検索(ベクトル + 全文検索 + RRF)でメモリを検索します |
remember | 新しいメモリを保存します — 自動で分類し、埋め込みを生成します |
forget | チャンク ID でメモリを論理削除します |
purge_forgotten | N 日以上前に忘却されたメモリを完全に削除します |
move_memory | メモリを別のスペースに移動し、グラフのエントリーを再構築します |
memory_status | データベースの健全性、チャンク数、埋め込みモデル情報を表示します |
リソース
| リソース | 説明 |
|---|---|
memory://spaces | すべてのメモリスペースをチャンク数とともに一覧表示します |
memory://stats | 現在のシステム統計情報 |
セットアップ — Claude Code
パッケージ memory_vault がインストールされるよう、上記のDocker なしのクイックスタートを完了していることを確認してください(uv sync または pip install と、spaCy モデルのダウンロード)。
プロジェクトスコープ — プロジェクトの .mcp.json に追加します。
{
"mcpServers": {
"memory-vault": {
"command": "/path/to/memory-vault/.venv/bin/python",
"args": ["-m", "memory_vault.mcp"],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "5432",
"DB_NAME": "memory_vault",
"DB_USER": "memory_vault",
"DB_PASSWORD": "memory_vault"
}
}
}
}
グローバルスコープ — すべての Claude Code セッションで memory-vault を利用できるようにするには、同じサーバーブロックを ~/.claude/.mcp.json に追加し、~/.claude/settings.json の enabledMcpjsonServers に memory-vault を追加します。
{
"enabledMcpjsonServers": ["memory-vault"]
}
claude mcp list で確認します — memory-vault に connected と表示されます。
セットアップ — Claude Desktop
同じサーバーブロックを Claude Desktop の設定(Settings → Developer → Edit Config)に追加し、Claude Desktop を再起動します。
Docker ユーザー
Memory Vault を Docker 経由で実行している場合は、DB_HOST: "127.0.0.1" を使用し、docker-compose.yml でポート 5432 が公開されていることを確認してください。
{
"mcpServers": {
"memory-vault": {
"command": "/path/to/memory-vault/.venv/bin/python",
"args": ["-m", "memory_vault.mcp"],
"env": {
"DB_HOST": "127.0.0.1",
"DB_PORT": "5432",
"DB_NAME": "memory_vault",
"DB_USER": "memory_vault",
"DB_PASSWORD": "memory_vault"
}
}
}
}
MCP サーバーは Docker 内ではなくホスト上で実行され、公開されたポートを介して PostgreSQL コンテナに接続します。
動作確認
設定が完了すると、Claude からメモリツールを利用できます。次のように試してください。
「memory_status を使ってメモリシステムを確認してください。」
「セッションキャッシュには Redis を選んだことを記憶してください。」
「ハイブリッド検索に関する情報をすべて思い出してください。」
トラブルシューティング
- 起動時の
ModuleNotFoundError— 仮想環境がインストールされていません。リポジトリのディレクトリでuv sync(またはpip install -e .)を再実行してください。 - 起動時の
OSError: [E050]— spaCy 言語モデルがインストールされていません。python -m spacy download en_core_web_smを再実行してください。 - Claude Code でサーバーが
failedと表示される —claude --debug mcpを実行し、サーバーのエラー出力を確認してください。 - サーバーは接続しているのに、Claude Code でツールを利用できない —
~/.claude/settings.jsonのenabledMcpjsonServersにmemory-vaultが記載されていることを確認してください。 - Docker の実行中に接続が拒否される —
"localhost"ではなくDB_HOST: "127.0.0.1"を使用してください。
HTTP 経由のリモートアクセス
上記はすべて stdio 経由で MCP を実行します。これはクライアントとサーバーが 同じマシン上にあることを前提としています。クライアントが別の場所にある場合 — 別のマシン上の Claude Desktop や、 別のコンテナ内のエージェントハーネスなど — Memory Vault は SSE を使って HTTP 経由でも MCP を 提供できます。
デフォルトでは無効です。 メモリストアは、要求もないのにポートでリッスンを開始するようなものではありません。
MCP_HTTP_ENABLED=true
このトランスポートは REST API と同じポートの /api/mcp にマウントされるため、
クライアントは http://<host>:8000/api/mcp/sse に接続します。
すべてのリクエストにトークンが必要です。 REST API と同じ方法で作成します。
memory-vault token create my-remote-client
クライアントによってリモート MCP サーバーの指定方法は異なりますが、 必要なものはすべて同じ 3 つ — SSE トランスポート、URL、トークンです。多くのクライアントが 使用する形式は次のとおりです。
{
"mcpServers": {
"memory-vault": {
"type": "sse",
"url": "http://192.168.1.50:8000/api/mcp/sse",
"headers": { "Authorization": "Bearer mv_your-token-here" }
}
}
}
使用するホスト名を指定する
Memory Vault は、指定されたホスト名にのみ応答し、それ以外には
HTTP 421 を返します。このチェックにより、ブラウザー内のページが
独自ドメインを 127.0.0.1 に解決し、マシンを経由してメモリストアにアクセスするのを防ぎます。
デフォルトでは、同じマシン上のクライアント(任意のポートの localhost と 127.0.0.1)が対象です。
それ以外の名前(LAN アドレス、コンテナ名、リバースプロキシの背後にあるホスト名)でアクセスするには、
その名前を指定します。
MCP_HTTP_ALLOWED_HOSTS=memory.internal:8000,192.168.1.50:8000
このリストはデフォルトに追加されるのではなく、デフォルトを置き換えます。そのため、
ローカルクライアントも引き続き使用する場合は localhost:* を含めてください。host:* の項目は、
任意のポートでそのホストに一致します。
クライアントが 421 Misdirected Request を受け取る場合は、その理由はこれです。使用した名前が
リストにありません。
セキュリティ
API_AUTH_ENABLED=false にしても MCP トランスポートは認証なしで使えるようにはなりません。 この設定は
REST API のローカル開発を便利にするためのものであり、意図的にその範囲に限定されています。自分のノート PC で認証なしの REST API を使うのは便利ですが、
リッスン中のポートで認証なしのメモリストアを公開すると、インスタンスが公開状態になってしまいます。
このフラグがオフの場合、/api/spaces はトークンなしで応答しますが、
/api/mcp/sse は引き続き 401 を返します。
ポートを公開する前に知っておくべきことが 2 つあります。
- 適切なアドレスにバインドしてください。 コンテナのポートを
0.0.0.0で公開すると、ネットワーク全体からアクセスできるようになります。LAN アドレスにバインドするか、 リバースプロキシまたはトンネルの背後に配置してください。 - トランスポートは暗号化されません。 トークンはヘッダーで送信されるため、 自分が管理していないネットワークを通過する場合は、リバースプロキシまたはトンネルを使って TLS を適用してください。
トークンの動作は REST API とまったく同じです。memory-vault token revoke <prefix> で
トークンを失効させると、両方のインターフェースで同時に使用できなくなります。
どちらも同じテーブルを参照するためです。
stdio はこれまでどおり動作します。 これは追加の接続方法であり、置き換えではありません。 有効にしても、既存のクライアントには何も影響しません。
ローカル LLM チャット
Memory Vault には、ローカル LLM を使って自分のメモリと対話できるチャットページが含まれています。クラウドも、OpenAI キーも、テレメトリも不要です。ダッシュボードはボルトに対してハイブリッド検索を実行し、上位の検索結果からコンテキストブロックを作成して、お使いのマシンで動作しているモデルから回答をストリーミングします。
すべての回答にソースが表示されます。 各応答には、LLM が使用した正確なチャンクと、類似度スコアおよび内容のプレビューが含まれます。ソースをクリックすれば、回答が捏造ではなくデータに基づいていることを確認できます。これは、内部が不透明なドキュメント対話ツールとの違いです。モデルが何を見たのかを常に確認できます。
セットアップ
Memory Vault は v1.0 で、ローカル LLM プロバイダーとして LM Studio を使用します。
- LM Studio をダウンロードしてインストールします。
- 思考を行わないモデル(Qwen2.5(7B 以上)、Llama 3(8B 以上)など)を読み込みます。Qwen3、DeepSeek-R1、o1 スタイルの推論モデルは避けてください。回答に思考の連鎖を出力するため、RAG の処理が壊れます。
- ローカルサーバーを起動します(LM Studio → Developer タブ → Start Server)。デフォルトのアドレスは
http://localhost:1234です。 - Memory Vault ダッシュボードを開き、Chat ページ → ⚙️ Settings で、Local LLM URL が LM Studio のインスタンスを指していることを確認します。モデルは自動検出されます。
これで完了です。質問すると、ダッシュボードが関連するチャンクを取得し、質問とともに LM Studio に送信して、回答をストリーミングします。
仕組み
- ハイブリッド検索で質問に関連する上位チャンクを取得します(
/api/searchおよび MCP のrecallと同じエンジンです) - 上位の検索結果を 6,000 トークンのコンテキスト予算内に収めます。最初に古い履歴を削除し、次に類似度の低いチャンクを削除します
- LM Studio が Server-Sent Events 経由で、トークンごとにストリーミングして回答を生成します
- ソースはストリーム内で最初に届くため、トークンの配信開始前に UI に「N 件のメモリに基づく回答です」と表示されます
LM Studio を最初に採用した理由
LM Studio のネイティブ API は reasoning="off" をサポートしています。これは、RAG の処理で思考モデルの思考の連鎖を抑制する唯一の信頼できる方法です。Memory Vault はデフォルトでネイティブ API を使用し、ネイティブ API が利用できない場合は、`` を除去する OpenAI 互換 API(/v1/chat/completions)にフォールバックします。
REST API
すべての MCP ツールは HTTP エンドポイントとしても公開されているため、Memory Vault を任意のアプリ、スクリプト、言語に統合できます。docker compose up を実行すると、FastAPI によって http://localhost:8000 で API が提供されます。
- インタラクティブドキュメント: http://localhost:8000/docs
- OpenAPI スキーマ: http://localhost:8000/openapi.json
自動生成される /docs ページが正式な API リファレンスであり、コードと常に同期されています。以下の概要は、参考情報として掲載しています。
認証
/api/health を除くすべてのエンドポイントで、ベアラートークンが必要です。CLI でトークンを作成します。
docker compose exec app memory-vault token create my-app
平文トークンが表示されるのは一度だけです。すぐにコピーしてください。その後、ヘッダーとして送信します。
curl -H "Authorization: Bearer mv_..." http://localhost:8000/api/spaces
トークンを管理します。
memory-vault token list
memory-vault token revoke mv_abc1234
認証を完全に無効にするには(ローカル開発時のみ)、API_AUTH_ENABLED=false を設定します。
エンドポイント
| メソッド | パス | 説明 |
|---|---|---|
GET | /api/health | サービスとデータベースの状態(認証不要) |
GET | /api/spaces | チャンク数を含むメモリスペースの一覧 |
POST | /api/search | ハイブリッド検索(ベクトル+全文検索+RRF) |
GET | /api/search/quality | 最近の検索がどの程度適切に一致しているか |
GET | /api/chunks | ページネーションとフィルターを使ったチャンクの一覧 |
GET | /api/chunks/{id} | 単一のチャンクを取得 |
DELETE | /api/chunks/{id} | チャンクをソフト削除(忘却) |
POST | /api/ingest/text | テキスト文字列をチャンクとして取り込む |
POST | /api/ingest/file | 取り込みパイプライン経由でファイルをアップロード |
POST | /api/chat | ハイブリッド検索を使った RAG チャット(非ストリーミング) |
POST | /api/chat/stream | トークンごとの SSE ストリーミングによる RAG チャット |
例 — 検索
curl -X POST http://localhost:8000/api/search \
-H "Authorization: Bearer $MV_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "how does hybrid search work",
"spaces": ["default"],
"limit": 5
}'
例 — 検索品質
curl http://localhost:8000/api/search/quality \
-H "Authorization: Bearer $MV_TOKEN"
{
"queries": 42,
"window_hours": 24,
"avg_top_similarity": 0.51,
"weak_matches": 6,
"empty_results": 0,
"weak_threshold": 0.35
}
すでに実行された検索結果から集計されます。追加で尋ねてもコストはかからず、新しいクエリも実行されません。上位 K 件の平均ではなく、各検索の最良の結果を報告します。検索結果は、ボルトにある内容に応じて、指定した行数だけ返されるため、順位を下げて平均すると、マッチの品質と同じくらい limit の影響も測定してしまうからです。
注目すべき指標は weak_matches です。関連する結果が見つからなくても、検索は最も近い候補を返すため、適切な回答が得られていない場合でも empty_results はほぼゼロのままです。弱いマッチの数が多い場合、通常は検索が見つけられていないのではなく、回答が保存されていないことを意味します。
Web UI の「Stats」ページにも同じ数値が表示されます。
例 — テキストの取り込み
curl -X POST http://localhost:8000/api/ingest/text \
-H "Authorization: Bearer $MV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "Decided to use RRF for hybrid merging", "space": "default"}'
例 — ファイルのアップロード
curl -X POST http://localhost:8000/api/ingest/file \
-H "Authorization: Bearer $MV_TOKEN" \
-F "[email protected]" \
-F "space=default"
設定
| 変数 | デフォルト | 説明 |
|---|---|---|
API_HOST | 0.0.0.0 | バインドアドレス |
API_PORT | 8000 | ポート |
API_AUTH_ENABLED | true | ベアラ認証を無効にするには false を設定します(ローカル開発時のみ) |
API_CORS_ORIGINS | * | 許可するオリジン(カンマ区切り)、または * |
API_RATE_LIMIT_PER_MIN | 120 | IP ごとの 1 分あたりのリクエスト上限 |
ダッシュボード
Memory Vault には、API と同じ Docker イメージに組み込まれた Web UI が付属しています。別途デプロイしたり、追加のポートを開いたりする必要はありません。docker compose up の実行後、ブラウザーで http://localhost:8000 を開いてください。
6 つのページがあります。
- Chat — ローカル LLM を使ってボルトと会話できます。すべての回答にソースが表示されます(デフォルトのランディングページ)
- Search — スペースフィルター、類似度スコア、展開可能な検索結果の内容を備えたハイブリッド検索
- Browse — スペースと並べ替えのフィルターを備えた、ページ分割されたチャンク一覧。インライン削除は 2 段階です
- Graph — 力学的グラフレイアウトのナレッジグラフ(Cytoscape.js)。パンとズームに対応し、ノードをクリックすると、その言及箇所と関連エンティティが表示されます。スペース/タイプ/最小言及数/最大ノード数でフィルターできます
- Ingest — テキストの貼り付けまたはファイルのアップロード(v1.0 では一度に 1 ファイル)、ファイルごとのステータス、バッチの概要
- Stats — システムの健全性、チャンク総数、視覚的な分布を示すスペース一覧、自動更新(30 秒ごと)
アクセス
ダッシュボードでは API と同じベアラトークンを使用します。トークンを作成し、ダッシュボードのトークン画面に貼り付けてください。
docker compose exec app memory-vault token create dashboard
平文のトークンが表示されるのは一度だけです。すぐにコピーしてください。http://localhost:8000 を開き、プロンプトに貼り付けると、ダッシュボードはトークンを localStorage の memory-vault-token に保存します。そのブラウザーでは、次回から再入力を求められません。
ローテーションまたは失効
# See which tokens exist
docker compose exec app memory-vault token list
# Revoke by prefix (shown in list output)
docker compose exec app memory-vault token revoke mv_abc1234
# Create a new one
docker compose exec app memory-vault token create dashboard
トークンを失効させると、ダッシュボードは次のリクエストで 401 を受け取り、保存されているトークンを自動的に消去します。その後、新しいトークンの貼り付けが必要になります。
トラブルシューティング
- 再読み込みのたびにトークンを求められる: ブラウザーが
localStorageをブロックしています(プライベートモード、厳格な Cookie 設定など)。通常のウィンドウを使うか、localhostのストレージを許可してください。 - すべてのリクエストで 401 が返る: トークンが取り消されたか、
API_AUTH_ENABLEDが変更されています。新しいトークンを作成して貼り付けてください。 - ダッシュボードは表示されるが、API 呼び出しが CORS で失敗する: ダッシュボードとは異なるオリジンの API にアクセスしています。ビルド済みのアプリではこの問題は発生しません。開発サーバーの使用に詳しくない場合は、
http://localhost:8000を使ってください。 - 開発サーバーを実行する:
cd web && npm install && npm run devを実行すると、http://localhost:5173で UI が提供され、API 呼び出しは:8000にプロキシされます。開発時のみ使用してください。 - Windows 固有の問題: docs/windows.md を参照してください。
- バグを報告する:
docker compose exec app memory-vault diagnoseを実行してください(ホスト上でmemory-vault diagnoseを実行すると、docker compose psと DB ログを含む、より詳細な診断情報が生成されます)。このコマンドは、アプリのログ、ステータス、OS 情報、環境変数を機密情報がわからないように加工したデータを含むmemory-vault-diagnostic-YYYY-MM-DD-HHMMSS.zipを作成します。Bearer トークン、パスワード、mv_トークンは自動的に削除されますが、公開 GitHub イシューに添付する前に、診断情報を確認してください。 - リクエスト ID を報告する: すべての API レスポンスには
X-Request-IDヘッダー(UUID の 16 進数文字列)が含まれます。バグ報告に記載してください。同じリクエストを構造化 JSON ログから grep するのに役立ちます。
仕組み
ハイブリッド検索
Memory Vault は 2 つの検索方式を組み合わせ、結果を統合します。
- ベクトル検索 — クエリを埋め込み表現に変換し、HNSW インデックスを使って意味的に類似したチャンクを見つけます
- 全文検索 — PostgreSQL の tsvector と GIN インデックスを使ってキーワードを照合します
- RRF による統合 — Reciprocal Rank Fusion で両方の順位付きリストを統合し、一方の方式が結果を支配しないようにします
正確な言葉を覚えている場合も、概念だけを覚えている場合も、適切なメモリーを見つけられます。
クエリの拡張
検索の前に、Memory Vault は埋め込みモデルの WordPiece トークナイザーを使って重要な技術用語を抽出し、最大 3 つのクエリ候補を生成します。これにより、精度を損なわずに再現率を高めます。
取り込みパイプライン
さまざまな入力形式に対応するアダプターを備えた、非同期のキューベースのパイプラインです。
- Markdown — 見出しごとに分割し、構造を保持します
- プレーンテキスト — 段落単位で処理し、内容を適切に統合します
- Claude JSON — Claude の会話エクスポートを解析します
ナレッジグラフ
Memory Vault は、取り込んだすべてのチャンクからエンティティと関係を抽出し、メモリーと一緒に保存します。ダッシュボードの Graph ページを開くと、保存した情報同士のつながりを確認できます。
抽出の仕組み:
- spaCy NER — 小型の
en_core_web_smモデル(約 15 MB、CPU のみ)がPERSON、ORG、PRODUCTエンティティをタグ付けし、それぞれ Person、Project、Tool に対応付けます。 - 概念抽出 — チャンク内に 2 回以上登場する複数トークンの名詞句を Concept エンティティにします。LLM も API 呼び出しも必要ありません。
- 共起関係 — 同じチャンク内で見つかった 2 つのエンティティの間に
related_to関係を作成します。エッジの重みは、チャンク間での共起回数に応じて増加します。 - スペースごとの重複排除 — エンティティは
(lower(name), type, space)によって重複排除されるため、無関係なプロジェクトをまたいで統合されることなく、同じスペース内では同じエンティティが 1 つのノードになります。
パイプライン全体は取り込み時に同期的に実行され、埋め込み処理と同じ CPU を使用します。追加のサービスも外部 API の利用料も必要ありません。
こうしたトレードオフは意図的なものです。spaCy と共起を使うことで、高速かつ無料で、LLM のコストをかけずに有用なグラフの 80% を実現できます。正直なところ残る制約については、以下の制限事項セクションに記載しています。
パフォーマンスの調整
Memory Vault では、同梱の docker-compose.yml で maintenance_work_mem = 1 GB がデフォルトに設定されています。PostgreSQL の標準のデフォルトは 64 MB です。そのため、コーパスが数千チャンクを超えると、pgvector の HNSW インデックスの構築に非常に時間がかかります。
RAM が 16 GB 以上のホストで実行している場合は、これを 2 GB に増やすと、デメリットなくインデックスの再構築が目に見えて速くなります。docker-compose.yml の command: ブロックを編集してください。
db:
image: pgvector/pgvector:pg16
command:
- postgres
- -c
- maintenance_work_mem=2GB
小型のマシン(合計 RAM が 4 GB 以下の VPS など)で実行している場合は、システムに余裕を持たせるため、256 MB に下げることをおすすめします。Memory Vault は標準のデフォルトである 64 MB でも動作しますが、大規模なインデックスの再構築には時間がかかります。
制限事項
v1.0 の制限事項(正直に)
- 英語のみの NER。
en_core_web_smは英語で学習されているため、英語以外のテキストから有用なエンティティをほとんど抽出できません。ハイブリッド検索とチャットはどの言語でも問題なく動作します。自動抽出されるナレッジグラフのみ英語に限られます。 - NER は文脈に依存します。 spaCy は周囲の文に基づいて PERSON と ORG を判定します。同じ名前でも、構文上の役割によって Person と Project の両方のエンティティとして登録される場合があります。
- あいまいなエンティティの照合には対応していません。 「PostgreSQL」と「Postgres」は別々のエンティティです。v1.0 ではエイリアスの統合に対応していません。
- 編集時に再抽出されません。 チャンクを忘れた後、修正版を再取り込んだ場合、新しいエンティティは追加されますが、古いエンティティは自動的に削除されません。
- 単一インスタンスです。 複数ユーザー/マルチテナントには対応していません。デプロイごとに 1 つのボルトを使用します。チーム機能は PRO 版の機能です。
- チャットには LM Studio のみ対応しています。 v1.0 では Ollama プロバイダーに対応していません。
PRO 版(予定)
チーム機能、高度な分析、ホスト型プランを提供する予定です。無料のオープンソースコアは今後も無料です。オープンコアであり、見せかけの無料提供ではありません。
FAQ
claude-mem/cognee/Mem0 とは何が違いますか?
スタック内の異なるレイヤーを担います。ファイルシステムベースのツール(claude-mem、claudesidian、obsidian-second-brain)は、Markdown のメモをディスクに保存し、検索時に grep/read を使用します。ボルトが数千件のメモを超えるまでは快適に動作しますが、それを超えると grep が遅くなり、セマンティック検索もできません。Memory Vault は、拡張性を備え、その上に構築できるよう設計されたデータベースベースのメモリレイヤー(Postgres + pgvector + tsvector + RRF)です。フロントエンドに依存しません。MCP、REST、ダッシュボード、独自のアプリのいずれからでも利用でき、どれも同等の第一級クライアントです。
cognee と Mem0 はスタック上ではより近い位置にありますが、クラウドまたは SDK を中心としています。Memory Vault はセルフホスト可能なインフラストラクチャを中心としています。
GPU は必要ですか?
いいえ。デフォルトの埋め込みモデル(all-MiniLM-L6-v2、384-d)とエンティティ抽出(en_core_web_sm)は、どちらも CPU で動作します。ローカル LLM のチャットには、お使いのハードウェアで LM Studio を使用します。RAM が 16 GB の最新マシンであれば、70 億パラメーターのモデルを快適に実行できます。
データはクラウドに送信されますか?
いいえ。Memory Vault はエンドツーエンドでセルフホスト可能です。埋め込みはローカルで実行され(sentence-transformers)、エンティティ抽出もローカルで実行され(spaCy)、チャットにはローカルの LM Studio インスタンスを使用します。テレメトリーも、OpenAI/Anthropic などへの API 呼び出しもありません。データはすべてお使いのマシン上に保持されます。
Claude を使わずに利用できますか?
はい。MCP 統合は 3 つあるインターフェイスのうちの 1 つです。REST API とダッシュボードは単体で動作します。任意のローカル LLM を使ってチャットページを利用するか(LM Studio は多くのオープンウェイトモデルに対応しています)、API を使って独自の AI ツールを構築できます。
NER はどの言語に対応していますか?
v1.0 では英語のみです。デフォルトの spaCy モデルは英語で学習されているため、英語以外のテキストから有用なエンティティをほとんど抽出できません。v1.0 では多言語 NER に対応していません。ハイブリッド検索とチャットはどの言語でも問題なく動作します。自動抽出されるナレッジグラフのみ英語に限られます。
必要なディスク容量と RAM はどれくらいですか?
目安として、ディスク容量は 2 GB(Docker イメージ + Postgres データ + spaCy + 埋め込みモデル)、アイドル時の RAM は 1~2 GB、アクティブに使用する場合は 4 GB 以上を推奨します。同梱の設定では、HNSW インデックスを高速に構築するため maintenance_work_mem=1GB が設定されています。小型の VPS では 256 MB に下げてください。
Memory Vault のインスタンスを複数実行できますか?
はい。各インスタンスは単一の docker compose up で起動します。別々の Compose プロジェクト名(docker compose -p mv-personal up、docker compose -p mv-work up)を使って分離するか、別々のディレクトリにクローンしてください。
今後のアップデートでデータはどうなりますか?
マイグレーションはバージョン管理されており、前方へのみ適用されます。docker compose pull && docker compose up -d を実行すると、起動時に新しいマイグレーションが適用されます。v1.x ではスキーマの変更は追加のみで、マイナーバージョンの更新で破壊的なマイグレーションが行われることはありません。これは v1.x のセマンティックバージョニングに関する約束の一部です。
貢献
Memory Vault は MIT ライセンスで公開されており、PR を歓迎します。以下をご覧ください。
- CONTRIBUTING.md — バグ報告、機能の提案、開発環境のセットアップ、コーディング規約について
- CODE_OF_CONDUCT.md — Contributor Covenant v2.1
- SECURITY.md — 脆弱性の報告方法(
[email protected]にメールしてください。公開の issue は作成しないでください) - docs/threat-model.md — Memory Vault が防御する脅威と対象外の脅威、単一のマシンを超えるデプロイを強化する方法
- バグ報告テンプレート —
memory-vault diagnoseの手順を含みます - 機能リクエストテンプレート — 解決策を提案する前に、問題を明確にしてください
メンテナーは1人のプロジェクトです。時間があるときに PR をレビューします。大規模な機能は、まず issue で相談してください。
ライセンス
コア部分はMIT ライセンスで、永久に無料です。Memory Vault を個人用メモリシステムとして便利にするすべての機能(ハイブリッド検索、MCP 統合、ナレッジグラフ、ダッシュボード、ローカル LLM チャット、Docker セットアップ)は、今後も常に無料かつオープンソースです。
チーム向けおよび高度な機能を備えた PRO ティアを予定しています。
クレジット
- @rivestack — v1.0 に取り入れられた Postgres + pgvector のチューニングに関するヒント(高速な HNSW 構築のための
maintenance_work_mem=1GB)。ほかの提案もリストに入っています。 - ベータテスター — M1-M7 の期間にクローンし、問題を起こし、報告してくださった皆さん
- このプロジェクトの基盤となっているオープンソースの主要プロジェクト — PostgreSQL、pgvector、sentence-transformers、spaCy、FastAPI、FastMCP、React、Cytoscape.js
謝辞
GitHub のコントリビューター一覧では、リポジトリにコードを提供したすべての方を紹介しています。このセクションでは、リリース済みの成果に影響を与えたものの、コミットの作成者としては記録されていない、報告者や診断を行った方々に感謝を伝えます。
- Leonard Janke(lcjanke2020)、OpenAI Codex を通じて GPT-5.6-Sol と協働(@lcj-codex-coder)— v1.0.7〜v1.0.10 の期間に20件を超える issue を報告。バージョンの不整合、MCP の正確性、タイムゾーンの処理、埋め込み次元の検証、ナレッジグラフの論理削除の仕様にわたる内容でした。専門家レベルの診断で、すべての報告に使い捨てデータベースでの再現手順が添えられていました。
- @git-pharos — #74 の診断バンドルにより、v1.0.7 で修正された根本的な問題が3件明らかになりました。
- Rivestack — クエリごとの
ef_search設定と、起動時のベクトルインデックスのウォームアップ。どちらも v1.5.0 でリリースされました。pgvector の運用経験に基づくもので、デモでは問題ないものの、大規模環境では適切でないデフォルト設定を見極める知見です。
セキュリティ報告と正確性に関する指摘には、報告者が指定した形式(要望があればツールのクレジット表記も含む)に従い、必ずハンドル名を記載して謝意を示します。
開発の最新情報をチェック
- ウェブサイト:mihaibuilds.com
- ブログ:mihaibuilds.com/blog
- GitHub:@MihaiBuilds
- X:@mihaibuilds
リポジトリをウォッチして、開発の進捗をチェックしてください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。