Expõe a pasta Markdown do kit astra-2cerebro como ferramentas MCP para Claude Code, Codex, Claude Desktop, n8n e bots. Leitura por padrão, escrita só se você ligar.

O kit astra-2cerebro guarda quem você é, prioridades, decisões, projetos e uma wiki interligada em arquivos Markdown. O cerebro-mcp sobe um servidor MCP apontado para essa pasta e cada cliente ganha as ferramentas cerebro_*. O cérebro continua sendo só arquivos; quem muda é quem consegue lê-los.
Contexto, prioridades, mapa de rotas, busca, leitura, wiki, projetos, conexões e rotinas. Mais três de escrita (decisão, fonte, execução) que só aparecem com --escrita.
Todo caminho passa por uma verificação que bloqueia ../, caminhos absolutos de fora, symlinks para fora, .git, node_modules e .env. Nada sai da máquina.
Por stdio para Claude Code, Codex e Claude Desktop. Com --http, um endpoint em 127.0.0.1 para n8n, bots e scripts. Sem índice, sem banco: lê o disco na hora.
O cliente sobe o servidor como processo filho, pergunta quais ferramentas existem e as chama quando precisa. O servidor lê a pasta na hora e devolve texto Markdown com o caminho do arquivo, para o modelo citar a fonte.
--dir, depois CEREBRO_DIR, depois a pasta atual se tiver AGENTS.md ou CLAUDE.md. Sem cérebro, erro claro e saída 1.
Dez ferramentas de leitura e os recursos cerebro:// sempre; as três de escrita só com --escrita ou CEREBRO_ESCRITA=1.
Cada chamada lê o disco, monta Markdown e devolve. Erro previsível vira isError; o processo nunca cai por uma chamada ruim.
| Ferramenta | O que faz | Escrita |
|---|---|---|
cerebro_contexto() | sobre-mim + sobre-o-trabalho + prioridades, com os caminhos | não |
cerebro_prioridades() | só contexto/prioridades.md | não |
cerebro_rotas() | a seção "Mapa de rotas" do AGENTS.md / CLAUDE.md | não |
cerebro_buscar(consulta, limite?) | busca por termos em todos os .md, com trecho e relevância | não |
cerebro_ler(caminho) | conteúdo de um arquivo ou listagem de pasta, só dentro do cérebro | não |
cerebro_wiki_indice() · cerebro_wiki_pagina(slug) | índice da wiki e página por slug | não |
cerebro_projetos() · cerebro_conexoes() · cerebro_rotinas() | projetos com estado, tabela de conexões, rotinas e execuções | não |
cerebro_registrar_decisao(...) | entrada datada em decisoes/registro.md | sim |
cerebro_adicionar_fonte(nome, conteudo) | fontes/AAAA-MM-DD-slug.md, sem sobrescrever | sim |
cerebro_registrar_execucao(id, resultado, ...) | linha nova no registro de execuções de rotinas | sim |
Nada de banco, nada de serviço externo. Só Node, uma pasta de cérebro e um cliente MCP.
O servidor é ESM puro. Se você usa Claude Code ou Codex, já tem.
# confira a versão node --version
Uma pasta com AGENTS.md/CLAUDE.md, contexto/, wiki/, decisoes/. Se ainda não tem, instale o kit.
# o kit cria a estrutura git clone https://github.com/inematds/astra-2cerebro
Claude Code, Codex, Claude Desktop — ou n8n/bot no modo HTTP.
# exemplo: Claude Code instalado claude mcp list
Todos os comandos são reais e estão no repositório. Troque /home/voce/meu-cerebro pela pasta do seu cérebro.
Baixa o servidor, instala o SDK oficial e roda os 42 testes contra a fixture incluída.
git clone https://github.com/inematds/cerebro-mcp.git cd cerebro-mcp npm install npm test # ℹ tests 42 · pass 42 · fail 0
O script sobe o binário de verdade e conversa em JSON-RPC por stdio: initialize, tools/list, tools/call.
node scripts/teste-stdio.mjs /home/voce/meu-cerebro # OK initialize → servidor cerebro-mcp 1.0.0 (protocolo 2025-06-18) # OK tools/list → 10 ferramentas: cerebro_contexto, cerebro_prioridades, ... # OK tools/call cerebro_ler ../../etc/passwd → isError (Acesso negado)
Uma linha. Para permitir que o agente registre decisões e fontes, acrescente --escrita no fim.
claude mcp add cerebro -e CEREBRO_DIR=/home/voce/meu-cerebro -- node /home/voce/cerebro-mcp/bin/cerebro-mcp.mjs # ou, versionável no projeto: .mcp.json com {"mcpServers":{"cerebro":{"command":"node","args":[...],"env":{"CEREBRO_DIR":"..."}}}}
Codex lê ~/.codex/config.toml; Claude Desktop lê claude_desktop_config.json. O INSTALAR.md tem os dois completos.
# ~/.codex/config.toml [mcp_servers.cerebro] command = "node" args = ["/home/voce/cerebro-mcp/bin/cerebro-mcp.mjs"] [mcp_servers.cerebro.env] CEREBRO_DIR = "/home/voce/meu-cerebro"
O agente decide sozinho quando chamar cada ferramenta. Comece pelo que exige contexto.
# você: Quais são as minhas prioridades deste trimestre? # agente → cerebro_prioridades() → responde citando contexto/prioridades.md # você: Por que decidimos fazer o site em gerador estático? # agente → cerebro_buscar("site estático") → cerebro_ler("decisoes/registro.md")
Sobe em 127.0.0.1, sem sessão. Exige o cabeçalho Accept: application/json, text/event-stream; tools/call funciona sem initialize antes.
CEREBRO_DIR=/home/voce/meu-cerebro node bin/cerebro-mcp.mjs --http 3333 curl -s http://127.0.0.1:3333/mcp -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cerebro_prioridades","arguments":{}}}'
A mesma pasta, dois clientes diferentes. O agente chama as ferramentas; você só pergunta.
Você (no Codex): O que a Empresa X pediu na última reunião?
→ cerebro_wiki_pagina("empresa-x") → cerebro_ler("wiki/fontes/2026-09-01-reuniao-empresa-x.md")
Agente: Aprovou o escopo da fase 2 com prazo no fim de outubro e ficou de definir quem valida os relatórios semanais (fonte: wiki/fontes/2026-09-01-reuniao-empresa-x.md).
Você (no Claude Code, servidor com --escrita): Registra que vamos aceitar a fase 2, prazo em outubro, porque a fase 1 foi aprovada.
→ cerebro_registrar_decisao(titulo, decisao, porque)
Agente: Registrado em decisoes/registro.md com a data de hoje: "## 2026-09-07: Aceitar a fase 2 do Projeto Alfa". Quer que eu anote as alternativas consideradas?
A 1.0.0 cobre o ciclo inteiro do kit. As próximas fases são conveniência, não fundação.