Abilities für KI-Agenten
Lass einen KI-Agenten Icons über WordPress-Abilities auflisten, hinzufügen und entfernen: Ein- und Ausgaben, Freischaltung und Aufruf per REST oder PHP.
Mit WordPress 6.9 kam die Abilities API: Ein Plugin beschreibt, was es kann, mit einem Schema für Ein- und Ausgabe, und KI-Werkzeuge können diese Abilities über REST oder einen MCP-Adapter finden und ausführen. Easy SVG Pro registriert vier davon. Ein Agent kann jedes Icon der Seite lesen, ein neues in die Icon-Bibliothek legen und Icons in einem Icon-Set hinzufügen oder entfernen. Jedes Icon, das er schreibt, läuft durch denselben Sanitizer wie ein Upload.
Die vier Abilities
| Ability | Was sie macht | Schreibt sie? | REST-Methode |
|---|---|---|---|
easy-svg-pro/list-icons | Listet Icons aus Bibliothek, Sammlungen und Sets, seitenweise | Nein | GET |
easy-svg-pro/add-icon | Legt ein Icon in die kostenlose Icon-Bibliothek | Ja, überschreibt nie | POST |
easy-svg-pro/add-icons-to-set | Fügt Icons zu einem bestehenden Icon-Set hinzu | Ja, überschreibt nie | POST |
easy-svg-pro/remove-icon-from-set | Entfernt Icons per Name aus einem Set | Ja, ohne Rückgängig | DELETE |
Alle vier liegen in der Kategorie easy-svg-pro mit dem Label "Easy SVG".
Wann es sie gibt
Ein Agent sieht die Abilities nur, wenn all das zutrifft:
WordPress hat die Abilities API
WordPress 6.9 oder neuer. Auf älteren Versionen wird nichts registriert, und nichts geht kaputt.
Die Lizenz ist aktiv und die Funktion an
Schalte Abilities für KI-Agenten unter Icons → Funktionen ein, in der Gruppe Für Entwickler. Sie hat bewusst einen eigenen Schalter: Ein Agent, der Icons schreiben kann, soll eine Entscheidung sein, kein Nebeneffekt.
Die Set-Abilities brauchen zusätzlich den Set-Editor
add-icons-to-set und remove-icon-from-set lehnen mit easy_svg_pro_no_editor (HTTP 409) ab, solange Icon-Set-Editor nicht auch eingeschaltet ist.
Der Benutzer darf Optionen verwalten
Jede Ability prüft manage_options. Ein Agent mit Anwendungspasswort handelt als dieser WordPress-Benutzer, mit dessen Rechten.
Welche Icons list-icons meldet, hängt außerdem an Funktionen: die kostenlose Bibliothek nur, solange ihre Icon-Funktion im kostenlosen Plugin an ist, Sammlungen aus Themes, Ordnern und Code nur bei eingeschalteten Mehrere Sammlungen, und Sets nur bei eingeschaltetem Icon-Set-Editor.
Aufruf per REST
WordPress liefert Abilities unter /wp-json/wp-abilities/v1/ aus. Authentifizier dich mit einem Anwendungspasswort eines Administrators. WordPress bietet Anwendungspasswörter nur über HTTPS an, oder auf einer Seite mit dem Umgebungstyp local.
export SITE="https://example.com"
export AUTH="agent-bot:abcd efgh ijkl mnop qrst uvwx"
# Was kann diese Seite?
curl -s -u "$AUTH" "$SITE/wp-json/wp-abilities/v1/abilities?category=easy-svg-pro"
Der Endpunkt zum Ausführen ist /wp-json/wp-abilities/v1/abilities/<name>/run. WordPress wählt die HTTP-Methode aus den Annotationen der Ability: Nur lesende laufen mit GET, zerstörende und idempotente mit DELETE, alle anderen mit POST. Bei GET und DELETE steht die Eingabe im Query-Parameter input, bei POST im JSON-Body unter input.
Icons auflisten
curl -s -u "$AUTH" -G "$SITE/wp-json/wp-abilities/v1/abilities/easy-svg-pro/list-icons/run" \
--data-urlencode "input[search]=arrow" \
--data-urlencode "input[per_page]=50"
{
"items": [
{ "slug": "arrow-right", "label": "Arrow Right", "collection": "acme", "source": "set" }
],
"total": 1,
"page": 1,
"per_page": 50,
"has_more": false,
"truncated": false
}
Eingabefelder:
| Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
source | all, library, collection, set | all | Welche Art von Quelle gelesen wird |
collection | String | keiner | Nur diese Sammlung oder dieses Set |
search | String | keiner | Suche in Slug und Label, ohne Groß- und Kleinschreibung |
include_markup | Boolean | false | Das bereinigte SVG-Markup jedes Icons mitschicken |
page | Ganzzahl ab 1 | 1 | Seitennummer |
per_page | Ganzzahl von 1 bis 500 | 100 | Icons pro Seite |
Ein Icon in die Bibliothek legen
curl -s -u "$AUTH" -X POST "$SITE/wp-json/wp-abilities/v1/abilities/easy-svg-pro/add-icon/run" \
-H "Content-Type: application/json" \
-d '{"input":{"label":"Arrow","markup":"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 12h14"/></svg>"}}'
{ "added": true, "slug": "arrow-2", "label": "Arrow", "collection": "easy-svg", "source": "library" }
Ein vergebener Name bekommt eine Nummer. Der slug in der Antwort ist der, den WordPress wirklich gespeichert hat, nach dem Schreiben zurückgelesen. Nimm ihn, nie einen, den du selbst aus dem Label ableitest.
Icons zu einem Set hinzufügen
icons ist ein Objekt, dessen Schlüssel der Name ist, den jedes Icon bekommen soll. Jeder Wert enthält label und markup.
curl -s -u "$AUTH" -X POST "$SITE/wp-json/wp-abilities/v1/abilities/easy-svg-pro/add-icons-to-set/run" \
-H "Content-Type: application/json" \
-d '{"input":{"set_id":42,"icons":{"cart":{"label":"Warenkorb","markup":"<svg ...>...</svg>"}}}}'
{ "set_id": 42, "slug": "acme", "report": [ { "slug": "cart", "state": "added" } ] }
Einen Namen, den das Set schon hat, meldet sie als exists und lässt ihn in Ruhe. Überschreiben kann diese Ability nicht. slug ist der Sammlungs-Slug, den Templates nutzen, zum Beispiel acme/cart.
Icons aus einem Set entfernen
curl -s -u "$AUTH" -X DELETE -G "$SITE/wp-json/wp-abilities/v1/abilities/easy-svg-pro/remove-icon-from-set/run" \
--data-urlencode "input[set_id]=42" \
--data-urlencode "input[slugs][]=cart"
{ "set_id": 42, "slug": "acme", "report": [ { "slug": "cart", "state": "removed" } ] }
Einen Namen, den das Set nicht hat, meldet sie als not_found. Die anderen werden trotzdem entfernt.
Aufruf aus PHP
Abilities sind normale WordPress-Objekte, dein eigener Code kann sie also auch ausführen, zum Beispiel aus einem Queue-Worker, der Aufträge abarbeitet, die ein Agent in einer Tabelle hinterlassen hat.
/**
* Ein Icon über die Ability in die Bibliothek legen, mit allen ihren Prüfungen.
*/
function acme_agent_add_icon( $label, $markup ) {
if ( ! function_exists( 'wp_get_ability' ) ) {
return new WP_Error( 'acme_no_abilities', 'Dieses WordPress hat keine Abilities API.' );
}
$ability = wp_get_ability( 'easy-svg-pro/add-icon' );
if ( null === $ability ) {
return new WP_Error( 'acme_no_ability', 'Schalte Abilities für KI-Agenten unter Icons, Funktionen ein.' );
}
$result = $ability->execute(
array(
'label' => (string) $label,
'markup' => (string) $markup,
)
);
if ( is_wp_error( $result ) ) {
error_log( sprintf( 'Icon abgelehnt: %s (%s)', $result->get_error_message(), $result->get_error_code() ) );
}
return $result;
}
execute() prüft die Eingabe gegen das Schema und führt die Berechtigungsprüfung aus, braucht also einen aktuellen Benutzer mit manage_options. Läuft dieser Code außerhalb eines REST-Requests und schreibt Sets, ergänz auch easy_svg_pro_set_write_context, damit er die Set-Sperre nimmt.
Fehler, die ein Agent verstehen sollte
Jede Ablehnung ist ein WP_Error mit festem Code, ein Client kann also danach verzweigen.
| Code | HTTP | Bedeutung |
|---|---|---|
easy_svg_pro_missing_label, easy_svg_pro_missing_markup | 400 | Pflichteingabe fehlt |
easy_svg_pro_missing_set_id, easy_svg_pro_missing_icons, easy_svg_pro_missing_slugs | 400 | Pflichteingabe fürs Set fehlt |
easy_svg_pro_bad_name | 422 | Aus dem Label lässt sich kein Icon-Name machen |
easy_svg_pro_not_svg | 422 | Der Sanitizer hat es nicht als SVG akzeptiert |
easy_svg_pro_empty | 422 | Es ist nichts Zeichenbares übrig |
easy_svg_pro_too_large | 422 | Größer als das Limit der Seite, Meldung und max_mb nennen es |
easy_svg_pro_too_complex | 422 | Zu viele Teile, um es sicher zu lesen |
easy_svg_pro_no_store | 409 | Icon-Bibliothek aus oder das kostenlose Plugin zu alt |
easy_svg_pro_no_editor | 409 | Icon-Set-Editor aus |
easy_svg_pro_no_sanitizer, easy_svg_pro_not_saved | 500 | Problem auf dem Server, nichts gespeichert |
Stolperfallen
list-iconsliefert keine Set-IDs. Die Set-Abilities brauchenset_id, aberlist-iconsmeldet Sets nur per Slug. Such die ID selbst heraus, zum Beispiel mitGET /wp-json/easy-svg-pro/v1/sets/list(interne Route) oder im Tab Icon-Sets, und gib sie dem Agenten.- Set-Slugs in
list-iconssind Post-Slugs. Auf Seiten, die ältere Versionen liefen, heißt die registrierte Sammlung eines Sets vielleichtacme-x, währendlist-iconsacmesagt. Die Set-Abilities antworten mit dem registrierten Slug. - Dasselbe Icon doppelt. Sind Mehrere Sammlungen und Icon-Set-Editor beide an, erscheinen die Icons eines Sets einmal mit
source: collectionund einmal mitsource: set. Filter nachsource, wenn du zählst. - Eine unbekannte
sourceliefert nichts. Ein Tippfehler wiesetsergibt eine leere Liste, nicht alles. Das ist Absicht. - Abgelehnte Icons fehlen im Bericht. Bei
add-icons-to-setfliegt ein Icon, das der Sanitizer ablehnt, vor dem Zusammenführen raus und taucht inreporteinfach nicht auf. Vergleich die gesendeten Namen mit den zurückgemeldeten. - Ein unbekanntes Set schlägt nicht fehl.
add-icons-to-setundremove-icon-from-setantworten bei einerset_id, die kein Icon-Set ist, mit leeremslugund leeremreportstatt mit einem Fehler. Werte einen leerenslugals Fehlschlag. - Keine Obergrenze pro Aufruf. Die REST-Route hinter den Set-Abilities nimmt höchstens 25 Icons, die Abilities wenden diese Grenze nicht an. Schick trotzdem vernünftige Portionen.
- MCP braucht einen Adapter. Die Abilities tragen
mcp-Metadaten, aber Easy SVG Pro bringt keinen MCP-Server mit. Prüf die Schlüsselnamen gegen den Adapter, den deine Seite nutzt.
Gib Agenten einen eigenen WordPress-Benutzer und ein eigenes Anwendungspasswort, und widerruf es, wenn das Projekt endet. manage_options ist ein starkes Recht: Dasselbe Passwort kann jede Einstellung der Seite ändern, nicht nur Icons.