TL;DR
Adicione memória persistente a agentes de IA em 4 etapas: (1) Configure um servidor de memória MCP com as ferramentas remember, recall, search e rollback, (2) Adicione instruções de memória aos prompts do agente, (3) Configure ~/.claude/settings.json para Claude Code ou .cursor/mcp.json para Cursor, (4) Use padrões de memória para registro de decisões, transferências de agente e pontos de verificação de sessão. Agentes retêm contexto entre sessões — chega de copiar e colar conversas anteriores.
Resolva o problema “Não lembro de ontem”. Adicione memória persistente a agentes de IA usando o protocolo MCP, e eles se lembrarão de decisões, entregáveis e contexto de sessões anteriores.
Você conhece a rotina:
Day 1: "Build the user authentication system"
Agent: [Builds JWT auth, creates users table, implements refresh tokens]
Day 2: "Continue from yesterday"
Agent: "I don't have context from previous sessions. Can you paste what we did?"
Você copia e cola a conversa anterior. O agente lê 2000 linhas de contexto. Ambos perdem 15 minutos para se atualizar.
Memória persistente resolve isso. Com a memória MCP (Model Context Protocol), os agentes armazenam decisões automaticamente e as recuperam quando necessário. Sem copiar e colar. Sem re-explicações.
Neste tutorial, você configurará a memória MCP para agentes de IA. Você aprenderá como armazenar decisões de sessões do Arquiteto de Backend, recuperar contexto ao mudar para o Otimizador de Banco de Dados e entregar resultados ao Desenvolvedor Frontend — tudo sem perder o contexto. Os mesmos padrões de memória funcionam se você estiver construindo APIs com integração Apidog ou gerenciando sprints de desenvolvimento de vários dias.
O Que É Memória MCP?
A memória MCP permite que agentes de IA armazenem e recuperem informações entre sessões. Pense nela como um caderno compartilhado onde os agentes podem escrever e ler.
Quatro ferramentas alimentam a memória MCP:
| Ferramenta | Propósito | Exemplo |
|---|---|---|
remember |
Armazenar informações com tags | Salvar “tabela de usuários com UUID, bcrypt” |
recall |
Pesquisar por palavra-chave ou tag | Encontrar “decisões de auth” |
rollback |
Restaurar para um estado anterior | Desfazer alterações de esquema ruins |
search |
Encontrar entre sessões | “O que o Arquiteto de Backend decidiu?” |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ Agente de IA │ │ Servidor │ │ Armazenamento│
│ (Claude Code) │◄───────►│ de Memória MCP │◄───────►│ (SQLite) │
└─────────────────┘ JSON └──────────────────┘ I/O └─────────────┘
Passo 1: Configure um Servidor de Memória MCP
Você precisa de um servidor MCP que exponha ferramentas de memória. Existem várias implementações de código aberto.
Opção A: Use um servidor de memória hospedado
npm install -g @example/mcp-memory-server
Opção B: Execute um servidor local simples
Crie memory-server.js:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs/promises";
import path from "path";
const MEMORY_FILE = path.join(process.env.HOME, ".mcp-memory", "memories.json");
const server = new McpServer({
name: "memory",
version: "1.0.0"
});
// Ensure memory file exists
async function initMemory() {
await fs.mkdir(path.dirname(MEMORY_FILE), { recursive: true });
try {
await fs.access(MEMORY_FILE);
} catch {
await fs.writeFile(MEMORY_FILE, JSON.stringify([]));
}
}
// Tool: remember
server.tool(
"remember",
{
content: z.string().describe("Information to store"),
tags: z.array(z.string()).describe("Tags for retrieval (e.g., ['backend', 'auth'])"),
agent: z.string().optional().describe("Agent name for tagging")
},
async ({ content, tags, agent }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const memory = {
id: Date.now().toString(),
content,
tags,
agent,
timestamp: new Date().toISOString()
};
memories.push(memory);
await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2));
return { content: [{ type: "text", text: `Stored memory with tags: ${tags.join(", ")}` }] };
}
);
// Tool: recall
server.tool(
"recall",
{
query: z.string().describe("Search query or tag to find"),
agent: z.string().optional().describe("Filter by agent name")
},
async ({ query, agent }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const results = memories.filter(m => {
const matchesQuery = m.content.toLowerCase().includes(query.toLowerCase()) ||
m.tags.some(t => t.toLowerCase().includes(query.toLowerCase()));
const matchesAgent = !agent || m.agent === agent;
return matchesQuery && matchesAgent;
});
return {
content: [{
type: "text",
text: results.length === 0
? "No memories found"
: results.map(m => `[${m.timestamp}] ${m.content}`).join("\n\n")
}]
};
}
);
// Tool: search
server.tool(
"search",
{
tags: z.array(z.string()).describe("Tags to search for"),
limit: z.number().optional().default(10)
},
async ({ tags, limit }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const results = memories
.filter(m => tags.some(t => m.tags.includes(t)))
.slice(0, limit);
return {
content: [{
type: "text",
text: results.map(m => `[${m.agent || "unknown"}] ${m.content}`).join("\n\n")
}]
};
}
);
// Tool: rollback
server.tool(
"rollback",
{
agent: z.string().describe("Agent name to rollback"),
timestamp: z.string().describe("Rollback to this timestamp")
},
async ({ agent, timestamp }) => {
await initMemory();
const memories = JSON.parse(await fs.readFile(MEMORY_FILE, "utf-8"));
const rolledBack = memories.filter(m =>
m.agent !== agent || new Date(m.timestamp) <= new Date(timestamp)
);
await fs.writeFile(MEMORY_FILE, JSON.stringify(rolledBack, null, 2));
return {
content: [{
type: "text",
text: `Rolled back ${agent} to ${timestamp}`
}]
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
Execute o servidor:
node memory-server.js
Passo 2: Adicione Instruções de Memória a Qualquer Agente
Você não precisa modificar os arquivos do agente. Adicione instruções de memória em seu prompt:
Você tem acesso às ferramentas de memória MCP: remember, recall, search, rollback.
Siga estes protocolos de memória:
**Ao iniciar uma sessão:**
1. Recupere o contexto: recall(query="ecommerce-api", agent="Backend Architect")
2. Revise os itens pendentes da última sessão
**Ao concluir o trabalho:**
1. Lembre-se dos entregáveis com tags:
- remember(content="Criada tabela de usuários com chave primária UUID, hash de senha bcrypt, autenticação JWT com tokens de atualização", tags=["ecommerce-api", "database", "auth"], agent="Backend Architect")
2. Inclua as decisões tomadas e os itens pendentes
**Ao transferir para outro agente:**
1. Deixe o contexto para o agente receptor:
- remember(content="Endpoints da API: /auth/login, /auth/register, /products, /orders. Fluxo de autenticação: token de acesso JWT (15min) + token de atualização (7 dias). Problema conhecido: limitação de taxa ainda não implementada", tags=["ecommerce-api", "handoff"], agent="Backend Architect", for="Frontend Developer")
**Quando algo falha:**
1. Procure pelo último estado funcional conhecido
2. Use rollback para restaurar
Exemplo em ação:
Você: "Ative o modo Arquiteto de Backend. Projete o sistema de usuário para nossa API de e-commerce."
[Agente projeta o sistema, cria esquema, implementa autenticação]
Agente: "Sistema de usuário completo. Armazenando memória..."
→ Chama: remember("tabela de usuários com UUID, bcrypt, JWT + tokens de atualização", tags: ["ecommerce-api", "auth", "database"])
[Sessão termina]
[Dia seguinte]
Você: "Continue de ontem"
Agente: "Recuperando contexto..."
→ Chama: recall(query="ecommerce-api")
→ Retorna: "tabela de usuários com UUID, bcrypt, JWT + tokens de atualização"
Agente: "Ontem eu projetei a tabela de usuários com chaves primárias UUID, implementei hash de senha bcrypt e configurei a autenticação JWT com tokens de atualização. Próximo passo: esquema do catálogo de produtos. Pronto para continuar."
Passo 3: Configurar para Claude Code
Adicione o servidor de memória à sua configuração MCP:
Edite ~/.claude/settings.json:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"],
"env": {
"HOME": "/Users/your-username"
}
}
}
}
Reinicie o Claude Code. As ferramentas de memória agora devem estar disponíveis.
Teste:
Use a ferramenta remember para armazenar: "Memória de teste para projeto de e-commerce"
Tags: ["test", "ecommerce-api"]
Use a ferramenta recall para encontrar memórias sobre "test"
Passo 4: Configurar para Cursor
Crie .cursor/mcp.json em seu projeto:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/absolute/path/to/memory-server.js"]
}
}
}
Teste:
@memory remember "Iniciando projeto de API de e-commerce com PostgreSQL"
Tags: ["ecommerce-api", "setup"]
@memory recall query="ecommerce"
Padrões de Memória para Fluxos de Trabalho Reais
Padrão 1: Registro de Decisões
Toda vez que você tomar uma decisão técnica, registre-a:
remember({
content: "Escolheu PostgreSQL em vez de MySQL para: (1) suporte JSONB para atributos de produto flexíveis, (2) melhor busca de texto completo, (3) suporte nativo a UUID",
tags: ["ecommerce-api", "database", "decision"],
agent: "Backend Architect"
})
Mais tarde, quando alguém perguntar “Por que PostgreSQL?”:
recall(query="decisão PostgreSQL MySQL")
Padrão 2: Transferências de Agente
Ao trocar de agente, deixe uma nota de transferência:
remember({
content: "Backend completo. Endpoints: POST /auth/login, POST /auth/register, GET /products, POST /orders. Autenticação: JWT 15min acesso + 7 dias refresh. Pendente: limitação de taxa, verificação de e-mail. Frontend precisa: formulário de login, lista de produtos, carrinho, checkout.",
tags: ["ecommerce-api", "handoff", "backend-complete"],
agent: "Backend Architect",
for: "Frontend Developer"
})
O Desenvolvedor Frontend começa com:
recall(query="transferência", agent="Backend Architect")
Padrão 3: Pontos de Verificação da Sessão
No final de cada sessão de trabalho:
remember({
content: "Sessão completa. Concluído: tabela de usuários, endpoints de autenticação, esquema de produto. Próxima sessão: sistema de pedidos, webhook de pagamento. Bloqueadores: aguardando chaves da API Stripe.",
tags: ["ecommerce-api", "checkpoint", "session-1"],
agent: "Backend Architect"
})
Retomar a próxima sessão:
recall(query="checkpoint sessão-1")
Padrão 4: Rastreamento de Bugs
Quando você encontrar um bug:
remember({
content: "BUG: Token de atualização não expira após logout. Token armazenado em memória, não persistido. Correção: mover para Redis com TTL.",
tags: ["ecommerce-api", "bug", "auth"],
agent: "Revisor de Código",
severity: "high"
})
Procure por bugs mais tarde:
search(tags=["bug", "ecommerce-api"])
Solução de Problemas
Memória não persistindo:
- Verifique o caminho do arquivo de memória (
~/.mcp-memory/memories.json) - Certifique-se de que o servidor MCP esteja em execução
- Verifique se o Claude Code/Cursor tem a configuração MCP
Muitos resultados na recuperação:
- Adicione tags mais específicas
- Filtre por nome do agente
- Use frases exatas entre aspas
Arquivo de memória crescendo muito:
- Arquive memórias antigas periodicamente
- Use
rollbackpara limpar projetos concluídos - Adicione datas de expiração ao seu esquema de memória
O Que Você Construiu
| Componente | Propósito |
|---|---|
| Servidor de Memória MCP | Armazena/recupera informações entre sessões |
Ferramenta remember |
Registra decisões, entregáveis, transferências |
Ferramenta recall |
Encontra contexto de sessões anteriores |
Ferramenta search |
Consulta por tags em todas as memórias |
Ferramenta rollback |
Restaura para um estado anterior quando necessário |
| Padrões de memória | Registro de decisões, transferências, pontos de verificação, rastreamento de bugs |
Próximos Passos
Estenda o servidor de memória:
- Adicione pesquisa semântica com embeddings
- Implemente expiração de memória (arquivamento automático após 30 dias)
- Adicione sumarização de memória (condensar sessões longas)
Construa memória de equipe:
- Compartilhe um servidor de memória central com sua equipe
- Marque memórias por projeto e desenvolvedor
- Crie fluxos de integração para novos membros da equipe
Integre com ferramentas:
- Registre automaticamente commits git como memórias
- Sincronize com gerenciamento de projetos (Jira, Linear)
- Exporte memórias para documentação
Solução de Problemas Comuns
Memória não persistindo entre sessões:
- Verifique se o servidor MCP está em execução antes de iniciar o Claude Code
- Verifique se o caminho do arquivo de memória existe:
ls -la ~/.mcp-memory/memories.json - Certifique-se de que as permissões do arquivo permitam leitura/escrita:
chmod 644 ~/.mcp-memory/memories.json - Confirme se a configuração do servidor em
~/.claude/settings.jsonaponta para o caminho correto
Recall retorna resultados vazios:
- Verifique se a consulta corresponde às tags armazenadas (sensível a maiúsculas/minúsculas)
- Tente termos de busca mais amplos ou use
searchcom tags específicas - Verifique se as memórias foram realmente armazenadas:
cat ~/.mcp-memory/memories.json - Certifique-se de que o filtro de nome do agente corresponde (se usando o parâmetro
agent)
Arquivo de memória crescendo demais:
- Implemente arquivamento automático para memórias com mais de 30 dias
- Adicione uma ferramenta
pruneque exclui memórias por intervalo de datas - Divida as memórias em arquivos separados por projeto ou data
- Use um backend de banco de dados (SQLite) em vez de JSON para uso em larga escala
Servidor falha ao iniciar:
- Verifique a versão do Node.js:
node --version(deve ser 18+) - Instale dependências ausentes:
npm install @modelcontextprotocol/sdk zod - Procure por erros de sintaxe no código do servidor
- Execute diretamente para ver os erros:
node memory-server.js
Múltiplos agentes sobrescrevendo as memórias uns dos outros:
- Sempre inclua o campo
agentao chamarremember - Use tags únicas por projeto:
["projeto-x", "backend", "auth"] - Filtre a recuperação por nome do agente ao recuperar o contexto
- Considere arquivos de memória separados por projeto
Considerações de Segurança do Servidor de Memória
Armazenamento de Chaves de API:Se o seu servidor de memória armazena dados sensíveis (chaves de API, senhas), implemente criptografia:
import crypto from 'crypto';
const ENCRYPTION_KEY = process.env.MEMORY_ENCRYPTION_KEY;
const ALGORITHM = 'aes-256-gcm';
function encrypt(text) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(ENCRYPTION_KEY), iv);
const encrypted = cipher.update(text, 'utf8', 'hex');
return {
encryptedData: encrypted + cipher.final('hex'),
iv: iv.toString('hex'),
authTag: cipher.getAuthTag().toString('hex')
};
}
function decrypt(encrypted) {
const decipher = crypto.createDecipheriv(
ALGORITHM,
Buffer.from(ENCRYPTION_KEY),
Buffer.from(encrypted.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(encrypted.authTag, 'hex'));
return decipher.update(encrypted.encryptedData, 'hex', 'utf8') + decipher.final('utf8');
}
Controle de Acesso:Para servidores de memória de equipe, adicione autenticação:
- Exija chave de API nas chamadas de ferramenta de memória
- Implemente namespaces de memória específicos do usuário
- Registre todas as operações de memória para trilhas de auditoria
- Limite a taxa de requisições por usuário
Seus agentes de IA agora têm memória persistente. Eles lembram de ontem. Eles recuperam decisões. Eles transferem contexto sem copiar e colar.
Chega de “Não tenho contexto de sessões anteriores.” Chega de re-explicar. Chega de tempo desperdiçado.
Esse é o poder da memória MCP: dê aos seus agentes um caderno compartilhado, e observe-os se tornarem realmente úteis em projetos de vários dias.
Perguntas Frequentes
O que é memória MCP?A memória MCP é uma implementação de protocolo que permite aos agentes de IA armazenar e recuperar informações entre sessões. Pense nela como um caderno compartilhado onde os agentes podem escrever e ler, persistindo o contexto além de conversas únicas.
Como configuro memória persistente para Claude Code?Instale um servidor de memória MCP, depois adicione-o a ~/.claude/settings.json com o comando e caminho do servidor. Reinicie o Claude Code e as ferramentas de memória (remember, recall, search, rollback) se tornarão disponíveis.
Quais agentes de IA suportam memória MCP?Qualquer agente rodando em clientes compatíveis com MCP (Claude Code, Cursor, Windsurf) pode usar ferramentas de memória. Você não precisa modificar os arquivos do agente — apenas adicione instruções de memória aos seus prompts.
Quais são os melhores padrões de memória para transferências de agente?Use remember com tags como ["transferência", "nome-do-projeto"] para deixar contexto para o próximo agente. Inclua o trabalho concluído, itens pendentes e problemas conhecidos. O agente receptor chama recall(query="transferência") para recuperá-lo.
Quanto de memória os servidores MCP podem armazenar?Depende da implementação. O servidor de referência usa um arquivo JSON que cresce indefinidamente. Servidores de produção devem adicionar políticas de expiração, arquivamento automático ou backends de banco de dados para uso em larga escala.
As equipes podem compartilhar um servidor de memória central?Sim. Execute o servidor de memória em uma máquina compartilhada ou instância na nuvem, configure os clientes de todos os membros da equipe para se conectarem a ele e marque as memórias por projeto e desenvolvedor para recuperação organizada.
E se a recuperação de memória retornar muitos resultados?Adicione tags mais específicas ao armazenar memórias. Filtre por nome do agente em suas consultas de recuperação. Use frases exatas entre aspas. Considere implementar pesquisa semântica com embeddings para uma recuperação mais inteligente.
