Il plugin espone 94 route sotto /wp-json/wpcb/v1. Le usa il server MCP, le usa Xaflo Desktop, e possono usarle i tuoi script: è semplice HTTPS con JSON, niente di specifico per l’AI.
Se il tuo hosting toglie Authorization, invia lo stesso valore in X-WPCB-Authorization.
Le richieste devono usare HTTPS; a quelle in HTTP semplice si risponde con 426.
/health, /install/info e i due script di installazione sono pubblici. Le route di gestione dei token e del plugin accettano solo un amministratore collegato a WordPress, non un token.
L’elenco aggiornato delle route è sempre in GET /wp-json/wpcb/v1, l’indice standard del namespace di WordPress.
Operazione distruttiva: ripetila con il confirmation_token ricevuto.
428
wpcb_confirmation_invalid
Il token di conferma è scaduto, già usato o di un’altra operazione.
429
wpcb_rate_limited
Troppe richieste; aspetta i secondi indicati in Retry-After.
400
wpcb_hash_mismatch, wpcb_invalid_package
Uno zip caricato non coincide con il suo SHA-256, o non contiene esattamente un plugin.
403
xaflo_fs_outside_uploads
Una modifica di file fuori dalla cartella uploads senza fs:admin.
409
wpcb_login_link_2fa e rifiuti del database
Qualcosa sul sito ferma la richiesta: un plugin di accesso a due fattori per l’accesso rapido, o tabelle o impostazioni MySQL con cui /db/query non può lavorare.
413
wpcb_too_large
Uno zip caricato oltre 20 MB o oltre il limite di caricamento del server.
Ripeti la stessa chiamata con confirmation_token impostato su quel valore entro cinque minuti. Il token vale una sola volta, solo per quell’operazione, quell’utente e quella risorsa; per le scritture è legato anche al contenuto esatto, e per il caricamento di un plugin allo slug e all’hash. Il server MCP 1.3 e Xaflo Desktop 2.0 non lo inviano mai da soli: mostrano il riepilogo e aspettano la persona.
I rifiuti di /db/query hanno codici propri, come unsupported_placeholder, unknown_qualifier, cross_database, secret_column, protected_option o protected_table.
GET /health non richiede token e restituisce status, version, plugin_version, wp_version, php_version, site_url, rest_base, time e multilingual. Inviato con un token valido, restituisce anche i suoi scopes (plugin 1.7.0). Non finisce nel registro delle chiamate.
POST /admin/login-link (scope admin:login, amministratore) restituisce {url, expires_in: 60}, un link di accesso monouso; il redirect_to facoltativo deve essere un percorso dentro wp-admin. GET /admin/login-link/redeem è pubblico e funziona una volta.
POST /plugins/install-zip accetta anche zip_base64, filename e sha256 al posto di zip_url; l’attivazione solo con activate: true.
Scritture /fs/*: site:write solo dentro uploads, fs:admin altrove; confirmation_token accettato su write, upload, rename e delete; fs/write restituisce l’id di un backup.
/media e /media/unused richiedono media:read; /db/query richiede un amministratore; ogni route con token controlla una capability di WordPress.
GET /plugins riporta gli aggiornamenti disponibili e le descrizioni; i valori di WP-CLI vanno in args.
“Richiede” elenca gli scope per ogni metodo, nello stesso ordine. “admin” vuol dire che anche l’utente dietro al token deve poter gestire le opzioni; “sessione admin” vuol dire un amministratore collegato all’amministrazione di WordPress, senza token.
Installa da un URL di uno zip, o da uno zip nella richiesta (zip_base64, filename, sha256; al massimo 20 MB). Sostituire un plugin installato chiede conferma.
/plugins/install-repo
POST
plugin:install
Installa dalla directory di WordPress.org, con conferma.