memento-mcp

by gannonh
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Enables GitHub Copilot to access the persistent knowledge graph memory system through the model context protocol.

  • Uses Neo4j as the storage backend for the knowledge graph, providing unified graph storage and vector search capabilities.

  • Leverages OpenAI's embedding models for semantic search capabilities, supporting multiple models including text-embedding-3-small/large.

Memento MCP: LLMのための知識グラフメモリシステム

セマンティック検索、コンテキストリコール、時間的認識を備えた、スケーラブルで高性能なナレッジグラフメモリシステム。モデルコンテキストプロトコルをサポートするあらゆるLLMクライアント(Claude Desktop、Cursor、Github Copilotなど)に、弾力性、適応性、持続性に優れた長期オントロジーメモリを提供します。

コアコンセプト

エンティティ

エンティティはナレッジグラフの主要なノードです。各エンティティには以下の要素が含まれます。

  • 一意の名前(識別子)
  • エンティティの種類(例:「人」、「組織」、「イベント」)
  • 観察リスト
  • ベクトル埋め込み(セマンティック検索用)
  • 完全なバージョン履歴

例:

{ "name": "John_Smith", "entityType": "person", "observations": ["Speaks fluent Spanish"] }

関係

リレーションは、拡張されたプロパティを持つエンティティ間の有向接続を定義します。

  • 強度指標(0.0~1.0)
  • 信頼度レベル(0.0~1.0)
  • 豊富なメタデータ(ソース、タイムスタンプ、タグ)
  • バージョン履歴による時間的認識
  • 時間ベースの信頼度減衰

例:

{ "from": "John_Smith", "to": "Anthropic", "relationType": "works_at", "strength": 0.9, "confidence": 0.95, "metadata": { "source": "linkedin_profile", "last_verified": "2025-03-21" } }

ストレージバックエンド

Memento MCP はストレージ バックエンドとして Neo4j を使用し、グラフ ストレージとベクトル検索機能の両方に統合されたソリューションを提供します。

なぜ Neo4j なのか?

  • 統合ストレージ:グラフとベクターストレージの両方を単一のデータベースに統合します
  • ネイティブグラフ操作:グラフのトラバーサルとクエリ用に特別に構築
  • 統合ベクトル検索: Neo4j に直接組み込まれた埋め込みのベクトル類似性検索
  • スケーラビリティ: 大規模な知識グラフでパフォーマンスが向上
  • 簡素化されたアーキテクチャ: すべての操作を単一のデータベースで実行するクリーンな設計

前提条件

  • Neo4j 5.13+ (ベクトル検索機能に必要)

Neo4j デスクトップ セットアップ (推奨)

Neo4j を使い始める最も簡単な方法は、 Neo4j Desktopを使用することです。

  1. https://neo4j.com/download/から Neo4j Desktop をダウンロードしてインストールします。
  2. 新しいプロジェクトを作成する
  3. 新しいデータベースを追加する
  4. パスワードをmemento_password (またはお好みのパスワード)に設定します
  5. データベースを起動する

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 を実行することもできます。

# Start Neo4j container docker-compose up -d neo4j # Stop Neo4j container docker-compose stop neo4j # Remove Neo4j container (preserves data) docker-compose rm 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 データはコンテナの再起動やバージョンアップグレード後も保持されます。

volumes: - ./neo4j-data:/data - ./neo4j-logs:/logs - ./neo4j-import:/import

これらのマッピングにより、次のことが保証されます。

  • /dataディレクトリ(すべてのデータベースファイルを含む)は、ホスト上の./neo4j-dataに保存されます。
  • /logsディレクトリはホスト上の./neo4j-logsに保存されます。
  • /importディレクトリ(データファイルのインポート用)は./neo4j-importに保存されます。

必要に応じて、 docker-compose.ymlファイルでこれらのパスを変更して、データを別の場所に保存できます。

Neo4jバージョンのアップグレード

データを失うことなく、Neo4j のエディションとバージョンを変更できます。

  1. docker-compose.ymlで Neo4j イメージのバージョンを更新する
  2. docker-compose down && docker-compose up -d neo4jでコンテナを再起動します。
  3. npm run neo4j:initを使用してスキーマを再初期化します。

ボリューム マッピングが同じままである限り、データはこのプロセスを通じて保持されます。

データベースの完全なリセット

Neo4j データベースを完全にリセットする必要がある場合:

# Stop the container docker-compose stop neo4j # Remove the container docker-compose rm -f neo4j # Delete the data directory contents rm -rf ./neo4j-data/* # Restart the container docker-compose up -d neo4j # Reinitialize the schema npm run neo4j:init
データのバックアップ

Neo4j データをバックアップするには、データ ディレクトリをコピーするだけです。

# Make a backup of the Neo4j data cp -r ./neo4j-data ./neo4j-data-backup-$(date +%Y%m%d)

Neo4j CLI ユーティリティ

Memento MCP には、Neo4j 操作を管理するためのコマンドライン ユーティリティが含まれています。

接続テスト

Neo4j データベースへの接続をテストします。

# Test with default settings npm run neo4j:test # Test with custom settings npm run neo4j:test -- --uri bolt://127.0.0.1:7687 --username myuser --password mypass --database neo4j

スキーマの初期化

通常の操作では、Memento MCPがデータベースに接続すると、Neo4jスキーマの初期化が自動的に行われます。通常の使用では、手動でコマンドを実行する必要はありません。

次のコマンドは、開発、テスト、または高度なカスタマイズのシナリオにのみ必要です。

# Initialize with default settings (only needed for development or troubleshooting) npm run neo4j:init # Initialize with custom vector dimensions npm run neo4j:init -- --dimensions 768 --similarity euclidean # Force recreation of all constraints and indexes npm run neo4j:init -- --recreate # Combine multiple options npm run neo4j:init -- --vector-index custom_index --dimensions 384 --recreate

高度な機能

セマンティック検索

キーワードだけでなく意味に基づいて意味的に関連するエンティティを検索します。

  • ベクトル埋め込み: エンティティは、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 Connection Settings NEO4J_URI=bolt://127.0.0.1:7687 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=memento_password NEO4J_DATABASE=neo4j # Vector Search Configuration NEO4J_VECTOR_INDEX=entity_embeddings NEO4J_VECTOR_DIMENSIONS=1536 NEO4J_SIMILARITY_FUNCTION=cosine # Embedding Service Configuration MEMORY_STORAGE_TYPE=neo4j OPENAI_API_KEY=your-openai-api-key OPENAI_EMBEDDING_MODEL=text-embedding-3-small # Debug Settings DEBUG=true

コマンドラインオプション

Neo4j CLI ツールは次のオプションをサポートしています。

--uri <uri> Neo4j server URI (default: bolt://127.0.0.1:7687) --username <username> Neo4j username (default: neo4j) --password <password> Neo4j password (default: memento_password) --database <n> Neo4j database name (default: neo4j) --vector-index <n> Vector index name (default: entity_embeddings) --dimensions <number> Vector dimensions (default: 1536) --similarity <function> Similarity function (cosine|euclidean) (default: cosine) --recreate Force recreation of constraints and indexes --no-debug Disable detailed output (debug is ON by default)

埋め込みモデル

利用可能な OpenAI 埋め込みモデル:

  • text-embedding-3-small : 効率的でコスト効率が高い(1536次元)
  • text-embedding-3-large : 精度は高いが、コストは高い(3072次元)
  • text-embedding-ada-002 : レガシーモデル(1536次元)

OpenAI API 構成

セマンティック検索を使用するには、OpenAI API 資格情報を設定する必要があります。

  1. OpenAIからAPIキーを取得する
  2. 次のように環境を構成します。
# OpenAI API Key for embeddings OPENAI_API_KEY=your-openai-api-key # Default embedding model OPENAI_EMBEDDING_MODEL=text-embedding-3-small

:テスト環境では、APIキーが提供されていない場合、システムは埋め込み生成を模擬的に行います。ただし、統合テストでは実際の埋め込みを使用することをお勧めします。

Claude Desktopとの統合

構成

これをclaude_desktop_config.jsonに追加します:

{ "mcpServers": { "memento": { "command": "npx", "args": [ "-y", "@gannonh/memento-mcp" ], "env": { "MEMORY_STORAGE_TYPE": "neo4j", "NEO4J_URI": "bolt://127.0.0.1:7687", "NEO4J_USERNAME": "neo4j", "NEO4J_PASSWORD": "memento_password", "NEO4J_DATABASE": "neo4j", "NEO4J_VECTOR_INDEX": "entity_embeddings", "NEO4J_VECTOR_DIMENSIONS": "1536", "NEO4J_SIMILARITY_FUNCTION": "cosine", "OPENAI_API_KEY": "your-openai-api-key", "OPENAI_EMBEDDING_MODEL": "text-embedding-3-small", "DEBUG": "true" } } } }

あるいは、ローカル開発の場合は以下を使用できます。

{ "mcpServers": { "memento": { "command": "/path/to/node", "args": [ "/path/to/memento-mcp/dist/index.js" ], "env": { "MEMORY_STORAGE_TYPE": "neo4j", "NEO4J_URI": "bolt://127.0.0.1:7687", "NEO4J_USERNAME": "neo4j", "NEO4J_PASSWORD": "memento_password", "NEO4J_DATABASE": "neo4j", "NEO4J_VECTOR_INDEX": "entity_embeddings", "NEO4J_VECTOR_DIMENSIONS": "1536", "NEO4J_SIMILARITY_FUNCTION": "cosine", "OPENAI_API_KEY": "your-openai-api-key", "OPENAI_EMBEDDING_MODEL": "text-embedding-3-small", "DEBUG": "true" } } } }

重要: 一貫した動作を確保するために、Claude Desktop 構成で埋め込みモデルを常に明示的に指定してください。

推奨されるシステムプロンプト

Claude との最適な統合のために、次のステートメントをシステム プロンプトに追加します。

You have access to the Memento MCP knowledge graph memory system, which provides you with persistent memory capabilities. Your memory tools are provided by Memento MCP, a sophisticated knowledge graph implementation. When asked about past conversations or user information, always check the Memento MCP knowledge graph first. You should use semantic_search to find relevant information in your memory when answering questions.

セマンティック検索のテスト

設定が完了すると、Claude は自然言語を通じてセマンティック検索機能にアクセスできるようになります。

  1. セマンティック埋め込みを持つエンティティを作成するには:
    User: "Remember that Python is a high-level programming language known for its readability and JavaScript is primarily used for web development."
  2. 意味的に検索するには:
    User: "What programming languages do you know about that are good for web development?"
  3. 特定の情報を取得するには:
    User: "Tell me everything you know about Python."

このアプローチの強みは、LLM が適切なメモリ ツールの選択と使用の複雑さを処理し、ユーザーが自然に対話できることです。

実世界のアプリケーション

Memento の適応型検索機能には、次のような実用的な利点があります。

  1. クエリの多様性: ユーザーは質問の言い回しを気にする必要はありません。システムがさまざまなクエリの種類に自動的に適応します。
  2. 障害耐性: セマンティックマッチングが利用できない場合でも、システムはユーザーの介入なしに代替方法にフォールバックできます。
  3. パフォーマンス効率: 最適な検索方法をインテリジェントに選択することで、システムは各クエリのパフォーマンスと関連性のバランスをとります。
  4. コンテキスト検索の改善:LLM会話では、システムが複雑な知識グラフ全体にわたって関連情報を見つけることができるため、コンテキスト検索が改善されます。

例えば、ユーザーが「機械学習について何を知っていますか?」と質問した場合、システムは「機械学習」という言葉を明示的に使用していなくても、概念的に関連するエンティティ(ニューラルネットワーク、データサイエンス、特定のアルゴリズムなど)を検索できます。しかし、セマンティック検索で十分な結果が得られない場合、システムは自動的にアプローチを調整し、有用な情報を確実に返します。

トラブルシューティング

ベクトル検索診断

Memento MCP には、ベクター検索の問題のトラブルシューティングに役立つ診断機能が組み込まれています。

  • 埋め込み検証: システムはエンティティに有効な埋め込みがあるかどうかを確認し、ない場合は自動的に埋め込みを生成します。
  • ベクトルインデックスステータス: ベクトルインデックスが存在し、オンライン状態であることを確認します。
  • フォールバック検索:ベクトル検索が失敗した場合、システムはテキストベースの検索にフォールバックします。
  • 詳細なログ記録: トラブルシューティングのためのベクトル検索操作の包括的なログ記録

デバッグツール(DEBUG=trueの場合)

デバッグ モードを有効にすると、追加の診断ツールが利用できるようになります。

  • diagnose_vector_search : Neo4j ベクトルインデックス、埋め込み数、検索機能に関する情報
  • force_generate_embedding : 特定のエンティティの埋め込みを強制的に生成します
  • debug_embedding_config : 現在の埋め込みサービスの設定に関する情報

開発者リセット

開発中に Neo4j データベースを完全にリセットするには:

# Stop the container (if using Docker) docker-compose stop neo4j # Remove the container (if using Docker) docker-compose rm -f neo4j # Delete the data directory (if using Docker) rm -rf ./neo4j-data/* # For Neo4j Desktop, right-click your database and select "Drop database" # Restart the database # For Docker: docker-compose up -d neo4j # For Neo4j Desktop: # Click the "Start" button for your database # Reinitialize the schema npm run neo4j:init

建築と開発

# Clone the repository git clone https://github.com/gannonh/memento-mcp.git cd memento-mcp # Install dependencies npm install # Build the project npm run build # Run tests npm test # Check test coverage npm run test:coverage

インストール

Smithery経由でインストール

Smithery経由で Claude Desktop 用の memento-mcp を自動的にインストールするには:

npx -y @smithery/cli install @gannonh/memento-mcp --client claude

npxを使用したグローバルインストール

Memento MCP をグローバルにインストールせずに、npx を使用して直接実行できます。

npx -y @gannonh/memento-mcp

この方法は、Claude Desktop およびその他の MCP 互換クライアントで使用することをお勧めします。

ローカルインストール

プロジェクトの開発または貢献について:

# Install locally npm install @gannonh/memento-mcp # Or clone the repository git clone https://github.com/gannonh/memento-mcp.git cd memento-mcp npm install

ライセンス

マサチューセッツ工科大学

ID: r8o11c6krf