Um endpoint Model Context Protocol, para que um agente possa consultar a
documentação em vez de lhe fazer scraping.

## Ferramentas

| Ferramenta      | O que faz                                               |
| :-------------- | :------------------------------------------------------ |
| `list_versions` | Cada versão, com o prefixo que a delimita               |
| `list_pages`    | O índice de conteúdos, limitado e delimitado            |
| `search_docs`   | Encontra uma página por termo, com um excerto           |
| `read_page`     | Uma página em Markdown, com frontmatter do duxt         |

## O âmbito é um prefixo de URL

`list_versions` devolve o prefixo em que cada versão é servida — `/app`,
`/app/v1`, `/de/app` — e essa cadeia é todo o âmbito que `list_pages` e
`search_docs` aceitam. Traz ainda o rótulo da versão, o estado do ciclo de vida,
os idiomas em que está publicada e se é a predefinida, pelo que um agente
escolhe uma edição antes de procurar nela.

Omitir o prefixo cobre todas as versões, no idioma predefinido do site. Uma
versão aninhada sob outra — `/app/v1` sob o `/app` atual — nunca está dentro do
âmbito da superior.

## Respostas limitadas

Ambas as listagens aceitam `limit` (20 por omissão, 100 no máximo) e um
`cursor`. Os resultados são ordenados por caminho, e uma linha `nextCursor` diz
onde continuar; uma listagem sem ela está completa. O cursor é o último caminho
devolvido, mantendo-se estável se a documentação mudar entre duas chamadas.

## O que `read_page` devolve

O frontmatter YAML do próprio duxt — caminho, prefixo, rótulo e ref da versão,
idioma e estado do ciclo de vida — sobre o Markdown tal como escrito, com o
frontmatter original removido. Nunca o HTML renderizado, nunca a árvore de
análise do Content.

## Notas

As mesmas coleções das páginas, por isso as respostas não podem divergir do que
está publicado. O nome, a descrição e as instruções do servidor vêm das opções do
módulo.

O servidor reutiliza um índice de caminhos por coleção de produção. Uma lista lê os metadados pedidos e uma linha de continuação. A pesquisa lê corpos em blocos de até 64 páginas e termina quando a resposta está completa. Mantém Unicode e a prioridade das traduções. Sem resultados percorre todo o âmbito, sem guardar todos os corpos na memória.