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

Servidor MCP de memoria

Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona una funcionalidad de gráfico de conocimiento para administrar entidades, relaciones y observaciones en la memoria, con reglas de validación estrictas para mantener la consistencia de los datos.

Instalación

Instalar el servidor en Claude Desktop:

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

Reglas de validación de datos

Nombres de entidades

  • Debe comenzar con una letra minúscula
  • Puede contener letras minúsculas, números y guiones.
  • Longitud máxima de 100 caracteres
  • Debe ser único dentro del gráfico
  • Ejemplos de nombres válidos: python-project , meeting-notes-2024 , user-john

Tipos de entidad

Se admiten los siguientes tipos de entidades:

  • person : Entidades humanas
  • concept : Ideas o principios abstractos
  • project : Iniciativas o tareas de trabajo
  • document : Cualquier forma de documentación
  • tool : Herramientas o utilidades de software
  • organization : Empresas o grupos
  • location : Lugares físicos o virtuales
  • event : Sucesos limitados en el tiempo

Observaciones

  • Cadenas no vacías
  • Longitud máxima de 500 caracteres
  • Debe ser único por entidad
  • Deben ser declaraciones fácticas y objetivas.
  • Incluir marca de tiempo cuando sea relevante

Relaciones

Se admiten los siguientes tipos de relación:

  • knows : Conexión de persona a persona
  • contains : Relación padre/hijo
  • uses : Entidad que utiliza otra entidad
  • created : Relación de autoría/creación
  • belongs-to : Membresía/propiedad
  • depends-on : Relación de dependencia
  • related-to : Relación genérica

Reglas de relación adicionales:

  • Deben existir tanto las entidades de origen como las de destino
  • No se permiten relaciones autorreferenciales
  • No se permiten dependencias circulares
  • Debe utilizar tipos de relación predefinidos

Uso

El servidor proporciona herramientas para gestionar un gráfico de conocimiento:

Obtener entidad

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}")

Obtener gráfico

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}")

Crear entidades

# 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}")

Añadir observación

# 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}")

Crear relación

# 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}")

Buscar memoria

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}")

La función de búsqueda admite:

  • Consultas temporales (por ejemplo, "más reciente", "último", "más reciente")
  • Consultas de actividad (p. ej., "entrenamiento", "ejercicio")
  • Búsquedas generales de entidades
  • Coincidencia difusa con un umbral de similitud del 80 %
  • Búsqueda ponderada en:
    • Nombres de entidades (peso: 1.0)
    • Tipos de entidad (peso: 0,8)
    • Observaciones (peso: 0,6)

Eliminar entidades

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}")

Eliminar relación

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}")

Vaciar memoria

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

Tipos de error

El servidor utiliza los siguientes tipos de errores:

  • NOT_FOUND : Entidad o recurso no encontrado
  • VALIDATION_ERROR : Datos de entrada no válidos
  • INTERNAL_ERROR : Error del lado del servidor
  • ALREADY_EXISTS : El recurso ya existe
  • INVALID_RELATION : Relación no válida entre entidades

Modelos de respuesta

Todas las herramientas devuelven respuestas tipificadas utilizando estos modelos:

Respuesta de entidad

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

Respuesta gráfica

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

OperaciónRespuesta

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

Desarrollo

Ejecución de pruebas

pytest tests/

Añadiendo nuevas funciones

  1. Actualizar las reglas de validación en validation.py
  2. Agregar pruebas en tests/test_validation.py
  3. Implementar cambios en knowledge_graph_manager.py
-
security - not tested
A
license - permissive license
-
quality - not tested

Proporciona una funcionalidad de gráfico de conocimiento para administrar entidades, relaciones y observaciones en la memoria con reglas de validación estrictas para mantener la consistencia de los datos.

  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