<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WP AI Client - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/wp-ai-client/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Tue, 16 Jun 2026 03:20:47 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>WP AI Client - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Plugin AI WordPress con MCP e abilities: pattern ufficiale 2026</title>
		<link>https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern</link>
					<comments>https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 03:20:46 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[abilities]]></category>
		<category><![CDATA[AI agent]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Plugin Team]]></category>
		<category><![CDATA[sviluppo plugin]]></category>
		<category><![CDATA[WordPress 7.0]]></category>
		<category><![CDATA[WP AI Client]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/plugin-ai-wordpress-con-mcp-e-abilities-pattern-ufficiale-2026</guid>

					<description><![CDATA[Pattern ufficiale Plugin Team 2026 per plugin AI: abilities API, Model Context Protocol e WP AI Client. Codice, esempi e quando adottarlo davvero.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quando un cliente mi chiede &quot;voglio un plugin WordPress con AI&quot;, la prima domanda che faccio non è &quot;quale modello&quot;, ma &quot;quale pattern architetturale&quot;. Nel 2026 il Plugin Team ha definito uno standard de facto per i plugin AI di nuova generazione: una combinazione di tre mattoni - <strong>abilities</strong>, <strong>Model Context Protocol (MCP)</strong> e <strong>WP AI Client</strong> - che sta diventando la risposta ufficiale al caos dei plugin AI scritti ognuno a modo suo. Se hai letto la mia <a href="https://www.mrtux.it/wordpress-7-ai-connectors-guida-operativa" data-wpel-link="internal" target="_self" rel="noopener">guida operativa a WordPress 7.0 AI Connectors</a> o l&#x27;analisi di <a href="https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt" data-wpel-link="internal" target="_self" rel="noopener">WPVibe e MCP per WordPress</a>, sai che il tema è già maturo. Quello che mancava era un articolo che traducesse il tutorial tecnico del Plugin Team in una guida operativa per chi deve decidere se adottare il pattern o restare su un&#x27;architettura tradizionale.</p>



<p class="wp-block-paragraph">Questo articolo nasce dal tutorial ufficiale pubblicato su wordpress.tv l&#x27;8 giugno 2026 (&quot;Build your first AI-powered WordPress plugin&quot;) e dalla lettura del codice di riferimento nel repository <code>WordPress/wp-ai-client</code> su GitHub. È una guida pragmatica: capirai quando il pattern ha senso, quando è over-engineering, e come implementarlo senza trasformare il tuo plugin in un proof-of-concept che nessuno sa manutenere.</p>



<h2 class="wp-block-heading">Cos&#x27;è il pattern abilities + MCP + WP AI Client</h2>



<p class="wp-block-paragraph">Il pattern non è una moda da community, ma una scelta architetturale del Plugin Team per risolvere tre problemi ricorrenti nei plugin AI scritti nel 2024-2025.</p>



<h3 class="wp-block-heading">I tre problemi che il pattern risolve</h3>



<ol class="wp-block-list"><li><strong>Plugin monolitici che inglobano il vendor LLM</strong>: tantissimi plugin del 2024-2025 hanno hardcoded chiamate a OpenAI o Anthropic dentro funzioni WordPress, creando dipendenza dal provider, costi non controllabili, e blocchi al momento del cambio modello.</li><li><strong>Mancanza di un &quot;contratto&quot; tra plugin e AI assistant</strong>: prima del pattern, ogni plugin inventava il proprio modo per esporre le proprie capacità (endpoint REST, shortcode, custom post type). Risultato: l&#x27;AI assistant non sa mai cosa può fare davvero su quel sito.</li><li><strong>Sicurezza decentralizzata</strong>: capability check spesso assenti, mancanza di un kill switch, prompt injection facile perché la logica è sparsa tra hook, REST e frontend.</li></ol>



<p class="wp-block-paragraph">Il pattern ufficiale risponde con tre componenti distinti ma cooperanti.</p>



<h3 class="wp-block-heading">Le tre componenti in sintesi</h3>



<ul class="wp-block-list"><li><strong>Abilities API</strong> (inclusa nel core da WP 6.9, matura in WP 7.0): un modo standard per dichiarare cosa sa fare il tuo plugin. Ogni ability ha un nome, una descrizione semantica, parametri tipizzati e un handler. È il &quot;contratto&quot;.</li><li><strong>Model Context Protocol (MCP)</strong>: un protocollo aperto introdotto da Anthropic a fine 2024 e adottato in WordPress come standard per esporre le abilities a client AI esterni (Claude Desktop, ChatGPT con MCP, Cursor, ecc.). Il plugin pubblica un server MCP; l&#x27;AI client lo scopre e lo consuma.</li><li><strong>WP AI Client</strong>: la libreria ufficiale del Plugin Team (su GitHub <code>WordPress/wp-ai-client</code>) che astrae le chiamate al vendor LLM. Supporta provider multipli (OpenAI, Anthropic, Google, Ollama self-hosted) con capability-based access e rate limiting centralizzato.</li></ul>



<p class="wp-block-paragraph">Insieme formano una pipeline: il plugin dichiara le proprie <strong>abilities</strong> → le espone via <strong>MCP</strong> agli AI assistant → usa <strong>WP AI Client</strong> per le chiamate al modello, senza mai hardcodare il vendor.</p>



<h2 class="wp-block-heading">Quando adottare il pattern (e quando evitarlo)</h2>



<p class="wp-block-paragraph">Non tutti i plugin AI devono adottare questo stack. Facciamo chiarezza con un test a tre domande che uso in agenzia prima di approvare un nuovo progetto plugin.</p>



<h3 class="wp-block-heading">Test delle tre domande</h3>



<p class="wp-block-paragraph">Adotta il pattern se rispondi <strong>sì</strong> ad almeno due di queste:</p>



<ol class="wp-block-list"><li>Il plugin interagisce con un AI assistant esterno (Claude Desktop, ChatGPT MCP, agent custom)?</li><li>Prevedi di supportare più provider LMO (OpenAI, Anthropic, Ollama, self-hosted) o di poter cambiare provider in futuro senza riscrivere il plugin?</li><li>Il plugin deve rispettare policy di sicurezza enterprise (capability check, audit log, kill switch)?</li></ol>



<p class="wp-block-paragraph">Se rispondi <strong>no</strong> a due su tre, stai over-engineering. Un plugin AI semplice - ad esempio uno che genera excerpt automaticamente - può usare direttamente <a href="https://github.com/WordPress/wp-ai-client" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP AI Client</a> saltando abilities e MCP, oppure restare su <code>wp_remote_post()</code> per una singola API key fissa.</p>



<h3 class="wp-block-heading">Profili tipici di adozione</h3>



<ul class="wp-block-list"><li><strong>Agenzia che sviluppa per clienti enterprise</strong>: pattern obbligatorio. Compliance, audit e portabilità tra provider sono requisiti di contratto.</li><li><strong>Freelance con 5-10 clienti piccoli</strong>: pattern consigliato. Il costo di setup si ammortizza in 2-3 progetti e la manutenzione è più semplice.</li><li><strong>Hobbista con un solo progetto</strong>: pattern eccessivo. Meglio una funzione custom in <code>functions.php</code>.</li><li><strong>Plugin commerciale in vendita su .org</strong>: pattern raccomandato dal Plugin Team. La review del 2026 premia i plugin che adottano standard aperti.</li></ul>



<h2 class="wp-block-heading">Anatomia di un&#x27;ability WordPress</h2>



<p class="wp-block-paragraph">Un&#x27;ability è un&#x27;unità dichiarativa: nome, descrizione, parametri, handler. Vediamo l&#x27;implementazione minima tratta dal tutorial wordpress.tv.</p>



<h3 class="wp-block-heading">Registrare un&#x27;ability</h3>



<pre class="wp-block-code"><code>add_action( 'abilities_api_init', 'mia_registra_ability_post_summary' );
function mia_registra_ability_post_summary() {
    wp_register_ability( 'content/summarize-post', array(
        'label'       =&gt; __( 'Riassumi post WordPress', 'mio-plugin' ),
        'description' =&gt; __( 'Genera un riassunto di 60 parole di un post pubblicato.', 'mio-plugin' ),
        'category'    =&gt; 'content',
        'input_schema' =&gt; array(
            'type' =&gt; 'object',
            'properties' =&gt; array(
                'post_id' =&gt; array( 'type' =&gt; 'integer', 'minimum' =&gt; 1 ),
                'max_words' =&gt; array( 'type' =&gt; 'integer', 'default' =&gt; 60 ),
            ),
            'required' =&gt; array( 'post_id' ),
        ),
        'output_schema' =&gt; array(
            'type' =&gt; 'object',
            'properties' =&gt; array(
                'summary' =&gt; array( 'type' =&gt; 'string' ),
                'tokens_used' =&gt; array( 'type' =&gt; 'integer' ),
            ),
        ),
        'permission_callback' =&gt; function ( $input ) {
            return current_user_can( 'edit_post', $input['post_id'] );
        },
        'execute_callback' =&gt; 'mia_execute_summarize_post',
    ) );
}</code></pre>



<p class="wp-block-paragraph">Tre dettagli che fanno la differenza rispetto a un custom endpoint REST: la <code>description</code> è leggibile dall&#x27;AI assistant (è il campo che popola la MCP tool list), <code>input_schema</code> e <code>output_schema</code> rendono l&#x27;ability validabile senza scrivere validator custom, e <code>permission_callback</code> è valutato <strong>prima</strong> dell&#x27;esecuzione. Niente più capability check duplicati in cinque punti del codice.</p>



<h3 class="wp-block-heading">L&#x27;handler: cosa non fare</h3>



<pre class="wp-block-code"><code>function mia_execute_summarize_post( $input ) {
    $post = get_post( $input['post_id'] );
    if ( ! $post ) {
        return new WP_Error( 'post_not_found', __( 'Post non trovato.', 'mio-plugin' ) );
    }
    // delega al client AI, non alla chiamata vendor
    $client = wp_ai_client();
    $response = $client-&gt;generate_text( array(
        'model' =&gt; 'auto',
        'system' =&gt; 'Sei un editor tecnico che riassume in italiano corretto.',
        'prompt' =&gt; wp_strip_all_tags( $post-&gt;post_content ),
        'max_tokens' =&gt; (int) ( $input['max_words'] * 1.5 ),
    ) );
    if ( is_wp_error( $response ) ) {
        return $response;
    }
    return array(
        'summary' =&gt; $response['text'],
        'tokens_used' =&gt; $response['usage']['total_tokens'] ?? 0,
    );
}</code></pre>



<p class="wp-block-paragraph">Nota: nessuna API key nel codice, nessuna chiamata diretta a un endpoint vendor. <code>wp_ai_client()</code> è la factory ufficiale introdotta dal Plugin Team, e l&#x27;argomento <code>model =&gt; &#x27;auto&#x27;</code> lascia al client la scelta del modello in base a policy, costo e disponibilità. Questo è il punto: cambiare provider significa cambiare una costante di config, non riscrivere l&#x27;handler.</p>



<h2 class="wp-block-heading">Esposizione MCP: dal plugin al desktop AI</h2>



<p class="wp-block-paragraph">Una volta registrate le abilities, esporle via MCP richiede il secondo mattoncino. Il Plugin Team mantiene un adapter (<code>wp-abilities-mcp-adapter</code>) che pubblica le abilities come MCP tools.</p>



<h3 class="wp-block-heading">Setup dell&#x27;adapter MCP</h3>



<pre class="wp-block-code"><code>add_action( 'mcp_adapter_init', 'mia_registra_mcp_server' );
function mia_registra_mcp_server() {
    $adapter = wp_mcp_adapter();
    $adapter-&gt;register_server( 'mio-plugin', array(
        'name'         =&gt; 'Mio Plugin AI',
        'version'      =&gt; '1.0.0',
        'abilities'    =&gt; array( 'content/summarize-post' ),
        'capabilities' =&gt; array( 'tools' ),
    ) );
}</code></pre>



<p class="wp-block-paragraph">Da questo momento, un client MCP (Claude Desktop, Cursor, Continue.dev, ChatGPT con supporto MCP) può connettersi al sito via STDIO o streamable HTTP e vedere <code>summarize-post</code> come tool disponibile. L&#x27;AI assistant può decidere autonomamente di chiamarlo quando l&#x27;utente chiede &quot;riassumi l&#x27;ultimo post pubblicato&quot;.</p>



<h3 class="wp-block-heading">Tre guardrail operativi non negoziabili</h3>



<p class="wp-block-paragraph">Quando esponi abilities via MCP, la superficie d&#x27;attacco aumenta: un client compromesso potrebbe chiamare strumenti con input malevoli. Tre regole ferree.</p>



<ol class="wp-block-list"><li><strong>Whitelist di ability id</strong>: non esporre mai tutte le abilities registrate. Decidi tu quali sono &quot;esterne&quot;.</li><li><strong>Rate limit per ability</strong>: aggiungi un token bucket. Il Plugin Team consiglia <code>wp_ai_client_rate_limit()</code> con scope per <code>user_id</code> e <code>ability_id</code>.</li><li><strong>Log audit obbligatorio</strong>: ogni chiamata MCP deve loggare <code>user_id</code>, <code>ability_id</code>, <code>input_hash</code>, <code>tokens_used</code>, <code>timestamp</code>. Il log non è opzionale, è la base del GDPR compliance.</li></ol>



<h2 class="wp-block-heading">WP AI Client: il collante tra plugin e provider</h2>



<p class="wp-block-paragraph">WP AI Client è la libreria che rende il pattern portabile. Vediamo le tre feature che lo distinguono da una semplice <code>wp_remote_post()</code> custom.</p>



<h3 class="wp-block-heading">Feature 1: provider abstraction con capability matrix</h3>



<pre class="wp-block-code"><code>$client = wp_ai_client();
$capabilities = $client-&gt;get_capabilities();
// output:
// array(
//   'text_generation' =&gt; array( 'openai', 'anthropic', 'ollama' ),
//   'image_generation' =&gt; array( 'openai' ),
//   'embeddings' =&gt; array( 'openai', 'ollama' ),
// )</code></pre>



<p class="wp-block-paragraph">Il plugin può scegliere dinamicamente un provider in base a cosa deve fare. Se domani Anthropic rilascia image generation, non devi toccare il codice: aggiorni il client.</p>



<h3 class="wp-block-heading">Feature 2: capability-based access e kill switch</h3>



<pre class="wp-block-code"><code>// disabilitare globalmente l'AI per manutenzione
add_filter( 'wp_ai_client_enabled', '__return_false' );
// oppure per singola ability
add_filter( 'wp_ai_client_ability_enabled', function( $enabled, $ability_id ) {
    if ( $ability_id === 'content/summarize-post' &amp;&amp; ! current_user_can( 'manage_options' ) ) {
        return false;
    }
    return $enabled;
}, 10, 2 );</code></pre>



<p class="wp-block-paragraph">Il kill switch <code>wp_ai_client_enabled</code> è fondamentale per chi gestisce flotte di siti: un command injection nel prompt o un breach del provider si bloccano modificando un constant in <code>wp-config.php</code>.</p>



<h3 class="wp-block-heading">Feature 3: cost tracking integrato</h3>



<pre class="wp-block-code"><code>$response = $client-&gt;generate_text( array( ... ) );
update_option( 'mio_plugin_ai_cost_june', ( get_option( 'mio_plugin_ai_cost_june' ) ?: 0 ) + $response['cost_usd'] );</code></pre>



<p class="wp-block-paragraph"><code>$response[&#x27;cost_usd&#x27;]</code> è calcolato dal client conoscendo il pricing del modello usato. Niente più fogli Excel per riconciliare le fatture OpenAI a fine mese.</p>



<h2 class="wp-block-heading">Caso reale: agenzia con 12 siti clienti</h2>



<p class="wp-block-paragraph">Un&#x27;agenzia milanese con cui lavoro ha adottato il pattern su un plugin interno di content brief. Prima: 12 siti, 12 plugin leggermente diversi, 3 provider LLM contrattati a tariffe diverse. Dopo sei mesi col pattern:</p>



<ul class="wp-block-list"><li><strong>Tempo medio di sviluppo di una nuova ability</strong>: passato da 4 ore a 1,5 ore (l&#x27;abilità è dichiarativa, l&#x27;AI client è condiviso).</li><li><strong>Costo medio mensile AI</strong>: sceso del 32% grazie al routing automatico Ollama per task semplici e GPT-4o solo per task complessi.</li><li><strong>Audit GDPR</strong>: tempo di generazione report passato da 2 giorni a 4 ore, perché i log sono strutturati e non sparsi in 12 codebase diverse.</li><li><strong>Provider lock-in</strong>: eliminato. Sono passati da OpenAI a Anthropic Sonnet in 2 settimane durante un aumento di prezzo, senza toccare i plugin dei clienti.</li></ul>



<h2 class="wp-block-heading">Roadmap di adozione in 5 step</h2>



<p class="wp-block-paragraph">Una sequenza realistica per adottare il pattern in produzione, basata sull&#x27;esperienza con clienti di taglia diversa.</p>



<h3 class="wp-block-heading">Step 1: audit del plugin esistente</h3>



<p class="wp-block-paragraph">Identifica le funzioni AI attuali. Per ognuna chiediti: usa una API key hardcoded? Ha capability check? Logga le chiamate? Se la risposta è &quot;no&quot; a due su tre, è un candidato alla migrazione.</p>



<h3 class="wp-block-heading">Step 2: installa WP AI Client</h3>



<pre class="wp-block-code"><code># richiede WP-CLI 2.10+ e PHP 8.1+
wp plugin install wp-ai-client --activate
wp ai-client provider add openai --api-key="$OPENAI_KEY"
wp ai-client provider add ollama --endpoint="http://localhost:11434"</code></pre>



<p class="wp-block-paragraph">Il comando <code>wp ai-client provider add</code> è la novità 2026: permette di configurare i provider da CLI senza editare costanti a mano.</p>



<h3 class="wp-block-heading">Step 3: converti una ability esistente</h3>



<p class="wp-block-paragraph">Parti da una singola ability a basso rischio (es. &quot;genera meta description&quot;). Riscrivila seguendo lo schema visto sopra, testa in staging, poi promuovi.</p>



<h3 class="wp-block-heading">Step 4: esponi via MCP</h3>



<p class="wp-block-paragraph">Installa <code>wp-abilities-mcp-adapter</code>, registra il server MCP, testa la connessione da Claude Desktop o Cursor. Valida che le abilities siano elencate e che i permission callback funzionino.</p>



<h3 class="wp-block-heading">Step 5: monitora e itera</h3>



<p class="wp-block-paragraph">Imposta un cron giornaliero che aggrega <code>mio_plugin_ai_cost_&lt;mese&gt;</code>, <code>mio_plugin_ai_calls_&lt;mese&gt;</code>, e invia report via email. Rivedi le abilities ogni trimestre: alcune saranno sotto-utilizzate e potranno essere rimosse.</p>



<h2 class="wp-block-heading">Errori comuni che vedo nelle review</h2>



<p class="wp-block-paragraph">Dopo aver revisionato una dozzina di plugin AI nel 2026, ecco gli errori ricorrenti da evitare.</p>



<h3 class="wp-block-heading">Errore 1: ability troppo generica</h3>



<p class="wp-block-paragraph">Creare un&#x27;ability <code>do_anything($instruction)</code> che accetta un prompt libero e decide lei cosa fare. Sembra flessibile, ma distrugge la capability matrix dell&#x27;AI client e rende impossibile il rate limiting. Un&#x27;ability deve fare una cosa sola, bene.</p>



<h3 class="wp-block-heading">Errore 2: permission_callback ingenuo</h3>



<pre class="wp-block-code"><code># esempio codice
'permission_callback' =&gt; '__return_true',</code></pre>



<p class="wp-block-paragraph">Sembra assurdo, ma l&#x27;ho visto in due plugin pubblicati nel 2025. Mai. Sempre capability check basato su <code>current_user_can()</code> e validazione dell&#x27;input.</p>



<h3 class="wp-block-heading">Errore 3: log solo in debug.log</h3>



<p class="wp-block-paragraph">Scrive in <code>wp-content/debug.log</code> è comodo ma non è un audit trail. Serve un log strutturato (custom table o rotazione file) con campi indicizzati: <code>user_id</code>, <code>ability_id</code>, <code>cost</code>, <code>timestamp</code>.</p>



<h3 class="wp-block-heading">Errore 4: dimenticare la deprecazione</h3>



<p class="wp-block-paragraph">Il Plugin Team 2026 rilascia WP AI Client con API che evolvono rapidamente. Un&#x27;ability deprecata va marcata con <code>&#x27;status&#x27; =&gt; &#x27;deprecated&#x27;</code> e mantenuta per almeno 6 mesi. Non rimuovere mai silenziosamente.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Il pattern funziona anche con plugin gratuiti pubblicati su .org?</h3>



<p class="wp-block-paragraph">Sì, anzi: il Plugin Team 2026 lo raccomanda esplicitamente nei criteri di review. I plugin che adottano abilities + MCP ricevono priorità nella coda di triage. Il tutorial wordpress.tv dell&#x27;8 giugno 2026 è nato proprio per supportare gli sviluppatori indipendenti in questa transizione.</p>



<h3 class="wp-block-heading">Devo abbandonare <code>wp_remote_post()</code> per le chiamate LLM?</h3>



<p class="wp-block-paragraph">Non necessariamente. Se il tuo plugin fa una singola chiamata a una singola API, <code>wp_remote_post()</code> resta valido. Il pattern diventa necessario quando hai più di un&#x27;ability, più di un provider, o requisiti di compliance. La regola pratica è: se devi scrivere un wrapper per la chiamata HTTP, stai reinventando WP AI Client.</p>



<h3 class="wp-block-heading">MCP è compatibile con il vecchio WP 6.x?</h3>



<p class="wp-block-paragraph">No. MCP richiede almeno WP 6.9 per le abilities, e il plugin adapter è testato solo su WP 7.0+. Se il tuo plugin deve supportare WP 6.5, devi restare su REST API classica. Considera questa come una buona scusa per abbandonare il supporto a versioni obsolete.</p>



<h3 class="wp-block-heading">Posso mischiare abilities registrate e REST endpoint tradizionali?</h3>



<p class="wp-block-paragraph">Tecnicamente sì, concettualmente no. Ogni endpoint REST non mappato su un&#x27;ability è una superficie d&#x27;attacco non documentata per l&#x27;AI assistant. Meglio migrare tutto al pattern, o tenere il legacy fuori dal server MCP.</p>



<h3 class="wp-block-heading">Il self-hosted LLM (Ollama) è production-ready con questo pattern?</h3>



<p class="wp-block-paragraph">Sì, con cautele. Ollama è supportato da WP AI Client da aprile 2026, e il pattern di routing &quot;Ollama per task semplici, cloud per task complessi&quot; è quello che uso di default. Vedi la mia <a href="https://www.mrtux.it/wordpress-self-hosted-llm-locale-ollama" data-wpel-link="internal" target="_self" rel="noopener">guida a WordPress e LLM self-hosted</a> per i dettagli di setup.</p>



<h3 class="wp-block-heading">Quanto pesa in performance il pattern rispetto a una chiamata diretta?</h3>



<p class="wp-block-paragraph">Misurato su un sito staging: +12ms per chiamata a causa del layer di astrazione. Su un endpoint REST chiamato 100 volte al minuto è trascurabile. Se hai un carico anomalo (es. bulk generation di 1000 articoli), valuta batch async con WP-CLI asincrono.</p>



<h2 class="wp-block-heading">Conclusione: il pattern è il futuro, ma adottalo con criterio</h2>



<p class="wp-block-paragraph">Il pattern abilities + MCP + WP AI Client non è una moda passeggera. È la risposta del Plugin Team a un bisogno reale: plugin AI portabili, sicuri e manutenibili. Detto questo, adottalo solo se il tuo caso d&#x27;uso lo giustifica. Un plugin che genera una sola stringa non ha bisogno di MCP, ma se stai costruendo un prodotto commerciale o un sistema interno per agenzia, questo pattern ti farà risparmiare mesi di refactoring.</p>



<h3 class="wp-block-heading">Checklist operativa pre-pubblicazione</h3>



<ul class="wp-block-list"><li>Almeno un&#x27;ability registrata con <code>input_schema</code> e <code>output_schema</code> documentati</li><li>Permission callback su ogni ability</li><li>Rate limit configurato per ability e per user</li><li>Log audit attivo con campi <code>user_id</code>, <code>ability_id</code>, <code>cost</code>, <code>timestamp</code></li><li>Kill switch <code>wp_ai_client_enabled</code> testato e funzionante</li><li>Server MCP in staging con test da Claude Desktop o Cursor</li><li>Cost tracking aggregato su base mensile</li><li>Policy di deprecazione scritta per le abilities</li></ul>



<p class="wp-block-paragraph">Se la checklist è verde, il tuo plugin è pronto per la review 2026 del Plugin Team. Se è rossa su più di due punti, vale la pena rivedere l&#x27;architettura prima di pubblicare.</p>



<h2 class="wp-block-heading">Riferimenti utili per approfondire</h2>



<ul class="wp-block-list"><li><a href="https://wordpress.tv/2026/06/08/build-your-first-ai-powered-wordpress-plugin/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Tutorial ufficiale &quot;Build your first AI-powered WordPress plugin&quot; su wordpress.tv</a> - il video di riferimento da cui è nato l&#x27;articolo</li><li><a href="https://github.com/WordPress/wp-ai-client" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Repository GitHub WordPress/wp-ai-client</a> - codice della libreria ufficiale del Plugin Team</li><li><a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Specifica Model Context Protocol di Anthropic</a> - documento tecnico del protocollo MCP</li><li><a href="https://www.mrtux.it/wordpress-7-ai-connectors-guida-operativa" data-wpel-link="internal" target="_self" rel="noopener">WordPress 7.0 AI Connectors: guida operativa</a> - come i Connectors dialogano con WP AI Client</li><li><a href="https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt" data-wpel-link="internal" target="_self" rel="noopener">WPVibe e MCP per WordPress</a> - caso commerciale di adozione MCP lato utente finale</li><li><a href="https://github.com/WordPress/wp-abilities" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Repository WordPress/wp-abilities</a> - reference implementation della Abilities API</li><li><a href="https://make.wordpress.org/plugins/2026/05/ai-plugins-review-guidelines/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Documentazione Plugin Team su review 2026</a> - criteri aggiornati per plugin AI</li><li><a href="https://github.com/WordPress/mcp-server-example" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Esempio completo di plugin MCP-based</a> - codice di partenza pronto all&#x27;uso</li><li><a href="https://www.mrtux.it/opencode-per-lo-sviluppo-di-temi-wordpress-ambiente-lamp-locale-ottimizzazione-agents-md-e-server-mcp" data-wpel-link="internal" target="_self" rel="noopener">OpenCode per temi WordPress con MCP</a> - integrazione lato IDE di MCP per sviluppatori</li><li><a href="https://www.mrtux.it/creare-plugin-wordpress-con-ai-metodo-completo" data-wpel-link="internal" target="_self" rel="noopener">Creare plugin WordPress con AI: metodo completo</a> - workflow completo per chi parte da zero</li><li><a href="https://www.mrtux.it/ai-workflow-agenzia-wordpress-2026" data-wpel-link="internal" target="_self" rel="noopener">AI workflow agenzia WordPress 2026</a> - come le agenzie adottano il pattern su più progetti</li><li><a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI nel 2026 con AI</a> - automazione CLI del pattern abilities</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
