Knowledge Graph Memory Server

Permite memória persistente para Claude usando um grafo de conhecimento local de entidades, relações e observações.

Documentação

forked https://github.com/modelcontextprotocol/servers/tree/main

Knowledge Graph Memory Server

Uma implementação básica de memória persistente usando um grafo de conhecimento local. Isso permite que o Claude lembre informações sobre o usuário entre conversas.

Conceitos Principais

Entidades

Entidades são os nós primários no grafo de conhecimento. Cada entidade possui:

  • Um nome único (identificador)
  • Um tipo de entidade (ex.: "pessoa", "organização", "evento")
  • Uma lista de observações

Exemplo:

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

Relações

Relações definem conexões direcionadas entre entidades. Elas são sempre armazenadas na voz ativa e descrevem como as entidades interagem ou se relacionam entre si.

Exemplo:

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

Observações

Observações são informações discretas sobre uma entidade. Elas são:

  • Armazenadas como strings
  • Anexadas a entidades específicas
  • Podem ser adicionadas ou removidas de forma independente
  • Devem ser atômicas (um fato por observação)

Exemplo:

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

API

Ferramentas

  • create_entities

    • Cria múltiplas novas entidades no grafo de conhecimento
    • Entrada: entities (array de objetos)
      • Cada objeto contém:
        • name (string): Identificador da entidade
        • entityType (string): Classificação de tipo
        • observations (string[]): Observações associadas
    • Ignora entidades com nomes existentes
  • create_relations

    • Cria múltiplas novas relações entre entidades
    • Entrada: relations (array de objetos)
      • Cada objeto contém:
        • from (string): Nome da entidade de origem
        • to (string): Nome da entidade de destino
        • relationType (string): Tipo de relação na voz ativa
    • Ignora relações duplicadas
  • add_observations

    • Adiciona novas observações a entidades existentes
    • Entrada: observations (array de objetos)
      • Cada objeto contém:
        • entityName (string): Entidade de destino
        • contents (string[]): Novas observações a adicionar
    • Retorna observações adicionadas por entidade
    • Falha se a entidade não existir
  • delete_entities

    • Remove entidades e suas relações
    • Entrada: entityNames (string[])
    • Exclusão em cascata das relações associadas
    • Operação silenciosa se a entidade não existir
  • delete_observations

    • Remove observações específicas de entidades
    • Entrada: deletions (array de objetos)
      • Cada objeto contém:
        • entityName (string): Entidade de destino
        • observations (string[]): Observações a remover
    • Operação silenciosa se a observação não existir
  • delete_relations

    • Remove relações específicas do grafo
    • Entrada: relations (array de objetos)
      • Cada objeto contém:
        • from (string): Nome da entidade de origem
        • to (string): Nome da entidade de destino
        • relationType (string): Tipo de relação
    • Operação silenciosa se a relação não existir
  • read_graph

    • Lê todo o grafo de conhecimento
    • Nenhuma entrada necessária
    • Retorna a estrutura completa do grafo com todas as entidades e relações
  • search_nodes

    • Busca nós com base em uma ou mais palavras-chave
    • Entrada: query (string)
      • Palavras-chave separadas por espaços (ex.: "orçamento utilidade")
      • Múltiplas palavras-chave são tratadas como condições OR
    • Busca em:
      • Nomes de entidades
      • Tipos de entidades
      • Subdomínios
      • Conteúdo das observações
    • Comportamento de correspondência:
      • Não diferencia maiúsculas de minúsculas
      • Correspondência parcial de palavras
      • Qualquer palavra-chave pode corresponder a qualquer campo
      • Retorna entidades que correspondem a QUALQUER uma das palavras-chave
    • Retorna entidades correspondentes e suas relações
    • Exemplos de consultas:
      • Palavra-chave única: "orçamento"
      • Múltiplas palavras-chave: "orçamento utilidade"
      • Com caracteres especiais: "orçamento & utilidade"
  • open_nodes

    • Recupera nós específicos pelo nome
    • Entrada: names (string[])
    • Retorna:
      • Entidades solicitadas
      • Relações entre as entidades solicitadas
    • Ignora silenciosamente nós inexistentes

Uso com Claude Desktop

Configuração

Adicione isto ao seu 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 com configuração personalizada

O servidor pode ser configurado usando as seguintes variáveis de ambiente:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-memory"
      ],
      "env": {
        "MEMORY_FILE_PATH": "/path/to/custom/memory.json"
      }
    }
  }
}
  • MEMORY_FILE_PATH: Caminho para o arquivo JSON de armazenamento de memória (padrão: memory.json no diretório do servidor)

Prompt do Sistema

O prompt para utilizar a memória depende do caso de uso. Alterar o prompt ajudará o modelo a determinar a frequência e os tipos de memórias criadas.

Aqui está um exemplo de prompt para personalização de chat. Você pode usar este prompt no campo "Instruções Personalizadas" de um Projeto Claude.ai.

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

Compilação

Docker:

docker build -t mcp/memory -f src/memory/Dockerfile . 

Licença

Este servidor MCP é licenciado sob a Licença MIT. Isso significa que você é livre para usar, modificar e distribuir o software, sujeito aos termos e condições da Licença MIT. Para mais detalhes, consulte o arquivo LICENSE no repositório do projeto.