doctree-mcp

Pesquisa BM25 + navegação em árvore sobre documentos markdown para agentes de IA. Sem embeddings, sem chamadas de LLM no momento da indexação.

Documentação

doctree-mcp

Recuperação agentiva de documentos sobre markdown, CSV e JSONL. BM25 + navegação em árvore via MCP — sem banco vetorial, sem embeddings, sem chamadas de LLM no momento da indexação.

A proposta: o MCP fornece os primitivos estruturais (uma árvore navegável, BM25, glossário, consulta de linhas). As skills incluídas fornecem o conhecimento procedural (como percorrer essa árvore). Juntos, o agente se comporta como um bibliotecário de pesquisa treinado — não um buscador de uma única consulta. Veja O Padrão Skill + MCP.


Início Rápido

Já tem documentos? Aponte um cliente para eles:

# In your AI tool's MCP config — see docs/CLIENTS.md for per-tool snippets
{ "mcpServers": { "doctree": {
    "command": "bunx", "args": ["doctree-mcp"],
    "env": { "DOCS_ROOT": "./docs", "WIKI_WRITE": "1" }
} } }

Reinicie a ferramenta → pergunte "pesquise nos documentos por X" ou invoque o prompt doc-read.

Começando do zero? Crie um esqueleto de wiki LLM estilo Karpathy:

bunx doctree-mcp init          # configure current tool
bunx doctree-mcp init --all    # configure every supported client
bunx doctree-mcp init --dry-run

Cria docs/wiki/ (mantido por LLM) + docs/raw-sources/ (suas entradas), grava a configuração do MCP, instala um hook de lint pós-escrita, anexa convenções de wiki a CLAUDE.md / AGENTS.md / .cursor/rules/.


Modos de Operação

ModoUse quandoGuia
stdio (padrão)Desenvolvimento local, agente na sua máquinaConfiguração do cliente
HTTP (HTTP Streamable)Equipes, CI, agentes hospedadosImplantação — Railway · Fly · Render · Cloudflare Containers · Docker
CLIinit, lint, debug-indexModos de operação

Árvore de decisão completa: Modos de Operação.


Como Funciona — Recupere · Cure · Adicione

Agent: "How does token refresh work?"

→ search_documents("token refresh")
  #1  auth/middleware.md § Token Refresh Flow       score: 12.4
  #2  auth/oauth.md       § Refresh Token Lifecycle  score: 8.7

→ get_tree("docs:auth:middleware")
  [n1] # Auth Middleware
    [n4] ## Token Refresh Flow
      [n5] ### Automatic Refresh

→ navigate_tree("docs:auth:middleware", "n4")   ← n4 + descendants

Ferramentas principais de leitura (sempre ativas):

FerramentaFinalidade
search_documentsBusca por palavras-chave BM25 + filtros de faceta + expansão de glossário (markdown · CSV · JSONL)
get_treeSumário — títulos, contagens de palavras, resumos
get_node_contentTexto completo de uma seção específica por ID de nó
navigate_treeUma seção mais todos os descendentes em uma única chamada
lookup_rowConsulta O(1) por chave exata para linhas de dados estruturados (ex.: PROJ-44)

Ferramentas de escrita no wiki (opt-in com WIKI_WRITE=1):

FerramentaFinalidade
find_similarDetecção de duplicatas com índices de sobreposição
draft_wiki_entryEsqueleto: caminho sugerido, frontmatter inferido, ocorrências no glossário
write_wiki_entryEscrita validada: contenção de caminho, esquema, proteções contra duplicatas, simulação

Segurança: contenção de caminho · validação de frontmatter · detecção de duplicatas · simulação · proteção contra sobrescrita.

Aliases obsoletos (list_documents, find_files, find_symbol) foram substituídos por search_documents — ainda funcionais, mas não recomendados.


O Padrão Skill + MCP

A maioria das ferramentas de recuperação entrega ao agente uma caixa de busca e torce pelo melhor. O doctree-mcp entrega uma árvore, e as skills incluídas ensinam como percorrê-la.

  • MCP = primitivos estruturais. search_documents, get_tree, navigate_tree, get_node_content, lookup_row retornam posições na árvore sobre as quais o agente raciocina — não respostas prontas.
  • Skills = conhecimento procedural. /doc-read, /doc-write, /doc-lint codificam o drill-down por trilha: buscar → esboço → navegar → recuperar. O agente aprende a política, não apenas a API.

Essa combinação não existe de forma limpa em outros lugares:

AbordagemPrimitivoO que a skill ensinaLacuna
RAG híbrido gerenciado (Cloudflare AI Search, Nia)Chunks planos + similaridadePontuação caixa-preta, sem trilha de auditoria
Ferramenta-retorna-resposta (Context7)2 ferramentas que retornam respostasFormato da consultaO agente não consegue raciocinar sobre conteúdo ignorado
Skill sobre CLI (QMD)CLI sobre busca planaExpansão de consultaSem árvore para navegar
doctree-mcp + /doc-readÁrvore navegávelTrilhas, roteamento multi-instância, compilação de wiki

Por que a recuperação iterativa vence:

  • Deterioração de contexto. Encher uma janela de 1M de tokens com chunks degrada a saída. A navegação por trilha mantém a memória de trabalho pequena.
  • Auditabilidade. search_documents → get_tree → navigate_tree → get_node_content é uma trilha reproduzível. Uma pontuação de cosseno não é. Domínios regulados podem usar a primeira.
  • Divulgação progressiva. Menos primitivos navegáveis vencem a proliferação de ferramentas (cf. Cloudflare Code Mode).

Multi-instância = federação no lado do cliente. Registre vários servidores doctree sob nomes diferentes; a skill /doc-read codifica a política de roteamento. Adicione ou remova instâncias sem tocar na skill. Veja Configuração do cliente → Roteamento multi-instância.


O Padrão Wiki LLM

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  Raw Sources    │     │  The Wiki        │     │  The Schema     │
│  (immutable)    │ ──→ │  (LLM-maintained)│ ←── │  (you define)   │
│  notes · logs   │     │  runbooks · refs │     │  CLAUDE.md rules │
└─────────────────┘     └─────────────────┘     └─────────────────┘

Inspirado no LLM Wiki do Karpathy. Passo a passo completo: docs/LLM-WIKI-GUIDE.md.


Configuração (resumo)

---
title: "Descriptive Title"
description: "One-line summary — boosts ranking"
tags: [relevant, terms]
type: runbook          # runbook | guide | reference | tutorial | architecture | adr
category: auth
---

Todos os campos de frontmatter não reservados tornam-se facetas de filtro:

search_documents("auth", filters: { type: "runbook", tags: ["production"] })

Variáveis de ambiente comuns:

VariávelPadrãoDescrição
DOCS_ROOT./docsPasta de documentos
DOCS_GLOB**/*.mdGlobs separados por vírgula (**/*.md,**/*.csv,**/*.jsonl)
DOCS_ROOTSMulti-coleção ponderada (./wiki:1.0,./rfcs:0.5)
PORT3100Porta do modo HTTP
WIKI_WRITE(não definido)1 habilita ferramentas de escrita
GLOSSARY_PATH$DOCS_ROOT/glossary.jsonGlossário de expansão de consultas

Referência completa: docs/CONFIGURATION.md.

Glossário — coloque glossary.json na raiz dos documentos para expansão bidirecional de consultas:

{ "CLI": ["command line interface"], "K8s": ["kubernetes"] }

Definições de acrônimos como "TLS (Transport Layer Security)" também são extraídas automaticamente.

Dados estruturados — arquivos CSV/JSONL tornam-se documentos onde cada linha é um nó da árvore. Papéis de coluna (id, título, descrição, facetas, URL) são detectados automaticamente a partir dos cabeçalhos. Veja docs/STRUCTURED-DATA.md.


Executando a partir do Código-Fonte

git clone https://github.com/joesaby/doctree-mcp.git
cd doctree-mcp && bun install

DOCS_ROOT=./docs bun run serve          # stdio
DOCS_ROOT=./docs bun run serve:http     # HTTP (port 3100)
DOCS_ROOT=./docs bun run index          # CLI: inspect indexed output
bun test

Desempenho

OperaçãoTempoCusto de tokens
Índice completo (900 documentos)2–5s0
Reindexação incremental~50ms0
Busca5–30ms~300–1K tokens
Esboço da árvore<1ms~200–800 tokens

Documentação

Configuração e operação

Padrões e conceitos

Código-fonte


Apoiando-se em Ombros de Gigantes

Licença

MIT