mcp-knowledge-graph
by: shaneholloman
MCP server enabling persistent memory for Claude through a local knowledge graph - fork focused on local development
📌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 identifierentityType
(string): Type classificationobservations
(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 nameto
(string): Target entity namerelationType
(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 entitycontents
(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 entityobservations
(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 nameto
(string): Target entity namerelationType
(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.