Task 14 (rulings P17/P18, Q10): - lit/menu-get returns menu_rev (Rev::ofMenu over id, parent, position, title, url, object, object_id); lit/menu-set-items requires it, refuses a stale one with rev_mismatch (hint: lit/menu-get) and returns the new menu_rev. Errors::revMismatch takes an optional message/hint. - GuideRepository: filter lit_mcp_guides adds/overrides topics; invalid topic names and non-string content are ignored, files stay the default. - lit/post-trash names front page, posts page and linking menus in the confirmation and as warnings; lit/menu-assign-location needs confirm to remove an assigned menu and names it; lit/post-schedule warns that a private entry becomes public; Divi hints no longer point to non-existing lit-divi-* tools. - PostGuard::missedSchedule: 60 s publish window, zero GMT date falls back to get_gmt_from_date(post_date); post-schedule refuses dates within that window. - write_failed after a clean rollback that keeps a revision/backup says "Die Aenderung wurde nicht gespeichert (... bleibt erhalten)" via the new state parameter (Errors::writeFailed / WriteFailed rolledBackState). - wp-basis-smoke: menu_rev flow, unassign confirm, trash/menu and private-schedule warnings. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
5.7 KiB
Inhalte, Felder und Status
Werkzeugnamen: lit-… sind direkt aufrufbare Tools; lit/… sind Abilities, die über
mcp-adapter-execute-ability (Name in ability_name, Eingaben in parameters) aufgerufen werden.
Inhaltstypen erkennen
lit-content-typesohne Parameter listet alle Inhaltstypen (Seiten, Beiträge, eigene Typen) mit Taxonomien, Anzahl und ob Divi dafür aktiv ist.lit-content-typesmitpost_typeliefert zusätzlich alle Felder: Schlüssel, Typ, Pflicht, Auswahlwerte (choices), Beziehungsziel (related) und Schreibstatus:writable– sicher beschreibbar (Pods-Feld oder registriertes Meta-Feld),readonly– nicht beschreibbar,unknown– vorhandener Meta-Schlüssel ohne bekannten Typ; Schreiben geht, der Wert wird unverändert gespeichert (Warnung in der Antwort).
Lesen und Suchen
lit-content-query: Filterstatus,search,taxonomy({taxonomy, terms: [IDs oder Slugs]}),field({key, value, compare}),date_after/date_before(JJJJ-MM-TT),parent; Blättern mitnext_cursor→cursor.fieldundtaxonomysind auf Feld- bzw. Taxonomienamen beschränkt, dielit-content-typesfür diesen Inhaltstyp auch anzeigt – ein unbekannter Name wird abgelehnt, keine leere Trefferliste. Geliefert werden nur Einträge, die der verbundene Nutzer selbst bearbeiten darf (fremde Entwürfe/private Inhalte ohne die passende Berechtigung erscheinen nicht).lit-content-get: alle Daten eines Eintrags inkl. Feldern, Begriffen, Beitragsbild undrev. Bei Divi-Seiten fehltcontent; Divi-Werkzeuge folgen in einer späteren Version, bis dahin werden Divi-Inhalte im Divi-Builder bearbeitet (Titel, Auszug, Felder und Begriffe gehen weiter überlit-content-update).
Anlegen und Ändern
lit-content-createlegt immer einen Entwurf an. Felder werden gegen das Schema geprüft; ein Fehler bricht den ganzen Aufruf ab (fields.<schlüssel>im Fehler nennt die Ursache).lit-content-updateändert nur die übergebenen Werte, der Status bleibt.revauslit-content-getist Pflicht – hat jemand parallel gespeichert (Inhalt, Titel, Auszug, Status oder irgendetwas anderes am Eintrag), kommtrev_mismatch: neu lesen, Änderung auf dem aktuellen Stand wiederholen.- Begriffe:
terms: {"category": [4, "Neuer Begriff"]}ersetzt die Zuordnung dieser Taxonomie (IDs oder Namen; unbekannte Namen werden angelegt, falls erlaubt). - Felder leeren: Wert
null. Pflichtfelder können nicht geleert werden. - Beziehungsfelder erwarten IDs von Einträgen, die der Nutzer lesen darf; Datei-/Bildfelder Anhang-IDs aus der Mediathek.
- Einträge im Papierkorb werden nicht geändert (auch nicht veröffentlicht, geplant oder wiederhergestellt); zuerst in WordPress aus dem Papierkorb holen.
- Ist ein geplanter Eintrag über seinen Veröffentlichungszeitpunkt hinaus (verpasster Termin), würde jedes
Speichern ihn sofort veröffentlichen –
lit-content-update,lit/revision-restoreundlit/post-replace-with-copyverweigern das dann. Mit dem Nutzer klären: jetzt veröffentlichen (lit-post-publish) oder neu planen (lit/post-schedule).
Status
- Veröffentlichen, Zurückziehen und Planen sind eigene Werkzeuge (
lit-post-publish,lit/post-unpublish,lit/post-schedulemitdate= „JJJJ-MM-TT HH:MM“ in der Zeitzone der Website). Nur auf ausdrücklichen Wunsch des Nutzers verwenden. Ein privater Eintrag wird durch Planen zum Zeitpunkt öffentlich (die Antwort warnt davor). lit/post-trashlegt in den Papierkorb (nie endgültig) und brauchtconfirm: truenach Rückfrage. Ist der Eintrag Startseite, Beitragsseite oder in Menüs verlinkt, nennen Rückfrage undwarningsdas – dem Nutzer weitergeben.
Sicher überarbeiten
lit/post-duplicate→ Entwurfskopie; die Antwort enthält dierevder Kopie fürlit-content-update.- Kopie mit
lit-content-update(Divi-Inhalte bis zu den Divi-Werkzeugen im Divi-Builder) bearbeiten und dem Nutzer die Vorschau zeigen. lit/post-replace-with-copyübernimmt die Kopie ins Original (ID, URL, Status und Menüeinträge bleiben). Voraussetzungen: die Kopie muss noch Entwurf oder ausstehend sein,revdes Originals auslit-content-getist Pflicht (sie deckt Titel, Inhalt, Auszug und Status ab – Felder/Meta, die direkt am Original geändert wurden, werden dabei überschrieben), und erst nach Rückfrage mitconfirm: trueaufrufen. Vorher entsteht eine Revision und eine vollständige Sicherung des bisherigen Originals im Papierkorb (backup_idin der Antwort); danach wandert die Kopie ebenfalls in den Papierkorb. Ist der Papierkorb der Website deaktiviert, wird der Austausch verweigert, statt die Kopie endgültig zu löschen.
Jede Änderung liefert log_id. Eine revision_id (Revision mit dem Stand vorher) liefern nur
lit-content-update, lit/post-replace-with-copy und lit/revision-restore; bei allen anderen Tools ist sie
null. Rückgängig: lit/revisions-list → lit/revision-restore mit der rev des Eintrags (aus
lit-content-get) und confirm: true. Revisionen umfassen Titel, Inhalt und Auszug – Felder und Begriffe
nicht (dafür bei lit/post-replace-with-copy die Sicherung backup_id).
Wenn ein Schreibvorgang fehlschlägt
Fehler stecken als JSON (code, message, hint, ggf. weitere Felder) in der Fehlermeldung. Schlägt ein
Schreibvorgang nach ersten Änderungen fehl, ist code = write_failed (alles wurde zurückgenommen, nichts
wurde gespeichert) oder partial_write (die Rücknahme war unvollständig). Bei partial_write vor einem
erneuten Versuch immer erst den aktuellen Stand prüfen (lit-content-get,
lit/menu-get o. Ä.) statt den Aufruf einfach zu wiederholen – dem hint folgen.