Skip to main content
Glama

docmost-mcp

Ein MCP-Server, der KI-Agenten Lese- und Schreibzugriff auf ein selbst gehostetes Docmost-Wiki über dessen reguläre REST-API gewährt.

Warum es das gibt

Docmost bringt einen eigenen MCP-Endpunkt mit, der jedoch hinter einer kostenpflichtigen Lizenz steckt – die Einstellungs-UI zeigt für die API-Verwaltung „Nur mit kostenpflichtiger Lizenz verfügbar“ und /api/mcp liefert in der Community Edition 404. Auch das Erstellen von API-Schlüsseln ist auf dieselbe Weise eingeschränkt.

Die reguläre REST-API ist in der Community Edition jedoch vollständig offen. Dieser Server ist ein dünner Wrapper darüber: gleiche Operationen, Sitzungsauthentifizierung statt API-Schlüssel.

Related MCP server: wikidocs-mcp

Voraussetzungen

  • Python 3.11+

  • Eine Docmost-Instanz, die du über HTTP(S) erreichen kannst

  • Ein dediziertes Docmost-Benutzerkonto für den Agenten

Installation

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

Konfiguration

Kopiere die Beispielkonfiguration und fülle sie aus:

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

Zwei Authentifizierungsmodi werden unterstützt:

Modus

Verwendung

api_key

Wenn du eine Docmost-Enterprise-Lizenz besitzt. Wird als Bearer-Token gesendet.

email + password

Community Edition. Der Server meldet sich an und authentifiziert sich automatisch neu, wenn die Sitzung abläuft.

Wenn api_key gesetzt ist, hat er Vorrang; andernfalls werden die Anmeldedaten verwendet.

Der Konfigurationspfad kann mit der Umgebungsvariable DOCMOST_MCP_CONFIG überschrieben werden.

Ein dediziertes Konto erstellen

Verwende nicht die Anmeldedaten des Workspace-Besitzers. Lade einen separaten Benutzer ein (Einstellungen → Mitglieder → Einladen) und gewähre ihm nur Zugriff auf die Bereiche, die der Agent benötigt. Der Bereichszugriff in Docmost wird normalerweise von der Standardgruppe Jeder geerbt. Überprüfe daher, was diese Gruppe erreichen kann, bevor du annimmst, dass der Agent eingeschränkt ist.

Gmail-Plus-Adressierung (you+agent@gmail.com) funktioniert, wenn du kein zweites Postfach anlegen möchtest.

Überprüfen

selftest.py testet die gesamte Kette – Anmeldung, Lesen, Schreiben, Zurücklesen, Löschen:

./venv/bin/python selftest.py

Einen Agenten verbinden

Der Server spricht MCP über stdio.

Claude Code

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

Oder füge es manuell zu ~/.claude.json hinzu:

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

Starte Claude Code danach neu – die Konfiguration wird beim Start gelesen.

Claude Desktop

Füge denselben Block zu claude_desktop_config.json hinzu:

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

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

Cursor

Füge es zu .cursor/mcp.json im Projekt oder global zu ~/.cursor/mcp.json hinzu, mit derselben mcpServers-Struktur.

Jeder andere MCP-Client

Starte server.py mit dem Python der virtuellen Umgebung und sprich JSON-RPC über stdin und stdout. Ein minimaler Handshake:

{"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"}

Ein Komfort-Wrapper hält den Befehl kurz:

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

Werkzeuge

Werkzeug

Argumente

Funktion

list_spaces

limit

Listet Workspace-Bereiche auf

search

query, space_id?, limit

Volltextsuche über Seiten

get_page

page_id

Ruft eine Seite anhand der ID oder slugId ab

recent_pages

space_id?, limit

Kürzlich geänderte Seiten

create_page

space_id, title, content?, parent_page_id?, fmt

Erstellt eine Seite

update_page

page_id, title?, content?, fmt

Aktualisiert Titel und/oder Inhalt

move_page

page_id, parent_page_id?

Ändert die übergeordnete Seite

delete_page

page_id, permanently

Verschiebt eine Seite in den Papierkorb (oder löscht sie endgültig)

fmt ist markdown (Standard), html oder json.

Hinweise zur Docmost-API

Dinge, die du wissen solltest, wenn du diesen Server erweiterst:

  • Jeder Endpunkt ist ein POST, auch Lesevorgänge.

  • /pages/create und /pages/update erfordern ein format-Feld (json | markdown | html). Wenn es fehlt, wird 400 zurückgegeben.

  • Antworten verpacken die Nutzdaten in {"data": ...}; der Client entpackt sie.

  • /api/api-keys antwortet in der Community Edition mit 200 und einer leeren Liste – das Auflisten ist offen, nur das Erstellen von Schlüsseln ist lizenzpflichtig.

  • Endpunktpfade und Nutzdatenstrukturen wurden aus dem Docmost-Client-Quellcode entnommen (apps/client/src/features/*/services/*.ts), nicht geraten.

Sicherheit

  • config.json enthält ein Klartext-Passwort. Halte es mit Modus 600 und außerhalb der Versionskontrolle – es steht in .gitignore.

  • Gib dem Agentenkonto den engsten Bereichszugriff, der ihm die Arbeit noch ermöglicht.

  • Die Aktionen des Kontos erscheinen in Docmost unter seinem eigenen Namen, sodass die Seitenhistorie nachvollziehbar bleibt.

Kompatibilität

Erstellt mit Docmost 0.95.0 und Python MCP SDK 2.0. Beachte, dass SDK 2.0 FastMCP in MCPServer umbenannt und nach mcp.server verschoben hat; der Pre-2.0-Importpfad mcp.server.fastmcp funktioniert nicht.

Lizenz

MIT – siehe LICENSE.

Dieses Projekt ist nicht mit Docmost verbunden.

Related MCP Connectors

Related MCP Servers