Memento MCP: LLMのための知識グラフメモリシステム
セマンティック検索、コンテキストリコール、時間的認識を備えた、スケーラブルで高性能なナレッジグラフメモリシステム。モデルコンテキストプロトコルをサポートするあらゆるLLMクライアント(Claude Desktop、Cursor、Github Copilotなど)に、弾力性、適応性、持続性に優れた長期オントロジーメモリを提供します。
コアコンセプト
エンティティ
エンティティはナレッジグラフの主要なノードです。各エンティティには以下の要素が含まれます。
一意の名前(識別子)
エンティティの種類(例:「人」、「組織」、「イベント」)
観察リスト
ベクトル埋め込み(セマンティック検索用)
完全なバージョン履歴
例:
関係
リレーションは、拡張されたプロパティを持つエンティティ間の有向接続を定義します。
強度指標(0.0~1.0)
信頼度レベル(0.0~1.0)
豊富なメタデータ(ソース、タイムスタンプ、タグ)
バージョン履歴による時間的認識
時間ベースの信頼度減衰
例:
Related MCP server: Memory MCP Server
ストレージバックエンド
Memento MCP はストレージ バックエンドとして Neo4j を使用し、グラフ ストレージとベクトル検索機能の両方に統合されたソリューションを提供します。
なぜ Neo4j なのか?
統合ストレージ:グラフとベクターストレージの両方を単一のデータベースに統合します
ネイティブグラフ操作:グラフのトラバーサルとクエリ用に特別に構築
統合ベクトル検索: Neo4j に直接組み込まれた埋め込みのベクトル類似性検索
スケーラビリティ: 大規模な知識グラフでパフォーマンスが向上
簡素化されたアーキテクチャ: すべての操作を単一のデータベースで実行するクリーンな設計
前提条件
Neo4j 5.13+ (ベクトル検索機能に必要)
Neo4j デスクトップ セットアップ (推奨)
Neo4j を使い始める最も簡単な方法は、 Neo4j Desktopを使用することです。
https://neo4j.com/download/から Neo4j Desktop をダウンロードしてインストールします。
新しいプロジェクトを作成する
新しいデータベースを追加する
パスワードを
memento_password(またはお好みのパスワード)に設定しますデータベースを起動する
Neo4j データベースは次の場所で利用できます。
Bolt URI :
bolt://127.0.0.1:7687(ドライバー接続用)HTTP :
http://127.0.0.1:7474(Neo4j ブラウザ UI 用)デフォルトの資格情報: ユーザー名:
neo4j、パスワード:memento_password(または設定したもの)
Docker を使用した Neo4j のセットアップ (代替)
あるいは、Docker Compose を使用して Neo4j を実行することもできます。
Docker を使用する場合、Neo4j データベースは次の場所で利用できます。
Bolt URI :
bolt://127.0.0.1:7687(ドライバー接続用)HTTP :
http://127.0.0.1:7474(Neo4j ブラウザ UI 用)デフォルトの資格情報: ユーザー名:
neo4j、パスワード:memento_password
データの永続性と管理
docker-compose.ymlファイルの Docker ボリューム構成により、Neo4j データはコンテナの再起動やバージョンアップグレード後も保持されます。
これらのマッピングにより、次のことが保証されます。
/dataディレクトリ(すべてのデータベースファイルを含む)は、ホスト上の./neo4j-dataに保存されます。/logsディレクトリはホスト上の./neo4j-logsに保存されます。/importディレクトリ(データファイルのインポート用)は./neo4j-importに保存されます。
必要に応じて、 docker-compose.ymlファイルでこれらのパスを変更して、データを別の場所に保存できます。
Neo4jバージョンのアップグレード
データを失うことなく、Neo4j のエディションとバージョンを変更できます。
docker-compose.ymlで Neo4j イメージのバージョンを更新するdocker-compose down && docker-compose up -d neo4jでコンテナを再起動します。npm run neo4j:initを使用してスキーマを再初期化します。
ボリューム マッピングが同じままである限り、データはこのプロセスを通じて保持されます。
データベースの完全なリセット
Neo4j データベースを完全にリセットする必要がある場合:
データのバックアップ
Neo4j データをバックアップするには、データ ディレクトリをコピーするだけです。
Neo4j CLI ユーティリティ
Memento MCP には、Neo4j 操作を管理するためのコマンドライン ユーティリティが含まれています。
接続テスト
Neo4j データベースへの接続をテストします。
スキーマの初期化
通常の操作では、Memento MCPがデータベースに接続すると、Neo4jスキーマの初期化が自動的に行われます。通常の使用では、手動でコマンドを実行する必要はありません。
次のコマンドは、開発、テスト、または高度なカスタマイズのシナリオにのみ必要です。
高度な機能
セマンティック検索
キーワードだけでなく意味に基づいて意味的に関連するエンティティを検索します。
ベクトル埋め込み: エンティティは、OpenAIの埋め込みモデルを使用して高次元ベクトル空間に自動的にエンコードされます。
コサイン類似度: 異なる用語を使用していても関連する概念を見つける
設定可能なしきい値: 結果の関連性を制御するために最小類似度スコアを設定します
クロスモーダル検索: テキストクエリを使用して、記述方法に関係なく関連するエンティティを検索します。
マルチモデルサポート:複数の埋め込みモデル(OpenAI text-embedding-3-small/large)と互換性があります
コンテキスト検索: 正確なキーワード一致ではなく意味に基づいて情報を検索します
最適化されたデフォルト: 精度と再現率のバランスをとるために調整されたパラメータ (類似度しきい値 0.6、ハイブリッド検索が有効)
ハイブリッド検索: セマンティック検索とキーワード検索を組み合わせて、より包括的な結果を実現します。
適応型検索: システムは、クエリの特性と利用可能なデータに基づいて、ベクトルのみ、キーワードのみ、またはハイブリッド検索をインテリジェントに選択します。
パフォーマンスの最適化: 回復力のためのフォールバックメカニズムを維持しながら、意味理解のためのベクトル検索を優先します。
クエリ認識処理: クエリの複雑さと利用可能なエンティティの埋め込みに基づいて検索戦略を調整します
時間的認識
ポイントインタイムグラフ取得により、エンティティとリレーションの完全な履歴を追跡します。
完全なバージョン履歴: エンティティまたはリレーションに対するすべての変更はタイムスタンプとともに保存されます
ポイントインタイムクエリ: 過去の任意の瞬間のナレッジグラフの正確な状態を取得します。
変更追跡: createdAt、updatedAt、validFrom、validTo のタイムスタンプを自動的に記録します
時間的一貫性:知識がどのように進化してきたかについて歴史的に正確な見解を維持する
非破壊更新: 更新では既存のデータを上書きするのではなく、新しいバージョンを作成します。
時間ベースのフィルタリング: 時間的な基準に基づいてグラフ要素をフィルタリングします
歴史探究:特定の情報が時間の経過とともにどのように変化したかを調べる
信頼の衰退
関係は、設定可能な半減期に基づいて時間の経過とともに自動的に信頼度が低下します。
時間による減衰:人間関係における信頼は、強化されなければ時間の経過とともに自然に減少する
設定可能な半減期: 情報の確実性が低下するまでの期間を定義します (デフォルト: 30 日)
最小信頼度フロア: 重要な情報の過度な減衰を防ぐためにしきい値を設定します
減衰メタデータ: 各関係には詳細な減衰計算情報が含まれています
非破壊的: 元の信頼値は減衰した値とともに保存されます
強化学習:新たな観察によって強化されると関係は信頼を取り戻す
参照時間の柔軟性: 履歴分析のために任意の参照時間に基づいて減衰を計算
高度なメタデータ
エンティティとカスタム フィールドとのリレーションの両方に対する豊富なメタデータのサポート:
ソース追跡: 情報の発生元(ユーザー入力、分析、外部ソース)を記録する
信頼度レベル: 確実性に基づいて関係に信頼スコア (0.0-1.0) を割り当てます
関係の強さ: 関係の重要性または強さを示す (0.0-1.0)
時間メタデータ: 情報がいつ追加、変更、または検証されたかを追跡します
カスタムタグ: 分類とフィルタリングのために任意のタグを追加します
構造化データ: メタデータフィールド内に複雑な構造化データを保存します
クエリのサポート: メタデータのプロパティに基づいた検索とフィルタリング
拡張可能なスキーマ: コアデータモデルを変更せずに必要に応じてカスタムフィールドを追加します
MCP APIツール
モデル コンテキスト プロトコルを通じて、LLM クライアント ホストでは次のツールが利用できます。
エンティティ管理
エンティティの作成
ナレッジグラフに複数の新しいエンティティを作成する
入力:
entities(オブジェクトの配列)各オブジェクトには次のものが含まれます。
name(文字列): エンティティ識別子entityType(文字列): 型分類observations(文字列[]): 関連する観測値
観察を追加する
既存のエンティティに新しい観察を追加する
入力:
observations(オブジェクトの配列)各オブジェクトには次のものが含まれます。
entityName(文字列): 対象エンティティcontents(文字列[]): 追加する新しい観察
エンティティの削除
エンティティとその関係を削除する
入力:
entityNames(string[])
削除観測
エンティティから特定の観察を削除する
入力:
deletions(オブジェクトの配列)各オブジェクトには次のものが含まれます。
entityName(文字列): 対象エンティティobservations(文字列[]): 削除する観測値
関係管理
関係を作成する
拡張プロパティを持つエンティティ間に複数の新しい関係を作成する
入力:
relations(オブジェクトの配列)各オブジェクトには次のものが含まれます。
from(文字列): ソースエンティティ名to(文字列): ターゲットエンティティ名relationType(文字列): 関係の種類strength(数値、オプション):関係の強度(0.0-1.0)confidence(数値、オプション):信頼度(0.0-1.0)metadata(オブジェクト、オプション): カスタムメタデータフィールド
get_relation
強化されたプロパティで特定の関係を取得します
入力:
from(文字列): ソースエンティティ名to(文字列): ターゲットエンティティ名relationType(文字列): 関係の種類
更新関係
拡張プロパティを使用して既存のリレーションを更新する
入力:
relation(オブジェクト):内容:
from(文字列): ソースエンティティ名to(文字列): ターゲットエンティティ名relationType(文字列): 関係の種類strength(数値、オプション):関係の強度(0.0-1.0)confidence(数値、オプション):信頼度(0.0-1.0)metadata(オブジェクト、オプション): カスタムメタデータフィールド
関係を削除する
グラフから特定の関係を削除する
入力:
relations(オブジェクトの配列)各オブジェクトには次のものが含まれます。
from(文字列): ソースエンティティ名to(文字列): ターゲットエンティティ名relationType(文字列): 関係の種類
グラフ操作
グラフを読む
ナレッジグラフ全体を読む
入力不要
検索ノード
クエリに基づいてノードを検索する
入力:
query(文字列)
オープンノード
名前で特定のノードを取得する
入力:
names(文字列[])
セマンティック検索
セマンティック検索
ベクトル埋め込みと類似性を使用してエンティティを意味的に検索する
入力:
query(文字列): 意味的に検索するテキストクエリlimit(数値、オプション): 返される結果の最大数 (デフォルト: 10)min_similarity(数値、オプション):類似度の最小しきい値(0.0~1.0、デフォルト:0.6)entity_types(文字列[], オプション): エンティティタイプで結果をフィルタリングするhybrid_search(ブール値、オプション):キーワード検索とセマンティック検索を組み合わせる(デフォルト:true)semantic_weight(数値、オプション):ハイブリッド検索におけるセマンティック結果の重み(0.0-1.0、デフォルト:0.6)
特徴:
クエリのコンテキストに基づいて最適な検索方法(ベクトル、キーワード、ハイブリッド)をインテリジェントに選択します。
フォールバックメカニズムを通じて意味的に一致しないクエリを適切に処理します。
自動最適化決定により高いパフォーマンスを維持
エンティティ埋め込みの取得
特定のエンティティのベクトル埋め込みを取得する
入力:
entity_name(文字列): 埋め込みを取得するエンティティの名前
時間的特徴
エンティティ履歴を取得する
エンティティの完全なバージョン履歴を取得する
入力:
entityName(文字列)
関係履歴を取得する
リレーションの完全なバージョン履歴を取得する
入力:
from(文字列): ソースエンティティ名to(文字列): ターゲットエンティティ名relationType(文字列): 関係の種類
get_graph_at_time
特定のタイムスタンプにおけるグラフの状態を取得する
入力:
timestamp(数値): Unix タイムスタンプ (エポックからのミリ秒)
get_decayed_graph
時間とともに減衰した信頼度値を示すグラフを取得する
入力:
options(オブジェクト、オプション):reference_time(数値): 減衰計算の参照タイムスタンプ(エポックからのミリ秒)decay_factor(数値): オプションの減衰係数のオーバーライド
構成
環境変数
次の環境変数を使用して Memento MCP を構成します。
コマンドラインオプション
Neo4j CLI ツールは次のオプションをサポートしています。
埋め込みモデル
利用可能な OpenAI 埋め込みモデル:
text-embedding-3-small: 効率的でコスト効率が高い(1536次元)text-embedding-3-large: 精度は高いが、コストは高い(3072次元)text-embedding-ada-002: レガシーモデル(1536次元)
OpenAI API 構成
セマンティック検索を使用するには、OpenAI API 資格情報を設定する必要があります。
OpenAIからAPIキーを取得する
次のように環境を構成します。
注:テスト環境では、APIキーが提供されていない場合、システムは埋め込み生成を模擬的に行います。ただし、統合テストでは実際の埋め込みを使用することをお勧めします。
Claude Desktopとの統合
構成
これをclaude_desktop_config.jsonに追加します:
あるいは、ローカル開発の場合は以下を使用できます。
重要: 一貫した動作を確保するために、Claude Desktop 構成で埋め込みモデルを常に明示的に指定してください。
推奨されるシステムプロンプト
Claude との最適な統合のために、次のステートメントをシステム プロンプトに追加します。
セマンティック検索のテスト
設定が完了すると、Claude は自然言語を通じてセマンティック検索機能にアクセスできるようになります。
セマンティック埋め込みを持つエンティティを作成するには:
User: "Remember that Python is a high-level programming language known for its readability and JavaScript is primarily used for web development."意味的に検索するには:
User: "What programming languages do you know about that are good for web development?"特定の情報を取得するには:
User: "Tell me everything you know about Python."
このアプローチの強みは、LLM が適切なメモリ ツールの選択と使用の複雑さを処理し、ユーザーが自然に対話できることです。
実世界のアプリケーション
Memento の適応型検索機能には、次のような実用的な利点があります。
クエリの多様性: ユーザーは質問の言い回しを気にする必要はありません。システムがさまざまなクエリの種類に自動的に適応します。
障害耐性: セマンティックマッチングが利用できない場合でも、システムはユーザーの介入なしに代替方法にフォールバックできます。
パフォーマンス効率: 最適な検索方法をインテリジェントに選択することで、システムは各クエリのパフォーマンスと関連性のバランスをとります。
コンテキスト検索の改善:LLM会話では、システムが複雑な知識グラフ全体にわたって関連情報を見つけることができるため、コンテキスト検索が改善されます。
例えば、ユーザーが「機械学習について何を知っていますか?」と質問した場合、システムは「機械学習」という言葉を明示的に使用していなくても、概念的に関連するエンティティ(ニューラルネットワーク、データサイエンス、特定のアルゴリズムなど)を検索できます。しかし、セマンティック検索で十分な結果が得られない場合、システムは自動的にアプローチを調整し、有用な情報を確実に返します。
トラブルシューティング
ベクトル検索診断
Memento MCP には、ベクター検索の問題のトラブルシューティングに役立つ診断機能が組み込まれています。
埋め込み検証: システムはエンティティに有効な埋め込みがあるかどうかを確認し、ない場合は自動的に埋め込みを生成します。
ベクトルインデックスステータス: ベクトルインデックスが存在し、オンライン状態であることを確認します。
フォールバック検索:ベクトル検索が失敗した場合、システムはテキストベースの検索にフォールバックします。
詳細なログ記録: トラブルシューティングのためのベクトル検索操作の包括的なログ記録
デバッグツール(DEBUG=trueの場合)
デバッグ モードを有効にすると、追加の診断ツールが利用できるようになります。
diagnose_vector_search : Neo4j ベクトルインデックス、埋め込み数、検索機能に関する情報
force_generate_embedding : 特定のエンティティの埋め込みを強制的に生成します
debug_embedding_config : 現在の埋め込みサービスの設定に関する情報
開発者リセット
開発中に Neo4j データベースを完全にリセットするには:
建築と開発
インストール
Smithery経由でインストール
Smithery経由で Claude Desktop 用の memento-mcp を自動的にインストールするには:
npxを使用したグローバルインストール
Memento MCP をグローバルにインストールせずに、npx を使用して直接実行できます。
この方法は、Claude Desktop およびその他の MCP 互換クライアントで使用することをお勧めします。
ローカルインストール
プロジェクトの開発または貢献について:
ライセンス
マサチューセッツ工科大学