Docmost (self-hosted)
Servidor MCP para Docmost autoalojado: lee y escribe espacios, páginas y comentarios desde Claude, Cursor o VS Code; funciona en la edición comunitaria gratuita.
Documentación
@wisflux/docmost-local-mcp
Servidor MCP para Docmost diseñado para instancias autoalojadas, especialmente despliegues que no tienen licencia empresarial pero aún así quieren acceso MCP confiable desde IDEs locales y herramientas de IA.
El paquete se lanza con npx, mientras que el servidor real es un binario de Rust descargado desde GitHub Releases durante la instalación. Ese binario maneja el tráfico MCP por stdio, la UX de autenticación local, el almacenamiento de sesiones y el acceso a la API de Docmost.
La razón principal de este proyecto: llevar acceso MCP a instalaciones autoalojadas de Docmost sin que una licencia empresarial sea un requisito previo.
Por Qué Este Proyecto
Muchas integraciones MCP están diseñadas en torno a supuestos de alojamiento o empresariales. Este proyecto está intencionalmente optimizado para Docmost autoalojado:
- Funciona contra tu propia URL base de Docmost
- Usa autenticación por correo/contraseña de Docmost
- Almacena el estado de sesión localmente para reutilización
- Abre un flujo de autenticación local en lugar de requerir un plano de control alojado separado
- Se distribuye como un punto de entrada simple de
npxpara integración fácil con IDEs
Si ejecutas tu propio Docmost y quieres tenerlo disponible dentro de Cursor, Claude Desktop u otro cliente MCP, este paquete es el camino directo.
Destacados
- Gran ajuste para instancias autoalojadas de Docmost sin licencia empresarial
- Núcleo de servidor en Rust con un pequeño lanzador Node para instalaciones locales predecibles
- Ventana de autenticación nativa en plataformas compatibles, con respaldo en navegador
- Selección explícita de instancia Docmost mediante configuración de inicio
- Reutilización de sesión con comprobaciones de expiración JWT y re-inicio de sesión automático
- Almacenamiento de credenciales en el llavero del sistema en plataformas compatibles
- Superficie de herramientas limpia para espacios, páginas, comentarios, miembros y contexto del usuario actual
Herramientas Disponibles
list_spaces: lista los espacios Docmost disponiblesget_space: obtiene detalles de un espacio específicosearch_docs: busca documentación, opcionalmente limitada a un espaciosearch_pages: alias compatible hacia atrás parasearch_docsget_page: obtiene una página y devuelve su contenido como Markdownlist_pages: lista páginas recientes en un espaciolist_child_pages: lista páginas hijas para un ID de página padreget_comments: lista comentarios de una páginalist_workspace_members: lista miembros del espacio de trabajoget_current_user: obtiene el usuario autenticado y el contexto del espacio de trabajocreate_page: crea una nueva página en un espacio desde contenido Markdownupdate_page: actualiza el título y/o el contenido Markdown de una página existenteduplicate_page: duplica una página (y sus subpáginas) dentro de su espaciocopy_page_to_space: copia una página (y sus subpáginas) a un espacio diferentemove_page: mueve una página bajo un nuevo padre, o a la raíz del espaciomove_page_to_space: mueve una página (y sus subpáginas) a un espacio diferentecreate_space: crea un nuevo espacio con nombre y slug de URLupdate_space: actualiza el nombre, slug y/o descripción de un espaciocreate_comment: añade un comentario a nivel de página desde Markdownupdate_comment: reemplaza el cuerpo de un comentario existente con nuevo Markdown
Hoja de Ruta
Todas las herramientas de lectura y escritura planificadas ya están implementadas. create_comment añade
comentarios a nivel de página; los comentarios anclados a una selección de texto específica (comentarios
en línea) requieren las posiciones del cursor del editor colaborativo y están fuera del alcance
de este servidor basado en REST.
Compatibilidad
Apunta a Docmost aproximadamente desde el último año de lanzamientos (v0.22+); servidores
más antiguos funcionan con el mejor esfuerzo. El servidor detecta la versión de Docmost (vía
POST /api/version) una vez por sesión y se adapta donde el comportamiento difiere:
- Ediciones del cuerpo de página:
update_pagesolo puede cambiar el cuerpo de una página existente en Docmost v0.70.0+. En servidores más antiguos, el cuerpo vive en el editor colaborativo y una actualización REST del cuerpo se ignora —update_pagelo dice explícitamente y sugierecreate_page(que persiste cuerpos en todas las versiones vía el endpoint de importación). Las actualizaciones de título funcionan en todas partes.
Soporte de Contenido
Los cuerpos de páginas y comentarios se escriben en Markdown (encabezados, negrita/cursiva/tachado, código en línea, enlaces, listas, listas de tareas, citas en bloque, bloques de código; las páginas también soportan tablas e imágenes con URL externa). Los comentarios soportan un conjunto más pequeño — sin tablas, listas de tareas ni imágenes.
Menciones (@etiquetado): en cualquier cuerpo Markdown, un enlace con una URL user: o page:
se convierte en una mención — [Display Name](user:USER_UUID) etiqueta a un usuario (encuentra el
UUID con list_workspace_members) y [Page Title](page:PAGE_UUID) enlaza una
página. Los usuarios etiquetados son notificados por Docmost.
Adjuntar archivos/imágenes subidos (a diferencia de referenciar una URL de imagen) no está soportado.
Requisitos
- Node.js 18 o más reciente para
npx - Una instancia Docmost alcanzable
- Autenticación por correo/contraseña habilitada en esa instancia Docmost
Inicio Rápido
Ejecuta el servidor directamente con npx:
npx -y @wisflux/docmost-local-mcp --base-url=https://docs.example.com
También puedes proporcionar la URL base con una variable de entorno:
DOCMOST_BASE_URL=https://docs.example.com npx -y @wisflux/docmost-local-mcp
Configuración del Cliente MCP
La mayoría de los clientes MCP lanzan el servidor directamente con npx. Añade esto a la configuración MCP de tu cliente, reemplazando la URL base con tu propia instancia Docmost:
{
"mcpServers": {
"docmost": {
"command": "npx",
"args": ["-y", "@wisflux/docmost-local-mcp", "--base-url=https://docs.example.com"]
}
}
}
Dónde vive esa configuración, por cliente:
-
Claude Desktop —
claude_desktop_config.json(Configuración → Desarrollador → Editar Configuración) -
Cursor —
~/.cursor/mcp.json(global) o.cursor/mcp.json(por proyecto) -
Claude Code — un comando, sin edición de archivos:
claude mcp add docmost -- npx -y @wisflux/docmost-local-mcp --base-url=https://docs.example.com -
VS Code (GitHub Copilot) —
.vscode/mcp.json, usando una clave de nivel superiorserversen lugar demcpServers:{ "servers": { "docmost": { "command": "npx", "args": ["-y", "@wisflux/docmost-local-mcp", "--base-url=https://docs.example.com"] } } }
Esta configuración funciona bien cuando quieres una instancia Docmost fija por configuración de cliente. Si --base-url o DOCMOST_BASE_URL está establecido, la página de inicio de sesión muestra esa URL prellenada y bloquea el campo. Si no se configura ninguna URL base, el flujo de inicio de sesión la solicita durante el inicio de sesión interactivo.
Ejemplos de Prompts
Una vez conectado, pregunta a tu cliente de IA cosas como:
- "Busca en el espacio de Ingeniería en Docmost nuestro runbook de guardia y resúmelo."
- "Crea una nueva página en el espacio de Producto titulada 'Planificación Q3' a partir de estas notas: …"
- "Convierte esta transcripción de reunión en una página estructurada de Docmost bajo el espacio de Equipo."
- "Encuentra cada página en Docmost que mencione el antiguo endpoint de API y listalas."
- "Lee la página 'Onboarding' y redacta una lista de verificación más corta como nueva subpágina."
- "Añade un comentario en la página de notas de versión señalando el paso de migración faltante."
Flujo de Autenticación
- Tu cliente MCP lanza el servidor sobre stdio.
- En la primera llamada de herramienta autenticada, el servidor inicia una página de inicio de sesión HTTP local en
127.0.0.1. - El servidor abre una ventana de autenticación nativa cuando está disponible, o recurre al navegador del sistema.
- Ingresas tu correo y contraseña allí. Si
--base-urloDOCMOST_BASE_URLestá establecido, la URL de Docmost está prellenada y bloqueada. - El servidor inicia sesión a través de
/api/auth/login, extrae la cookieauthToken, almacena la sesión y opcionalmente guarda las credenciales para re-inicio de sesión automático. - Las solicitudes futuras reutilizan el token guardado hasta que esté cerca de expirar o sea rechazado por Docmost.
Estado Local y Almacenamiento de Credenciales
El servidor almacena el estado local en:
~/.docmost-local-mcp/
Archivos utilizados allí:
config.json: última URL base y correosession.json: token de autenticación guardado y expiración
Las credenciales se almacenan en el llavero del sistema cuando está disponible, que es la ruta preferida en plataformas compatibles.
Si el almacenamiento seguro de credenciales del sistema operativo no está disponible, el servidor recurre al almacenamiento de credenciales local cifrado para poder seguir soportando la reutilización de inicio de sesión sin escribir credenciales en texto plano. Ese respaldo es intencionalmente secundario al almacenamiento respaldado por llavero.
Notas de Plataforma
La ventana de autenticación nativa usa la vista web del sistema en cada plataforma:
- macOS:
WKWebView - Windows:
WebView2 - Linux:
WebKitGTK
Advertencias importantes:
- Windows necesita el runtime WebView2 disponible
- Los entornos de escritorio Linux necesitan paquetes WebKitGTK instalados
- Cuando el binario se compila sin la característica
native-webview, siempre se usa el respaldo del navegador
Referencia de Herramientas
list_spaces
Devuelve nombres, slugs e IDs de espacios Docmost.
search_docs
Entradas:
query: texto de búsqueda requeridospace_id: ID de espacio Docmost opcional
search_pages
Entradas:
query: texto de búsqueda requeridospace_id: ID de espacio Docmost opcional
Este es un alias compatible hacia atrás para la búsqueda de páginas. search_docs sigue disponible.
get_space
Entradas:
space_id: ID de espacio Docmost requerido
get_page
Entradas:
slug_id: el ID de slug de página devuelto porsearch_docs
list_pages
Entradas:
space_id: ID de espacio Docmost requeridolimit: límite de recuento de páginas opcionalcursor: cursor de paginación opcional
list_child_pages
Entradas:
page_id: ID de página padre requeridolimit: límite de recuento de páginas opcionalcursor: cursor de paginación opcional
get_comments
Entradas:
page_id: ID de página requeridolimit: límite de recuento de comentarios opcionalcursor: cursor de paginación opcional
list_workspace_members
Entradas:
limit: límite de recuento de miembros opcionalcursor: cursor de paginación opcionalquery: texto de búsqueda de miembros opcionaladmin_view: indicador de visibilidad de administrador opcional
get_current_user
Entradas:
- ninguna
create_page
Entradas:
space_id: ID de espacio Docmost requerido (UUID) para crear la páginatitle: título de página requeridomarkdown: cuerpo de página opcional como Markdownparent_page_id: ID de página padre opcional para anidar (solo páginas solo-título)
Cuando se proporciona markdown, el cuerpo de la página se envía a través del endpoint de importación de Docmost
(POST /api/pages/import), que es el único mecanismo que persiste de manera confiable el contenido del cuerpo de la página
en todas las versiones de Docmost (incluidos servidores autoalojados más antiguos). Las páginas creadas con
un cuerpo aterrizan en la raíz del espacio — parent_page_id se respeta solo para páginas solo-título.
update_page
Entradas:
page_id: ID de página Docmost o ID de slug requeridotitle: nuevo título opcional (omitir para dejar sin cambios)markdown: nuevo cuerpo opcional como Markdown; reemplaza el contenido existente (omitir para dejar sin cambios)
Actualizar el título de una página funciona en todas las versiones de Docmost. Actualizar el
cuerpo de una página existente vía REST funciona solo en Docmost más reciente; en servidores
autoalojados más antiguos (por ejemplo, v0.25.x) el cuerpo se edita únicamente a través del editor
colaborativo y una actualización REST del cuerpo no se aplica. Para establecer el contenido del cuerpo
de manera confiable allí, crea una nueva página con create_page en su lugar.
Para el diseño completo, detalles de conversión Markdown→ProseMirror, campos verificados de la API de Docmost y advertencias de versión, consulta docs/write-tools.md.
Desarrollo
Para detalles del flujo de trabajo de mantenedores y contribuyentes, consulta CONTRIBUTING.md.
Licencia
MIT