Memlord
公式個人利用およびチーム向けのセルフホスト型MCPメモリサーバー
Memlord MCPで何ができますか?
- 種類とタグを指定して記憶を保存 —
store_memoryを使用して、事実、設定、指示、フィードバックを保存します。自動で重複に近い内容を検出します。 - ハイブリッド検索で記憶を検索 —
retrieve_memoryを使用して、BM25全文検索とセマンティックベクトル検索を組み合わせて記憶を見つけます。 - 時間表現で記憶を呼び出す —
recall_memoryを使用して、「先週」や「昨日」のような自然言語の時間クエリで記憶を見つけます。 - 記憶を一覧表示・フィルタリング —
list_memoriesで種類やタグごとに記憶を閲覧したり、search_by_tagでAND/OR論理を使ってタグを組み合わせます。 - 必要に応じて記憶の全内容を取得 — 検索スニペット以上の詳細が必要な場合、
get_memoryで名前を指定して完全な記憶を取得します。 - 記憶の更新、削除、移動 —
update_memoryで内容、タグ、有効期限を変更し、delete_memoryで削除、move_memoryでワークスペース間を移動します。
ドキュメント
個人およびチーム向けセルフホスト型MCPメモリサーバー
クイックスタート • 仕組み • MCPツール • 設定 • 要件 • ライセンス
✨ 機能
- 🔍 ハイブリッド検索 — BM25(全文検索)+ ベクトルKNN(pgvector)を相互ランク融合で統合
- 📂 マルチユーザー — 各ユーザーは自分のメモリのみ参照可能。共有チーム知識用のワークスペース
- 🛠️ 10個のMCPツール — 保存、取得、呼び出し、一覧表示、タグ検索、取得、更新、削除、移動、ワークスペース一覧
- 🌐 Web UI — ブラウザでメモリの閲覧、検索、編集、削除が可能。JSONのエクスポート/インポート
- 🔒 OAuth 2.1 — 完全なインプロセス認可サーバー、常時有効
- 🐘 PostgreSQL — 埋め込みにpgvector、全文検索にtsvectorを使用
- 📊 段階的開示 — 検索はデフォルトでコンパクトなスニペットを返します。必要な場合のみ
get_memory(name)を呼び出し、トークン使用量を削減 - 🔁 重複排除 — 保存前にほぼ同一のメモリを自動検出し、ノイズの蓄積を防止
🆚 Memlordの比較
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| 検索 | BM25 + ベクトル + RRF | ベクトルのみ (Qdrant) | BM25 + ベクトル + RRF | BM25 + ベクトル |
| 埋め込み | ローカルONNX、ゼロ設定 | OpenAIデフォルト; Ollamaオプション | ローカルONNX、ゼロ設定 | ローカルFastEmbed |
| ストレージ | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + Markdownファイル |
| マルチユーザー | ✅ | ❌ 実質シングルユーザー | ⚠️ エージェントIDスコープ、分離なし | ❌ |
| ワークスペース | ✅ 共有 + 個人、招待リンク | ⚠️ 「アプリ」名前空間 | ⚠️ タグ + conversation_id | ✅ プロジェクト単位フラグ |
| 認証 | ✅ OAuth 2.1 | ❌ なし (セルフホスト) | ✅ OAuth 2.0 + PKCE | ❌ |
| Web UI | ✅ 閲覧、編集、エクスポート | ✅ Next.jsダッシュボード | ✅ リッチUI、グラフ可視化、品質スコア | ❌ ローカル; クラウドのみ |
| MCPツール | 10 | 5 | 15+ | ~20 |
| セルフホスト | ✅ 単一プロセス | ✅ Docker (3コンテナ) | ✅ | ✅ |
| メモリ入力 | 手動 (明示的保存) | LLMによる自動抽出 | 手動 | 手動 (Markdownノート) |
| メモリタイプ | 事実 / 好み / 指示 / フィードバック | 自動抽出された事実 | — | 観測 + wikiリンク |
| 時間認識検索 | ✅ 自然言語の日付 | ⚠️ RESTのみ、MCPツールでは非対応 | — | ✅ recent_activity |
| トークン効率 | ✅ 段階的開示 | ❌ | — | ✅ build_contextトラバーサル |
| インポート / エクスポート | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (人間可読) |
| ライセンス | AGPL-3.0 / 商用 | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
競合製品が真に優れている点:
- OpenMemory — 生の会話テキストからメモリを自動抽出。手動で保存内容を決める必要なし。優れたインポート/エクスポート
- mcp-memory-service — よりリッチなWeb UI(グラフ可視化、品質スコアリング、8タブ)。より寛容なライセンス(Apache 2.0)。複数のトランスポートオプション(stdio、SSE、HTTP)
- basic-memory — メモリは人間が読めるMarkdownファイルで、サーバーなしで編集、バージョン管理、閲覧が可能。Wikiスタイルのエンティティリンクがローカルナレッジグラフを形成。約20のMCPツール
Memlordを選ぶべきケース:
- ゼロ設定のローカル埋め込みが必要 — ONNXモデルがサーバーに同梱され、Ollamaや外部API不要
- 適切なOAuth 2.1認証と招待ベースのワークスペースを備えたマルチユーザーチームサーバーを運用
- 単一マシンのSQLiteを超えてスケールする本番グレードのデータベース(PostgreSQL)が必要
- メモリを明示的に管理 — LLMが抽出するもの全てではなく、重要なものを型付け・タグ付けして正確に保存
- クラウドサブスクリプションなしで、完全なCRUDとJSONエクスポートを備えたセルフホストWeb UIが必要
🚀 クイックスタート
🐳 Docker
cp .env.example .env
docker compose up
HTTPサーバー (マルチユーザー、Web UI、OAuth)
# Install dependencies
uv sync --dev
# Download ONNX model (~23 MB)
uv run python scripts/download_model.py
# Run migrations
alembic upgrade head
# Start the server
memlord
Web UIは http://localhost:8000 を開いてください。MCPエンドポイントは /mcp です。
🔍 仕組み
各検索リクエストはBM25とベクトルKNNを並列実行し、相互ランク融合で結果を統合します:
flowchart TD
Q([query]) --> BM25["BM25\nsearch_vector @@ websearch_to_tsquery"]
Q --> EMB["ONNX embed\nall-MiniLM-L6-v2 · 384d · local"]
EMB --> KNN["KNN\nembedding <=> query_vector\ncosine distance"]
BM25 --> RRF["RRF fusion\nscore = 1/(k+rank_bm25) + 1/(k+rank_vec)\nk=60"]
KNN --> RRF
RRF --> R([top-N results])
⚙️ 設定
すべての設定は MEMLORD_ プレフィックスを使用します。完全なリストは.env.exampleを参照してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | PostgreSQL接続URL |
MEMLORD_PORT | 8000 | サーバーポート |
MEMLORD_BASE_URL | http://localhost:8000 | OAuth用公開URL (HTTPモード) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | JWT署名シークレット (HTTPモード) |
デプロイ前に MEMLORD_BASE_URL を公開URLに設定し、MEMLORD_OAUTH_JWT_SECRET を変更してください。
🛠️ MCPツール
| ツール | 説明 |
|---|---|
store_memory | メモリを保存(内容による冪等性)。ほぼ重複する場合は例外発生。オプションの expires_at |
retrieve_memory | ハイブリッドセマンティック + 全文検索。デフォルトでスニペットを返します |
recall_memory | 自然言語の時間表現で検索。デフォルトでスニペットを返します |
list_memories | タイプ/タグフィルター付きページネーション一覧 |
search_by_tag | AND/ORタグ検索 |
get_memory | 名前で単一メモリを取得(全内容) |
update_memory | 名前で内容、タイプ、タグ、メタデータ、有効期限を更新(およびオプションで名前変更) |
delete_memory | 名前で削除 |
move_memory | メモリを別のワークスペースに移動 |
list_workspaces | 所属するワークスペースを一覧表示(個人用を含む) |
ワークスペース管理(作成、招待、参加、退出)はWeb UIで処理されます。
💻 システム要件
- Python 3.12
- PostgreSQL ≥ 15、pgvector拡張機能付き
- uv — Pythonパッケージマネージャー
👨💻 開発
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 ライセンス
Memlordはデュアルライセンスです:
- AGPL-3.0 — オープンソース利用は無料。修正版をネットワークサービスとして実行する場合、ソースコードの公開が必要です。
- 商用ライセンス — プロプライエタリまたはクローズドソースのデプロイメント向け。購入は sergey@memlord.com または dmitry@memlord.com までご連絡ください。