Docmost (self-hosted)
Servidor MCP para Docmost auto-hospedado — leia e escreva espaços, páginas e comentários a partir do Claude, Cursor ou VS Code; funciona na Edição Comunitária gratuita.
Documentação
@wisflux/docmost-local-mcp
Servidor MCP para Docmost construído para instâncias self-hosted, especialmente implantações que não possuem licença enterprise, mas ainda desejam acesso MCP confiável a partir de IDEs locais e ferramentas de IA.
O pacote é iniciado com npx, enquanto o servidor real é um binário Rust baixado dos GitHub Releases durante a instalação. Esse binário lida com tráfego MCP via stdio, UX de autenticação local, armazenamento de sessão e acesso à API do Docmost.
A principal razão deste projeto existir: trazer acesso MCP para instalações self-hosted do Docmost sem tornar uma licença enterprise um pré-requisito.
Por Que Este Projeto
Muitas integrações MCP são projetadas em torno de premissas hospedadas ou enterprise. Este projeto é intencionalmente otimizado para Docmost self-hosted:
- Funciona com sua própria URL base do Docmost
- Usa autenticação por e-mail/senha do Docmost
- Armazena o estado da sessão localmente para reutilização
- Abre um fluxo de autenticação local em vez de exigir um plano de controle hospedado separado
- É distribuído como um ponto de entrada simples via
npxpara fácil integração com IDEs
Se você executa seu próprio Docmost e deseja usá-lo dentro do Cursor, Claude Desktop ou outro cliente MCP, este pacote é o caminho direto.
Destaques
- Ótima adequação para instâncias Docmost self-hosted sem licenciamento enterprise
- Núcleo do servidor em Rust com um pequeno inicializador Node para instalações locais previsíveis
- Janela de autenticação nativa em plataformas suportadas, com fallback para navegador
- Seleção explícita da instância Docmost via configuração de inicialização
- Reutilização de sessão com verificação de expiração do JWT e re-login automático
- Armazenamento de credenciais no chaveiro do sistema operacional em plataformas suportadas
- Superfície de ferramentas limpa para espaços, páginas, comentários, membros e contexto do usuário atual
Ferramentas Disponíveis
list_spaces: lista os espaços Docmost disponíveisget_space: busca detalhes de um espaço específicosearch_docs: pesquisa documentação, opcionalmente restrita a um espaçosearch_pages: alias compatível com versões anteriores parasearch_docsget_page: busca uma página e retorna seu conteúdo como Markdownlist_pages: lista páginas recentes em um espaçolist_child_pages: lista páginas filhas de um ID de página paiget_comments: lista comentários de uma páginalist_workspace_members: lista membros do workspaceget_current_user: busca o usuário autenticado e o contexto do workspacecreate_page: cria uma nova página em um espaço a partir de conteúdo Markdownupdate_page: atualiza o título e/ou o conteúdo Markdown de uma página existenteduplicate_page: duplica uma página (e suas subpáginas) dentro do seu espaçocopy_page_to_space: copia uma página (e suas subpáginas) para um espaço diferentemove_page: move uma página para um novo pai, ou para a raiz do espaçomove_page_to_space: move uma página (e suas subpáginas) para um espaço diferentecreate_space: cria um novo espaço com nome e slug de URLupdate_space: atualiza o nome, slug e/ou descrição de um espaçocreate_comment: adiciona um comentário em nível de página a partir de Markdownupdate_comment: substitui o corpo de um comentário existente por novo Markdown
Roadmap
Todas as ferramentas de leitura e escrita planejadas já estão implementadas. create_comment adiciona
comentários em nível de página; comentários ancorados a uma seleção específica de texto (comentários
inline) exigem as posições do cursor do editor colaborativo e estão fora do escopo deste servidor baseado em REST.
Compatibilidade
Tem como alvo o Docmost aproximadamente do último ano de lançamentos (v0.22+); servidores
mais antigos funcionam na melhor das hipóteses. O servidor detecta a versão do Docmost (via
POST /api/version) uma vez por sessão e se adapta onde o comportamento difere:
- Edições de corpo de página:
update_pagesó pode alterar o corpo de uma página existente no Docmost v0.70.0+. Em servidores mais antigos, o corpo vive no editor colaborativo e uma atualização de corpo via REST é ignorada —update_pagediz isso explicitamente e sugerecreate_page(que persiste corpos em todas as versões via endpoint de importação). Atualizações de título funcionam em todos os lugares.
Suporte a Conteúdo
Corpos de páginas e comentários são escritos em Markdown (cabeçalhos, negrito/itálico/tachado, código inline, links, listas, listas de tarefas, citações, blocos de código; páginas também suportam tabelas e imagens com URL externa). Comentários suportam um conjunto menor — sem tabelas, listas de tarefas ou imagens.
Menções (@marcação): em qualquer corpo Markdown, um link com URL user: ou page:
vira uma menção — [Display Name](user:USER_UUID) marca um usuário (encontre o
UUID com list_workspace_members) e [Page Title](page:PAGE_UUID) vincula uma
página. Usuários marcados são notificados pelo Docmost.
Anexar arquivos/imagens enviados (em vez de referenciar uma URL de imagem) não é suportado.
Requisitos
- Node.js 18 ou mais recente para
npx - Uma instância Docmost acessível
- Autenticação por e-mail/senha habilitada nessa instância Docmost
Início Rápido
Execute o servidor diretamente com npx:
npx -y @wisflux/docmost-local-mcp --base-url=https://docs.example.com
Você também pode fornecer a URL base com uma variável de ambiente:
DOCMOST_BASE_URL=https://docs.example.com npx -y @wisflux/docmost-local-mcp
Configuração do Cliente MCP
A maioria dos clientes MCP inicia o servidor diretamente com npx. Adicione isso à configuração MCP do seu cliente, substituindo a URL base pela sua própria instância Docmost:
{
"mcpServers": {
"docmost": {
"command": "npx",
"args": ["-y", "@wisflux/docmost-local-mcp", "--base-url=https://docs.example.com"]
}
}
}
Onde essa configuração fica, por cliente:
-
Claude Desktop —
claude_desktop_config.json(Configurações → Desenvolvedor → Editar Configuração) -
Cursor —
~/.cursor/mcp.json(global) ou.cursor/mcp.json(por projeto) -
Claude Code — um comando, sem edição de arquivos:
claude mcp add docmost -- npx -y @wisflux/docmost-local-mcp --base-url=https://docs.example.com -
VS Code (GitHub Copilot) —
.vscode/mcp.json, usando uma chave de nível superiorserversem vez demcpServers:{ "servers": { "docmost": { "command": "npx", "args": ["-y", "@wisflux/docmost-local-mcp", "--base-url=https://docs.example.com"] } } }
Essa configuração funciona bem quando você deseja uma instância Docmost fixa por configuração de cliente. Se --base-url ou DOCMOST_BASE_URL estiver definido, a página de login mostra essa URL pré-preenchida e bloqueia o campo. Se nenhuma URL base estiver configurada, o fluxo de login a solicita durante o login interativo.
Exemplos de Prompts
Depois de conectado, pergunte ao seu cliente de IA coisas como:
- "Pesquise no espaço Engineering do Docmost nosso runbook de plantão e resuma."
- "Crie uma nova página no espaço Product intitulada 'Planejamento Q3' a partir destas notas: …"
- "Transforme esta transcrição de reunião em uma página Docmost estruturada sob o espaço Team."
- "Encontre todas as páginas no Docmost que mencionam o endpoint antigo da API e liste-as."
- "Leia a página 'Onboarding' e rascunhe uma checklist mais curta como uma nova subpágina."
- "Adicione um comentário na página de notas de versão sinalizando a etapa de migração ausente."
Fluxo de Autenticação
- Seu cliente MCP inicia o servidor via stdio.
- Na primeira chamada de ferramenta autenticada, o servidor inicia uma página de login HTTP local em
127.0.0.1. - O servidor abre uma janela de autenticação nativa quando disponível, ou recorre ao navegador do sistema.
- Você insere seu e-mail e senha lá. Se
--base-urlouDOCMOST_BASE_URLestiver definido, a URL do Docmost é pré-preenchida e bloqueada. - O servidor faz login via
/api/auth/login, extrai o cookieauthToken, armazena a sessão e, opcionalmente, armazena as credenciais para re-login automático. - Solicitações futuras reutilizam o token salvo até que esteja próximo da expiração ou seja rejeitado pelo Docmost.
Estado Local e Armazenamento de Credenciais
O servidor armazena o estado local em:
~/.docmost-local-mcp/
Arquivos usados lá:
config.json: última URL base e e-mailsession.json: token de autenticação salvo e expiração
As credenciais são armazenadas no chaveiro do sistema operacional quando disponível, que é o caminho preferido em plataformas suportadas.
Se o armazenamento seguro de credenciais do SO não estiver disponível, o servidor recorre ao armazenamento local de credenciais criptografado para ainda suportar a reutilização de login sem escrever credenciais em texto puro. Esse fallback é intencionalmente secundário ao armazenamento via chaveiro.
Notas de Plataforma
A janela de autenticação nativa usa o webview do sistema em cada plataforma:
- macOS:
WKWebView - Windows:
WebView2 - Linux:
WebKitGTK
Avisos importantes:
- Windows precisa do runtime WebView2 disponível
- Ambientes de desktop Linux precisam dos pacotes WebKitGTK instalados
- Quando o binário é compilado sem o recurso
native-webview, o fallback para navegador é sempre usado
Referência de Ferramentas
list_spaces
Retorna nomes, slugs e IDs dos espaços Docmost.
search_docs
Entradas:
query: texto de pesquisa obrigatóriospace_id: ID de espaço Docmost opcional
search_pages
Entradas:
query: texto de pesquisa obrigatóriospace_id: ID de espaço Docmost opcional
Este é um alias compatível com versões anteriores para pesquisa de páginas. search_docs permanece disponível.
get_space
Entradas:
space_id: ID de espaço Docmost obrigatório
get_page
Entradas:
slug_id: o ID de slug da página retornado porsearch_docs
list_pages
Entradas:
space_id: ID de espaço Docmost obrigatóriolimit: limite opcional de contagem de páginascursor: cursor de paginação opcional
list_child_pages
Entradas:
page_id: ID de página pai obrigatóriolimit: limite opcional de contagem de páginascursor: cursor de paginação opcional
get_comments
Entradas:
page_id: ID de página obrigatóriolimit: limite opcional de contagem de comentárioscursor: cursor de paginação opcional
list_workspace_members
Entradas:
limit: limite opcional de contagem de membroscursor: cursor de paginação opcionalquery: texto de pesquisa de membros opcionaladmin_view: sinalizador opcional de visibilidade de administrador
get_current_user
Entradas:
- nenhuma
create_page
Entradas:
space_id: ID de espaço Docmost obrigatório (UUID) para criar a páginatitle: título da página obrigatóriomarkdown: corpo da página opcional como Markdownparent_page_id: ID de página pai opcional para aninhar (apenas páginas somente com título)
Quando markdown é fornecido, o corpo da página é enviado pelo endpoint de importação do Docmost
(POST /api/pages/import), que é o único mecanismo que persiste de forma confiável o conteúdo do corpo da
página em todas as versões do Docmost (incluindo servidores self-hosted mais antigos). Páginas criadas com
corpo ficam na raiz do espaço — parent_page_id é respeitado apenas para páginas somente com título.
update_page
Entradas:
page_id: ID de página Docmost ou ID de slug obrigatóriotitle: novo título opcional (omitir para não alterar)markdown: novo corpo opcional como Markdown; substitui o conteúdo existente (omitir para não alterar)
Atualizar o título de uma página funciona em todas as versões do Docmost. Atualizar o corpo de uma
página existente via REST funciona apenas em versões mais novas do Docmost; em servidores self-hosted mais
antigos (ex.: v0.25.x), o corpo é editado exclusivamente pelo editor colaborativo e uma atualização de corpo
via REST não é aplicada. Para definir o conteúdo do corpo de forma confiável lá, crie uma nova página com create_page em vez disso.
Para o design completo, detalhes de conversão Markdown→ProseMirror, campos verificados da API do Docmost e ressalvas de versão, veja docs/write-tools.md.
Desenvolvimento
Para detalhes do fluxo de trabalho de mantenedores e contribuidores, veja CONTRIBUTING.md.
Licença
MIT