Skip to main content
Glama

docmost-mcp

Un servidor MCP que da a los agentes de IA acceso de lectura/escritura a una wiki Docmost autoalojada a través de su API REST habitual.

Por qué existe esto

Docmost incluye su propio endpoint MCP, pero está restringido por una licencia de pago: la interfaz de Ajustes muestra "Disponible con una licencia de pago" para la gestión de API, y /api/mcp devuelve 404 en la Community Edition. La creación de claves API está restringida de la misma manera.

Sin embargo, la API REST ordinaria está completamente abierta en la Community Edition. Este servidor es un envoltorio ligero sobre ella: mismas operaciones, autenticación por sesión en lugar de una clave API.

Related MCP server: wikidocs-mcp

Requisitos

  • Python 3.11+

  • Una instancia de Docmost a la que puedas acceder por HTTP(S)

  • Una cuenta de usuario de Docmost dedicada para el agente

Instalación

git clone https://github.com/<you>/docmost-mcp.git
cd docmost-mcp
python3 -m venv venv
./venv/bin/pip install -r requirements.txt

Configuración

Copia la configuración de ejemplo y complétala:

cp config.example.json config.json
chmod 600 config.json
{
  "url": "https://docmost.example.com",
  "api_key": "",
  "email": "agent@example.com",
  "password": "..."
}

Se admiten dos modos de autenticación:

Modo

Cuándo usarlo

api_key

Si tienes una licencia Enterprise de Docmost. Se envía como token Bearer.

email + password

Community Edition. El servidor inicia sesión y se re-autentica automáticamente cuando la sesión expira.

Si api_key está establecido, tiene prioridad; de lo contrario, se usan las credenciales.

La ruta de configuración se puede sobrescribir con la variable de entorno DOCMOST_MCP_CONFIG.

Crear una cuenta dedicada

No uses las credenciales del propietario del espacio de trabajo. Invita a un usuario separado (Ajustes → Miembros → Invitar) y concédele acceso solo a los espacios que el agente necesite. El acceso a los espacios en Docmost suele heredarse del grupo Todos por defecto, así que comprueba qué puede alcanzar ese grupo antes de asumir que el agente está restringido.

El direccionamiento con signo más estilo Gmail (tu+agente@gmail.com) funciona si prefieres no crear un segundo buzón.

Verificación

selftest.py ejercita toda la cadena — inicio de sesión, lectura, escritura, relectura, borrado:

./venv/bin/python selftest.py

Conectar un agente

El servidor habla MCP sobre stdio.

Claude Code

claude mcp add docmost -- /path/to/docmost-mcp/venv/bin/python /path/to/docmost-mcp/server.py

O añádelo a ~/.claude.json manualmente:

{
  "mcpServers": {
    "docmost": {
      "type": "stdio",
      "command": "/path/to/docmost-mcp/venv/bin/python",
      "args": ["/path/to/docmost-mcp/server.py"],
      "env": {}
    }
  }
}

Reinicia Claude Code después — la configuración se lee al inicio.

Claude Desktop

Añade el mismo bloque a claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Cursor

Añádelo a .cursor/mcp.json en el proyecto, o a ~/.cursor/mcp.json globalmente, usando la misma forma de mcpServers.

Cualquier otro cliente MCP

Lanza server.py con el Python del virtualenv y habla JSON-RPC por stdin y stdout. Un handshake mínimo:

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}

Un envoltorio de conveniencia mantiene el comando corto:

#!/bin/sh
exec /path/to/docmost-mcp/venv/bin/python /path/to/docmost-mcp/server.py "$@"

Herramientas

Herramienta

Argumentos

Hace

list_spaces

limit

Lista los espacios del espacio de trabajo

search

query, space_id?, limit

Búsqueda de texto completo en páginas

get_page

page_id

Obtiene una página por id o slugId

recent_pages

space_id?, limit

Páginas modificadas recientemente

create_page

space_id, title, content?, parent_page_id?, fmt

Crea una página

update_page

page_id, title?, content?, fmt

Actualiza el título y/o el cuerpo

move_page

page_id, parent_page_id?

Reasigna una página a otro padre

delete_page

page_id, permanently

Mueve a la papelera (o elimina permanentemente) una página

fmt es markdown (por defecto), html o json.

Notas sobre la API de Docmost

Cosas que vale la pena saber si amplías este servidor:

  • Cada endpoint es POST, incluidas las lecturas.

  • /pages/create y /pages/update requieren un campo format (json | markdown | html). Omitirlo devuelve 400.

  • Las respuestas envuelven la carga útil en {"data": ...}; el cliente la desempaqueta.

  • /api/api-keys responde 200 con una lista vacía en la Community Edition — listar está abierto, solo la creación de claves está restringida por licencia.

  • Las rutas de los endpoints y las formas de las cargas útiles se tomaron del código fuente del cliente de Docmost (apps/client/src/features/*/services/*.ts), no se adivinaron.

Seguridad

  • config.json contiene una contraseña en texto plano. Mantenlo con modo 600 y fuera del control de versiones — está en .gitignore.

  • Da a la cuenta del agente el acceso más restringido a los espacios que aún le permita trabajar.

  • Las acciones de la cuenta aparecen en Docmost bajo su propio nombre, por lo que el historial de páginas sigue siendo atribuible.

Compatibilidad

Construido contra Docmost 0.95.0 y Python MCP SDK 2.0. Ten en cuenta que el SDK 2.0 renombró FastMCP a MCPServer y lo movió a mcp.server; la ruta de importación anterior a 2.0 mcp.server.fastmcp no funcionará.

Licencia

MIT — ver LICENSE.

Este proyecto no está afiliado con Docmost.

Related MCP Connectors

Related MCP Servers