Diese Dokumentation bezieht sich immer auf die aktuellste veroeffentlichte Version. Fuer aeltere Versionen siehe das CHANGELOG.
Nutzt du Wiki.js mit einem anderen MCP-Client (nicht Claude Code)? Der eigenstaendige wikijs-mcp-server (Node.js) ist die richtige Wahl dafuer.
wikijs-plugin ist ein installierbares Claude-Code-Plugin fuer Wiki.js: ein Python-MCP-Server (Seiten erstellen, aktualisieren, suchen, verwalten) kombiniert mit dem docs-wiki-Skill, der Dokumentations-Agents orchestriert und direkt in Wiki.js veroeffentlicht.
Ein Plugin, zwei Bausteine: der MCP-Server stellt die
wikijs_*-Tools bereit, derdocs-wiki-Skill nutzt sie, um aus Code automatisch strukturierte DE+EN-Dokumentation zu erstellen - ohne manuelles Copy-Paste oder Browser-Wechsel.
Installiert wird das Plugin ueber die Claude-Code-Marketplace-Mechanik - kein manuelles Klonen, Bauen oder Registrieren mehr noetig.
docs-wiki-Skill - Orchestriert Dokumentations-Agents (docs-architect, mermaid-expert, tutorial-engineer, api-documenter, reference-builder) fuer Neue Doku, Update oder Qualitaets-Upgrade~/.wikijs-plugin/venv/1. Automatische Dokumentation nach Plugin-Entwicklung
Du entwickelst ein Plugin in Claude Code und rufst /wikijs-plugin:docs-wiki auf. Claude analysiert Code, Architektur und API und erstellt automatisch eine strukturierte, zweisprachige Wiki-Seite.
2. Wissensmanagement waehrend der Entwicklung
Suche in Wiki.js nach bestehender Dokumentation via wikijs_search_pages und wende die gefundenen Konventionen auf deinen aktuellen Code an.
3. Content-Reorganisation
Verschiebe systematisch Seiten zwischen Pfaden, z.B. alle Seiten unter /legacy/ nach /archive/.
4. Mehrsprachige Dokumentation
Erstelle Wiki-Seiten gleichzeitig in DE und EN mit konsistenter Struktur - der docs-wiki-Skill erzwingt das.
5. Qualitaets-Upgrade bestehender Seiten
Bestehende, magere Wiki-Seiten um Mermaid-Diagramme, Callout-Boxen, Tabs und Troubleshooting-Sektionen aufwerten lassen.
| Anforderung | Version | Hinweise |
|---|---|---|
| Python | 3.11+ | Fuer den /wikijs-plugin:setup-Skill; auf Windows loest der py-Launcher das zuverlaessig auf, auch wenn python/python3 auf den Microsoft-Store-Alias-Stub zeigen |
| Wiki.js | 2.x oder 3.x | Mit aktivierter GraphQL API |
| Wiki.js API Token | - | Berechtigungen: read:pages, write:pages, manage:pages |
| Claude Code | Aktuell | Installation ueber die Plugin-Marketplace-Mechanik |
# Marketplace registrieren
claude plugin marketplace add markus-michalski/wikijs-plugin
# Plugin installieren
claude plugin install wikijs-plugin@wikijs-plugin
Danach Claude Code neu starten und den Setup-Skill ausfuehren:
/wikijs-plugin:setup
Der Skill erstellt eine dedizierte venv unter ~/.wikijs-plugin/venv/, installiert die Python-Abhaengigkeiten und kopiert die .env-Vorlage nach ~/.wikijs-plugin/.env.
Bereits wikijs-mcp-server (Node.js) fuer Claude Code im Einsatz? Kopiere einfach die bestehenden Werte aus deiner alten
.envin die neue~/.wikijs-plugin/.env- gleiche Keys (WIKIJS_API_URL,WIKIJS_API_TOKEN), kein neues API-Token noetig. Danach die alte manuelle MCP-Registrierung entfernen, damit die Tools nicht doppelt erscheinen.
| Variable | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
WIKIJS_API_URL |
Ja | - | GraphQL-Endpunkt der Wiki.js-Instanz (z.B. https://wiki.example.com/graphql) |
WIKIJS_API_TOKEN |
Ja | - | API-Token mit Page-Management-Berechtigungen |
Der Server laedt die .env-Datei automatisch aus ~/.wikijs-plugin/.env beim ersten Tool-Aufruf - dieser Pfad liegt ausserhalb des Plugin-Verzeichnisses und ueberlebt Plugin-Updates.
WIKIJS_API_URL=https://deine-wiki-instance.com/graphql
WIKIJS_API_TOKEN=dein-api-token-hier
Aenderungen an
~/.wikijs-plugin/.envwerden erst nach einem Neustart von Claude Code wirksam - der MCP-Server haelt die einmal geladenen Credentials fuer die Laufzeit des Prozesses.
wikijs-pluginread:pages - Seiten lesenwrite:pages - Seiten erstellen und aktualisierenmanage:pages - Seiten loeschen und verschieben.env-DateiOhne
manage:pagesfunktionierendelete_pageundmove_pagenicht. Wenn du nur Lese-/Schreibzugriff brauchst, reichenread:pagesundwrite:pages.
Nach Neustart von Claude Code:
/mcp
Du solltest wikijs-mcp mit Status "connected" sehen.
/wikijs-plugin:docs-wiki orchestriert Dokumentations-Agents fuer strukturierte, zweisprachige Wiki.js-Seiten:
wikijs_create_page/wikijs_update_page, isPublished: trueIst der MCP-Server nicht erreichbar, blockiert das nur den Veroeffentlichen-Schritt - der Skill generiert trotzdem vollstaendigen DE+EN-Content zum manuellen Kopieren.
| Tool | Beschreibung | Parameter |
|---|---|---|
wikijs_create_page |
Neue Wiki-Seite erstellen | path, title, content, description, locale, editor, isPublished, isPrivate, tags |
wikijs_update_page |
Bestehende Seite aktualisieren | id/path, locale, content, title, description, isPublished, tags |
wikijs_get_page |
Seite per ID oder Pfad abrufen | id/path, locale |
wikijs_list_pages |
Seiten mit Pagination auflisten | locale, limit, offset |
wikijs_search_pages |
Volltext-Suche | query, locale |
wikijs_delete_page |
Seite permanent loeschen | id/path, locale |
wikijs_move_page |
Seite zu neuem Pfad verschieben | id/path, locale, destinationPath, destinationLocale |
Erstellt eine neue Seite in Wiki.js.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
path |
string | Ja | - | Seiten-Pfad ohne fuehrenden Slash (z.B. osticket/plugin-name) |
title |
string | Ja | - | Seiten-Titel (max. 200 Zeichen) |
content |
string | Ja | - | Seiten-Inhalt (Markdown oder HTML) |
description |
string | Ja | - | Kurze Seitenbeschreibung (max. 500 Zeichen) |
locale |
string | Nein | en |
Sprache (2-5 Zeichen) |
editor |
string | Nein | markdown |
Editor-Typ: markdown, code, ckeditor |
isPublished |
boolean | Nein | true |
Sofort veroeffentlichen |
isPrivate |
boolean | Nein | false |
Private Seite mit eingeschraenktem Zugriff |
tags |
string[] | Nein | [] |
Tags fuer Kategorisierung |
Beispiel:
{
"path": "osticket/ticket-merge-plugin",
"title": "Ticket Merge Plugin",
"content": "# Technische Dokumentation\n\n...",
"description": "Technische Dokumentation fuer das Ticket Merge Plugin",
"locale": "de",
"isPublished": true,
"tags": ["osticket", "plugin"]
}
Aktualisiert eine bestehende Seite. Identifikation per ID oder Pfad+Locale.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
id |
number | Nein* | - | Seiten-ID |
path |
string | Nein* | - | Seiten-Pfad |
locale |
string | Nein | en |
Sprache (erforderlich bei Pfad-Nutzung) |
content |
string | Nein | - | Neuer Inhalt |
title |
string | Nein | - | Neuer Titel (max. 200 Zeichen) |
description |
string | Nein | - | Neue Beschreibung (max. 500 Zeichen) |
isPublished |
boolean | Nein | - | Veroeffentlichungsstatus |
tags |
string[] | Nein | - | Neues Tags-Array |
*Entweder id oder path muss angegeben werden.
Auto-Content-Preservation: Wenn
contentodertagsnicht angegeben werden, werden die bestehenden Werte automatisch vom Server abgerufen und beibehalten. Dies ermoeglicht reine Metadaten-Updates ohne Content-Verlust.
Beispiele:
// Nur Metadaten aktualisieren (Content bleibt erhalten)
{ "id": 202, "isPublished": true }
// Content per Pfad aktualisieren
{
"path": "osticket/plugin-name",
"locale": "de",
"content": "# Neuer Inhalt\n\n...",
"isPublished": true
}
Ruft eine Seite per ID oder Pfad ab.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
id |
number | Nein* | - | Seiten-ID |
path |
string | Nein* | - | Seiten-Pfad |
locale |
string | Nein | en |
Sprache (erforderlich bei Pfad-Nutzung) |
*Entweder id oder path muss angegeben werden.
Inhalte ueber 100.000 Zeichen werden automatisch gekuerzt mit dem Hinweis
[Content truncated. Original length: XXX chars].
Listet alle Seiten mit Pagination und optionaler Filterung auf.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
locale |
string | Nein | - | Nach Sprache filtern |
limit |
number | Nein | 50 |
Maximale Ergebnisse (1-200) |
offset |
number | Nein | 0 |
Anzahl zu ueberspringender Eintraege |
Pagination-Response:
{
"pagination": {
"limit": 50,
"offset": 0,
"total_count": 191,
"has_more": true,
"next_offset": 50
}
}
Volltext-Suche ueber alle Wiki-Inhalte.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
query |
string | Ja | - | Suchbegriff (2-200 Zeichen) |
locale |
string | Nein | - | Nach Sprache filtern |
Löscht eine Seite permanent und unwiderruflich. Identifikation per ID oder Pfad+Locale.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
id |
number | Nein* | - | Seiten-ID |
path |
string | Nein* | - | Seiten-Pfad |
locale |
string | Nein | en |
Sprache (erforderlich bei Pfad-Nutzung) |
*Entweder id oder path muss angegeben werden.
Diese Aktion ist IRREVERSIBEL! Die Seite und ihre gesamte Historie werden permanent geloescht.
Verschiebt eine Seite zu einem neuen Pfad. Identifikation per ID oder Pfad+Locale.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
id |
number | Nein* | - | Seiten-ID |
path |
string | Nein* | - | Aktueller Seiten-Pfad |
locale |
string | Nein | en |
Aktuelle Sprache |
destinationPath |
string | Ja | - | Neuer Pfad (1-500 Zeichen) |
destinationLocale |
string | Nein | en |
Ziel-Sprache |
*Entweder id oder path muss angegeben werden.
Nach dem Verschieben aendert sich die URL der Seite. Aktualisiere alle externen Links, die auf den alten Pfad verweisen.
Du: "/wikijs-plugin:docs-wiki - ich habe gerade das Ticket-Merge-Plugin
fertig entwickelt. Erstelle eine ausfuehrliche technische Wiki-Seite."
Claude:
1. Fragt Projekttyp (osTicket), Projektname, Modus (Neue Doku)
2. laedt Templates, analysiert Code via docs-architect
3. erzeugt Mermaid-Diagramm via mermaid-expert
4. erstellt Wiki-Seite DE+EN via wikijs_create_page
Du: "Fuege der Seite ueber das Ticket-Merge-Plugin einen
Abschnitt ueber Performance-Optimierung hinzu."
Claude:
1. Ruft aktuelle Seite ab via wikijs_get_page
2. Analysiert bestehenden Content
3. Generiert neuen Abschnitt
4. Aktualisiert Seite via wikijs_update_page
Du: "Finde alle osTicket-Seiten und verschiebe sie unter projekte/osticket/"
Claude:
1. Sucht via wikijs_search_pages nach "osTicket"
2. Listet gefundene Seiten auf
3. Verschiebt jede Seite via wikijs_move_page zum neuen Pfad
4. Gibt Zusammenfassung aus
Prüfung: /wikijs-plugin:setup erneut ausführen - zeigt Venv-, Dependency- und Import-Status.
Lösung: Bei MCP: MISSING die Fehlermeldung prüfen, meist fehlende Dependencies (pip install -r requirements.txt im Plugin-Verzeichnis erneut ausführen).
Symptom: Missing required environment variables WIKIJS_API_URL / WIKIJS_API_TOKEN
Prüfung: Existiert ~/.wikijs-plugin/.env mit beiden Variablen gesetzt?
Lösung:
cp .env.example ~/.wikijs-plugin/.env
# Datei mit korrekten Werten bearbeiten, danach Claude Code neu starten
Symptom: getaddrinfo failed oder HTTP error! status: 404
Prüfung: Ist WIKIJS_API_URL korrekt und endet auf /graphql?
Lösung: URL-Format prüfen, z.B. https://deine-wiki.com/graphql
Symptom: GraphQL Error: Forbidden
Lösung: API-Token-Berechtigungen im Wiki.js Admin Panel prüfen (read:pages, write:pages, manage:pages), Token ggf. neu generieren.
Symptom: Anfrage läuft in Timeout
Lösung: Der API-Timeout beträgt 30 Sekunden. Bei sehr großen Seiten (>100k Zeichen) kann der Content automatisch gekürzt werden.
Transport: stdio (Standard-MCP-Transport)
MCP SDK: mcp[cli] 2.0.0 (Python)
API: Wiki.js GraphQL API mit Bearer Token Authentication
wikijs-plugin/
├── .claude-plugin/ # plugin.json + marketplace.json
├── bin/ # run-server Wrapper (POSIX + Windows)
├── servers/wikijs-mcp-server/ # MCP-Server (mcp[cli] + httpx)
│ ├── server.py # Tool-Registrierung
│ └── tools/ # client.py, pages.py, validation.py, config.py
├── skills/docs-wiki/ # Doku-Skill (dieser Seite)
└── skills/setup/ # Venv- und .env-Setup
destructiveHint: true bei delete, readOnlyHint: true bei Lese-Tools.env wird erst beim ersten Tool-Aufruf geladen, import server funktioniert auch ohne konfigurierte ZugangsdatenWas ist MCP?
Das Model Context Protocol (MCP) ist ein offenes Protokoll von Anthropic, das KI-Assistenten wie Claude ermoeglicht, mit externen Tools und Diensten zu interagieren. Ein MCP-Server stellt Tools (Funktionen) bereit, die Claude waehrend eines Gespraechs aufrufen kann.
Warum Python statt Node.js?
Der urspruengliche wikijs-mcp-server war TypeScript/Node.js. Das Plugin nutzt Python (mcp[cli] + httpx), passend zu den anderen MM-Plugins (mm-dev-toolkit, project-hub, storyforge) - ein einheitliches Setup-Pattern statt eines Node-Sonderfalls. Tool-Namen und -Verhalten sind identisch geblieben.
Nutze ich einen anderen MCP-Client als Claude Code - was dann?
Der eigenstaendige wikijs-mcp-server (Node.js) bleibt dafuer verfuegbar und unveraendert.
Gehen bei Metadaten-Updates die Seiteninhalte verloren?
Nein. Der Server ruft bei reinen Metadaten-Updates (z.B. nur isPublished aendern) automatisch den bestehenden Content ab und sendet ihn mit dem Update mit. Content und Tags werden automatisch beibehalten.
MIT License - Siehe LICENSE