MemoryMesh
Um servidor de grafo de conhecimento para modelos de IA, focado em RPGs baseados em texto e narrativas interativas.
Documentação
MemoryMesh
MemoryMesh é um servidor de grafo de conhecimento projetado para modelos de IA, com foco em RPGs baseados em texto e narrativas interativas. Ele ajuda a IA a manter uma memória consistente e estruturada entre conversas, permitindo interações mais ricas e dinâmicas.
O projeto é baseado no Knowledge Graph Memory Server do repositório de servidores MCP e mantém sua funcionalidade principal.
IMPORTANTE
Atualização v0.3.0: O SDK MCP foi atualizado da versão v1.0.4 para v1.25.2 para estar em conformidade com a especificação atual do Model Context Protocol (2025-11-25). Esta é uma atualização importante que traz compatibilidade com os clientes MCP mais recentes, incluindo Claude Desktop, ChatGPT, Cursor, Gemini e VS Code. Após a atualização, execute npm install para buscar as novas dependências.
Desde v0.2.7, o local padrão dos esquemas foi alterado para dist/data/schemas.
Não se espera que este local mude no futuro, mas se você estiver atualizando de uma versão anterior, certifique-se de mover seus arquivos de esquema para o novo local.
Links Rápidos
Visão Geral
MemoryMesh é um servidor local de grafo de conhecimento que permite criar e gerenciar informações estruturadas para modelos de IA. Embora seja particularmente adequado para RPGs baseados em texto, seu design adaptável o torna útil para diversas aplicações, incluindo simulações de redes sociais, planejamento organizacional ou qualquer cenário que envolva dados estruturados.
Principais Recursos
- Ferramentas Dinâmicas Baseadas em Esquemas: Defina sua estrutura de dados com esquemas, e o MemoryMesh gera automaticamente ferramentas para adicionar, atualizar e excluir dados.
- Design Intuitivo de Esquemas: Crie esquemas que orientam a IA na geração e conexão de nós, usando campos obrigatórios, tipos enumerados e definições de relacionamentos.
- Metadados para Orientação da IA: Use metadados para fornecer contexto e estrutura, ajudando a IA a entender o significado e os relacionamentos dentro dos seus dados.
- Gerenciamento de Relacionamentos: Defina relacionamentos em seus esquemas para incentivar a IA a criar conexões (arestas) entre pontos de dados relacionados (nós).
- Feedback Informativo: Fornece feedback de erros à IA, permitindo que ela aprenda com os erros e melhore suas interações com o grafo de conhecimento.
- Suporte a Eventos: Um sistema de eventos rastreia operações, fornecendo insights sobre como o grafo de conhecimento está sendo modificado.
Nós
Os nós representam entidades ou conceitos dentro do grafo de conhecimento. Cada nó possui:
name: Um identificador único.nodeType: O tipo do nó (por exemplo,npc,artifact,location), definido pelos seus esquemas.metadata: Uma matriz de strings fornecendo detalhes descritivos sobre o nó.weight: (Opcional) Um valor numérico entre 0 e 1 representando a força do relacionamento, com padrão de 1.
Exemplo de Nó:
{
"name": "Aragorn",
"nodeType": "player_character",
"metadata": [
"Race: Human",
"Class: Ranger",
"Skills: Tracking, Swordsmanship",
"Affiliation: Fellowship of the Ring"
]
}
Arestas
As arestas representam relacionamentos entre nós. Cada aresta possui:
from: O nome do nó de origem.to: O nome do nó de destino.edgeType: O tipo de relacionamento (por exemplo,owns,located_in).
{
"from": "Aragorn",
"to": "Andúril",
"edgeType": "owns"
}
Esquemas
Os esquemas são o coração do MemoryMesh. Eles definem a estrutura dos seus dados e impulsionam a geração automática de ferramentas.
Localização dos Arquivos de Esquema
Coloque seus arquivos de esquema (.schema.json) no diretório dist/data/schemas do seu projeto MemoryMesh compilado. O MemoryMesh detectará e processará automaticamente esses arquivos na inicialização.
Estrutura do Esquema
Nome do arquivo: [name].schema.json. Por exemplo, para um esquema que define um 'npc', o nome do arquivo seria add_npc.schema.json.
name- Identificador para o esquema e tipo de nó dentro da memória. IMPORTANTE: O nome do esquema deve começar comadd_para ser reconhecido.description- Usado como descrição para a ferramentaadd_<name>, fornecendo contexto para a IA. (As ferramentasdeleteeupdatetêm uma descrição genérica)properties- Cada propriedade inclui seu tipo, descrição e restrições adicionais.propertytype- Os valores suportados sãostringouarray.description- Ajuda a orientar a IA sobre o propósito da entidade.required- Booleano. Setrue, a IA é forçada a fornecer esta propriedade ao criar um nó.enum- Uma matriz de strings. Se presente, a IA deve escolher uma das opções fornecidas.relationship- Define uma conexão com outro nó. Se uma propriedade for obrigatória e tiver um relacionamento, a IA sempre criará tanto o nó quanto a aresta correspondente.edgeType- Tipo do relacionamento a ser criado.description- Ajuda a orientar a IA sobre o propósito do relacionamento.
additionalProperties- Booleano. Setrue, permite que a IA adicione atributos extras além daqueles definidos como obrigatórios ou opcionais.
Exemplo de Esquema (add_npc.schema.json):
{
"name": "add_npc",
"description": "Schema for adding an NPC to the memory" ,
"properties": {
"name": {
"type": "string",
"description": "A unique identifier for the NPC",
"required": true
},
"race": {
"type": "string",
"description": "The species or race of the NPC",
"required": true,
"enum": [
"Human",
"Elf",
"Dwarf",
"Orc",
"Goblin"
]
},
"currentLocation": {
"type": "string",
"description": "The current location of the NPC",
"required": true,
"relationship": {
"edgeType": "located_in",
"description": "The current location of the NPC"
}
}
},
"additionalProperties": true
}
Com base neste esquema, o MemoryMesh cria automaticamente:
- add_npc: Para adicionar novos nós de NPC.
- update_npc: Para modificar nós de NPC existentes.
- delete_npc: Para remover nós de NPC.
O MemoryMesh inclui 11 esquemas pré-construídos projetados para RPGs baseados em texto, fornecendo uma base pronta para uso no desenvolvimento de jogos.
Ferramenta SchemaManager
O MemoryMesh inclui uma ferramenta SchemaManager para simplificar a criação e edição de esquemas. Ela fornece uma interface visual, facilitando a definição de suas estruturas de dados sem escrever JSON diretamente.
Ferramentas Dinâmicas
O MemoryMesh simplifica a interação com seu grafo de conhecimento por meio de ferramentas dinâmicas. Essas ferramentas não são codificadas manualmente, mas são geradas automaticamente diretamente das suas definições de esquema. Isso significa que quando você define a estrutura dos seus dados usando esquemas, o MemoryMesh cria inteligentemente um conjunto de ferramentas adaptadas para trabalhar com essa estrutura de dados específica.
Pense assim: Você fornece um modelo (o esquema), e o MemoryMesh constrói automaticamente as ferramentas necessárias para criar, modificar e remover elementos com base nesse modelo.
Como funciona nos bastidores?
O MemoryMesh possui um sistema inteligente que lê suas definições de esquema. Ele analisa a estrutura que você definiu, incluindo as propriedades das suas entidades e seus relacionamentos. Com base nessa análise, ele cria automaticamente um conjunto de ferramentas para cada tipo de entidade:
add_<entity>: Uma ferramenta para criar novas instâncias de uma entidade.update_<entity>: Uma ferramenta para modificar entidades existentes.delete_<entity>: Uma ferramenta para remover entidades.
Essas ferramentas são então disponibilizadas através de um hub central dentro do MemoryMesh, garantindo que possam ser facilmente acessadas e usadas por qualquer cliente ou IA conectado.
Em essência, o sistema de ferramentas dinâmicas do MemoryMesh fornece uma maneira poderosa e eficiente de gerenciar seu grafo de conhecimento, permitindo que você se concentre no conteúdo e na lógica da sua aplicação, em vez dos mecanismos subjacentes de manipulação de dados.
Arquivo de Memória
Por padrão, os dados são armazenados em um arquivo JSON em dist/data/memory.json.
Memory Viewer
O Memory Viewer é uma ferramenta separada projetada para ajudar você a visualizar e inspecionar o conteúdo do grafo de conhecimento gerenciado pelo MemoryMesh. Ele fornece uma interface amigável para explorar nós, arestas e suas propriedades.
Principais Recursos:
- Visualização de Grafo: Veja o grafo de conhecimento como um diagrama interativo de nós e links.
- Inspeção de Nós: Selecione nós para ver seu nodeType, metadados e arestas conectadas.
- Exploração de Arestas: Examine relacionamentos entre nós, incluindo edgeType e direção.
- Busca e Filtragem: Encontre rapidamente nós específicos ou filtre-os por tipo.
- Visualização em Tabela: Permite encontrar e inspecionar facilmente nós e arestas específicos, ou todos de uma vez.
- Visualização JSON Bruto: Permite visualizar os dados JSON brutos do arquivo de memória.
- Painel de Estatísticas: Fornece métricas e informações principais sobre o grafo de conhecimento: total de nós, total de arestas, tipos de nós e tipos de arestas.
- Busca e Filtro: Permite filtrar por tipo de nó ou tipo de aresta e filtrar se deseja mostrar nós, arestas ou ambos.
Acessando o Memory Viewer
O Memory Viewer é um aplicativo web independente. Discussão do Memory Viewer
Usando o Memory Viewer
- Selecionar Arquivo de Memória: No Memory Viewer, clique no botão "Select Memory File".
- Escolher Arquivo: Navegue até o diretório do seu projeto MemoryMesh e selecione o arquivo
memory.json(localizado emdist/data/memory.jsonpor padrão). - Explorar: O Memory Viewer carregará e exibirá o conteúdo do seu grafo de conhecimento.
Fluxo de Memória
Prompt
Para obter resultados ideais, use o recurso "Projects" do Claude com instruções personalizadas. Aqui está um exemplo de prompt com o qual você pode começar:
You are a helpful AI assistant managing a knowledge graph for a text-based RPG. You have access to the following tools: add_npc, update_npc, delete_npc, add_location, update_location, delete_location, and other tools for managing the game world.
When the user provides input, first process it using your available tools to update the knowledge graph. Then, respond in a way that is appropriate for a text-based RPG.
Você também pode instruir a IA a realizar ações específicas diretamente no chat.
Experimente diferentes prompts para encontrar o que funciona melhor para o seu caso de uso!
Exemplo
- Um exemplo simples com instruções personalizadas.
- Um exemplo apenas para fins de exemplo, com visualização (NÃO faz parte da funcionalidade)
Adicione algumas cidades, alguns npcs, alguns locais ao redor da cidade para explorar, esconda um artefato ou dois em algum lugar
Instalação
Pré-requisitos
- Node.js: Versão 18 ou superior. Você pode baixá-lo em nodejs.org.
- npm: Geralmente incluído com o Node.js.
- Claude for Desktop: Certifique-se de ter a versão mais recente instalada em claude.ai/download.
Etapas de Instalação
-
Clone o Repositório:
git clone https://github.com/CheMiguel23/memorymesh.git cd memorymesh -
Instale as Dependências:
npm install -
Compile o Projeto:
npm run buildEste comando compila o código TypeScript em JavaScript no diretório
diste copia arquivos de esquema e dados de exemplo para ele também. -
Verifique a Cópia dos Arquivos (Opcional):
- O processo de compilação deve copiar automaticamente a pasta
dataparadist. - Verifique se
dist/dataexiste e contém arquivos.json. Também verifique sedist/data/schemasexiste e contém arquivos.schema.json.
- O processo de compilação deve copiar automaticamente a pasta
-
Configure o Claude Desktop:
Abra seu arquivo de configuração do Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Adicione uma entrada para
memorymeshna seçãomcpServers. Você pode escolher uma das seguintes opções de configuração:
"mcpServers": { "memorymesh": { "command": "node", "args": ["/ABSOLUTE/PATH/TO/YOUR/PROJECT/memorymesh/dist/index.js"] } }- Substitua
/ABSOLUTE/PATH/TO/YOUR/PROJECT/pelo caminho absoluto real para o diretório do seu projetomemorymesh. - Exemplo (macOS):
"command": "node", "args": ["/Users/yourusername/Projects/memorymesh/dist/index.js"] - Exemplo (Windows):
"command": "node", "args": ["C:\\Projects\\memorymesh\\dist\\index.js"]
- macOS:
-
Reinicie o Claude Desktop: Reinicie completamente o Claude Desktop para que as alterações entrem em vigor.
Verificar Instalação
- Inicie o Claude Desktop.
- Abra um novo chat.
- Procure o ícone do plugin MCP
no canto superior direito. Se estiver lá, sua configuração provavelmente está correta.
- Clique no ícone
. Você deve ver "memorymesh" na lista de servidores conectados.
- Clique no ícone
. Se você vir ferramentas listadas (por exemplo,
add_npc,update_npc, etc.), seu servidor está funcionando e expondo as ferramentas corretamente.
Atualização
Antes de atualizar, certifique-se de fazer backup do diretório dist/data para evitar a perda dos seus dados de memória.
Solução de Problemas
-
Servidor não aparecendo no Claude:
- Verifique novamente os caminhos no seu
claude_desktop_config.json. Certifique-se de que são caminhos absolutos e corretos. - Confirme que o diretório
distexiste e contém os arquivos JavaScript compilados, incluindoindex.js. - Verifique os logs do Claude Desktop para erros:
- macOS:
~/Library/Logs/Claude/mcp-server-memorymesh.log(emcp.log) - Windows: (Provavelmente em uma pasta
Logsdentro de%AppData%\Claude)
- macOS:
- Verifique novamente os caminhos no seu
-
Ferramentas não aparecendo:
- Certifique-se de que seu comando
npm run buildfoi concluído sem erros. - Verifique se seus arquivos de esquema estão corretamente posicionados em
dist/data/schemase seguem a convenção de nomenclatura correta (add_[entity].schema.json). - Verifique a saída do console do seu servidor ou os logs para quaisquer erros durante a inicialização.
- Certifique-se de que seu comando
Configuração Avançada
O MemoryMesh oferece várias maneiras de personalizar seu comportamento além da configuração básica:
Variáveis
Você pode substituir as configurações padrão usando em /config/config.ts
- MEMORY_FILE: Especifica o caminho para o arquivo JSON usado para armazenar os dados do grafo de conhecimento. (Padrão:
dist/data/memory.json) - SCHEMAS_DIR: Caminho para o diretório de arquivos de esquema. (Padrão:
dist/data/schemas/memory.json)
Limitações
-
Exclusão de Nós: A IA pode hesitar em excluir nós do grafo de conhecimento. Incentive-a por meio de prompts, se necessário.
-
Conhecimento Conflitante: O MemoryMesh atualmente usa uma abordagem de "última escrita vence" para lidar com dados. Se informações conflitantes forem fornecidas sobre a mesma entidade, a atualização mais recente substituirá os valores anteriores. Aqui estão estratégias para gerenciar informações conflitantes:
Abordagens Atuais:
- Use metadados para rastrear fontes: Adicione entradas de metadados como
"Source: Character testimony"ou"Source: Official records"para rastrear de onde as informações vieram. - Use metadados temporais: Inclua carimbos de data/hora ou marcadores temporais narrativos (por exemplo,
"As of Chapter 3") nos metadados para rastrear quando as informações eram válidas. - Crie nós separados para perspectivas: Para informações subjetivas ou disputadas, crie nós separados representando diferentes pontos de vista (por exemplo,
rumor_about_villainvstruth_about_villain). - Use pesos de aresta: Aproveite a propriedade opcional
weightnas arestas (intervalo 0-1) para indicar confiança ou confiabilidade dos relacionamentos.
Exemplo - Rastreando informações incertas:
{ "name": "VillainOrigin_Rumor", "nodeType": "information", "metadata": [ "Source: Tavern gossip", "Reliability: Low", "Claims: Villain came from the northern mountains" ] }Considerações Futuras: Para aplicações que exigem resolução sofisticada de conflitos, considere implementar uma camada personalizada que:
- Mantenha o histórico de versões das alterações nos nós
- Rastreie a proveniência (fonte) de cada informação
- Implemente pontuações de confiança para afirmações
- Suporte períodos de validade temporal para fatos
- Use metadados para rastrear fontes: Adicione entradas de metadados como
Contribuição
Contribuições, feedback e ideias são bem-vindos! Este projeto é uma exploração pessoal sobre a integração de dados estruturados com capacidades de raciocínio de IA. Contribuições, feedback e ideias são bem-vindos para avançá-lo ou inspirar novos projetos.
