MCP HubMCP Hub
shaneholloman

mcp-knowledge-graph

by: shaneholloman

MCP server enabling persistent memory for Claude through a local knowledge graph - fork focused on local development

138created 09/12/2024
Visit
Claude
local

📌Overview

Purpose: To provide a persistent memory solution utilizing a local knowledge graph that allows Claude to retain information about users across chat sessions.

Overview: The Knowledge Graph Memory Server is an advanced implementation derived from the original Memory Server, aimed at enhancing user interactions by remembering personalized details and preferences through a structured knowledge graph. The server supports customizable memory paths and operates efficiently without relying on ephemeral memory methods.

Key Features:

  • Customizable Memory Path: Users can define a specific path for storing memory data, providing flexibility and control over memory management.

  • Entities and Relations Management: The server allows for the creation, modification, and removal of entities and their relationships, supporting complex interaction modeling and personalized responses based on user history.

  • Observations Tracking: The ability to manage distinct observations per entity enables the server to retain granular information about users' preferences and characteristics, enhancing conversational context and relevance.


Knowledge Graph Memory Server

An improved implementation of persistent memory using a local knowledge graph with a customizable --memory-path. This allows Claude to remember information about the user across chats.

Note:
This is a fork of the original Memory Server, intended to avoid the ephemeral memory npx installation method.

Server Name

mcp-knowledge-graph

Core Concepts

Entities

Entities are the primary nodes in the knowledge graph. Each entity has:

  • A unique name (identifier)
  • An entity type (e.g., "person", "organization", "event")
  • A list of observations

Example:

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

Relations

Relations define directed connections between entities. They are always stored in active voice and describe how entities relate to each other.

Example:

{
  "from": "John_Smith",
  "to": "Anthropic",
  "relationType": "works_at"
}

Observations

Observations are discrete pieces of information about an entity. They are:

  • Stored as strings
  • Attached to specific entities
  • Can be added or removed independently
  • Should be atomic (one fact per observation)

Example:

{
  "entityName": "John_Smith",
  "observations": [
    "Speaks fluent Spanish",
    "Graduated in 2019",
    "Prefers morning meetings"
  ]
}

API

Tools

  • create_entities
    Create multiple new entities in the knowledge graph
    Input: entities (array of objects) with:

    • name (string): Entity identifier
    • entityType (string): Type classification
    • observations (string[]): Associated observations
      Ignores entities with existing names.
  • create_relations
    Create multiple new relations between entities
    Input: relations (array of objects) with:

    • from (string): Source entity name
    • to (string): Target entity name
    • relationType (string): Relationship type in active voice
      Skips duplicate relations.
  • add_observations
    Add new observations to existing entities
    Input: observations (array of objects) with:

    • entityName (string): Target entity
    • contents (string[]): New observations to add
      Returns added observations per entity. Fails if entity doesn't exist.
  • delete_entities
    Remove entities and their relations
    Input: entityNames (string[])
    Cascade deletes associated relations. Silent if entity doesn't exist.

  • delete_observations
    Remove specific observations from entities
    Input: deletions (array of objects) with:

    • entityName (string): Target entity
    • observations (string[]): Observations to remove
      Silent if observation doesn't exist.
  • delete_relations
    Remove specific relations from the graph
    Input: relations (array of objects) with:

    • from (string): Source entity name
    • to (string): Target entity name
    • relationType (string): Relationship type
      Silent if relation doesn't exist.
  • read_graph
    Read the entire knowledge graph
    No input required. Returns complete graph with all entities and relations.

  • search_nodes
    Search for nodes based on query
    Input: query (string)
    Searches entity names, types, and observation content. Returns matching entities and relations.

  • open_nodes
    Retrieve specific nodes by name
    Input: names (string[])
    Returns requested entities and relations between them. Silently skips non-existent nodes.

Usage with Claude Desktop

Setup

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-memory"
      ]
    }
  }
}

Custom Memory Path

Specify a custom path for the memory file:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory", "--memory-path", "/path/to/your/memory.jsonl"]
    }
  }
}

If no path is specified, it defaults to memory.jsonl in the server's installation directory.

System Prompt

The prompt for utilizing memory depends on your use case. Altering the prompt helps the model determine the frequency and types of memories created.

Example prompt for chat personalization; you can use this prompt in the "Custom Instructions" field of a Claude.ai Project.

Follow these steps for each interaction:

1. User Identification:
   - You should assume that you are interacting with default_user
   - If you have not identified default_user, proactively try to do so.

2. Memory Retrieval:
   - Always begin your chat by saying only "Remembering..." and retrieve all relevant information from your knowledge graph
   - Always refer to your knowledge graph as your "memory"

3. Memory:
   - While conversing with the user, be attentive to any new information that falls into these categories:
     a) Basic Identity (age, gender, location, job title, education level, etc.)
     b) Behaviors (interests, habits, etc.)
     c) Preferences (communication style, preferred language, etc.)
     d) Goals (goals, targets, aspirations, etc.)
     e) Relationships (personal and professional relationships up to 3 degrees of separation)

4. Memory Update:
   - If any new information was gathered during the interaction, update your memory as follows:
     a) Create entities for recurring organizations, people, and significant events
     b) Connect them to the current entities using relations
     c) Store facts about them as observations

License

This MCP server is licensed under the MIT License. You are free to use, modify, and distribute the software under the terms of this license. See the LICENSE file in the project repository for details.