Skip to main content
Glama
README.md
# scoutbook

Servidor **MCP** que serve o *handbook* de um time (um repositório de markdown) ao Claude Code. O objetivo é dar ao Claude de cada time acesso ao "como a gente faz X aqui": estruturar CI/CD, fazer deploy, padrão de projeto, troubleshooting antes de abrir um card, etc.

O scoutbook é um **motor genérico**: ele não sabe nada sobre o seu time. Você aponta ele para um ou mais diretórios de `.md` (o repo do handbook de cada time) e ele expõe estas ferramentas ao Claude:

- `list_handbook` — lista todos os documentos (título, resumo, tags).
- `read_handbook_doc` — lê um documento pelo id (caminho relativo).
- `search_handbook` — busca por palavras-chave e devolve trechos relevantes.
- `list_linked_handbooks` — lista os handbooks cadastrados (nome, origem, caminho).
- `update_handbook` — sincroniza (`git pull`) um handbook linkado via git.

Existem dois jeitos de rodar: **stdio** (um processo por client, igual antes) ou **daemon HTTP** (um processo só, sempre de pé, servindo vários handbooks e vários clients ao mesmo tempo).

## Arquitetura

```
src/
  core/
    handbook.ts    # descoberta, leitura (cache por mtime) e busca por keyword
    frontmatter.ts # parser minimalista de frontmatter, sem dependências
    registry.ts    # CRUD do registry de handbooks linkados (~/.scoutbook/registry.json)
    git.ts          # clone raso / update (git pull) dos handbooks linkados via git
  cli.ts            # comandos: link, unlink, list-links, update, start, stop, status, restart
  daemon.ts         # ciclo de vida do processo HTTP destacado (pid file, log)
  index.ts          # adapter MCP: modo stdio (default) e modo HTTP (usado por 'start')
```

A busca é por keyword (sem acento, case-insensitive), com ranking simples (título > tags > corpo).

## Setup

```bash
npm install
npm run build
```

Para desenvolver com reload:

```bash
npm run dev            # modo stdio, usa ./handbook por padrão
npm run dev /caminho/para/outro/handbook
```

## Modo daemon (recomendado)

Um processo só, sempre disponível, com um ou mais handbooks linkados.

```bash
# linkar um handbook local
npx scoutbook link time-x /caminho/para/handbook-do-time-x

# ou linkar direto de um repo git (clona em ~/.scoutbook/repos/<nome>)
npx scoutbook link time-y https://github.com/org/handbook-time-y --git

npx scoutbook list-links        # ver o que está linkado
npx scoutbook update time-y     # git pull no link (só funciona pra links --git)
npx scoutbook update            # atualiza todos os links git de uma vez

npx scoutbook start             # sobe destacado em http://127.0.0.1:4390/mcp
npx scoutbook status            # rodando (pid ..., porta ...) | parado
npx scoutbook stop
npx scoutbook restart
```

`start` aceita `--port <n>` (ou env `SCOUTBOOK_PORT`) pra mudar a porta, e bind é sempre em `127.0.0.1` — não expõe o handbook na rede.

Com **um único** handbook linkado, as tools funcionam sem precisar informar qual é. Com **mais de um**, cada chamada de `list_handbook`/`read_handbook_doc`/`search_handbook`/`update_handbook` precisa do parâmetro `handbook` (o nome usado no `link`) — use `list_linked_handbooks` pra descobrir os nomes.

Log fica em `~/.scoutbook/scoutbook.log`, registry em `~/.scoutbook/registry.json`.

## Modo stdio (compatível com configs antigas)

Um processo novo por conexão — é como o scoutbook funcionava antes do modo daemon, e continua funcionando igual, sem precisar de link nenhum.

Resolvido nesta ordem:

1. primeiro argumento da CLI (`node dist/index.js /caminho/do/handbook`)
2. env `SCOUTBOOK_HANDBOOK_DIR`
3. `--handbook <nome>` — usa um link específico do registry
4. único link cadastrado no registry, se houver exatamente um
5. `./handbook` (relativo ao CWD) — fallback de desenvolvimento

## Conectando ao Claude Code

**Daemon (recomendado):** aponte pro processo já rodando — veja `.mcp.json.daemon.example`.

```json
{
  "mcpServers": {
    "scoutbook": {
      "type": "http",
      "url": "http://127.0.0.1:4390/mcp"
    }
  }
}
```

**stdio:** copie `.mcp.json.example` para `.mcp.json` no repo do time e ajuste os caminhos absolutos.

```json
{
  "mcpServers": {
    "scoutbook": {
      "command": "node",
      "args": ["/caminho/abs/para/scoutbook/dist/index.js"],
      "env": {
        "SCOUTBOOK_HANDBOOK_DIR": "/caminho/abs/para/o/repo/handbook-do-time"
      }
    }
  }
}
```

## Formato dos documentos

Markdown puro funciona. Frontmatter é opcional e deixa o `list`/`search` mais ricos:

```markdown
---
title: Como fazer deploy
tags: [deploy, producao]
summary: Passo a passo do deploy padrão do time.
---

# Como fazer deploy
...
```

Sem frontmatter, o título cai para o primeiro `# heading` (ou o nome do arquivo)
e o resumo para o primeiro parágrafo.

## Roadmap

- Busca semântica opcional.
- Exposição também como MCP *resources* para anexo manual.
- Process manager opcional (systemd `--user`/launchd) pra subir o daemon no login — hoje é sempre manual (`scoutbook start`).

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing all documents, reading a specific document by ID, and searching across documents. No ambiguity.

Naming Consistency5/5

All tool names follow the same verb_noun pattern in snake_case (list_handbook, read_handbook_doc, search_handbook), making them predictable and consistent.

Tool Count5/5

Three tools is well-scoped for a handbook server, covering the essential operations without being overly minimal or excessive.

Completeness5/5

The tool set covers the full lifecycle expected for a read-only handbook: discover (list), retrieve (read), and search. No obvious gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues