Local Memory について
Local Memoryは、会話をまたいで学びや決定、エンティティ情報を保持したいClaude、Cursor、Codex向けのローカル永続メモリMCPサーバーです。単一のSQLiteファイルに保存し、BM25とローカルベクトル検索を組み合わせます。クラウドやAPIキーは不要です。
主な機能
- 01SQLiteによるローカル永続メモリ
- 02BM25とベクトルのハイブリッド検索
- 03エンティティ知識グラフと重複検出
- 04時点指定クエリと事実の置き換え
- 05矛盾検出とメモリの振り返り
活用シーン
- 01新しい会話で以前の作業状況を復元
- 02保存した学びや事実を多言語検索
- 03時間経過によるエンティティ情報の追跡
MCP 対応
記憶の保存と検索、エンティティ観察、ライフサイクル管理のMCPツールを提供します。READMEではClaude、Cursor、CodexなどのMCPクライアント向けに25個のツールが説明されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @studiomeyer/local-memory-mcpMEMORY_DB_PATHCustom path for the SQLite database fileMEMORY_EMBED_DISABLEDDisable the local embedding pipeline (forces FTS5-only search). Useful in restricted networks where the model can't be downloaded.MEMORY_EMBED_MODELOverride the embedding model id (defaults to Xenova/multilingual-e5-small).MEMORY_EMBED_CACHE_DIROverride the Transformers.js cache directory (defaults to the OS data dir).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
StudioMeyer MCP Stack の一部 — マヨルカで開発 🌴 · ご利用の際は ⭐ をお願いします
local-memory-mcp
Claude、Cursor、Codex 向けの永続的なローカルメモリー。25 個のツール。ハイブリッド検索(BM25 + ベクトルコサイン、RRF)。双時間 asOf クエリ + 事実の置き換え。LLM を使わない矛盾検出 + 振り返り。持ち運び可能な JSON のエクスポート/インポート。多言語対応の埋め込み。クラウド不使用。API キー不要。
チャットを閉じると、AI アシスタントはすべてを忘れてしまいます。このツールがそれを解決します。
学び、決定、人、プロジェクトを、コンピューターから外に出ることのない、マシン上の単一の SQLite ファイルに保存します。組み込みのナレッジグラフ、重複検出、FTS5 キーワード検索に加え、v2 の新機能として、BM25 とデバイス上で実行するベクトルコサインを Reciprocal Rank Fusion で統合するハイブリッド検索を備えています。埋め込みモデルは多言語(DE/EN/ES/100 以上の言語)に対応し、ローカルで動作します。API キーもクラウドも不要です。
📄 詳しい説明: WHITEPAPER.md — アーキテクチャ、設計原則、ローカルファーストの方針、他のメモリーシステムとの率直な比較をご覧ください。
danieleugenewilliams/local-memory-releasesとは無関係です — 同じ説明的な名前を持つ、別の「Local Memory」プロジェクトです。このパッケージは@studiomeyer/local-memory-mcpとして公開されています。区別のため、必ずスコープ付きの名前を使用してください。
私たちからひと言
私たちはこの 2 年間、自分たちのためにツールやシステムを作ってきました。このリポジトリが小さく、スターが少ないのは、新しいからではありません。作ってきたものを公開しようと決めたのが、つい最近だからです。これは新しい実験ではなく、最近のコミットに至るまで長く続いてきた取り組みです。
ものづくりと共有が大好きです。一方で、ソーシャルメディアの戦術やグロースハック、スターやフォロワー集めには関心がありません。だからこのリポジトリは小さいのです。コードは実際に使われており、イシューには回答しています。ぜひご自身で判断してください。
役に立ったなら、共有やテスト、フィードバックで応援していただけるとうれしいです。改善点があれば、イシューの作成が何より役立ちます。このツールを使って何か作ったら、[email protected] までお知らせください。本当にうれしいです。
マヨルカ島パルマの小さなスタジオより。
クイックスタート
Claude Code
claude mcp add memory -- npx -y @studiomeyer/local-memory-mcp
Claude Desktop
Node.js 22 をインストールした状態で、以下を claude_desktop_config.json に追加してください。公開済みの npm パッケージを使用します。
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@studiomeyer/local-memory-mcp"]
}
}
}
Cursor / VS Code
.cursor/mcp.json または .vscode/mcp.json に追加してください。
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@studiomeyer/local-memory-mcp"]
}
}
}
Codex
# ~/.codex/config.toml
[mcp_servers.memory]
command = "npx"
args = ["-y", "@studiomeyer/local-memory-mcp"]
セッション追跡の自動化
セッション追跡を完全に自動化すれば、意識する必要がなくなります。
Claude Code(CLAUDE.md): プロジェクトの CLAUDE.md に次の行を追加します。
Always call memory_session_start at the beginning of each conversation and memory_session_end when done.
Claude Code(Hook): システム全体で設定するには、~/.claude/settings.json に SessionStart フックを追加します。
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"SessionStart\",\"additionalContext\":\"Call memory_session_start now.\"}}'",
"timeout": 5
}]
}]
}
}
どちらの方法でも、Claude が memory_session_start を自動的に呼び出すようになります。CLAUDE.md を使う方法はより簡単で、フックを使う方法はすべてのプロジェクトで機能します。
その仕組み
会話を開始すると、サーバーが直近のセッションからコンテキストを読み込み、AI が取り組んでいた内容を把握できるようにします。
会話中、AI は memory_learn を通じてパターン、知見、間違いを保存します。また、memory_entity_observe を通じて人物、プロジェクト、ツールに関する事実を記録し、時間をかけてナレッジグラフを構築します。保存されたすべての行は、multilingual-e5-small モデルを使ってローカルの 384 次元ベクトルにも埋め込まれます。
検索時には、統合された memory_search がハイブリッド検索を実行します。BM25 ランキングを用いた FTS5 と、ベクトルのコサイン類似度を Reciprocal Rank Fusion(RRF、k=60)で統合します。これにより、語彙の不一致(「send」で「publish」が見つかるなど)を補い、DE/EN/ES/100 以上の言語に対応し、保存された内容とクエリでトークンが完全に一致しない場合でも結果を見つけられます。お使いの環境でベクトル拡張機能を読み込めない場合、検索は自動的に FTS5 のみへ切り替わるため、機能が壊れることはありません。ただし、セマンティック検索の部分は利用できなくなります。
重複を防ぐ仕組みにより、同じ情報を二重に保存することも引き続き防止されます。
ハイブリッド検索(v2.0.0 以降)
memory_search({ query: "...", mode: "hybrid" }) // default
memory_search({ query: "...", mode: "fts" }) // keyword only
memory_search({ query: "...", mode: "vector" }) // cosine only
アーキテクチャ
search_fts(FTS5、BM25)— キーワード検索。v1 の方式です。embeddings(sqlite-vecのvec0仮想テーブル、float[384])— ベクトル検索。mode: "hybrid"の場合、Reciprocal Rank Fusion(k=60)で両方を統合します。- 埋め込みには Transformers.js 経由で
Xenova/multilingual-e5-small(Apache-2.0)を使用し、q8 量子化されています(キャッシュは約 30 MB)。モデルは最初の埋め込み呼び出し時に遅延読み込みされ、CPU のみで動作します。 - 挿入時の自動埋め込みは、学習内容、決定事項、エンティティの観察内容を対象とします。エンティティ自体は埋め込まれません。エンティティに関連付けられた観察内容が、セマンティック検索の対象になります。
多言語対応。 デフォルトモデルは 100 以上の言語で学習されており、DE/EN/ES の検索に強く対応しています。保存データに複数の言語が混在していても問題ありません。ある言語でクエリを入力すると、コサイン類似度検索の部分で別の言語の関連結果も見つかります。
環境変数による上書き
MEMORY_EMBED_DISABLED=1— FTS5 のみを強制します(エアギャップ環境や企業プロキシ経由のネットワークなど)。MEMORY_EMBED_MODEL=...— 別の Transformers.js 特徴抽出モデルに切り替えます。MEMORY_EMBED_CACHE_DIR=...— Transformers.js のキャッシュ場所を変更します。MEMORY_EMBED_DTYPE=fp32|fp16|q8|q4— モデルの量子化方式を指定します(デフォルトはq8)。
ライフサイクルと振り返り(v2.1.0 以降)
v2.1 では、「事実を保存する」ことと「記憶を長期的に管理する」ことの間にあった隔たりを埋めています。スキーマには v1 から archived、lifecycle_state、valid_from、valid_to が含まれていましたが、これらを公開するツールはありませんでした。今回、4 つのツールで扱えるようになりました。
双時点 asOf —「日付 X 時点で何を知っていたか?」
memory_entity_open({ id: "...", asOf: "2026-04-15" })
エンティティと、2026-04-15 を有効期間に含む観測セットを返します。フィルターは valid_from <= asOf AND (valid_to IS NULL OR valid_to > asOf) です。SQLite の datetime() が認識する形式ならどれでも受け付けます。ISO 8601(2026-04-15T00:00:00Z)、SQLite 形式(2026-04-15 00:00:00)、日付のみ(2026-04-15)に対応しています。asOf を指定しない場合は、従来のライブビュー(valid_to IS NULL のすべての観測)が返されます。
設計上の選択 — 完全な双時点ではなく、有効時点のみ。 SQL:2011、XTDB、Datomic は、2 軸の双時点(有効時点 × トランザクション時点)を提供しています。ここでは有効時点のみを扱います。トランザクション時点は created_at に受動的に記録されますが、独立した軸としてはクエリできません。ローカル AI メモリ製品で問われるのは「日付 Y 時点で、AI は X について何を 知っていたか」であり、これは有効時点の話です。完全な双時点が重要になるのは、規制対象の監査証跡(保険、銀行など)の場合です。必要であれば XTDB をご利用ください。
スケールに関する注意。 asOf の述語は、形式の違いに強い比較を行うために valid_from を SQLite の datetime() でラップします。そのため、クエリプランナーはこの列のインデックスを直接使用できません。エンティティあたりの観測数が 1000 件未満(一般的なケース)なら、スキャンは 1 ミリ秒未満です。1 万件を超える観測を持つエンティティがある場合は、式インデックス CREATE INDEX idx_obs_valid_from_dt ON entity_observations(datetime(valid_from)) を追加してください。これにより、述語は再びインデックスを利用できるようになります。
矛盾スキャナー — LLM 不使用
memory_contradictions({ minCosine: 0.75, minConfidenceDrift: 0.2 })
memory_contradictions({ entityId: "...", limit: 20 })
意味的に非常に近い(コサイン類似度が minCosine を超える)ものの、次のいずれかで食い違う観測ペアを見つけます。
- 否定マーカーの XOR — 片方が肯定し、もう片方が否定しています(正規表現は EN / DE / ES / カタルーニャ語に対応)。
- 確信度のずれ — 表面的には同じ主張ですが、
confidenceの値が大きく異なります。
意図的に LLM を使用しません。API キー不要という約束を守るためです。このヒューリスティックは保守的であり、判断は AI クライアントが行います。単なる重複(否定も確信度のずれもないもの)はフラグ付けされません。コサインの計算は SQL の vec_distance_cosine で実行するため、拡張機能がロードされている必要があります。拡張機能がロードされていないプラットフォームでは、ツールは暗黙に機能を劣化させるのではなく、明確なメッセージとともに VECTOR_DISABLED を返します。
調整。 デフォルトの minCosine = 0.75 は、2026 年の検索チューニングに関する文献(Arguana の SparseCL、Milvus のしきい値チューニングガイダンス)に基づいています。これらの文献では、0.7 未満で誤検出が急増するとされています。再現率を重視する用途では 0.6 に下げ、適合率を重視する用途では 0.85 に上げてください。否定の正規表現は、multilingual-e5-small が特に得意とする 7 言語、すなわち EN / DE / ES / カタルーニャ語 / ポルトガル語 / イタリア語 / フランス語に対応しています。
Supersede — 古い事実を無効化する(v2.2)
memory_observation_supersede({ observationId: "..." })
memory_observation_supersede({ observationId: "...", supersededById: "..." })
スキャナーは古くなった事実を 見つけ、memory_observation_supersede はそれに 対処 します。古い観測の valid_to を設定(トゥームストーン化)して、その事実がライブの memory_search と memory_entity_open に表示されないようにします。ただし行はデータベースに残るため、asOf クエリではカットオフ以前に有効だった信念として引き続き返されます。これは Zep の事実の置き換えパターンです。無効化はしますが、削除はしません。supersededById を渡すと、新しい事実の valid_from がカットオフになります(古い事実は、新しい事実が記録される直前まで真でした)。明示的な時点を指定するには validTo を渡し、どちらも渡さない場合は現在の時点が使われます。同じエンティティかどうかの確認と、自身を置き換える操作の防止によって処理の整合性を保ち、2 回目の呼び出しは冪等です(already_superseded)。
アーカイブと更新 — 学びのライフサイクル
memory_learn_archive({ learningId: "...", reason: "wrong" })
memory_learn_update({ learningId: "...", content: "…", confidence: 0.9 })
archive はソフト削除です。行は learnings に残り(archived = 1、archived_at、lifecycle_state = 'archived' | 'archived:<reason>' が設定されます)、埋め込みは vec0 に残るため、asOf 形式の相互参照は引き続き解決できます。一方、recall/search/重複チェックではすべて除外されます。冪等です。
update はアーカイブされていない学びを編集します。content が変更された場合は、F4 のアトミックパターンで再埋め込みを行います(トランザクションの外で計算し、1 回の同期 db.transaction() 内で書き込みます)。埋め込みの書き込みに失敗した場合や vec が無効な場合は、古くなった既存の埋め込みを削除し、ライブテキストを表さなくなったベクトルがコサイン検索に表示されないようにします。usage_count を増やし、last_used を設定するため、編集も利用としてカウントされます。
トレードオフ — 監査証跡なし。 update は以前の内容を上書きします。古いテキストはどこにも保持されません。これによりスキーマをシンプルに保てます。将来のバージョンでは、特定時点への復元が必要なユーザー向けに memory_learn_history と不変の learnings_history テーブルを追加する可能性があります。現在監査証跡が必要な場合は、古い学びに memory_learn_archive(reason: "wrong") を実行し、新しい学びを新しい行として memory_learn で登録してください。古いテキストはアーカイブされた行に残ります。
リフレクション — 今、重要なこと
memory_reflect({ lookbackDays: 7, staleThresholdDays: 30 })
最近のメモリーストリームを集約する処理です。Stanford Generative Agents のリフレクションステップから LLM を除いたものです。構造化ペイロードと、次の内容を含む Markdown の要約を返します。
- 最もよく使われた学び — ルックバック期間内に利用されたものを
usage_countの上位 N 件で表示します。 - 古くなった学び —
staleThresholdDays日より前に作成され、一度も呼び出されていないものです。アーカイブ候補です。 - 注目されているエンティティ — ルックバック期間内に新たに観察されたものを上位 N 件で表示します。
- 未解決の決定事項 — ルックバック期間より前のもので、
verified = 0の項目です。フォローアップ候補です。
Markdown はセッション開始時に LLM が読み取るためのものです。構造化フィールドは、再解析せずに処理を行いたい後続の自動化(Claude Code Hook、n8n ワークフロー)向けです。project を渡すと、1 つのプロジェクトに対象を絞れます。
フックによるスリープタイム。 Letta/Zep/Mem0 はバックグラウンドの「スリープタイム」ループでリフレクションを実行します。こちらはステートレスな stdio デーモンのためオンデマンドで実行しますが、memory_reflect を呼び出す Claude Code SessionStart または SessionEnd フック(あるいは n8n の cron、crontab エントリー)を設定すれば、追加のインフラなしでスリープタイムの動作を実現できます。要約は memory_session_start のスナップショットと同時に LLM のコンテキストに取り込まれます。新たなインフラは不要です。
ツール(25)
セッション
memory_session_start -- すべての会話で最初に呼び出します。直近 3 回のセッション(要約、最近の学び)からコンテキストを読み込み、AI が取り組んでいた内容を把握できるようにします。オプションの project パラメーターを使うと、プロジェクトごとにセッションの対象を絞れます。
memory_session_end -- 終了時に呼び出して要約を保存します。達成したことを説明する summary 文字列を渡します。次のセッションでこれが自動的に読み込まれます。引数を指定しない場合は、アクティブなセッションを終了します。
学習内容
memory_learn -- 中核となるツールです。カテゴリと内容を指定して、知識を保存します。カテゴリ:pattern(繰り返し成功したこと)、mistake(うまくいかなかったこと)、insight(戦略的な気づき)、research(外部の知識)、architecture、infrastructure、tool、workflow、performance、security。重複チェック機能により、同一の内容がすでに保存されているかどうかが確認されます。保存済みの場合は重複を作成せず、使用回数を増やします。新しいエントリを追加する代わりに既存のエントリを拡張するには、その ID を指定して memory_learn_update を使用します。任意項目:tags、confidence(0~1)、project、memoryType(episodic または semantic。省略時は自動分類されます)。
memory_recall -- 学習内容のみを対象とする簡易検索です。キーワード検索には query 文字列を渡し、最新の学習内容を取得するには省略します。「X について何を学んだか」といった質問に適しています。返される結果の件数は limit で指定します(既定値は 10)。
memory_search -- 学習内容、決定事項、エンティティ、観察事項を対象とする統合検索です。bm25 ランキングを使用する FTS5 を利用します。複数語のクエリは、いずれかの語に一致し、関連度順に表示されます。types 配列を使用して絞り込めます(例:["learning", "decision"])。最も幅広い検索ツールです。
memory_learn_archive (v2.1+) -- 学習内容を論理削除します。行は DB に残るため、それを参照する asOf クエリは引き続き解決されますが、検索やリコールには再表示されません。任意の reason は lifecycle_state に archived:<reason> として保存されます。冪等性があり、2 回呼び出すと already_archived が返されます。
memory_learn_update (v2.1+) -- 有効な学習内容を編集します(content/confidence/tags)。少なくとも 1 つのフィールドが必要です。編集も変更として記録されるため、usage_count と last_used が更新されます。content が変更された場合は、原子的に再埋め込みします(F4 パターン:トランザクションの外で計算し、1 つの同期 db.transaction() 内で書き込みます)。アーカイブ済みの学習内容の編集は code: 'ARCHIVED' で拒否されます。
memory_learn_bulk (v2.2+) -- 1 回のアトミックな呼び出しで最大 500 件の学習内容を一括挿入します。各項目には memory_learn と同じフィールドを指定します。完全一致する重複のみをチェックするため(あいまいなマージは行いません)、挿入するかスキップするかの結果は決定的です。バッチ内で内容が重複する場合は、最初の項目に集約されます。新しい内容のみを、モデルのフォワードパス 1 回でまとめて埋め込みます。バックアップの復元、新しい DB へのデータ登録、別のシステムからの移行に使用できます。
recall と search の使い分け: 学習内容だけを探す場合は recall を使用します。エンティティや決定事項を含め、すべての種類から検索する場合は search を使用します。
決定事項
memory_decide -- 構造化されたコンテキストとともに決定事項を記録します。パラメーター:title(何を決定したか)、decision(選択した内容)、reasoning(その理由)、alternatives(ほかに検討した選択肢)。任意項目:confidence、project、tags。数か月後に過去の決定を振り返り、選択の理由を理解するのに役立ちます。
ナレッジグラフ
memory_entity_observe -- 人、プロジェクト、企業、ツール、その他あらゆるエンティティに関する事実を記録します。エンティティがまだ存在しない場合は、自動的に作成されます。パラメーター:entityName、entityType(person、project、company、tool、concept など)、content(事実)。観察結果は双時間性を備えているため、履歴を失うことなく、時間の経過に応じて置き換えることができます。
memory_entity_search -- エンティティ名とその観察結果を対象にファジー検索を行います。「claude ai」で検索しても「Claude」が見つかります。結果を絞り込むには、任意のentityTypeフィルターを指定します。
memory_entity_open -- エンティティ自体、現在の観察結果すべて、他のエンティティとの関係すべてを含む、エンティティの全体像を読み込みます。nameまたはidで検索します。v2.1:任意のasOfパラメーターを指定すると、双時間性に基づく特定時点の情報を表示できます。「日付 X の時点で、このエンティティについて何を知っていたか?」を確認できます。
memory_entity_relate -- 2 つのエンティティ間に、型付きの有向エッジを作成します。パラメーター:fromEntityId、toEntityId、relationType(例:「works_at」、「uses」、「created」、「depends_on」)。任意のweight(0~1)を指定できます。エンティティ間のつながりをグラフとして構築します。
memory_contradictions (v2.1+) -- 否定マーカーまたは確信度が食い違う一方で、コサイン類似度が高い観察結果のペアを抽出する、LLM を使用しないスキャナーです。候補の判定は AI クライアント(Claude / Cursor)が行います。任意のスコープ:entityId、またはentityName + entityType。調整項目:minCosine(デフォルト 0.75)、minConfidenceDrift(デフォルト 0.2)、limit(デフォルト 20)。sqlite-vecが必要です。読み込まれていない場合はVECTOR_DISABLEDを返します。
memory_observation_supersede (v2.2+) -- memory_contradictionsの実行処理として、valid_to(トゥームストーン)を設定し、古くなった観察結果を無効にします。行は DB に残るため、asOfクエリでは引き続き表示されますが、通常のmemory_searchとmemory_entity_openの結果からは除外されます。supersededByIdを渡すと、新しい事実のvalid_fromを終了時点として設定します(Zep の事実置換)。明示的な時点を指定するにはvalidToを渡します。どちらも指定しない場合はnow()が使われます。同一エンティティの確認と自己置換の防止を行い、冪等です。
推奨されるエンティティタイプ: person、project、company、tool、concept、service、team。ドメインに合ったタイプを自由に使用してください。
振り返り
memory_reflect (v2.1+) -- 最近のメモリーストリームを集約します。構造化データと、次の内容をまとめた Markdown の要約を返します:最もよく使われた学び(振り返り期間内のusage_count上位 N 件)、古くなった学び(staleThresholdDaysより前に作成され、一度も呼び出されていないもの)、注目度の高いエンティティ(振り返り期間内の新しい観察結果が多い上位 N 件)、未決の判断(verified = 0で、振り返り期間より前のもの)。LLM を使用しません。API 呼び出しを除いた、Stanford Generative Agents の振り返りステップです。デフォルト値:lookbackDays: 7、staleThresholdDays: 30、limit: 5。任意でprojectフィルターを指定できます。
memory_insights -- 概要統計:メモリーの日数、セッション数、学び、判断、エンティティの合計。カテゴリ別およびエンティティタイプ別の内訳も表示します。「Claude は私について何を知っているか」を確認するのに便利です。任意でprojectフィルターを指定できます。
memory_profile -- 個人情報をローカルに保存します。setで項目(名前、役割、好み、言語、タイムゾーン)を保存し、getで取得します。AI はセッション開始時にこれを読み込み、応答をパーソナライズできます。
memory_guide -- 組み込みのヘルプです。トピック:quickstart(始め方)、session(セッションのワークフロー)、search(検索の仕組み)、entities(ナレッジグラフの説明)、learn(学びのカテゴリ)、privacy(データの保存場所と収集内容)。
ポータビリティ (v2.2以降)
memory_export -- メモリ全体(学習内容、決定事項、エンティティ、観察事項、関係、セッション、プロフィール、目標)を、バージョン付きの camelCase JSON エンベロープ(format: "studiomeyer-memory-export"、version: 1)にダンプします。埋め込みはエクスポートされません。インポート時に再生成されるため、ファイルは小さく、特定のモデルに依存しません。フラグ:includeSessions(既定値は true)、includeArchived(既定値は true)。データの所有者はあなたです。データはもともと単一の SQLite ファイルに保存されており、今ではポータブルなドキュメントとしても扱えます。
memory_import -- memory_export エンベロープ({ data: <envelope> })を取り込みます。純粋に追加のみで、冪等です。すべての書き込みでソース ID に対して INSERT OR IGNORE を実行するため、同じファイルを再インポートしても何も起こらず、既存の行が上書きされることもありません。外部キーを安全に処理できる順序で取り込み、参照先のない項目はスキップします(スキップ数はカウントされ、例外は発生しません)。その場で埋め込みを再生成します。設計上、replace モードはありません。ローカルストアを消去するには、memory.sqlite を削除してください。同じエンベロープはホスト型の StudioMeyer Memory プランにもインポートできるため、1 台のマシンでは足りなくなったときに利用を始められます。
ヒント
- セッションと学習内容から始めましょう。 最初に
memory_session_startを呼び、重要なことがあったときにmemory_learnを呼ぶだけで、価値の 80%をすでに得られます。 - 人やプロジェクトにはエンティティを使いましょう。 同僚、クライアント、プロジェクトについて繰り返し話題にするときは、エンティティを作成しましょう。時間がたつにつれて、AI がたどれるナレッジグラフが構築されます。
- 決定事項は過小評価されがちです。 3 か月後には、なぜそのプロジェクトで SQLite ではなく Postgres を選んだのか、思い出せないでしょう。
memory_decideでその理由を記録できます。 - AI に任せましょう。 ツールが使えるようになると、AI は自然にツールを使い始めます。手動でツールを呼び出す必要はありません。「これを覚えて」と言えば
memory_learnを呼び出します。「Sarah について何を知っている?」と言えばmemory_entity_searchを呼び出します。 - SQLite ファイルをバックアップしましょう。 単一のファイルです。USB ドライブや Dropbox などにコピーしてください。SQLite ブラウザーで開けば、AI が学習した内容を確認することもできます。
機能
- ナレッジグラフ -- 単なる平文テキストではありません。エンティティ、二時点観察事項、型付きの関係を扱います。
- 重複ガード -- FTS5 による類似性チェックで、同じ内容を二重に保存するのを防ぎます。代わりに使用回数を増やします。
- セッションコンテキスト -- 起動時に直近 3 件のセッションを自動読み込みします。AI は前回の続きから作業できます。
- 決定事項の追跡 -- 理由や代替案とともに決定事項を記録します。メモリサーバーとしては独自の機能です。
- 全文検索 -- FTS5 と bm25 ランキングを使い、学習内容、決定事項、エンティティ、観察事項を検索します。
- 単一の SQLite ファイル -- ファイルは 1 つだけで、持ち運びやバックアップ、削除が可能です。同時アクセスには WAL モードを使用します。
- 設定不要 --
npxを実行するだけです。Docker、Postgres、Redis、API キーは不要です。
データの保存場所
すべてのデータは 1 つの SQLite ファイルに保存されます。バックアップ、移動、削除は自由です。データはあなたのものです。
| OS | パス |
|---|---|
| macOS | ~/Library/Application Support/local-memory-mcp/memory.sqlite |
| Linux | ~/.local/share/local-memory-mcp/memory.sqlite |
| Windows | %APPDATA%\local-memory-mcp\memory.sqlite |
上書きする場合:MEMORY_DB_PATH=/your/preferred/path.sqlite
プライバシー
- あなたのデータがマシンの外に出ることはありません
- テレメトリ、外部への自動通信、アナリティクスはありません
- アカウントも API キーも不要です
- オープンソースです。すべてのコードを読むことができます
比較
| 機能 | local-memory-mcp | Penfield | Official MCP Memory | MemPalace | Mem0 | Zep | Letta | AutoMem |
|---|---|---|---|---|---|---|---|---|
| ローカルファースト | はい | はい | はい | はい | いいえ(クラウド) | いいえ(クラウド) | 一部対応 | はい |
| ハイブリッド検索(BM25 + ベクトル) | はい(RRF) | はい | いいえ | いいえ | ベクトルのみ | ベクトルのみ | ベクトル + グラフ | ベクトル + グラフ |
| 多言語対応の埋め込み | はい(e5-small、DE/EN/ES + さらに100言語) | 不明 | いいえ | 不明 | 英語寄り | 英語寄り | 混在 | 混在 |
| ナレッジグラフ | はい(エンティティ + 関係) | はい | はい(トリプル) | いいえ | 有料プラン | はい | はい | はい(FalkorDB) |
| 双時間的事実 | はい(スキーマ) | 不明 | いいえ | いいえ | はい | はい | 一部対応 | 不明 |
| 重複ガード | はい(FTS5 + 類似度) | いいえ | いいえ | いいえ | 不明 | 不明 | 不明 | 不明 |
| 意思決定の追跡 | はい(独自機能) | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| セッションコンテキスト | はい(自動読み込み) | はい | いいえ | いいえ | いいえ | いいえ | はい | はい |
| ツール | 25 | 17 | 5 | 29 | API | API | API | API |
| 双時間的 asOf | はい(v2.1) | 不明 | いいえ | いいえ | はい | はい | 一部対応 | 不明 |
| 矛盾スキャナー | はい(v2.1、LLM 不要) | いいえ | いいえ | いいえ | LLM 駆動 | LLM 駆動 | いいえ | いいえ |
| 事実の置き換え | はい(v2.2、asOf を保持) | いいえ | いいえ | いいえ | LLM 駆動 | はい | 一部対応 | 不明 |
| 振り返り / 統合 | はい(v2.1、LLM 不要) | いいえ | いいえ | いいえ | LLM 駆動 | はい(スリープタイム) | はい(スリープタイム) | いいえ |
| ポータブルなエクスポート / インポート | はい(v2.2、JSON エンベロープ) | 不明 | いいえ | いいえ | API | API | .af file | 不明 |
| 言語 | TypeScript | TypeScript | TypeScript | Python | Python | Python | Python | Python |
| ストレージ | SQLite + sqlite-vec | SQLite | JSON file | ChromaDB | クラウド | クラウド | 各種 | FalkorDB + Qdrant |
| API キーが必要 | いいえ | いいえ | いいえ | いいえ | はい(クラウド) | はい(クラウド) | 任意 | 任意 |
| インストール | npx または .mcpb | npx | npx | pip + venv | サインアップ | サインアップ | pip / Docker | pip / Docker |
| マルチプラットフォームバンドル | はい(4 OS) | いいえ | いいえ | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
| 価格 | 永久無料 | 無料 | 無料 | 無料 | $0-249/mo | $0-499/mo | 無料 | 無料 |
際立った特長: ローカルで動作し、MIT ライセンスで、API キー不要のメモリー MCP のうち、多言語対応の埋め込みを使ったハイブリッド検索(RRF による BM25 + ベクトルコサイン類似度)と、あらゆるデスクトップ OS 向けのワンクリックインストーラーを備えているのは、これだけです。意思決定の追跡も、当プロジェクト独自の機能です。
local-memory-mcp と StudioMeyer Memory の比較
2 つの製品、同じチーム、それぞれ異なるユースケース:
| local-memory-mcp(このリポジトリ) | StudioMeyer Memory(ホスト型) | |
|---|---|---|
| 場所 | お使いのマシン(SQLite + sqlite-vec) | クラウド(自社運用の Postgres、ドイツの Hetzner、EU) |
| ツール | 25 | 56 |
| 検索 | FTS5 + sqlite-vec ハイブリッド(RRF) | FTS5 + pgvector + クロスエンコーダーによる再ランキング |
| 埋め込み | ローカル(multilingual-e5-small、384 次元) | クラウド(複数モデル、再ランキング) |
| マルチデバイス | いいえ | はい |
| マルチエージェント | いいえ | はい |
| 価格 | 永久無料 | 無料プラン / EUR 9 Pro / EUR 19 Team |
| インストール | npx または .mcpb(Linux / macOS / Windows) | memory.studiomeyer.io |
| リポジトリ | local-memory-mcp | studiomeyer-memory(ドキュメント) |
まずはローカルで始めましょう。チーム、マルチデバイス同期、またはクロスエンコーダーによる再ランキングが必要になったらアップグレードしてください。memory_export はホスト型プランにそのままインポートできるエンベロープを生成するため、メモリー全体を引き継げます。
StudioMeyer のその他の製品
| サーバー | 概要 | リンク |
|---|---|---|
| StudioMeyer Memory | 56 個のツール、セマンティック検索、マルチエージェントを備えたホスト型 AI メモリ | memory.studiomeyer.io |
| StudioMeyer CRM | AI ネイティブ CRM。33 個のツール、パイプライン、見込み客、収益に対応 | crm.studiomeyer.io |
| StudioMeyer GEO | AI 上での可視性をモニタリング。23 個のツール、8 つの LLM プラットフォームに対応 | geo.studiomeyer.io |
| MCP Crew | Claude 向けのエージェントペルソナ。10 個のツール、8 つの役割、3 つのワークフロー | crew.studiomeyer.io |
セキュリティ
脅威モデル、報告手順、および既知の SAST スキャナーの誤検知に関する注記については、SECURITY.md を参照してください。特に、src/db/client.ts の db.exec(schema) は better-sqlite3 の SQL 文字列実行機能であり、child_process.exec ではありません。一部のパターンベースのスキャナーは、インポート解決を行わずにこれを検出します。このリポジトリにはシェル実行コードは一切ありません(grep -rn child_process src/ で確認できます)。
コントリビューション
Issue と PR を歓迎します。CONTRIBUTING.md を参照してください。
StudioMeyer について
StudioMeyer は、パルマ・デ・マヨルカを拠点に世界中のクライアントと仕事をする、AI とデザインのスタジオです。中小企業向けに、カスタムウェブサイトと AI インフラストラクチャを構築しています。Claude Agent SDK、MCP、n8n を使用した本番スタックに、可観測性のための Sentry、Langfuse、LangGraph、および社内のガードレイヤーを組み合わせています。
ライセンス
StudioMeyer が開発。マヨルカ発の AI ファーストなウェブスタジオです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。