Skip to main content
Glama
inematds
by inematds
README.md
# cerebro-mcp

**đŸ‡§đŸ‡· [PortuguĂȘs](README.md) · đŸ‡ș🇾 [English](README.en.md) · đŸ‡Ș🇾 [Español](README.es.md)**

Servidor **MCP** (Model Context Protocol) que expĂ”e o seu **segundo cĂ©rebro** — a pasta de Markdown criada pelo kit [astra-2cerebro](https://github.com/inematds/astra-2cerebro) — como ferramentas para qualquer cliente MCP: **Claude Code, Codex, Claude Desktop, n8n, bots** e scripts.

Um cérebro. Vårios clientes. Nenhuma cópia.

## 📖 Guia de uso

Guia completo (landing + passo a passo): **https://inematds.github.io/cerebro-mcp/guia/**

```
                     ┌──────────────┐
  Claude Code ──┐    │              │
  Codex ────────┌──â–ș │  cerebro-mcp │ ──â–ș ~/meu-cerebro/  (AGENTS.md, contexto/, wiki/, decisoes/ ...)
  Claude Desktop─    │   (stdio ou  │
  n8n / bot ────┘    │    HTTP)     │
                     └──────────────┘
```

## Por quĂȘ

O kit astra-2cerebro guarda quem vocĂȘ Ă©, o que faz, suas prioridades, decisĂ”es, projetos e uma wiki interligada — tudo em arquivos Markdown. Isso funciona muito bem para o agente que abre a pasta. Mas o Codex no terminal, o Claude Desktop no notebook, um fluxo no n8n e um bot no celular nĂŁo abrem a pasta.

O `cerebro-mcp` resolve isso: sobe um servidor MCP apontado para a pasta e cada cliente passa a ter `cerebro_contexto`, `cerebro_buscar`, `cerebro_ler`, `cerebro_registrar_decisao` e as demais ferramentas. O cĂ©rebro continua sendo sĂł arquivos; quem muda Ă© quem consegue lĂȘ-los.

## Instalação em 1 minuto

Precisa de Node.js 20 ou superior.

```bash
git clone https://github.com/inematds/cerebro-mcp.git
cd cerebro-mcp
npm install
npm test                      # 42 testes contra a fixture em test/fixture

# aponte para o seu cérebro e teste por stdio
CEREBRO_DIR=~/meu-cerebro node scripts/teste-stdio.mjs ~/meu-cerebro
```

Registrar no **Claude Code** (uma linha):

```bash
claude mcp add cerebro -e CEREBRO_DIR=/caminho/do/cerebro -- node /caminho/cerebro-mcp/bin/cerebro-mcp.mjs
```

Codex, Claude Desktop, `.mcp.json` do projeto e modo HTTP: veja **[INSTALAR.md](INSTALAR.md)**.

## Como funciona

```bash
cerebro-mcp [--dir <pasta>] [--escrita] [--http <porta>] [--host <ip>]
```

| Configuração | Como | Padrão |
|---|---|---|
| Pasta do cérebro | `--dir <pasta>` ou `CEREBRO_DIR` | pasta atual, se tiver `AGENTS.md` ou `CLAUDE.md`; senão erro claro |
| Escrita | `--escrita` ou `CEREBRO_ESCRITA=1` | desligada (somente leitura) |
| Transporte | `--http <porta>` | stdio |
| Endereço HTTP | `--host <ip>` | `127.0.0.1` |

Sem `--http` o servidor fala MCP por **stdio** — Ă© o que Claude Code, Codex e Claude Desktop usam. Com `--http` ele sobe um endpoint **Streamable HTTP** (`POST /mcp`, sem sessĂŁo) para n8n, bots e scripts na mesma mĂĄquina.

## Ferramentas

| Ferramenta | O que faz | Escrita? |
|---|---|---|
| `cerebro_contexto()` | `contexto/sobre-mim.md` + `sobre-o-trabalho.md` + `prioridades.md`, concatenados com os caminhos | nĂŁo |
| `cerebro_prioridades()` | SĂł `contexto/prioridades.md` | nĂŁo |
| `cerebro_rotas()` | A seção "Mapa de rotas" do `AGENTS.md` (ou `CLAUDE.md`) | não |
| `cerebro_buscar(consulta, limite?)` | Busca por termos em todos os `.md` (tĂ­tulo > caminho > wikilinks > frontmatter > corpo), com trecho | nĂŁo |
| `cerebro_ler(caminho)` | ConteĂșdo de um arquivo (ou listagem de uma pasta) dentro do cĂ©rebro | nĂŁo |
| `cerebro_wiki_indice()` | `wiki/index.md` | nĂŁo |
| `cerebro_wiki_pagina(slug)` | PĂĄgina da wiki pelo slug, em `entidades/`, `conceitos/` ou `fontes/` | nĂŁo |
| `cerebro_projetos()` | Cada `projetos/<nome>/README.md` com a linha de estado | nĂŁo |
| `cerebro_conexoes()` | A tabela de `conexoes.md` | nĂŁo |
| `cerebro_rotinas(limite?)` | Rotinas ativas e Ășltimas execuçÔes de `rotinas/registro.md` | nĂŁo |
| `cerebro_registrar_decisao(titulo, decisao, porque, alternativas?, responsavel?)` | Acrescenta entrada datada em `decisoes/registro.md` | **sim** |
| `cerebro_adicionar_fonte(nome, conteudo)` | Grava `fontes/AAAA-MM-DD-<slug>.md` sem sobrescrever | **sim** |
| `cerebro_registrar_execucao(id, resultado, saida?, observacao?)` | Nova linha no topo do "Registro de execuçÔes" | **sim** |

As trĂȘs de escrita sĂł aparecem quando o servidor sobe com `--escrita`. Detalhes, parĂąmetros e exemplos de retorno: **[docs/ferramentas.md](docs/ferramentas.md)**.

Além das ferramentas, cada `.md` é exposto como **recurso** `cerebro://<caminho>` (por exemplo `cerebro://wiki/entidades/empresa-x.md`), para clientes que preferem "anexar" uma nota.

## Exemplos de conversa

Com o servidor registrado, o agente decide sozinho quando chamar cada ferramenta.

> **VocĂȘ:** Quais sĂŁo as minhas prioridades deste trimestre?
> **Agente:** *(chama `cerebro_prioridades`)* TrĂȘs, segundo `contexto/prioridades.md`: entregar a fase 2 do Projeto Alfa atĂ© o fim de outubro, lançar o site novo e reduzir o relatĂłrio semanal de 4 horas para 1.

> **VocĂȘ:** Por que decidimos fazer o site em gerador estĂĄtico?
> **Agente:** *(chama `cerebro_buscar("site estĂĄtico")`, depois `cerebro_ler("decisoes/registro.md")`)* Em 2026-08-20 vocĂȘ registrou: custo zero e pouca manutenção; mudaria de ideia se precisasse de ĂĄrea logada.

> **VocĂȘ:** Registra que vamos aceitar a fase 2 com prazo em outubro.
> **Agente:** *(servidor com `--escrita`; chama `cerebro_registrar_decisao`)* Registrado em `decisoes/registro.md` com a data de hoje. Quer que eu anote as alternativas consideradas?

> **VocĂȘ:** O que a Empresa X pediu na Ășltima reuniĂŁo?
> **Agente:** *(chama `cerebro_wiki_pagina("empresa-x")`, segue os links para a fonte)* Aprovou o escopo da fase 2 e ficou de definir quem valida os relatĂłrios semanais.

## Segurança

- **Leitura por padrĂŁo.** Sem `--escrita`, as ferramentas de escrita nem sĂŁo registradas — o cliente nĂŁo as vĂȘ. E mesmo com elas registradas, o nĂșcleo confere a flag de novo antes de gravar.
- **SĂł dentro da pasta.** Todo caminho passa por `caminhoSeguro`: resolve, confere o prefixo, segue symlinks e confere de novo. `../`, caminhos absolutos de fora e links apontando para fora sĂŁo recusados.
- **`.env`, `.git` e `node_modules` sĂŁo invisĂ­veis**, mesmo para leitura.
- **HTTP sĂł em `127.0.0.1`** por padrĂŁo, sem autenticação. Se expor em outra interface, coloque um proxy com autenticação na frente — e lembre que um cĂ©rebro contĂ©m dados pessoais.
- **Nada sai da måquina.** O servidor não faz requisiçÔes externas.

Detalhes em **[docs/seguranca.md](docs/seguranca.md)**.

## Testes

```bash
npm test            # node --test: nĂșcleo, escrita e servidor (cliente MCP em memĂłria)
npm run teste:stdio # sobe o binĂĄrio de verdade e conversa em JSON-RPC por stdio
npm run teste:http  # sobe --http em porta livre e faz as chamadas que um n8n faria
```

Resultado real da fumaça por stdio (`node scripts/teste-stdio.mjs`, contra `test/fixture`):

```
[servidor] [cerebro-mcp] pronto por stdio — cĂ©rebro em .../test/fixture (escrita desligada)
OK  initialize → servidor cerebro-mcp 1.0.0 (protocolo 2025-06-18)
OK  tools/list → 10 ferramentas: cerebro_contexto, cerebro_prioridades, cerebro_rotas, cerebro_buscar, cerebro_ler, cerebro_projetos, cerebro_conexoes, cerebro_rotinas, cerebro_wiki_indice, cerebro_wiki_pagina
OK  tools/call cerebro_buscar → 2 resultado(s) para "empresa x":
OK  tools/call cerebro_rotas → seção encontrada
OK  tools/call cerebro_ler ../../etc/passwd → isError (Erro: Acesso negado: "../../etc/passwd" estĂĄ fora do cĂ©rebro.)
OK  resources/list → 27 recursos cerebro://
```

Com `--escrita`, o `tools/list` devolve 13 ferramentas (as 10 acima mais `cerebro_registrar_decisao`, `cerebro_adicionar_fonte` e `cerebro_registrar_execucao`). O `npm test` cobre: busca (relevùncia, acentos, wikilinks, pastas ignoradas), leitura com bloqueio de traversal/symlink/`.env`, extração de rotas e prioridades, projetos, conexÔes, rotinas, wiki, recursos, escrita bloqueada sem `--escrita` e funcionando com ela (em cópia temporåria da fixture).

## Documentação

- [INSTALAR.md](INSTALAR.md) — Claude Code, Codex, Claude Desktop, `.mcp.json`, HTTP, e instruçÔes para um agente instalar sozinho.
- [docs/arquitetura.md](docs/arquitetura.md) — como o código está organizado.
- [docs/ferramentas.md](docs/ferramentas.md) — cada ferramenta com parñmetros, retorno e exemplo.
- [docs/seguranca.md](docs/seguranca.md) — o que Ă© bloqueado e por quĂȘ.
- [docs/exemplos.md](docs/exemplos.md) — n8n, bot e site chamando o servidor em modo HTTP.
- [docs/faq.md](docs/faq.md) — perguntas frequentes.

## FAQ curta

**Preciso do kit astra-2cerebro?** O servidor lĂȘ a estrutura que o kit cria. Qualquer pasta com `AGENTS.md` ou `CLAUDE.md` sobe, mas as ferramentas de contexto, wiki e rotinas esperam os arquivos do kit.

**Posso apontar dois clientes para o mesmo cĂ©rebro?** Sim. Cada cliente sobe o prĂłprio processo do servidor; todos leem a mesma pasta. Escrita simultĂąnea Ă© rara e as trĂȘs operaçÔes sĂł acrescentam texto.

**O servidor indexa em algum lugar?** Não. A busca varre os `.md` a cada chamada. Para cérebros com centenas de notas é instantùneo; para milhares ainda é aceitåvel.

**Funciona no Windows?** Sim, com Node 20+. Nos exemplos, troque os caminhos.

Mais em [docs/faq.md](docs/faq.md).

## Créditos e licença

ConstruĂ­do para o kit **[astra-2cerebro](https://github.com/inematds/astra-2cerebro)** — a estrutura de pastas, o formato das decisĂ”es, rotinas, conexĂ”es e wiki vĂȘm de lĂĄ. Usa o SDK oficial `@modelcontextprotocol/sdk`.

MIT — Copyright (c) 2026 inematds.