jDocMunch-MCP
jDocMunch-MCP permite que agentes de IA naveguem pela documentação por seção, em vez de ler arquivos por força bruta.
Documentação
jDocMunch MCP
jDocMunch é um servidor MCP para agentes de codificação que recupera a seção exata da documentação que uma tarefa precisa, sem carregar arquivos inteiros no contexto.
Indexe um conjunto de documentação uma vez pela hierarquia de títulos e, em seguida, busque uma única seção, uma subárvore de títulos ou um resultado de busca ranqueado — extraído com precisão de bytes do arquivo original.
Instalar · Início rápido · Benchmarks · Licenciamento comercial
Gratuito para uso pessoal. Uso comercial requer uma licença paga — termos abaixo.
Por que jDocMunch?
O problema. Um agente perguntou "como configuro a autenticação?" abre um arquivo de documentação, percorre centenas de parágrafos que não precisa, abre outro e repete. Janelas de contexto grandes não resolvem isso. Elas apenas tornam o desperdício acessível o suficiente para ignorar até a conta chegar, e elas ocupam o espaço que o modelo realmente precisava.
O mecanismo. jDocMunch analisa um conjunto de documentação em uma árvore de seções organizada pela hierarquia de títulos, armazena os offsets de bytes de cada seção no arquivo original e expõe a recuperação via MCP. As seções mantêm identidades duráveis entre reindexações, desde que o caminho, o texto do título e o nível do título permaneçam inalterados.
O resultado. A unidade de acesso muda de arquivo para seção. Um agente recupera a seção de instalação, um bloco de configuração ou uma subárvore de títulos específica — e nada mais.
O que o torna diferente
Recuperação por seção em primeiro lugar
Busque e recupere documentação por seção, não apenas por caminho de arquivo ou correspondência de palavras-chave.
Extração com precisão de bytes
O conteúdo completo é puxado sob demanda a partir de offsets de bytes exatos no arquivo original.
IDs de seção estáveis
As seções mantêm identidades duráveis entre reindexações quando o caminho, o texto do título e o nível do título permanecem inalterados.
Evidências
Quatro benchmarks contra corpora de documentação pública, cada um com o corpus, a data e os resultados por consulta registrados em benchmarks/.
| Corpus | Escala | Indexado em | Resultado |
|---|---|---|---|
Kubernetes (kubernetes/website, 2026-03-04) | 1.569 arquivos .md, 4.355 seções, 16 MB | 3.352 ms | 27.285 tokens economizados em uma única consulta de afinidade de nó; latência de 100 ms |
| SciPy | 10.402 seções, ~855.000 tokens de corpus | 2.247 ms | 135–152 ms por consulta em buscas de solvers esparsos, FFT e otimização |
| LangChain (MDX) | 5.973 seções | 5.204 ms | A seccionamento ciente de MDX encontrou 754% mais seções do que a passagem ingênua |
| Wiki | Corpus de 7.449 tokens | — | A busca retorna metadados ranqueados em ~190 tokens contra uma leitura de corpus inteiro de 7.449 tokens |
Leia estes como resultados por corpus, não como um único múltiplo de destaque. As economias dependem de quão grande é o arquivo contido em relação à seção que você precisava: um arquivo pequeno com um título economiza quase nada, e o corpus Kubernetes economiza muito. Os arquivos de benchmark registram as consultas que tiveram desempenho ruim junto com as que tiveram bom desempenho.
Um resultado separado e medido do trabalho de projeção v1.121.0, na documentação deste próprio repositório em max_results=10: uma linha de busca foi de 1.989 caracteres → 319 com compact=true (−84%), ou 431 com snippet_bytes=200 (−78%) enquanto removia completamente a chamada de acompanhamento get_section.
A qualidade da recuperação é garantida, não presumida. Cada versão executa um fixture de replay sobre um conjunto dourado congelado e falha abaixo de nDCG 0,95. Esse portão já falhou builds e bloqueou versões; não é decorativo.
Instalação
Requisitos: Python 3.10+, qualquer cliente compatível com MCP.
uv tool install jdocmunch-mcp
jdocmunch-mcp init
Sem virtualenv para gerenciar, nada escrito no Python do sistema, e funciona como está em distros PEP 668 (Ubuntu 24.04+, Debian 12+) onde pip install puro é recusado. Ainda não tem uv?
init detecta seus clientes MCP, escreve suas entradas de configuração, instala a política de prompt de exploração de documentação para que seu agente realmente alcance as ferramentas e, opcionalmente, instala hooks e indexa seus documentos.
Outros caminhos de instalação
| Comando | Use quando |
|---|---|
uvx jdocmunch-mcp | Instalação zero. Executa a partir de um ambiente efêmero — nada é gravado permanentemente no disco. As entradas de cliente que init escreve já invocam o servidor dessa forma, então para a maioria das configurações isso é tudo o que é executado. ⚠ Hooks são a exceção: eles são gerados por um subshell com PATH mínimo e resolvem o executável pelo nome, então precisam de uv tool install (ou pipx/pip) para funcionar. |
pipx install jdocmunch-mcp | Você já padroniza com pipx |
pip install jdocmunch-mcp | Dentro de um virtualenv que você gerencia |
Verifique:
jdocmunch-mcp --version
Configuração manual do Claude Code:
claude mcp add -s user jdocmunch -- uvx jdocmunch-mcp
Sem etapa de instalação — uvx busca e executa o servidor sob demanda. Prefere no seu PATH (e necessário para hooks)? uv tool install jdocmunch-mcp, depois claude mcp add -s user jdocmunch jdocmunch-mcp.
Instalar o servidor torna as ferramentas disponíveis; não quebra o hábito de um agente de ler arquivos por completo. Uma linha no seu CLAUDE.md faz isso:
Call the jdocmunch_guide tool and strictly follow its instructions.
Início rápido
Pressupõe: jDocMunch instalado e registrado no seu cliente, e uma pasta de documentação.
Indexe uma pasta de documentação local:
jdocmunch-mcp index-local --path ./docs
Ele imprime JSON nomeando o corpus e o que encontrou:
{
"success": true,
"repo": "local/docs",
"file_count": 1,
"section_count": 4,
"doc_types": { ".md": 1 },
"semantic_search": false
}
section_count maior que file_count é o ponto principal: o índice endereça títulos, não arquivos.
Então, dentro do seu agente:
Usando jdocmunch, busque nos documentos por "configuração de autenticação" e mostre-me essa seção.
O agente deve chamar search_sections, depois get_section no resultado principal — retornando uma seção em vez de um arquivo. _meta.tokens_saved na resposta relata o custo em comparação com a leitura do documento contido.
Próximo passo: get_toc_tree para uma visão estrutural de todo o corpus, ou index_repo para indexar documentação diretamente de um repositório GitHub.
O que você pode fazer
- Recupere uma seção em vez de um documento.
get_sectioneget_sectionspuxam conteúdo com precisão de bytes do arquivo original;get_section_excerptestreita ainda mais. - Busque por significado, não apenas por palavras-chave.
search_sectionscombina BM25 com cosseno semântico quando um provedor de embeddings está configurado.compact=true,fields=[...]esnippet_bytes=Nreduzem ainda mais a resposta. - Navegue pela estrutura.
get_toc,get_toc_tree,get_section_path,get_section_descendantsesection_neighborspercorrem a árvore de títulos sem ler conteúdo. - Descubra o que está faltando ou desatualizado na documentação.
get_doc_coverage,get_undocumented_symbols,get_stale_pages,get_orphan_sections,get_broken_linksedoc_health_radar. - Trabalhe com especificações de API.
find_endpoint,list_endpoints_by_tag,find_operations_using_schemaeget_schema_graphtratam documentos OpenAPI como cidadãos de primeira classe. - Valide mudanças na documentação.
check_section_delete_safeeget_section_blast_radiusantes de remover ou reestruturar. - Saiba quando uma resposta está desatualizada. Leituras de conteúdo divulgam
_meta.freshness,_meta.verdicte qual camada de origem respondeu.
64 ferramentas no total. A referência completa está em USER_GUIDE.md.
Como funciona
Tudo roda localmente. Os índices ficam no seu diretório pessoal; nenhum serviço hospedado é necessário para indexação ou recuperação.
docs/ ──► parser (per format) ──► section tree ──► local index
│
MCP client ◄── retrieval ◄──┘
- Análise é por formato, um módulo para cada: Markdown/MDX, reStructuredText, AsciiDoc, notebooks Jupyter, HTML, texto simples, OpenAPI (YAML), JSON/JSONC, XML/SVG/XHTML, cenas Godot e — via o extra opcional
[office]— PDF, DOCX, PPTX e EPUB. - Armazenamento é um índice local versionado (
INDEX_VERSION = 3) que migra automaticamente no primeiro carregamento. Uma versão 1.x nunca força uma reindexação. - Recuperação é lexical BM25 por padrão, híbrida quando embeddings estão disponíveis.
- Embeddings são opcionais e independentes de provedor — Gemini, OpenAI, um endpoint compatível com OpenAI ou um modelo local offline via FastEmbed (ONNX) ou sentence-transformers (torch). Sem um, a busca permanece lexical e totalmente offline.
Detalhes mais profundos: ARCHITECTURE.md e SPEC.md.
Segurança e privacidade
Local-first por design. Sua documentação é analisada e armazenada na sua máquina, e o único comportamento de rede padrão do pacote base é um contador de economia anônimo — um ID aleatório mais contagens agregadas de tokens, sem conteúdo, sem caminhos, sem PII.
Desative completamente:
JDOCMUNCH_SHARE_SAVINGS=0
Provedores de embeddings e resumidores chamam sua API configurada apenas quando você os habilita, e nunca por padrão. watch-install registra um serviço de login apenas quando você mesmo o executa.
Comportamento em segundo plano, totalmente divulgado
Um download de modelo, na primeira vez que um provedor de embeddings local é executado. Ambos os provedores offline buscam seu modelo do HuggingFace no primeiro uso e o armazenam em cache no disco. Nada é baixado até que você habilite embeddings, e uma instalação apenas lexical nunca contata o hub. O aquecimento de inicialização é ignorado quando o modelo não está em cache, então uma primeira execução adia o download para sua primeira busca em vez de travar o handshake do MCP atrás dele (#110).
Uma instalação de pacote e um download de modelo, apenas se você disser sim ao init.
jdocmunch-mcp init verifica se um provedor de embeddings está disponível. Se não estiver, ele pergunta uma vez se deseja ativar a busca semântica. A resposta padrão é não. Em um sim, ele faz duas coisas e imprime ambas antes de fazê-las:
- executa
python -m pip install "fastembed>=0.8.0"no ambiente Python em que o jdocmunch está rodando (cerca de 160 MB instalados; puxa onnxruntime, não torch); - baixa um arquivo de modelo,
all-MiniLM-L6-v2em formato ONNX, de huggingface.co (87 MB, uma vez).
Depois disso, os embeddings rodam na sua máquina. Nenhum texto dos seus documentos é enviado a lugar algum. --yes não responde essa pergunta por você: ele aceita edições de configuração, não um download. Uma instalação por script opta com --with-embeddings. --dry-run imprime o comando e os tamanhos e não toca em nada. Se o pip não for utilizável (uma instalação uv tool ou pipx não tem nenhum) ou a instalação falhar, init imprime o comando manual para seu estilo de instalação e continua com correspondência de palavras. O próprio servidor MCP nunca instala ou baixa nada sem ser solicitado.
Por que init pergunta: em um benchmark público de 492 perguntas reais de usuários em 6 conjuntos de documentação, a busca semântica (híbrida) colocou uma resposta direta nos 5 principais resultados para 47% das perguntas, contra 34% apenas para correspondência de palavras. Método, dados e o resultado negativo que veio junto: jdoc-rerank-bench. Medido em uma máquina apenas com CPU, os embeddings adicionaram cerca de 7 segundos por 1.000 seções a um primeiro índice. doc_list_repos relata has_embeddings por índice, para que você possa ver quais ainda são apenas palavras.
FastEmbed como provedor offline. pip install jdocmunch-mcp[fastembed] executa o mesmo modelo all-MiniLM-L6-v2 através do onnxruntime em vez de torch, que é uma instalação muito menor. Quando ambos os provedores offline estão presentes, o FastEmbed é preferido; JDOCMUNCH_EMBEDDING_PROVIDER=sentence-transformers seleciona o outro. No modelo compartilhado, os dois gravam o mesmo armazenamento de vetores, então alternar runtimes não re-embed seu corpus. Aponte o FastEmbed para um modelo diferente com JDOCMUNCH_FASTEMBED_MODEL e ele mantém seus próprios vetores, porque vetores de dois modelos não são intercambiáveis (#126).
Um processo filho, quando embeddings locais estão em uso. Quando o provedor sentence-transformers está ativo, o jDocMunch executa o modelo de embeddings em um processo filho (python -m jdocmunch_mcp.embeddings.worker) em vez de dentro do servidor. Ele:
- inicia quando algo precisa de um embedding pela primeira vez — na inicialização, se o modelo já estiver no seu cache local do HuggingFace; caso contrário, na primeira busca ou indexação que o utilize. Uma instalação somente léxica nunca o inicia;
- não abre nenhuma conexão de rede e fala apenas com seu processo pai, por um pipe privado;
- encerra quando o servidor encerra e é morto se parar de responder;
- não é um serviço de login, não é registrado em lugar nenhum e não sobrevive a nada.
Isso existe porque importar a pilha de embeddings dentro do processo do servidor pode causar deadlock no carregador do Windows
(#118), travando todas as chamadas de ferramenta enquanto o servidor estiver em execução. Desative-o com
JDOCMUNCH_EMBED_WORKER=0, que restaura a importação anterior no processo.
Um serviço de login, somente se você instalar um. jdocmunch-mcp watch-install
registra o observador de documentos para iniciar no login (unidade de usuário do systemd, agente do launchd
ou uma tarefa do Agendador de Tarefas chamada jdocmunch-watch). Nada o instala por você.
Uma vez instalado, ele:
- reindexa cada repositório de documentos indexado localmente quando um arquivo de documento no disco muda;
- executa exatamente
jdocmunch-mcp watchcom as flags que você passou parawatch-install—--no-ai-summariespara manter o resumidor fora dele,--quietpara suprimir suas linhas de log por alteração; - grava em
watch.logewatch.errsob seu diretório de índice de documentos; - é removido por
jdocmunch-mcp watch-uninstall.
⚠ Reexecutar watch-install reescreve a definição do serviço, portanto uma
definição editada manualmente é substituída. Agora ele imprime o que substituiu; passe as flags para
watch-install para que uma atualização as mantenha
(#120).
Prevenção de travessia de caminho, proteção contra escape de symlink, exclusão de segredos, limites de tamanho de arquivo, detecção binária e segurança de codificação estão documentados em SECURITY.md, junto com como relatar uma vulnerabilidade.
Limitações
- A recuperação de seções ajuda menos em arquivos pequenos. Se um documento tem um cabeçalho e 40 linhas, recuperar a seção e ler o arquivo custam quase o mesmo.
- A busca semântica exige um provedor de embeddings. Sem um, a busca é somente léxica — boa para identificadores e frases exatas, mais fraca para perguntas parafraseadas.
- Formatos do Office exigem o extra opcional
[office]e são suportados apenas para indexação local. - A atualidade é divulgada, não garantida. Uma seção cuja fonte não pode ser verificada é relatada como
unknownem vez de assumida como atual. - jDocMunch não analisa código. Símbolos, assinaturas e grafos de chamadas pertencem a jcodemunch-mcp; dados tabulares pertencem a jdatamunch-mcp.
Documentação
| Doc | O que cobre |
|---|---|
| USER_GUIDE.md | Referência completa de ferramentas, fluxos de trabalho e melhores práticas |
| ARCHITECTURE.md | Modelo de armazenamento, pipeline de análise e pontos de extensão |
| SPEC.md | Contratos de resposta e vocabulário de códigos de motivo |
| SECURITY.md | Controles de segurança e relato de vulnerabilidades |
| TOKEN_SAVINGS.md | Como as economias são contadas e relatadas |
| CONTRIBUTING.md | Configuração de desenvolvimento e o requisito de CLA |
| CHANGELOG.md · ROADMAP.md | Histórico de versões e o que vem a seguir |
Licenciamento e uso comercial
Publicado sob a Licença de Uso Duplo jDocMunch-MCP (termos completos). Gratuito para uso não comercial. O uso comercial exige uma licença paga, única, vendida pela jMunch LLC.
Somente jDocMunch: Builder, $29 (1 desenvolvedor) · Studio, $99 (até 5) · Platform, $499 (implantação interna em toda a organização)
Suíte completa jMunch (código + docs + dados): Trio Builder, $99 · Trio Studio, $449 · Trio Platform, $2.499
Desenvolvedores individuais e projetos não comerciais não precisam de licença. Organizações que implantam jDocMunch em equipes internas precisam.
Compromisso de compatibilidade 1.x
Toda licença 1.x dá direito a todas as versões 1.x futuras. Nunca lançaremos uma versão 1.x que:
- remova ou renomeie uma ferramenta MCP (nomes de ferramentas obsoletos mantêm seus aliases),
- remova um campo
Sectionda forma da resposta, - force uma reindexação sem migrar automaticamente seu índice existente no primeiro carregamento,
- altere o formato JSON na transmissão de qualquer resposta de ferramenta de forma que quebre um consumidor existente,
- ou torne um comportamento anteriormente padrão um erro.
Qualquer coisa que exija quebrar essas promessas é reservada para uma futura versão principal (2.x). O contrato completo verificado por máquina é aplicado via tests/test_server.py (invariantes de nomes de ferramentas e campos obrigatórios) e o portão de fixtures de reprodução que roda em todo lançamento.
Suporte e status do projeto
Mantido ativamente. Problemas e relatos de bugs: GitHub Issues. Relatos de segurança: veja SECURITY.md. Perguntas sobre licenciamento comercial passam por jcodemunch.com.
Parte da suíte jMunch junto com jcodemunch-mcp (símbolos de código) e jdatamunch-mcp (dados tabulares). Todos os três implementam jMRI, a especificação de interface de recuperação aberta.