Knowledge Graph Memory Server
Permite memoria persistente para Claude usando un grafo de conocimiento local de entidades, relaciones y observaciones.
Documentación
bifurcado https://github.com/modelcontextprotocol/servers/tree/main
Knowledge Graph Memory Server
Una implementación básica de memoria persistente utilizando un grafo de conocimiento local. Esto permite que Claude recuerde información sobre el usuario a través de los chats.
Conceptos Clave
Entidades
Las entidades son los nodos primarios en el grafo de conocimiento. Cada entidad tiene:
- Un nombre único (identificador)
- Un tipo de entidad (p. ej., "persona", "organización", "evento")
- Una lista de observaciones
Ejemplo:
{
"name": "John_Smith",
"entityType": "person",
"observations": ["Speaks fluent Spanish"]
}
Relaciones
Las relaciones definen conexiones dirigidas entre entidades. Siempre se almacenan en voz activa y describen cómo las entidades interactúan o se relacionan entre sí.
Ejemplo:
{
"from": "John_Smith",
"to": "Anthropic",
"relationType": "works_at"
}
Observaciones
Las observaciones son piezas discretas de información sobre una entidad. Son:
- Almacenadas como cadenas
- Adjuntas a entidades específicas
- Pueden añadirse o eliminarse de forma independiente
- Deben ser atómicas (un hecho por observación)
Ejemplo:
{
"entityName": "John_Smith",
"observations": [
"Speaks fluent Spanish",
"Graduated in 2019",
"Prefers morning meetings"
]
}
API
Herramientas
-
create_entities
- Crear múltiples entidades nuevas en el grafo de conocimiento
- Entrada:
entities(arreglo de objetos)- Cada objeto contiene:
name(string): Identificador de entidadentityType(string): Clasificación de tipoobservations(string[]): Observaciones asociadas
- Cada objeto contiene:
- Ignora entidades con nombres existentes
-
create_relations
- Crear múltiples relaciones nuevas entre entidades
- Entrada:
relations(arreglo de objetos)- Cada objeto contiene:
from(string): Nombre de la entidad de origento(string): Nombre de la entidad de destinorelationType(string): Tipo de relación en voz activa
- Cada objeto contiene:
- Omite relaciones duplicadas
-
add_observations
- Añadir nuevas observaciones a entidades existentes
- Entrada:
observations(arreglo de objetos)- Cada objeto contiene:
entityName(string): Entidad de destinocontents(string[]): Nuevas observaciones a añadir
- Cada objeto contiene:
- Devuelve las observaciones añadidas por entidad
- Falla si la entidad no existe
-
delete_entities
- Eliminar entidades y sus relaciones
- Entrada:
entityNames(string[]) - Eliminación en cascada de las relaciones asociadas
- Operación silenciosa si la entidad no existe
-
delete_observations
- Eliminar observaciones específicas de entidades
- Entrada:
deletions(arreglo de objetos)- Cada objeto contiene:
entityName(string): Entidad de destinoobservations(string[]): Observaciones a eliminar
- Cada objeto contiene:
- Operación silenciosa si la observación no existe
-
delete_relations
- Eliminar relaciones específicas del grafo
- Entrada:
relations(arreglo de objetos)- Cada objeto contiene:
from(string): Nombre de la entidad de origento(string): Nombre de la entidad de destinorelationType(string): Tipo de relación
- Cada objeto contiene:
- Operación silenciosa si la relación no existe
-
read_graph
- Leer todo el grafo de conocimiento
- No se requiere entrada
- Devuelve la estructura completa del grafo con todas las entidades y relaciones
-
search_nodes
- Buscar nodos basándose en una o más palabras clave
- Entrada:
query(string)- Palabras clave separadas por espacios (p. ej., "budget utility")
- Las múltiples palabras clave se tratan como condiciones OR
- Busca en:
- Nombres de entidades
- Tipos de entidades
- Subdominios
- Contenido de observaciones
- Comportamiento de coincidencia:
- No distingue mayúsculas y minúsculas
- Coincidencia parcial de palabras
- Cualquier palabra clave puede coincidir con cualquier campo
- Devuelve entidades que coinciden con CUALQUIERA de las palabras clave
- Devuelve las entidades coincidentes y sus relaciones
- Consultas de ejemplo:
- Palabra clave única: "budget"
- Múltiples palabras clave: "budget utility"
- Con caracteres especiales: "budget & utility"
-
open_nodes
- Recuperar nodos específicos por nombre
- Entrada:
names(string[]) - Devuelve:
- Entidades solicitadas
- Relaciones entre las entidades solicitadas
- Omite silenciosamente nodos inexistentes
Uso con Claude Desktop
Configuración
Añade esto a tu claude_desktop_config.json:
Docker
{
"mcpServers": {
"memory": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/memory"]
}
}
}
NPX
{
"mcpServers": {
"memory": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-memory"
]
}
}
}
NPX con configuración personalizada
El servidor se puede configurar usando las siguientes variables de entorno:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-memory"
],
"env": {
"MEMORY_FILE_PATH": "/path/to/custom/memory.json"
}
}
}
}
MEMORY_FILE_PATH: Ruta al archivo JSON de almacenamiento de memoria (por defecto:memory.jsonen el directorio del servidor)
Prompt del Sistema
El prompt para utilizar la memoria depende del caso de uso. Cambiar el prompt ayudará al modelo a determinar la frecuencia y los tipos de memorias creadas.
Aquí hay un ejemplo de prompt para la personalización del chat. Podrías usar este prompt en el campo "Instrucciones personalizadas" de un 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"
- When searching your memory, you can use multiple keywords to find related information
- Example searches:
* Single concept: "programming"
* Related concepts: "programming python"
* Specific domain with role: "work engineer"
3. Memory Creation:
- 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)
- When storing information, use specific and descriptive keywords that will help in future searches
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
d) Use clear and searchable terms in entity names and observations to facilitate future retrieval
Compilación
Docker:
docker build -t mcp/memory -f src/memory/Dockerfile .
Licencia
Este servidor MCP está licenciado bajo la Licencia MIT. Esto significa que eres libre de usar, modificar y distribuir el software, sujeto a los términos y condiciones de la Licencia MIT. Para más detalles, consulta el archivo LICENSE en el repositorio del proyecto.