Memory MCP Server

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Used for running tests for the Memory MCP Server during development

メモリMCPサーバー

データの一貫性を維持するための厳密な検証ルールを備え、メモリ内のエンティティ、リレーション、および観測を管理するためのナレッジ グラフ機能を提供するモデル コンテキスト プロトコル (MCP) サーバー。

インストール

Claude Desktop にサーバーをインストールします。

mcp install main.py -v MEMORY_FILE_PATH=/path/to/memory.jsonl

データ検証ルール

エンティティ名

  • 小文字で始まる必要があります
  • 小文字、数字、ハイフンを含めることができます
  • 最大100文字
  • グラフ内で一意である必要があります
  • 有効な名前の例: python-projectmeeting-notes-2024user-john

エンティティタイプ

次のエンティティ タイプがサポートされています。

  • person :人間の実体
  • concept : 抽象的な考えや原則
  • project : 仕事の取り組みまたはタスク
  • document : あらゆる形式の文書
  • tool : ソフトウェアツールまたはユーティリティ
  • organization : 企業またはグループ
  • location : 物理的または仮想的な場所
  • event : 時間制限のある発生

観察

  • 空でない文字列
  • 最大500文字
  • エンティティごとに一意である必要があります
  • 事実と客観的な記述であるべきである
  • 関連する場合はタイムスタンプを含める

関係

次の関係タイプがサポートされています。

  • knows :人と人とのつながり
  • contains : 親子関係
  • uses : 別のエンティティを利用するエンティティ
  • created :著作者/創作関係
  • belongs-to :メンバーシップ/所有権
  • depends-on :依存関係
  • related-to :一般的な関係

追加の関係ルール:

  • ソースエンティティとターゲットエンティティの両方が存在する必要があります
  • 自己参照関係は許可されません
  • 循環依存は許可されません
  • 定義済みの関係タイプを使用する必要があります

使用法

サーバーは、ナレッジ グラフを管理するためのツールを提供します。

エンティティを取得

result = await session.call_tool("get_entity", { "entity_name": "example" }) if not result.success: if result.error_type == "NOT_FOUND": print(f"Entity not found: {result.error}") elif result.error_type == "VALIDATION_ERROR": print(f"Invalid input: {result.error}") else: print(f"Error: {result.error}") else: entity = result.data print(f"Found entity: {entity}")

グラフを取得

result = await session.call_tool("get_graph", {}) if result.success: graph = result.data print(f"Graph data: {graph}") else: print(f"Error retrieving graph: {result.error}")

エンティティを作成する

# Valid entity creation entities = [ Entity( name="python-project", # Lowercase with hyphens entityType="project", # Must be a valid type observations=["Started development on 2024-01-29"] ), Entity( name="john-doe", entityType="person", observations=["Software engineer", "Joined team in 2024"] ) ] result = await session.call_tool("create_entities", { "entities": entities }) if not result.success: if result.error_type == "VALIDATION_ERROR": print(f"Invalid entity data: {result.error}") else: print(f"Error creating entities: {result.error}")

観察を追加

# Valid observation result = await session.call_tool("add_observation", { "entity": "python-project", "observation": "Completed initial prototype" # Must be unique for entity }) if not result.success: if result.error_type == "NOT_FOUND": print(f"Entity not found: {result.error}") elif result.error_type == "VALIDATION_ERROR": print(f"Invalid observation: {result.error}") else: print(f"Error adding observation: {result.error}")

関係を作成する

# Valid relation result = await session.call_tool("create_relation", { "from_entity": "john-doe", "to_entity": "python-project", "relation_type": "created" # Must be a valid type }) if not result.success: if result.error_type == "NOT_FOUND": print(f"Entity not found: {result.error}") elif result.error_type == "VALIDATION_ERROR": print(f"Invalid relation data: {result.error}") else: print(f"Error creating relation: {result.error}")

検索メモリ

result = await session.call_tool("search_memory", { "query": "most recent workout" # Supports natural language queries }) if result.success: if result.error_type == "NO_RESULTS": print(f"No results found: {result.error}") else: results = result.data print(f"Search results: {results}") else: print(f"Error searching memory: {result.error}")

検索機能は以下をサポートします:

  • 時間的なクエリ(例:「最新」、「最後」、「最新」)
  • アクティビティクエリ(例:「ワークアウト」、「エクササイズ」)
  • 一般的なエンティティ検索
  • 80%の類似度閾値を持つファジーマッチング
  • 重み付け検索:
    • エンティティ名(重み: 1.0)
    • エンティティタイプ(重み: 0.8)
    • 観察結果(重み:0.6)

エンティティの削除

result = await session.call_tool("delete_entities", { "names": ["python-project", "john-doe"] }) if not result.success: if result.error_type == "NOT_FOUND": print(f"Entity not found: {result.error}") else: print(f"Error deleting entities: {result.error}")

関係を削除

result = await session.call_tool("delete_relation", { "from_entity": "john-doe", "to_entity": "python-project" }) if not result.success: if result.error_type == "NOT_FOUND": print(f"Entity not found: {result.error}") else: print(f"Error deleting relation: {result.error}")

フラッシュメモリ

result = await session.call_tool("flush_memory", {}) if not result.success: print(f"Error flushing memory: {result.error}")

エラーの種類

サーバーは次のエラー タイプを使用します。

  • NOT_FOUND : エンティティまたはリソースが見つかりません
  • VALIDATION_ERROR : 入力データが無効です
  • INTERNAL_ERROR : サーバー側エラー
  • ALREADY_EXISTS : リソースが既に存在します
  • INVALID_RELATION : エンティティ間の関係が無効です

応答モデル

すべてのツールは、次のモデルを使用して入力された応答を返します。

エンティティレスポンス

class EntityResponse(BaseModel): success: bool data: Optional[Dict[str, Any]] = None error: Optional[str] = None error_type: Optional[str] = None

グラフレスポンス

class GraphResponse(BaseModel): success: bool data: Optional[Dict[str, Any]] = None error: Optional[str] = None error_type: Optional[str] = None

オペレーションレスポンス

class OperationResponse(BaseModel): success: bool error: Optional[str] = None error_type: Optional[str] = None

発達

テストの実行

pytest tests/

新機能の追加

  1. validation.pyの検証ルールを更新する
  2. tests/test_validation.pyにテストを追加する
  3. knowledge_graph_manager.pyに変更を実装する
-
security - not tested
A
license - permissive license
-
quality - not tested

データの一貫性を維持するための厳密な検証ルールを使用して、メモリ内のエンティティ、リレーション、および観測を管理するためのナレッジ グラフ機能を提供します。

  1. Installation
    1. Data Validation Rules
      1. Entity Names
      2. Entity Types
      3. Observations
      4. Relations
    2. Usage
      1. Get Entity
      2. Get Graph
      3. Create Entities
      4. Add Observation
      5. Create Relation
      6. Search Memory
      7. Delete Entities
      8. Delete Relation
      9. Flush Memory
    3. Error Types
      1. Response Models
        1. EntityResponse
        2. GraphResponse
        3. OperationResponse
      2. Development
        1. Running Tests
        2. Adding New Features
      ID: ur12u6tcid