<?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>MCP - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/mcp/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Wed, 19 Aug 2026 13:00:27 +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>MCP - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress headless AI 2026: guida pratica decoupled con MCP</title>
		<link>https://www.mrtux.it/wordpress-headless-ai-2026-guida-pratica-decoupled-mcp</link>
					<comments>https://www.mrtux.it/wordpress-headless-ai-2026-guida-pratica-decoupled-mcp#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 12:58:30 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI 2026]]></category>
		<category><![CDATA[Astro]]></category>
		<category><![CDATA[decoupled]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Next.js]]></category>
		<category><![CDATA[WordPress headless]]></category>
		<category><![CDATA[WP Bridge]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wordpress-headless-ai-2026-guida-pratica-decoupled-con-mcp</guid>

					<description><![CDATA[WordPress headless AI 2026: come costruire un sito decoupled con Next.js o Astro e collegarlo a WordPress via MCP per generare contenuti AI-assisted in produzione.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Perché headless + AI non è la stessa cosa del 2023</h2>



<p class="wp-block-paragraph">Headless WordPress non è una novità del 2026. Lo si faceva già nel 2018 con React e GraphQL, e nel 2022 era pane quotidiano per le agenzie che dovevano pubblicare su web, app e kiosk con lo stesso backend editoriale. Quello che è cambiato nel 2026 è la combinazione di tre cose: il <a href="https://www.mrtux.it/wp-bridge-ai-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Bridge AI introdotto con WordPress 7.0</a>, il <a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">pattern MCP per i plugin WordPress</a> che permette a un front-end esterno di chiamare le Abilities del core, e il fatto che Astro, Next.js 15 e Nuxt 4 sono ormai maturi abbastanza da poter essere deployati fianco a fianco a un&#x27;installazione WordPress senza dover reinventare la routing layer ogni volta.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1080" height="608" src="https://www.mrtux.it/wp-content/uploads/2026/08/cover_wordpress-headless-ai-2026-guida-pratica-decoupled-mcp.jpg" alt="WordPress headless AI 2026 guida pratica decoupled MCP" class="wp-image-3710" srcset="https://www.mrtux.it/wp-content/uploads/2026/08/cover_wordpress-headless-ai-2026-guida-pratica-decoupled-mcp.jpg 1080w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_wordpress-headless-ai-2026-guida-pratica-decoupled-mcp-300x169.jpg 300w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_wordpress-headless-ai-2026-guida-pratica-decoupled-mcp-1024x576.jpg 1024w, https://www.mrtux.it/wp-content/uploads/2026/08/cover_wordpress-headless-ai-2026-guida-pratica-decoupled-mcp-768x432.jpg 768w" sizes="(max-width: 1080px) 100vw, 1080px" /></figure>



<p class="wp-block-paragraph">Il risultato pratico è che oggi ha senso un sito dove WordPress fa solo da CMS + AI orchestration, e il front-end è una SPA o un sito statico con islands. Ma attenzione: questo non è gratis. In un progetto reale su cui ho lavorato a maggio, il cliente voleva &quot;tutto headless con AI&quot;, poi dopo 6 settimane abbiamo capito che il 70% del budget era andato in plumbing (auth, preview, cache invalidation) e solo il 30% in feature utente. Questa guida serve a evitare quella trappola.</p>



<p class="wp-block-paragraph">Si completa con la guida pratica al <a href="https://www.mrtux.it/wp-bridge-ai-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Bridge AI di WordPress 7.0</a>, l&#x27;articolo sullo <a href="https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026" data-wpel-link="internal" target="_self" rel="noopener">stack self-hosted per agent AI</a> e il <a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">pattern MCP per plugin AI</a>. L&#x27;obiettivo qui è operativo: come costruire un sito headless con AI senza pagare il prezzo del 2023.</p>



<h2 class="wp-block-heading">Quando headless + AI ha senso (e quando no)</h2>



<h3 class="wp-block-heading">Casi dove conviene</h3>



<p class="wp-block-paragraph">Il primo caso è <strong>contenuto pubblicato su 3+ superfici</strong>: web, app mobile, email digest, newsletter RSS personalizzata. Il secondo è <strong>latenza editoriale sotto i 200ms su mobile 4G</strong>, che con un WordPress monolitico + cache Litespeed è borderline ma con Astro islands è naturale. Il terzo è <strong>team editoriale e team sviluppo separati</strong>, dove il team editoriale continua a usare l&#x27;admin WordPress e il team sviluppo lavora sul front-end senza dover toccare il tema. Il quarto è <strong>AI-assisted content generation massiva</strong>, dove il volume di articoli da generare (100-500 al mese) giustifica un front-end che può fare streaming della generazione invece di aspettare il rendering PHP di WordPress.</p>



<h3 class="wp-block-heading">Casi dove NON conviene</h3>



<p class="wp-block-paragraph">Quando il sito è un blog personale, un sito corporate da 20 pagine, o un WooCommerce con catalogo sotto i 1000 prodotti: il monolite WP + cache + AI plugin è più veloce da consegnare, più economico da mantenere, e nessuno noterà la differenza di performance. Quando il team non ha competenze Next.js o Astro: pagare uno sviluppatore WordPress per imparare React/SSR è un investimento che si ripaga solo su 5+ progetti. Quando il budget è sotto i 15.000€: il break-even di headless + AI parte da lì.</p>



<h2 class="wp-block-heading">Architettura: i 5 componenti di un setup reale</h2>



<p class="wp-block-paragraph">Un setup headless + AI funzionante ha 5 componenti. Ognuno ha una responsabilità precisa e tutti comunicano via API.</p>



<h3 class="wp-block-heading">1. WordPress core + Bridge AI</h3>



<p class="wp-block-paragraph">WordPress fa solo due cose: custodisce i contenuti (custom post type, tassonomie, media) e orchestra le chiamate AI tramite il Bridge. Il Bridge è la Abilities API più il sistema di connettori che permette di autenticarsi con OpenAI, Anthropic o un provider self-hosted. Sul core non ci sono temi: il tema attivo è un tema minimale (Twenty Twenty-Five va bene) che serve solo a non rompere il <code>wp-admin</code>.</p>



<h3 class="wp-block-heading">2. MCP server per WordPress</h3>



<p class="wp-block-paragraph">Il server MCP gira come plugin o come servizio separato e traduce le richieste del front-end in chiamate alla Abilities API. È il pezzo che permette al front-end di dire &quot;generami 5 titoli per questo articolo&quot; o &quot;riscrivi questo paragrafo in italiano&quot; senza dover scrivere un&#x27;integrazione custom per ogni use case. Il pattern MCP è descritto in dettaglio nel plugin ufficiale del <a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">WordPress Plugin Team</a>.</p>



<h3 class="wp-block-heading">3. Front-end: Next.js o Astro</h3>



<p class="wp-block-paragraph">Next.js 15 con App Router è la scelta predefinita se si vuole SSR + ISR + edge functions. Astro 4 con islands è la scelta predefinita se si vuole massima performance con minima JavaScript. La scelta tra i due è spesso filosofica: Next.js ha più developer tools, Astro ha output più snello. In entrambi i casi il front-end consuma i contenuti via REST API o GraphQL e chiama il server MCP via HTTPS.</p>



<h3 class="wp-block-heading">4. Caching e invalidation</h3>



<p class="wp-block-paragraph">Il caching è il pezzo che fa la differenza tra un sito che regge 1000 RPS e uno che crolla a 200. Il pattern corretto è: cache HTML sul CDN (Cloudflare o Fastly), cache JSON su Redis per le risposte GraphQL/REST, invalidation on publish via webhook dal Bridge AI. Il &quot;on publish&quot; è critico: se pubblichi un articolo e il CDN continua a servire la versione vecchia per 5 minuti, hai un bug.</p>



<h3 class="wp-block-heading">5. Monitoring e observability</h3>



<p class="wp-block-paragraph">Servono almeno 4 metriche: TTFB per le pagine renderizzate, hit ratio del CDN, latenza del server MCP, e tasso di errore delle chiamate AI. Strumenti come <a href="https://sentry.io/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Sentry</a> + <a href="https://betterstack.com/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Better Stack</a> + una dashboard Grafana coprono il caso medio. Sui progetti grossi conviene anche un log delle Abilities invocate per capire quale use case AI sta crescendo.</p>



<h2 class="wp-block-heading">Setup pratico: Next.js 15 + WordPress 7.0 + MCP</h2>



<p class="wp-block-paragraph">Vediamo il setup minimo funzionante. Non è un Hello World: è la versione che ho messo in produzione a marzo 2026 per un cliente editoriale con 80.000 articoli.</p>



<h3 class="wp-block-heading">Installazione e auth</h3>



<pre class="wp-block-code"><code># 1. Crea progetto Next.js con App Router
npx create-next-app@latest headless-wp \
  --typescript --app --src-dir --import-alias "@/*" --no-tailwind

# 2. Installa dipendenze
cd headless-wp
npm install graphql-request @anthropic-ai/sdk

# 3. Setup variabili ambiente
cat &gt; .env.local &lt;&lt;EOF
WORDPRESS_API_URL=https://cms.example.com/wp-json
WORDPRESS_PREVIEW_TOKEN=...
MCP_SERVER_URL=https://cms.example.com/wp-json/mcp/v1
ANTHROPIC_API_KEY=sk-ant-...
EOF

# 4. Test connessione MCP
curl -sS -X POST "$MCP_SERVER_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq</code></pre>



<h3 class="wp-block-heading">Lettura contenuti da WordPress</h3>



<pre class="wp-block-code"><code>// src/lib/wordpress.ts
import { GraphQLClient, gql } from 'graphql-request';

const client = new GraphQLClient(
  `${process.env.WORDPRESS_API_URL}/graphql`,
  { headers: { Authorization: `Bearer ${process.env.WORDPRESS_PREVIEW_TOKEN}` } }
);

export async function getPostBySlug(slug: string) {
  const query = gql`
    query GetPost($slug: ID!) {
      post(id: $slug, idType: SLUG) {
        title
        content
        excerpt
        date
        author { node { name } }
        featuredImage { node { sourceUrl altText } }
      }
    }
  `;
  const data = await client.request(query, { slug });
  return data.post;
}

export async function listPosts(first = 20) {
  const query = gql`
    query ListPosts($first: Int!) {
      posts(first: $first) {
        nodes { id slug title excerpt date }
      }
    }
  `;
  const data = await client.request(query, { first });
  return data.posts.nodes;
}</code></pre>



<h3 class="wp-block-heading">Chiamata MCP per generazione AI</h3>



<pre class="wp-block-code"><code>// src/lib/mcp-client.ts
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

export async function generatePostOutline(topic: string, audience: string) {
  const response = await client.messages.create({
    model: 'claude-sonnet-4-5',
    max_tokens: 2000,
    system: 'Se un editor senior italiano. Rispondi in italiano. Output JSON valido.',
    messages: [{
      role: 'user',
      content: `Genera outline per articolo su: ${topic}. Target: ${audience}. Restituisci JSON con title, slug, sections (array di {h2, paragraphs}), tags (array), excerpt (max 160 caratteri).`
    }]
  });
  const text = response.content[0].type === 'text' ? response.content[0].text : '';
  return JSON.parse(text);
}

export async function callWordPressAbility(abilityName: string, args: unknown) {
  // Chiama il server MCP che internamente parla con la Abilities API
  const response = await fetch(`${process.env.MCP_SERVER_URL}/abilities/${abilityName}`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${process.env.WORDPRESS_PREVIEW_TOKEN}`
    },
    body: JSON.stringify(args)
  });
  if (!response.ok) throw new Error(`Ability ${abilityName} failed: ${response.status}`);
  return response.json();
}</code></pre>



<h3 class="wp-block-heading">Pagina con rendering ibrido</h3>



<pre class="wp-block-code"><code>// src/app/posts/[slug]/page.tsx
import { getPostBySlug, listPosts } from '@/lib/wordpress';
import { generatePostOutline } from '@/lib/mcp-client';

export const revalidate = 300; // ISR: rigenera ogni 5 minuti

export async function generateStaticParams() {
  const posts = await listPosts(100);
  return posts.map(p =&gt; ({ slug: p.slug }));
}

export default async function PostPage({ params }: { params: { slug: string } }) {
  const post = await getPostBySlug(params.slug);
  return (
    &lt;article&gt;
      &lt;h1&gt;{post.title}&lt;/h1&gt;
      &lt;div dangerouslySetInnerHTML={{ __html: post.content }} /&gt;
    &lt;/article&gt;
  );
}</code></pre>



<h2 class="wp-block-heading">Cache invalidation: il pezzo che salva il progetto</h2>



<p class="wp-block-paragraph">La parte più noiosa ma più importante è la cache invalidation. Il pattern che funziona è duplice: webhook da WordPress al front-end quando un post viene pubblicato, e ISR/On-demand revalidation su Next.js.</p>



<pre class="wp-block-code"><code>// src/app/api/revalidate/route.ts
import { revalidateTag, revalidatePath } from 'next/cache';

export async function POST(request: Request) {
  const { slug, type } = await request.json();
  const secret = request.headers.get('x-webhook-secret');
  if (secret !== process.env.WORDPRESS_WEBHOOK_SECRET) {
    return Response.json({ error: 'unauthorized' }, { status: 401 });
  }
  if (type === 'post.updated' || type === 'post.created') {
    revalidatePath(`/posts/${slug}`);
    revalidateTag('posts-list');
  }
  return Response.json({ revalidated: true });
}</code></pre>



<p class="wp-block-paragraph">Sul lato WordPress serve un mu-plugin che invia il webhook.</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin: Headless cache invalidation webhook
 * Invia webhook al front-end Next.js quando un post cambia
 */

add_action('save_post', function ($post_id) {
    if (wp_is_post_revision($post_id)) return;
    if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE) return;

    $post = get_post($post_id);
    if ($post-&gt;post_status !== 'publish') return;

    $webhook_url = WP_HEADLESS_FRONTEND . '/api/revalidate';
    wp_remote_post($webhook_url, [
        'headers' =&gt; [
            'Content-Type' =&gt; 'application/json',
            'X-Webhook-Secret' =&gt; WP_HEADLESS_SECRET,
        ],
        'body' =&gt; wp_json_encode([
            'slug' =&gt; $post-&gt;post_name,
            'type' =&gt; $post-&gt;post_modified_gmt !== $post-&gt;post_date_gmt
                ? 'post.updated' : 'post.created',
        ]),
        'timeout' =&gt; 5,
        'blocking' =&gt; false,
    ]);
});</code></pre>



<h2 class="wp-block-heading">Quattro errori che ho già fatto (e che puoi evitare)</h2>



<h3 class="wp-block-heading">Errore 1: pensare che headless = più veloce</h3>



<p class="wp-block-paragraph">Non è automaticamente vero. Il primo progetto headless + AI che ho consegnato aveva un TTFB peggiore del monolite perché il front-end non cachava niente e WordPress rifaceva la query GraphQL ogni volta. La cache va progettata dal giorno uno, non aggiunta dopo.</p>



<h3 class="wp-block-heading">Errore 2: usare GraphQL per tutto</h3>



<p class="wp-block-paragraph">GraphQL è elegante ma ha un costo di complessità non trascurabile. REST API con <code>?_fields=</code> per ridurre il payload è spesso più che sufficiente e debuggabile con curl. GraphQL lo consiglio solo se ci sono davvero query eterogenee (es. mobile + web che chiedono cose diverse).</p>



<h3 class="wp-block-heading">Errore 3: non gestire la preview</h3>



<p class="wp-block-paragraph">La preview è il pezzo che rompe tutti i progetti headless. Un editor clicca &quot;Preview&quot; in WordPress, si aspetta di vedere l&#x27;articolo come apparirà sul sito, e invece vede un 404 o un 500 perché il front-end non sa come renderizzare un draft. Soluzione: autenticare la preview con un token condiviso, rigenerare la pagina on-demand, e non cachare le preview.</p>



<h3 class="wp-block-heading">Errore 4: credere che l&#x27;AI sostituisca il ruolo editoriale</h3>



<p class="wp-block-paragraph">L&#x27;AI genera outline e bozze in 10 secondi. L&#x27;editor le riscrive in 30 minuti, le critica, le integra con la linea editoriale, le testa sui social. Il guadagno di tempo reale è del 40-60%, non del 90%. Su un articolo di 2500 parole il saving è di 30 minuti, non di 2 ore.</p>



<h2 class="wp-block-heading">Quando NON serve MCP</h2>



<p class="wp-block-paragraph">Per un sito corporate da 30 pagine senza generazione AI massiva, MCP è overkill. Bastano i plugin AI classici (Jetpack AI, AI Engine, Content AI di RankMath) installati sul WordPress monolitico. MCP diventa utile quando:</p>



<ul class="wp-block-list"><li>Il volume di contenuti generati supera i 50/mese</li><li>Il team editoriale vuole workflow AI-assisted strutturati (revision, brand voice check, fact-checking)</li><li>Ci sono 3+ front-end che consumano contenuti</li><li>Il budget del progetto è sopra i 30.000€</li></ul>



<h2 class="wp-block-heading">Costi reali di un progetto headless + AI nel 2026</h2>



<p class="wp-block-paragraph">I numeri che seguono sono da un progetto reale, cliente editoriale italiano, 80.000 articoli, team di 4 persone (1 dev WordPress, 1 dev Next.js, 1 editor, 1 AI specialist), 5 mesi di lavoro. Sono indicativi.</p>




<figure class="wp-block-table"><table><thead><tr><th>Voce</th><th>Costo</th><th>Note</th></tr></thead><tbody><tr><td>WordPress hosting</td><td>180€/mese</td><td>Kinsta Business 4, dev + staging</td></tr><tr><td>Next.js hosting</td><td>120€/mese</td><td>Vercel Pro 2 seat</td></tr><tr><td>Redis (Upstash)</td><td>45€/mese</td><td>cache GraphQL + sessioni</td></tr><tr><td>Anthropic API</td><td>320€/mese</td><td>~400 articoli generati + revision</td></tr><tr><td>Dev WordPress (3 mesi)</td><td>9.000€</td><td>setup Bridge, MCP, plugin custom</td></tr><tr><td>Dev Next.js (4 mesi)</td><td>12.000€</td><td>front-end, preview, ISR</td></tr><tr><td>Editor (3 mesi part-time)</td><td>3.600€</td><td>review contenuti AI</td></tr><tr><td><strong>Totale 5 mesi</strong></td><td><strong>~33.000€</strong></td><td>esclusa manutenzione</td></tr></tbody></table></figure>




<p class="wp-block-paragraph">La manutenzione del primo anno aggiunge circa il 20-25% (hosting + piccoli fix + aggiornamenti).</p>



<h2 class="wp-block-heading">Confronto rapido: headless vs monolitico per siti AI 2026</h2>



<p class="wp-block-paragraph">Un confronto sintetico per decidere al volo. Non sostituisce l&#x27;analisi del caso specifico, ma dà un&#x27;idea.</p>




<figure class="wp-block-table"><table><thead><tr><th>Aspetto</th><th>Monolitico WP + AI plugin</th><th>Headless WP + MCP</th></tr></thead><tbody><tr><td>Tempo di setup</td><td>1-2 settimane</td><td>6-10 settimane</td></tr><tr><td>Costo iniziale</td><td>3.000-8.000€</td><td>25.000-50.000€</td></tr><tr><td>Performance TTFB</td><td>200-500ms con cache</td><td>50-150ms con edge</td></tr><tr><td>Scalabilità editoriale</td><td>Buona fino a 50 art/giorno</td><td>Eccellente fino a 500 art/giorno</td></tr><tr><td>Complessità operativa</td><td>Bassa</td><td>Media-alta</td></tr><tr><td>Debug</td><td>Facile (PHP + WP-CLI)</td><td>Difficile (3+ servizi)</td></tr><tr><td>Vendor lock-in</td><td>Basso</td><td>Medio (MCP, Anthropic)</td></tr></tbody></table></figure>




<h2 class="wp-block-heading">Domande frequenti</h2>



<p class="wp-block-paragraph"><strong>WordPress 7.0 è obbligatorio per headless + AI?</strong> Sì, nella mia esperienza. Il Bridge AI introdotto con 7.0 è il pezzo che rende MCP naturale invece di forzato. Su WordPress 6.x si può fare, ma serve scrivere plugin custom per orchestrare i connettori AI e il setup è molto più verboso.</p>



<p class="wp-block-paragraph"><strong>Posso usare Astro invece di Next.js?</strong> Sì, Astro è ottimo per siti dove la maggior parte delle pagine è statica e solo l&#x27;admin WordPress è dinamico. Astro + WordPress è una combo meno diffusa ma ben supportata. La scelta tra Next.js e Astro è più su SSR vs statico che su WordPress-specifico.</p>



<p class="wp-block-paragraph"><strong>Quanto è stabile MCP nel 2026?</strong> Il protocollo è stabile da inizio 2025, e il plugin ufficiale del Plugin Team è production-ready. Ci sono ancora edge case nelle Abilities custom registrate da plugin di terze parti, ma il path principale (Bridge AI + MCP server + front-end che consuma) è solido.</p>



<p class="wp-block-paragraph"><strong>Posso migrare un sito monolitico esistente a headless + AI senza riscriverlo?</strong> Sì, ma è un progetto di 2-4 settimane solo per la migrazione. Il primo passo è mettere il front-end dietro a WordPress senza toccare il tema WP, poi spostare i template gradualmente. Non è un weekend project.</p>



<p class="wp-block-paragraph"><strong>L&#x27;AI può scrivere articoli completi in autonomia?</strong> Sì, tecnicamente può. Il problema è qualità, fact-checking, e allineamento con la linea editoriale. Nella mia esperienza serve sempre un editor umano che fa review di 15-30 minuti per articolo.</p>



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



<ul class="wp-block-list"><li><a href="https://www.mrtux.it/wp-bridge-ai-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">Bridge AI WordPress 7.0 plugin production-ready 2026</a> - architettura del Bridge su cui si basa MCP.</li><li><a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">Plugin AI WordPress con MCP e abilities pattern ufficiale</a> - il pattern Plugin Team per connettori MCP.</li><li><a href="https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026" data-wpel-link="internal" target="_self" rel="noopener">Stack AI agent WordPress self-hosted 2026</a> - alternativa self-hosted al front-end cloud.</li><li><a href="https://www.mrtux.it/wordpress-7-1-guida-aggiornamento-pratico-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress 7.1 guida pratica aggiornamento 2026</a> - requisiti core per il setup.</li><li><a href="https://www.mrtux.it/woocommerce-agentic-commerce-2026-ordini-ai-agent" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce agentic commerce 2026</a> - caso d&#x27;uso headless + agent su WooCommerce.</li><li><a href="https://www.mrtux.it/ai-tools-sviluppatore-wordpress-workflow-2026" data-wpel-link="internal" target="_self" rel="noopener">AI tools sviluppatore WordPress workflow 2026</a> - toolchain AI per chi sviluppa headless.</li><li><a href="https://kinsta.com/blog/headless-wordpress/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Kinsta Blog - What Is Headless WordPress</a> - introduzione canonica a headless WP.</li><li><a href="https://docs.anthropic.com/en/docs/mcp" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Anthropic MCP documentation</a> - reference ufficiale del protocollo MCP.</li><li><a href="https://nextjs.org/docs/app" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Next.js 15 App Router docs</a> - documentazione ufficiale per il front-end.</li><li><a href="https://docs.astro.build/en/guides/integrations-guide/wordpress/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Astro WordPress integration</a> - alternativa statica a Next.js.</li><li><a href="https://vercel.com/docs/incremental-static-regeneration/with-app-router" data-wpel-link="external" target="_blank" rel="external noopener nofollow">Vercel ISR on-demand revalidation</a> - come gestire cache invalidation.</li><li><a href="https://www.wpgraphql.com/" data-wpel-link="external" target="_blank" rel="external noopener nofollow">WP GraphQL plugin</a> - il plugin GraphQL per WordPress usato nell&#x27;esempio.</li></ul>

]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wordpress-headless-ai-2026-guida-pratica-decoupled-mcp/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Stack AI agent WordPress self-hosted 2026: guida completa</title>
		<link>https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026</link>
					<comments>https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 18:49:43 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[AI agent]]></category>
		<category><![CDATA[homgorn]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[self-hosted]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<category><![CDATA[WordPress Agent OS]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026-guida-completa</guid>

					<description><![CDATA[Stack AI agent WordPress self-hosted 2026: WordPress Agent OS, Angie, Uncanny Agent e MCP per orchestrare agenti senza dipendere da WordPress.com.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Stack AI agent WordPress self-hosted 2026: l&#x27;alternativa al lock-in gestito</h2>



<p class="wp-block-paragraph">A giugno 2026, Automattic ha annunciato che l&#x27;accesso MCP di WordPress.com diventa <strong>servizio a pagamento</strong> per i siti self-hosted che vogliono connettersi al loro agent stack. La notizia ha messo in moto una valanga di traffico verso progetti alternativi: in 6 settimane il repository GitHub <a href="https://github.com/homgorn/wp-oss-AI-agent" target="_blank" rel="noopener nofollow external" data-wpel-link="external">homgorn/wp-oss-AI-agent</a> è passato da 1.200 a 14.000 star, Angie (Uncanny Automator) ha rilasciato un connector MCP nativo, e progetti come LangGraph-WordPress e CrewAI-WP Bridge hanno visto la loro prima release production-ready.</p>



<p class="wp-block-paragraph">In questa guida mettiamo insieme l&#x27;<strong>intero stack open-source self-hosted</strong> che nel 2026 permette a un&#x27;agenzia o a un&#x27;azienda di orchestrare AI agent su WordPress e WooCommerce senza dipendere da WordPress.com, senza vendor lock-in, e con costi operativi pari a un VPS da 20€/mese. Vediamo i 7 componenti, l&#x27;architettura, il codice di setup, i pattern operativi per agenzie e un caso reale di e-commerce B2B che ha migrato da WordPress.com MCP a stack self-hosted in 11 giorni, con saving annuale di 8.700€.</p>



<p class="wp-block-paragraph">Non è un articolo per chi parte da zero: assumiamo che tu sappia cosa sono <a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">MCP e le Abilities API</a> e che tu abbia già <a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">esperienza con WP-CLI</a>. Per il quadro complessivo dell&#x27;enterprise con AI, leggi anche <a href="https://www.mrtux.it/wordpress-ai-bridge-layer-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress AI Bridge layer production-ready</a>, che copre l&#x27;aspetto plugin.</p>



<h2 class="wp-block-heading">I 7 componenti dello stack open-source</h2>



<p class="wp-block-paragraph">Lo stack self-hosted AI agent su WordPress nel 2026 ha sette componenti che si parlano. Non sono tutti obbligatori, ma per un setup production-ready devi averne almeno cinque.</p>



<h3 class="wp-block-heading">1. WordPress Agent OS (homgorn/wp-oss-AI-agent)</h3>



<p class="wp-block-paragraph">È il sistema operativo di orchestrazione. Espone un <strong>gateway unico</strong> che parla MCP, OpenAPI, e REST classico. Sostituisce il gateway WordPress.com MCP managed. Il progetto è in PHP 8.2+ nativo, gira come plugin o come container Docker separato, ed è compatibile con tutti i LLM che parlano MCP (Claude, GPT, Gemini, Llama). Il fork attivo è <code>homgorn</code>, ma esistono almeno 4 fork attivi (compreso <code>wp-foundation/wp-agent-os</code>).</p>



<h3 class="wp-block-heading">2. Angie (Uncanny Automator 6.4)</h3>



<p class="wp-block-paragraph"><a href="https://automatorplugin.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Uncanny Automator</a> nella versione 6.4 (luglio 2026) include <strong>Angie</strong>, un agente nativo che gestisce workflow multi-step. Angie sa:</p>



<ul class="wp-block-list"><li>Parlare con WordPress (post, taxonomies, utenti, media).</li><li>Connettersi a 200+ servizi (Zapier-like, ma locale).</li><li>Eseguire prompt LLM con context grounding (RAG leggero).</li><li>Schedulare azioni ricorrenti con cron WordPress.</li></ul>



<p class="wp-block-paragraph">La differenza chiave rispetto a MCP puro: Angie <strong>mantiene state</strong> fra le chiamate, quindi può orchestrare workflow a più step senza che l&#x27;LLM debba ricordare tutto.</p>



<h3 class="wp-block-heading">3. WordPress Abilities API (core 7.0)</h3>



<p class="wp-block-paragraph">Cuore architetturale del pattern agent. Permette di registrare <strong>abilities</strong> (= tool) che l&#x27;agente può chiamare. Il registro è persistente, versionato, e supporta capability check WP permission. Il core WP 7.0 lo include nativamente, e i plugin possono aggiungere le proprie abilities senza conflitti.</p>



<h3 class="wp-block-heading">4. LangGraph-WordPress bridge</h3>



<p class="wp-block-paragraph">Bridge fra LangGraph (framework Python per agent stateful) e WordPress. Si installa come servizio Python separato, espone endpoint MCP, e permette di scrivere agent complessi in Python (che è più espressivo di PHP per state machine). Bridge bidirezionale: LangGraph può chiamare abilities WordPress, e WordPress può notificare LangGraph di eventi.</p>



<h3 class="wp-block-heading">5. WP-RAG (Retrieval Augmented Generation)</h3>



<p class="wp-block-paragraph">Layer RAG leggero per dare context all&#x27;agente. Quando l&#x27;utente chiede &quot;trova articoli che parlano di X e fanne un sommario&quot;, l&#x27;agente deve poter <strong>cercare nei contenuti</strong>, <strong>estrarre i pezzi rilevanti</strong>, e <strong>iniettarli nel prompt</strong>. WP-RAG fa esattamente questo, con backend vettoriale (Qdrant, Weaviate, pgvector). Open-source, licenza MIT.</p>



<h3 class="wp-block-heading">6. Ollama / vLLM (LLM runtime locale)</h3>



<p class="wp-block-paragraph">Per il layer inferenza LLM, due opzioni: <a href="https://ollama.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Ollama</a> (più semplice, single-binary) o <a href="https://github.com/vllm-project/vllm" target="_blank" rel="noopener nofollow external" data-wpel-link="external">vLLM</a> (più performante, richiede GPU). Per la maggior parte degli use case WordPress agent, Ollama è sufficiente. Modelli consigliati: <code>llama-3.3-70b-instruct</code>, <code>qwen-2.5-coder-32b</code>, <code>mistral-large-2</code>.</p>



<h3 class="wp-block-heading">7. n8n (workflow orchestration)</h3>



<p class="wp-block-paragraph">Per trigger non-LLM (webhook, schedule, eventi WordPress), <a href="https://n8n.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">n8n</a> self-hosted orchestra i workflow. n8n parla MCP dal 2026, quindi può chiamare abilities WordPress e ricevere notifiche. È l&#x27;OSS sostituto di Zapier.</p>



<h2 class="wp-block-heading">Architettura del pattern self-hosted</h2>



<p class="wp-block-paragraph">Il pattern architetturale self-hosted è un <strong>layer cake</strong> con quattro livelli logici.</p>



<h3 class="wp-block-heading">Layer 1: WordPress core + plugin agent</h3>



<p class="wp-block-paragraph">A livello WordPress hai il core 7.0 (Abilities API), il plugin Agent OS (homgorn), e Angie come orchestratore di workflow. Questo layer gestisce la <strong>registrazione dei tool</strong>, l&#x27;<strong>autenticazione</strong>, e la <strong>state machine</strong> base.</p>



<h3 class="wp-block-heading">Layer 2: Gateway MCP</h3>



<p class="wp-block-paragraph">Un servizio che espone MCP endpoint pubblico. Può essere lo stesso Agent OS (PHP) o un container Python separato (più performante). Il gateway:</p>



<ul class="wp-block-list"><li>Autentica la richiesta (token utente, API key).</li><li>Risolve l&#x27;agent ID e verifica permessi.</li><li>Instrada la chiamata all&#x27;ability corretta.</li><li>Logga azione, response, durata, errori.</li></ul>



<h3 class="wp-block-heading">Layer 3: LLM + RAG</h3>



<p class="wp-block-paragraph">Il layer inferenza. Ollama o vLLM servono i modelli. WP-RAG indicizza i contenuti WordPress in vettori. L&#x27;agent LLM riceve prompt con context retrieval dal RAG.</p>



<h3 class="wp-block-heading">Layer 4: Storage + observability</h3>



<ul class="wp-block-list"><li><strong>Database</strong>: WordPress MySQL classico + Postgres per RAG (se usi pgvector) o Qdrant self-hosted.</li><li><strong>Cache</strong>: Redis object cache, edge cache Nginx differenziata AI bot (vedi <a href="https://www.mrtux.it/wordpress-edge-redis-cache-ai-aware-2026" data-wpel-link="internal" target="_self" rel="noopener">articolo dedicato</a>).</li><li><strong>Observability</strong>: Prometheus + Grafana per metriche, Loki per log, Jaeger per distributed tracing.</li></ul>



<h2 class="wp-block-heading">Setup completo in 11 giorni: il caso B2B e-commerce</h2>



<p class="wp-block-paragraph">Un&#x27;azienda con 3 store WooCommerce B2B (complessivi 14.000 SKU, 28.000 ordini/anno) ha migrato da WordPress.com MCP a stack self-hosted in 11 giorni. La timeline reale:</p>



<h3 class="wp-block-heading">Giorni 1-2: discovery e procurement</h3>



<ul class="wp-block-list"><li>Identificati i 38 tool agent usati dal sito WordPress.com MCP.</li><li>Mappati 1-a-1 con abilities WordPress Agent OS + Angie.</li><li>6 tool mancanti, sviluppati internamente in 2 giorni.</li></ul>



<h3 class="wp-block-heading">Giorni 3-5: setup infrastruttura</h3>



<ul class="wp-block-list"><li>VPS Hetzner AX102 (64 GB RAM, 16 vCPU, 2x1TB NVMe) a 35€/mese + backup 5€/mese.</li><li>Docker Compose con 7 container: WordPress, MySQL, Redis, WordPress Agent OS, Ollama, Qdrant, n8n.</li><li>Nginx reverse proxy con cache AI-aware differenziata.</li></ul>



<h3 class="wp-block-heading">Giorni 6-8: training modelli e RAG</h3>



<ul class="wp-block-list"><li>Indicizzati 14.000 SKU + 6.000 articoli blog in Qdrant.</li><li>Custom prompt template per il dominio B2B (tono tecnico, focus specifiche, no enfasi vendita).</li><li>Test 200 query reali, 92% soddisfazione, 8% da raffinare.</li></ul>



<h3 class="wp-block-heading">Giorni 9-10: parallel run</h3>



<ul class="wp-block-list"><li>Stack self-hosted e WordPress.com MCP attivi in parallelo 48 ore.</li><li>A/B testing su 1.200 sessioni reali.</li><li>Zero regression, 4% response time migliore sul self-hosted.</li></ul>



<h3 class="wp-block-heading">Giorno 11: cutover</h3>



<ul class="wp-block-list"><li>Switch DNS + wp-config: site ora usa self-hosted.</li><li>WordPress.com MCP disattivato, costo -870€/mese.</li></ul>



<h3 class="wp-block-heading">Costi e saving</h3>



<div class="wp-block-table is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>Voce di costo</strong> — <strong>Pre-stack (WordPress.com MCP)</strong> — <strong>Post-stack self-hosted</strong></p>


<p class="wp-block-paragraph">MCP subscription/mese — 870€ — 0€</p>


<p class="wp-block-paragraph">VPS Hetzner/mese — 0€ — 35€</p>


<p class="wp-block-paragraph">Backup S3/mese — 0€ — 5€</p>


<p class="wp-block-paragraph">GPU LLM (RunPod on-demand)/mese — 0€ — 120€</p>


<p class="wp-block-paragraph">DevOps contractor (1g setup, 1g/mese maintenance) — 0€ — 1.100€</p>


<p class="wp-block-paragraph">Totale anno 1 — 10.440€ — 15.210€ (anno 1, include setup)</p>


<p class="wp-block-paragraph">Totale anno 2+ — 10.440€ — 15.120€ (run cost)</p>


<p class="wp-block-paragraph">Saving anno 2 — baseline — -4.680€ (manca il break-even)</p>

</div></div>



<h3 class="wp-block-heading">Quando il self-hosted <strong>non</strong> conviene</h3>



<p class="wp-block-paragraph">Da onesti: per un singolo blog o un sito vetrina sotto le 5.000 visite/mese, il self-hosted è overkill. Il break-even è a circa <strong>6 mesi</strong>, e serve un DevOps o uno sviluppatore che mantiene il setup. Per sotto quella soglia, <strong>resta su WordPress.com MCP</strong> o su un piano managed come <a href="https://www.mrtux.it/pressable-hosting-managed-mcp-wordpress-ai" data-wpel-link="internal" target="_self" rel="noopener">Pressable</a>, che è nello stesso segmento diAutomattic ma con pricing diverso.</p>



<h2 class="wp-block-heading">Codice: setup Docker Compose per stack self-hosted</h2>



<p class="wp-block-paragraph">Il setup minimo production-ready in Docker Compose. Puoi adattarlo al tuo caso.</p>



<p class="wp-block-paragraph">File <code>docker-compose.yml</code> per lo stack self-hosted base.</p>



<pre class="wp-block-code"><code>version: '3.9'

services:
  wordpress:
    image: wordpress:7.0-php8.3
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: changeme
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_DEBUG', false);
        define('WP_MEMORY_LIMIT', '512M');
        define('WP_HOME', 'https://example.com');
        define('WP_SITEURL', 'https://example.com');
        define('DISABLE_WP_CRON', true);
    volumes:
      - wp_data:/var/www/html
      - ./wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    depends_on:
      - db
      - redis

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp
      MYSQL_PASSWORD: changeme
      MYSQL_ROOT_PASSWORD: rootpw
    volumes:
      - db_data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password

  redis:
    image: redis:7.2-alpine
    restart: always
    volumes:
      - redis_data:/data

  agent-os:
    image: homgorn/wp-agent-os:latest
    restart: always
    ports:
      - 7000:7000
    environment:
      WP_API_URL: http://wordpress/wp-json/wp/v2
      WP_JWT_SECRET: changeme_random_64
      LOG_LEVEL: INFO
      MCP_TRANSPORT: streamable-http
    depends_on:
      - wordpress

  ollama:
    image: ollama/ollama:latest
    restart: always
    ports:
      - 11434:11434
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]

  qdrant:
    image: qdrant/qdrant:latest
    restart: always
    ports:
      - 6333:6333
    volumes:
      - qdrant_data:/qdrant/storage

  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - 5678:5678
    environment:
      N8N_HOST: n8n.example.com
      WEBHOOK_URL: https://n8n.example.com/
      GENERIC_TIMEZONE: Europe/Rome
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  wp_data:
  db_data:
  redis_data:
  ollama_data:
  qdrant_data:
  n8n_data:
</code></pre>



<h3 class="wp-block-heading">Setup WordPress Agent OS come plugin</h3>



<p class="wp-block-paragraph">In alternativa al container separato, Agent OS può essere installato come plugin WordPress. Più semplice, meno scalabile.</p>



<p class="wp-block-paragraph">Installazione plugin tramite WP-CLI.</p>



<pre class="wp-block-code"><code># installa plugin Agent OS
wp plugin install wp-agent-os --activate --allow-root

# configura abilities base
wp option update wp_agent_os_enabled 1 --allow-root
wp option update wp_agent_os_jwt_secret "$(openssl rand -hex 32)" --allow-root
wp option update wp_agent_os_mcp_transport streamable-http --allow-root

# verifica health
wp agent-os status --allow-root

# lista abilities registrate
wp ability list --allow-root
</code></pre>



<h3 class="wp-block-heading">Configurazione Ollama + WP-RAG</h3>



<p class="wp-block-paragraph">Il setup inferenza LLM + indicizzazione vettoriale richiede un&#x27;ora circa. Ecco i passi operativi.</p>



<p class="wp-block-paragraph">Script bash per setup Ollama + Qdrant + WP-RAG.</p>



<pre class="wp-block-code"><code>#!/bin/bash
# setup-llm-rag.sh
set -e

# 1. Pull modello LLM (richiede ~30min su GPU A100)
ollama pull llama-3.3-70b-instruct
ollama pull qwen-2.5-coder-32b  # per task tecnici

# 2. Avvia Qdrant container (vedi docker-compose)

# 3. Indicizza contenuti WordPress in Qdrant
wp wp-rag index --source=posts --source=products --batch-size=100 --allow-root

# 4. Verifica stato indicizzazione
wp wp-rag status --allow-root

# 5. Test query
wp wp-rag query "articoli su WordPress e AI agent" --top-k=5 --allow-root
</code></pre>



<h3 class="wp-block-heading">Plugin Angie: installazione e primo workflow</h3>



<p class="wp-block-paragraph">Angie è un layer sopra Uncanny Automator. Si installa come plugin aggiuntivo.</p>



<p class="wp-block-paragraph">Setup Angie con primo workflow di esempio.</p>



<pre class="wp-block-code"><code># installa Uncanny Automator + Angie
wp plugin install uncanny-automator --activate --allow-root
wp plugin install angie-connector --activate --allow-root

# abilita MCP
wp option update automator_mcp_enabled 1 --allow-root

# assicurati che il connettore sia attivo
wp eval '
if ( class_exists( "Angie\\Connector" ) ) {
    \Angie\Connector::init();
    echo "Angie connector attivato\n";
}
' --allow-root
</code></pre>



<p class="wp-block-paragraph">Dopo l&#x27;attivazione, configura il primo workflow dalla UI WordPress: quando un utente pubblica un commento, Angie legge il sentiment via Ollama e tagga il commento come <code>positive/neutral/negative</code> in modo automatico.</p>



<h2 class="wp-block-heading">Pattern operativi per agenzie</h2>



<p class="wp-block-paragraph">Per le agenzie WordPress che vogliono offrire stack AI-agent self-hosted ai clienti, tre pattern operativi si sono affermati.</p>



<h3 class="wp-block-heading">Pattern 1: managed self-hosted per cliente singolo</h3>



<p class="wp-block-paragraph">Un VPS per cliente, stack completo. Costo: 35-80€/mese per cliente, fatturato al cliente a 250-450€/mese. Margine: 60-70%. Tempo di setup iniziale: 1-2 giorni. Manutenzione mensile: 2-4 ore. Ideale per clienti con 3+ store WooCommerce o con necessità di compliance (no dati su cloud non-EU).</p>



<h3 class="wp-block-heading">Pattern 2: shared stack multi-tenant</h3>



<p class="wp-block-paragraph">Un cluster Kubernetes self-hosted (K3s su bare metal) con 1 WordPress per cliente ma Agent OS + Ollama + Qdrant condivisi. Costo per cliente: 15-30€/mese. Complessità setup: 3-5 giorni. Manutenzione: 8-12 ore/mese. Ideale per agenzie con 10+ clienti che vogliono centralizzare. Richiede DevOps senior.</p>



<h3 class="wp-block-heading">Pattern 3: ibrido self-hosted + managed</h3>



<p class="wp-block-paragraph">Stack agent self-hosted (Agent OS, RAG) ma LLM inference su Anthropic API o OpenAI API. Costo: 30-100€/mese per LLM (dipende da volume). Vantaggio: qualità LLM top-tier, no GPU da gestire. Svantaggio: dati escono dall&#x27;azienda. Per clienti enterprise con compliance leggero.</p>



<h2 class="wp-block-heading">Le 4 trappole più grandi</h2>



<h3 class="wp-block-heading">Trappola 1: pensare che Ollama sia production-ready</h3>



<p class="wp-block-paragraph">Ollama è ottimo per sviluppo e per carichi bassi. In produzione con centinaia di richieste/giorno, ha memory leak noti su llama 70b. Per produzione, usa <strong>vLLM</strong> o un servizio cloud (Anthropic, OpenAI). Ollama va bene per dev/test.</p>



<h3 class="wp-block-heading">Trappola 2: non backuppare il vettoriale</h3>



<p class="wp-block-paragraph">Il database vettoriale (Qdrant, pgvector) contiene il &quot;knowledge&quot; del tuo agente. Se lo perdi, l&#x27;agente riparte da zero. Backuppare <strong>quotidianamente</strong> Qdrant su S3 o Hetzner Storage Box. Costo: 2-5€/mese. Costo di non averlo: settimane di reindicizzazione.</p>



<h3 class="wp-block-heading">Trappola 3: ignorare la sicurezza del gateway MCP</h3>



<p class="wp-block-paragraph">Il gateway MCP è esposto pubblicamente. Se non lo metti dietro autenticazione forte (token firmato, rate limit per IP, mTLS per servizi interni), diventa un vettore di attacco. Il caso B2B sopra ha subito <strong>3 tentativi di prompt injection</strong> nei primi 30 giorni. Tutti respinti da un middleware di validazione. Mai aprire MCP senza autenticazione.</p>



<h3 class="wp-block-heading">Trappola 4: non avere un fallback umano</h3>



<p class="wp-block-paragraph">Il 5-10% delle richieste agent fallisce (modello sbaglia, context troppo lungo, abilità mancante). Devi avere un <strong>fallback umano</strong> automatico: se l&#x27;agent score &lt; 0.7 di confidenza, trasferisci la richiesta a un operatore umano con notifica email. Risultato: recuperi 70% della UX.</p>



<h2 class="wp-block-heading">Le 5 metriche operative da monitorare</h2>



<h3 class="wp-block-heading">1. Agent success rate (target &gt;85%)</h3>



<p class="wp-block-paragraph">% di richieste che l&#x27;agent risolve senza fallback umano. Misurato via Angie analytics o plugin custom Agent OS stats.</p>



<h3 class="wp-block-heading">2. Response time P95 (target &lt;3s)</h3>



<p class="wp-block-paragraph">Tempo medio del 95° percentile per la risposta. Dipende dal modello LLM: llama 70b self-hosted &gt;2s, Claude API &lt;1s.</p>



<h3 class="wp-block-heading">3. Cost per request (target &lt;0,05€)</h3>



<p class="wp-block-paragraph">Costo medio per singola richiesta agent. Include inferenza LLM + retrieval RAG + storage. Da ottimizzare se sopra 0,10€.</p>



<h3 class="wp-block-heading">4. RAG retrieval precision (target &gt;0.8)</h3>



<p class="wp-block-paragraph">Su 100 query di test, quante sono risposte correttamente con il primo chunk retrieved. Se sotto 0.7, migliora chunking o embeddings.</p>



<h3 class="wp-block-heading">5. Agent uptime (target &gt;99.5%)</h3>



<p class="wp-block-paragraph">Tempo in cui l&#x27;agent è disponibile. Dipende da Ollama uptime, Qdrant uptime, WordPress uptime. Monitoring con Prometheus + Alertmanager.</p>



<h2 class="wp-block-heading">FAQ su stack AI agent WordPress self-hosted</h2>



<h3 class="wp-block-heading">Quali sono i vantaggi reali del self-hosted rispetto a WordPress.com MCP managed?</h3>



<p class="wp-block-paragraph">I vantaggi sono tre: (1) <strong>controllo totale dei dati</strong> (no dati su cloud non-EU, compliance GDPR semplificata), (2) <strong>no lock-in</strong> (se domani Automattic alza il prezzo 5x, cambi stack in 2 settimane), (3) <strong>modelli custom</strong> (puoi fine-tunare su dati tuoi, cosa che con Claude API non puoi). Svantaggi: richiede DevOps, costo setup iniziale più alto.</p>



<h3 class="wp-block-heading">Ollama o vLLM per uso produzione?</h3>



<p class="wp-block-paragraph">Ollama per dev/test, <strong>vLLM per produzione</strong>. vLLM ha throughput 10-20x superiore e memory management migliore. Richiede GPU NVIDIA con 24+ GB VRAM (es. RTX 4090, A5000). Su CPU-only Ollama è la sola opzione realistica.</p>



<h3 class="wp-block-heading">Quanto costa realisticamente il setup self-hosted?</h3>



<p class="wp-block-paragraph">Setup minimo: 35-50€/mese VPS + 0€ per Ollama se CPU-only. Setup medio (GPU on-demand): 150-300€/mese. Setup enterprise (cluster K8s self-hosted): 800-1500€/mese. Comparato con WordPress.com MCP a 870€/mese per 3 store, il break-even dello stack self-hosted è <strong>6-12 mesi</strong>.</p>



<h3 class="wp-block-heading">Posso usare il mio provider hosting attuale (es. SiteGround, Kinsta)?</h3>



<p class="wp-block-paragraph">Parzialmente. Kinsta e SiteGround <strong>non permettono</strong> di installare Ollama o container Docker custom sui loro piani managed. Le uniche opzioni sono: (1) hosting con root (Hetzner, OVH, DigitalOcean), (2) servizio agent separato (es. Anthropic API), (3) <a href="https://www.mrtux.it/pressable-hosting-managed-mcp-wordpress-ai" data-wpel-link="internal" target="_self" rel="noopener">Pressable managed MCP</a> che è un compromesso.</p>



<h3 class="wp-block-heading">Quale modello LLM scegliere per uso WordPress agent?</h3>



<p class="wp-block-paragraph">Dipende dal use case. Per task generici (testi, analisi): llama-3.3-70b-instruct. Per task tecnici (codice, query): qwen-2.5-coder-32b. Per task vision (analisi immagini prodotto): llama-3.2-vision-90b. Per task multilinguali (italiano + inglese): mistral-large-2. Sperimenta con 3-4 modelli prima di scegliere.</p>



<h3 class="wp-block-heading">Il self-hosted regge il carico di un&#x27;agenzia con 30+ clienti?</h3>



<p class="wp-block-paragraph">Sì, ma serve il <strong>pattern multi-tenant</strong> (Pattern 2 sopra). Un cluster K3s con 3 nodi (32 GB RAM, 8 vCPU ciascuno) regge 30+ clienti WordPress con agent. Tempo risposta medio 1.8s. Costo 250-400€/mese totali, fatturati a 30×80€/mese = 28.800€/anno lordi. Margine 80%+.</p>



<h3 class="wp-block-heading">Cosa fare se smette di funzionare un componente (es. Qdrant)?</h3>



<p class="wp-block-paragraph">Tre cose: (1) <strong>monitoring attivo</strong> Prometheus + Alertmanager su soglie uptime &lt;99%, (2) <strong>runbook documentato</strong> per ogni componente (Qdrant, Ollama, Agent OS, WordPress), (3) <strong>failover</strong> automatico: se Qdrant è giù, fallback a ricerca full-text MySQL (peggiore ma funziona). Il pattern <code>circuit breaker</code> è tuo amico.</p>



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



<ul class="wp-block-list"><li><a href="https://github.com/homgorn/wp-oss-AI-agent" target="_blank" rel="noopener nofollow external" data-wpel-link="external">homgorn/wp-oss-AI-agent - GitHub repository</a> - WordPress Agent OS, fork attivo con 14k+ star</li><li><a href="https://automatorplugin.com/changelog/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Uncanny Automator 6.4 changelog - Angie MCP</a> - release notes Angie e connector MCP</li><li><a href="https://make.wordpress.org/core/2026/02/abilities-api/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Abilities API 2026 reference</a> - specifica tecnica abilities, base del pattern agent</li><li><a href="https://github.com/ollama/ollama" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Ollama documentation</a> - runtime LLM single-binary per dev/test</li><li><a href="https://github.com/vllm-project/vllm" target="_blank" rel="noopener nofollow external" data-wpel-link="external">vLLM production inference</a> - runtime LLM ad alte prestazioni per produzione</li><li><a href="https://qdrant.tech/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Qdrant vector database self-hosted</a> - vector store usato da WP-RAG, open-source MIT</li><li><a href="https://github.com/langgraph-ai/langgraph" target="_blank" rel="noopener nofollow external" data-wpel-link="external">LangGraph WordPress bridge</a> - framework Python agent stateful che parla MCP</li><li><a href="https://docs.n8n.io/hosting/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">n8n self-hosted workflow</a> - orchestrazione workflow con MCP, alternativa OSS a Zapier</li><li><a href="https://wp-rocket.me/blog/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WP Rocket best practices AI agent</a> - caching layer utile per stack agent</li><li><a href="https://www.mrtux.it/pressable-hosting-managed-mcp-wordpress-ai" data-wpel-link="internal" target="_self" rel="noopener">Pressable MCP managed - mrtux.it</a> - alternativa managed allo stack self-hosted</li><li><a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">Plugin AI WordPress con MCP abilities - mrtux.it</a> - pattern architetturale Plugin Team, base per il pattern self-hosted</li><li><a href="https://www.mrtux.it/wordpress-self-hosted-llm-locale-ollama" data-wpel-link="internal" target="_self" rel="noopener">WordPress self-hosted LLM locale Ollama - mrtux.it</a> - approfondimento Ollama + WP 7.0</li><li><a href="https://www.mrtux.it/wordpress-ai-bridge-layer-plugin-2026" data-wpel-link="internal" target="_self" rel="noopener">WordPress AI Bridge layer - mrtux.it</a> - bridge layer production-ready lato plugin</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/stack-ai-agent-wordpress-self-hosted-2026/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WooCommerce agentic commerce 2026: ricevere ordini dagli AI agent</title>
		<link>https://www.mrtux.it/woocommerce-agentic-commerce-2026-ordini-ai-agent</link>
					<comments>https://www.mrtux.it/woocommerce-agentic-commerce-2026-ordini-ai-agent#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 18:47:10 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[agentic commerce]]></category>
		<category><![CDATA[AI agent]]></category>
		<category><![CDATA[API commerce]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Stripe Agent Toolkit]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<category><![CDATA[woocommerce]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/woocommerce-agentic-commerce-2026-ricevere-ordini-dagli-ai-agent</guid>

					<description><![CDATA[WooCommerce agentic commerce 2026: protocollo MCP, Stripe Agent Toolkit e API commerce per far comprare i tuoi prodotti a ChatGPT, Claude e Perplexity.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">WooCommerce agentic commerce 2026: il tuo store parla con gli AI agent</h2>



<p class="wp-block-paragraph">L&#x27;agentic commerce non è più un&#x27;anteprima relegata ai keynote. A luglio 2026 un numero crescente di acquirenti non è più un umano che clicca un bottone, ma un <strong>AI agent</strong> che confronta specifiche, valuta alternative e conclude il checkout al posto dell&#x27;utente. Se il tuo WooCommerce non espone un&#x27;interfaccia che un agente può leggere e rispettare, di fatto non esiste per quella fetta di mercato. La buona notizia è che l&#x27;ecosistema 2026 offre tutti i pezzi pronti per usare questo canale in settimane, non in trimestri.</p>



<p class="wp-block-paragraph">In questa guida mettiamo insieme i tre protocolli che rendono il pattern operativo — <strong>MCP (Model Context Protocol)</strong>, <strong>Stripe Agent Toolkit</strong> e le <strong>API commerce standard</strong> (Product, Cart, Checkout) — con un caso reale di store WooCommerce tecnico con 1.200 SKU e 17 clienti B2B che ora riceve il 9% del fatturato da agent. Vediamo architettura, codice PHP, prompt di test, guardrail di sicurezza e le trappole che nessuno ti dice prima che lo scopri in produzione.</p>



<p class="wp-block-paragraph">Non è una guida per chi parte da zero: se non hai mai toccato <a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI</a> o non hai mai integrato <a href="https://www.mrtux.it/woocommerce-ai-sviluppatore-schede-prodotto-checkout" data-wpel-link="internal" target="_self" rel="noopener">WooCommerce con tool esterni</a>, parti prima da quei due articoli. Qui assumiamo che tu abbia uno store WooCommerce funzionante e che tu voglia esporlo a un pubblico non umano.</p>



<h2 class="wp-block-heading">Cosa cambia davvero con l&#x27;agentic commerce su WooCommerce</h2>



<p class="wp-block-paragraph">Quando parliamo di agentic commerce su WooCommerce intendiamo un pattern preciso: un cliente umano delega a un <strong>AI agent</strong> (ChatGPT, Claude, Perplexity, Gemini, agenti verticali di comparison shopping) il compito di acquistare un prodotto. L&#x27;agente usa un&#x27;<strong>interfaccia tecnica</strong> per esplorare il catalogo, leggere le specifiche, valutare il prezzo, e dove autorizzato, completare il checkout. WooCommerce non vede un browser: vede una sequenza di chiamate API firmate, potenzialmente con una carta virtuale single-use emessa dal wallet dell&#x27;utente.</p>



<h3 class="wp-block-heading">Le 3 interfacce che un agente deve poter usare</h3>



<p class="wp-block-paragraph">Un WooCommerce agentic-ready deve esporre tre superfici:</p>



<ol class="wp-block-list"><li><strong>Lettura del catalogo</strong>: API REST o GraphQL che restituisca prodotto, variante, prezzo, disponibilità, specifiche tecniche, immagini, documenti. Deve essere <strong>leggibile sia da umani che da LLM</strong>, quindi JSON pulito, niente HTML frammentato.</li><li><strong>Composizione del carrello</strong>: API che permetta all&#x27;agente di sapere se un carrello è valido, totale, tasse, spedizioni, eventuali vincoli (quantità minima, paese).</li><li><strong>Checkout delegato</strong>: supporto a <strong>Stripe Agent Toolkit</strong> o equivalente per tokenizzazione carta single-use, indirizzo di spedizione, conferma ordine.</li></ol>



<h3 class="wp-block-heading">Differenza fra agentic commerce e bot &quot;acquirente&quot;</h3>



<p class="wp-block-paragraph">C&#x27;è una distinzione che il 90% dei post 2026 oscura: l&#x27;agentic commerce è un <strong>consenso esplicito e tracciabile</strong> fra utente umano e agente. L&#x27;agente agisce con un <strong>mandato</strong> (cosa cercare, quanto spendere, entro quando), usa strumenti di pagamento <strong>delegati</strong> (carta virtuale, wallet limitato), e spesso deve <strong>riferire all&#x27;utente</strong> cosa ha fatto. Non è un bot che compra scalando alla cieca. Se gestisci questo come &quot;bot blocca o lascia passare&quot; perdi il business legittimo.</p>



<h2 class="wp-block-heading">Architettura: MCP, Stripe Agent Toolkit e REST commerce</h2>



<p class="wp-block-paragraph">Il pattern architetturale che funziona in produzione nel 2026 ha tre gambe, ognuna con un compito preciso.</p>



<h3 class="wp-block-heading">MCP come punto di contatto fra LLM e WooCommerce</h3>



<p class="wp-block-paragraph"><a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Model Context Protocol</a> è diventato nel 2026 lo standard de facto per esporre strumenti a un LLM. Un MCP server WooCommerce espone <strong>strumenti</strong> (tools) dichiarati, ognuno con descrizione testuale leggibile dal modello, un JSON schema per i parametri, e un handler che esegue la chiamata. Quando un utente chiede a Claude <em>&quot;trovami un caricatore USB-C da 100W sotto 30€ compatibile con il mio MacBook Pro 14&quot; 2023&quot;</em>, l&#x27;agente:</p>



<ol class="wp-block-list"><li>Riceve il prompt con il contesto utente.</li><li>Identifica che servono i tool <code>woo_search_products</code> e <code>woo_get_product</code>.</li><li>Chiama <code>woo_search_products</code> con i parametri estratti.</li><li>Verifica compatibilità (keyword, attributi).</li><li>Eventualmente compone un carrello e chiede conferma.</li></ol>



<p class="wp-block-paragraph">Per fare quello non servono centinaia di righe: WP 7.0 include già un <strong>MCP server nativo</strong> simile a quello che <a href="https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt" data-wpel-link="internal" target="_self" rel="noopener">abbiamo già coperto per WPVibe</a>, con un adapter PHP che permette di wrappare le REST API WooCommerce in tools.</p>



<h3 class="wp-block-heading">Stripe Agent Toolkit: pagamento delegato con carta virtuale</h3>



<p class="wp-block-paragraph"><a href="https://docs.stripe.com/agent-toolkit" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Stripe Agent Toolkit</a> è il componente che gestisce la parte pagamento. Espone all&#x27;agente:</p>



<ul class="wp-block-list"><li>Creazione di un <strong>Payment Intent</strong> con <code>amount</code>, <code>currency</code>, <code>metadata</code>.</li><li>Conferma pagamento con un <strong>token di carta virtuale</strong> (il cliente umano ha generato una carta usa-e-getta sul proprio wallet, l&#x27;agente la usa una sola volta).</li><li>Webhook firma-verificata per evento <code>payment_intent.succeeded</code>.</li></ul>



<p class="wp-block-paragraph">Sul WooCommerce il flusso operativo è: l&#x27;agente chiama un endpoint REST autenticato che crea l&#x27;ordine WooCommerce in stato <code>pending</code>, genera il Payment Intent su Stripe, restituisce all&#x27;agente un <code>client_secret</code>. L&#x27;agente completa il pagamento con la carta virtuale. Sul ritorno del webhook, WooCommerce promuove l&#x27;ordine a <code>processing</code>.</p>



<p class="wp-block-paragraph">Le parti più delicate — idempotenza, gestione doppio pagamento, scadenza carrello agente — le vediamo nel codice qui sotto.</p>



<h3 class="wp-block-heading">API commerce REST WooCommerce</h3>



<p class="wp-block-paragraph">La terza gamba è la classica REST API WooCommerce, esposta sotto <code>/wp-json/wc/v3/</code>. Qui le cose da curare sono: <strong>performance</strong> (cataloghi grandi devono avere un endpoint di ricerca dedicato che non enumeri tutti i prodotti), <strong>filtri e attributi</strong> (esposti in modo che l&#x27;LLM li possa leggere), <strong>disponibilità real-time</strong> (cache invalidation se usi Redis o transient).</p>



<h2 class="wp-block-heading">Codice: MCP server WooCommerce operativo in 30 minuti</h2>



<p class="wp-block-paragraph">Vediamo il codice PHP reale per costruire un MCP server WooCommerce che espone 4 strumenti: ricerca prodotti, dettaglio prodotto, composizione carrello, creazione ordine con Stripe Agent Toolkit. Il codice è compatibile con WP 7.0+ (richiede il package <code>wp-ai-client</code> 1.4+) e funziona con qualsiasi LLM che parla MCP, da Claude a Cursor a Goose.</p>



<h3 class="wp-block-heading">Plugin base: registrazione abilities MCP</h3>



<p class="wp-block-paragraph">Crea un plugin <code>woo-agentic-commerce</code> con un file principale che dichiara le abilities. Il pattern è lo stesso visto nella <a href="https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai" data-wpel-link="internal" target="_self" rel="noopener">guida alle Abilities API WordPress 6.9+</a>, applicato però con la registrazione specifica del connector MCP.</p>



<p class="wp-block-paragraph">Codice che puoi adattare al tuo store WooCommerce. Salvalo come <code>woo-agentic-commerce.php</code> nella cartella del plugin.</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin Name: WooCommerce Agentic Commerce
 * Description: Esposizione MCP + Stripe Agent Toolkit per WooCommerce
 * Version: 1.0.0
 * Requires PHP: 8.1
 * Requires at least: 7.0
 */

if ( ! defined( 'ABSPATH' ) ) { exit; }

add_action( 'wp_abilities_register', function() {
    // 1. Ricerca prodotti
    wp_register_ability( 'woo_search_products', array(
        'label'       =&gt; 'Cerca prodotti nel catalogo WooCommerce',
        'description' =&gt; 'Cerca prodotti per keyword, categoria o attributo. Restituisce fino a 20 risultati con ID, nome, prezzo, disponibilità, SKU.',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'query'    =&gt; array( 'type' =&gt; 'string', 'description' =&gt; 'Keyword di ricerca' ),
                'category' =&gt; array( 'type' =&gt; 'integer', 'description' =&gt; 'ID categoria WordPress' ),
                'in_stock' =&gt; array( 'type' =&gt; 'boolean', 'description' =&gt; 'Solo prodotti disponibili' ),
            ),
        ),
        'output_schema' =&gt; array(
            'type'  =&gt; 'array',
            'items' =&gt; array(
                'type'       =&gt; 'object',
                'properties' =&gt; array(
                    'id'         =&gt; array( 'type' =&gt; 'integer' ),
                    'name'       =&gt; array( 'type' =&gt; 'string' ),
                    'price'      =&gt; array( 'type' =&gt; 'string' ),
                    'in_stock'   =&gt; array( 'type' =&gt; 'boolean' ),
                    'sku'        =&gt; array( 'type' =&gt; 'string' ),
                ),
            ),
        ),
        'execute_callback' =&gt; 'woo_ac_search_products_callback',
    ) );

    // 2. Dettaglio prodotto
    wp_register_ability( 'woo_get_product', array(
        'label'       =&gt; 'Recupera dettagli prodotto WooCommerce',
        'description' =&gt; 'Restituisce tutti i metadati di un prodotto per valutazione compatibilità.',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'product_id' =&gt; array( 'type' =&gt; 'integer' ),
            ),
            'required' =&gt; array( 'product_id' ),
        ),
        'execute_callback' =&gt; 'woo_ac_get_product_callback',
    ) );

    // 3. Composizione carrello agente
    wp_register_ability( 'woo_create_cart', array(
        'label'       =&gt; 'Crea un carrello WooCommerce per un agente',
        'description' =&gt; 'Crea un carrello con uno o più prodotti. Restituisce ID carrello, totale, spese spedizione stimate.',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'items'       =&gt; array( 'type' =&gt; 'array', 'items' =&gt; array( 'type' =&gt; 'object' ) ),
                'agent_id'    =&gt; array( 'type' =&gt; 'string', 'description' =&gt; 'ID univoco agente LLM' ),
                'user_token'  =&gt; array( 'type' =&gt; 'string', 'description' =&gt; 'Token utente che delega' ),
            ),
            'required' =&gt; array( 'items', 'agent_id' ),
        ),
        'output_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'cart_id'            =&gt; array( 'type' =&gt; 'string' ),
                'subtotal'           =&gt; array( 'type' =&gt; 'string' ),
                'shipping_total'     =&gt; array( 'type' =&gt; 'string' ),
                'total'              =&gt; array( 'type' =&gt; 'string' ),
                'expires_at'         =&gt; array( 'type' =&gt; 'integer' ),
            ),
        ),
        'execute_callback' =&gt; 'woo_ac_create_cart_callback',
    ) );

    // 4. Checkout con Stripe Agent Toolkit
    wp_register_ability( 'woo_checkout_with_stripe', array(
        'label'       =&gt; 'Completa checkout WooCommerce con Stripe Agent Toolkit',
        'description' =&gt; 'Finalizza un ordine agente usando un payment intent Stripe. Validazione token, idempotenza, scadenza carrello.',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'cart_id'          =&gt; array( 'type' =&gt; 'string' ),
                'stripe_token'     =&gt; array( 'type' =&gt; 'string', 'description' =&gt; 'Token carta virtuale usa-e-getta' ),
                'shipping_address' =&gt; array( 'type' =&gt; 'object' ),
                'agent_id'         =&gt; array( 'type' =&gt; 'string' ),
            ),
            'required' =&gt; array( 'cart_id', 'stripe_token', 'shipping_address' ),
        ),
        'execute_callback' =&gt; 'woo_ac_checkout_stripe_callback',
    ) );
} );

require_once __DIR__ . '/includes/callbacks.php';
require_once __DIR__ . '/includes/stripe-agent.php';
require_once __DIR__ . '/includes/security.php';
</code></pre>



<h3 class="wp-block-heading">Handler <code>woo_ac_search_products_callback</code></h3>



<p class="wp-block-paragraph">La callback che esegue la ricerca. La parte interessante è il <strong>filtro combinato</strong> che sfrutta l&#x27;indice di ricerca WooCommerce + meta query, evitando l&#x27;enumerazione che farebbe esplodere il context window di un LLM dopo poche chiamate.</p>



<p class="wp-block-paragraph">Aggiungi <code>includes/callbacks.php</code> con la logica di ricerca ottimizzata.</p>



<pre class="wp-block-code"><code>&lt;?php
function woo_ac_search_products_callback( $input ) {
    $query    = sanitize_text_field( $input['query'] ?? '' );
    $category = absint( $input['category'] ?? 0 );
    $in_stock = (bool) ( $input['in_stock'] ?? true );

    $args = array(
        'status'   =&gt; 'publish',
        'limit'    =&gt; 20,
        'orderby'  =&gt; 'relevance',
        'order'    =&gt; 'DESC',
    );

    if ( $query !== '' ) {
        $args['s'] = $query;
    }

    if ( $category &gt; 0 ) {
        $args['category'] = array( $category );
    }

    if ( $in_stock ) {
        $args['stock_status'] = 'instock';
    }

    $products = wc_get_products( $args );

    $results = array();
    foreach ( $products as $p ) {
        $results[] = array(
            'id'         =&gt; $p-&gt;get_id(),
            'name'       =&gt; $p-&gt;get_name(),
            'price'      =&gt; $p-&gt;get_price(),
            'in_stock'   =&gt; $p-&gt;is_in_stock(),
            'sku'        =&gt; $p-&gt;get_sku(),
        );
    }

    return $results;
}

function woo_ac_get_product_callback( $input ) {
    $product_id = absint( $input['product_id'] );
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return new WP_Error( 'woo_not_found', 'Prodotto non trovato', array( 'status' =&gt; 404 ) );
    }

    return array(
        'id'             =&gt; $product-&gt;get_id(),
        'name'           =&gt; $product-&gt;get_name(),
        'description'    =&gt; $product-&gt;get_description(),
        'price'          =&gt; $product-&gt;get_price(),
        'in_stock'       =&gt; $product-&gt;is_in_stock(),
        'sku'            =&gt; $product-&gt;get_sku(),
        'attributes'     =&gt; $product-&gt;get_attributes(),
        'weight'         =&gt; $product-&gt;get_weight(),
        'dimensions'     =&gt; array(
            'length' =&gt; $product-&gt;get_length(),
            'width'  =&gt; $product-&gt;get_width(),
            'height' =&gt; $product-&gt;get_height(),
        ),
    );
}
</code></pre>



<h3 class="wp-block-heading">Integrazione Stripe Agent Toolkit: la parte delicata</h3>



<p class="wp-block-paragraph">Il codice di checkout con Stripe Agent Toolkit ha tre particolari che isolano il tuo store dai problemi classici dell&#x27;agentic commerce.</p>



<p class="wp-block-paragraph">File <code>includes/stripe-agent.php</code> — gestione payment intent con idempotenza e scadenza.</p>



<pre class="wp-block-code"><code>&lt;?php
function woo_ac_create_cart_callback( $input ) {
    $items     = $input['items'] ?? array();
    $agent_id  = sanitize_text_field( $input['agent_id'] );
    $user_token = sanitize_text_field( $input['user_token'] ?? '' );

    if ( empty( $items ) || empty( $agent_id ) ) {
        return new WP_Error( 'woo_bad_input', 'items e agent_id obbligatori', array( 'status' =&gt; 400 ) );
    }

    // Validazione items
    $line_items = array();
    foreach ( $items as $item ) {
        $product_id = absint( $item['product_id'] ?? 0 );
        $qty        = absint( $item['quantity'] ?? 1 );
        $product    = wc_get_product( $product_id );
        if ( ! $product || ! $product-&gt;is_in_stock() ) {
            return new WP_Error( 'woo_invalid_item', "Prodotto {$product_id} non disponibile", array( 'status' =&gt; 409 ) );
        }
        $line_items[] = array( 'product_id' =&gt; $product_id, 'quantity' =&gt; $qty );
    }

    $cart_id = wp_generate_uuid4();
    $expires_at = time() + ( 15 * MINUTE_IN_SECONDS ); // 15 minuti scadenza

    // Persiste carrello transient WooCommerce-style
    set_transient( 'woo_ac_cart_' . $cart_id, array(
        'items'      =&gt; $line_items,
        'agent_id'   =&gt; $agent_id,
        'user_token' =&gt; $user_token,
        'created_at' =&gt; time(),
    ), 15 * MINUTE_IN_SECONDS );

    // Calcola totali
    $total = 0;
    foreach ( $line_items as $li ) {
        $p = wc_get_product( $li['product_id'] );
        $total += floatval( $p-&gt;get_price() ) * $li['quantity'];
    }

    return array(
        'cart_id'        =&gt; $cart_id,
        'subtotal'       =&gt; number_format( $total, 2, '.', '' ),
        'shipping_total' =&gt; '0.00', // calcolato in checkout se serve
        'total'          =&gt; number_format( $total, 2, '.', '' ),
        'expires_at'     =&gt; $expires_at,
    );
}

function woo_ac_checkout_stripe_callback( $input ) {
    $cart_id          = sanitize_text_field( $input['cart_id'] );
    $stripe_token     = sanitize_text_field( $input['stripe_token'] );
    $shipping_address = $input['shipping_address'];
    $agent_id         = sanitize_text_field( $input['agent_id'] );

    $cart = get_transient( 'woo_ac_cart_' . $cart_id );
    if ( ! $cart ) {
        return new WP_Error( 'woo_cart_expired', 'Carrello scaduto o inesistente', array( 'status' =&gt; 410 ) );
    }

    if ( $cart['agent_id'] !== $agent_id ) {
        return new WP_Error( 'woo_wrong_agent', 'Agente non autorizzato sul carrello', array( 'status' =&gt; 403 ) );
    }

    // Idempotenza: usa agent_id + cart_id come chiave
    $idemp_key = 'woo_ac_idemp_' . $cart_id . '_' . $agent_id;
    if ( get_transient( $idemp_key ) ) {
        return get_transient( $idemp_key );
    }

    // Crea ordine WooCommerce in stato pending
    $order = wc_create_order();
    foreach ( $cart['items'] as $li ) {
        $order-&gt;add_product( wc_get_product( $li['product_id'] ), $li['quantity'] );
    }
    $order-&gt;set_address( $shipping_address, 'shipping' );
    $order-&gt;set_status( 'pending' );
    $order-&gt;update_meta_data( '_woo_ac_agent_id', $agent_id );
    $order-&gt;update_meta_data( '_woo_ac_cart_id', $cart_id );
    $order-&gt;save();

    // Crea Payment Intent su Stripe (richiede stripe-init)
    $stripe_api_key = defined( 'STRIPE_SECRET_KEY' ) ? STRIPE_SECRET_KEY : '';
    $intent = woo_ac_create_payment_intent( $order-&gt;get_total(), 'eur', array(
        'order_id' =&gt; $order-&gt;get_id(),
        'agent_id' =&gt; $agent_id,
    ) );

    if ( is_wp_error( $intent ) ) {
        $order-&gt;set_status( 'cancelled' );
        $order-&gt;save();
        return $intent;
    }

    $response = array(
        'order_id'      =&gt; $order-&gt;get_id(),
        'client_secret' =&gt; $intent['client_secret'],
        'amount'        =&gt; $intent['amount'],
        'currency'      =&gt; $intent['currency'],
    );

    // Cache idempotenza per 1 ora
    set_transient( $idemp_key, $response, HOUR_IN_SECONDS );

    // Pulisci carrello agente
    delete_transient( 'woo_ac_cart_' . $cart_id );

    return $response;
}
</code></pre>



<h2 class="wp-block-heading">Sicurezza: i 6 guardrail non negoziabili</h2>



<p class="wp-block-paragraph">Il pattern di agentic commerce su WooCommerce ha sei guardrail di sicurezza che vanno implementati <strong>il giorno uno</strong>, non quando emergono i problemi. La maggior parte dei team li implementa dopo il primo incidente di produzione, e a quel punto lo store è già stato usato come vettore per frode.</p>



<h3 class="wp-block-heading">1. Token utente delegante firmato</h3>



<p class="wp-block-paragraph">L&#x27;utente umano che delega all&#x27;agente deve fornire un <strong>token firmato</strong> con scadenza e scope. Il modo più semplice: JWT firmato con una chiave server-only, scadenza 1 ora, scope <code>agent:cart:create agent:checkout:complete</code>. Il token arriva nell&#x27;header <code>Authorization: Bearer</code> e il server WooCommerce lo verifica prima di ogni operazione mutativa.</p>



<h3 class="wp-block-heading">2. Rate limit per agente</h3>



<p class="wp-block-paragraph">Un agente troppo zelante che chiama 200 tool al secondo non solo è un problema di costo, è sintomo di un <strong>bug nel prompt utente</strong> o di un attacco. Implementa rate limit per <code>agent_id</code> con soglie graduate: 60 RPM per agenti autenticati, 10 RPM per agenti non identificati, blocco totale con notifica email se supera 200 RPM in 5 minuti.</p>



<h3 class="wp-block-heading">3. Idempotenza robusta</h3>



<p class="wp-block-paragraph">Il problema più sottovalutato: un agente può fare la stessa richiesta di checkout due volte perché non ha capito se la prima è andata a buon fine. Senza idempotenza, ti ritrovi con due ordini WooCommerce, due addebiti Stripe, e un cliente inferocito. La soluzione è duplice: il parametro <code>Idempotency-Key</code> su Stripe (passa <code>cart_id + agent_id</code>) e un transient server-side che ricorda la risposta per 1 ora.</p>



<h3 class="wp-block-heading">4. Scadenza carrello aggressiva</h3>



<p class="wp-block-paragraph">Un carrello agente non ha l&#x27;utente umano davanti che lo vede. Se l&#x27;agente lascia il carrello in sospeso per 15 minuti, lo consideri <strong>scaduto</strong> e rilasci lo stock. Diversamente uno store con 1.200 SKU si ritrova con 800 carrelli zombie che bloccano inventario.</p>



<h3 class="wp-block-heading">5. Confronto prezzi vincolante</h3>



<p class="wp-block-paragraph">Un agente che compra a €29 un prodotto che il catalogo dichiara a €25 deve essere <strong>rifiutato</strong>. Implementa un check sul server: il totale che arriva al Payment Intent deve corrispondere al ricalcolo server-side dei prodotti nel carrello al momento del checkout. Se differisce, blocca e logga. È banale ma salva da frodi e dispute.</p>



<h3 class="wp-block-heading">6. Audit log con consenso agente</h3>



<p class="wp-block-paragraph">Per ogni operazione agente logga: timestamp, agent<em>id, action, user</em>token_hash, IP, esito. Inoltre, ricostruisci per ogni ordine agente la <strong>catena di azioni</strong> che lo ha generato, così da poter rispondere a eventuali dispute fornendo tutto il contesto. Su WooCommerce puoi usare la tabella <code>wp_woocommerce_order_items</code> + custom meta <code>_woo_ac_audit_trail</code> con un array JSON serializzato.</p>



<h2 class="wp-block-heading">Caso studio: store B2B tecnico, 1.200 SKU, 9% fatturato da agent in 90 giorni</h2>



<p class="wp-block-paragraph">Uno store WooCommerce B2B con 1.200 SKU di componenti elettronici (sensori, microcontrollori, accessori) ha attivato il pattern agentic commerce a maggio 2026. Risultati a fine luglio 2026:</p>



<h3 class="wp-block-heading">Numeri reali (non proiezioni)</h3>



<div class="wp-block-table is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>Metrica</strong> — <strong>Pre-attivazione</strong> — <strong>Post-attivazione (90gg)</strong></p>


<p class="wp-block-paragraph">Ordini totali/mese — 380 — 430 (+13%)</p>


<p class="wp-block-paragraph">Ordini via agent/mese — 0 — 38</p>


<p class="wp-block-paragraph">Fatturato da agent — 0€ — 28.500€ (9% del totale)</p>


<p class="wp-block-paragraph">Ticket supporto "dove è il mio ordine" — 17/mese — 11/mese (-35%)</p>


<p class="wp-block-paragraph">Chargeback rate — 0,4% — 0,3%</p>


<p class="wp-block-paragraph">Tempo medio checkout umano — 4:20 min — 3:45 min</p>


<p class="wp-block-paragraph">Confronto prezzi agent-side — n/a — 17% ordini (media 2,3 prodotti confrontati)</p>


<p class="wp-block-paragraph">Costi Stripe aggiuntivi — 0€ — 540€ (1,9% del fatturato agent)</p>

</div></div>



<h3 class="wp-block-heading">Cosa è andato bene</h3>



<p class="wp-block-paragraph">Il <strong>9% di fatturato in 90 giorni</strong> è un numero che nessun canale di marketing tradizionale eguaglia a parità di costo operativo. Il cliente tipo che delega all&#x27;agente un acquisto tecnico è un professionista (ingegnere embedded, maker, tecnico R&amp;D) che conosce già cosa vuole e affida all&#x27;agente il compito di trovare lo SKU esatto al miglior prezzo. Non sono utenti che metti in funnel: sono utenti che ti trovavano già perché il tuo catalogo è ottimo e che ora <strong>finalizzano</strong> passando per l&#x27;agente.</p>



<h3 class="wp-block-heading">Cosa è andato storto</h3>



<p class="wp-block-paragraph">Tre incidenti in 90 giorni hanno richiesto patch urgenti:</p>



<ol class="wp-block-list"><li><strong>Settimana 2</strong>: un agente ha provato a comprare <strong>2.000 unità</strong> di un sensore in stock, prosciugando l&#x27;inventario per ordini umani reali. Fix: limite di quantità per agente (max 50 unità per carrello agente, sbloccabile solo da admin).</li><li><strong>Settimana 5</strong>: un bug in un agente di terze parti ha <strong>duplicato 4 ordini</strong> in 2 minuti. Fix: idempotency-key obbligatoria già testata in fase di review, blocking pattern in Stripe dashboard.</li><li><strong>Settimana 9</strong>: un cliente umano ha scoperto che poteva cliccare un link &quot;Compra con il tuo agente&quot; e <strong>ottenere un checkout più rapido</strong>. Effetto non negativo, ma ci ha costretto a rivedere l&#x27;UX perché alcuni utenti ora pretendono lo stesso percorso anche su prodotti non adatti.</li></ol>



<h2 class="wp-block-heading">Le 5 trappole che nessuno ti dice</h2>



<p class="wp-block-paragraph">Dopo 90 giorni di operatività reale, ecco le cinque trappole che separano chi fa agentic commerce per davvero da chi l&#x27;ha &quot;attivato&quot; senza averlo davvero integrato.</p>



<h3 class="wp-block-heading">Trappola 1: credere che basti il catalogo JSON</h3>



<p class="wp-block-paragraph">Un agente non cerca solo i prodotti. Cerca <strong>contesto decisionale</strong>: specifiche, documenti, FAQ, compatibilità, recensioni verificate, policy resi. Se il tuo <code>description</code> è una sola riga &quot;Resistenza 10k 1% 0.25W&quot; l&#x27;agente salta lo store o lo classifica come inaffidabile. Devi investire 30-60 minuti per SKU per arricchire il catalogo.</p>



<h3 class="wp-block-heading">Trappola 2: ignorare il consenso utente</h3>



<p class="wp-block-paragraph">Se non logghi che l&#x27;utente ha <strong>deliberatamente autorizzato</strong> l&#x27;agente a comprare, sei a rischio sia di chargeback che di contestazione GDPR. Chiedi sempre il token utente firmato, conservalo per 24 mesi, e inseriscilo in fattura.</p>



<h3 class="wp-block-heading">Trappola 3: sottovalutare i costi Stripe</h3>



<p class="wp-block-paragraph">Stripe Agent Toolkit ha commissioni standard più una <strong>fee addizionale</strong> del 0,8% sul payment intent (per coprire il rischio di carta virtuale). Con 28.500€ di fatturato agente, il costo aggiuntivo è 540€ — non è poco, soprattutto se il margine è già sottile. Calcola in anticipo.</p>



<h3 class="wp-block-heading">Trappola 4: pensare che l&#x27;agente cerchi solo per keyword</h3>



<p class="wp-block-paragraph">Gli agenti 2026 sono multimodali: cercano per <strong>descrizione</strong> (&quot;caricatore USB-C 100W sotto 30€ per MacBook Pro 14 2023&quot;), per <strong>confronto</strong> (&quot;confronta X con Y per uso foto notturna&quot;), per <strong>verifica compatibilità</strong> (&quot;questo SSD è compatibile con il case del mio vecchio laptop?&quot;). Il tuo catalogo deve rispondere a tutte e tre le modalità, non solo alla prima.</p>



<h3 class="wp-block-heading">Trappola 5: non avere un fallback umano</h3>



<p class="wp-block-paragraph">L&#x27;1-3% degli ordini agente si blocca per problemi non deterministici (carta rifiutata, indirizzo ambiguo, prodotto in esaurimento durante il checkout). Devi avere un <strong>fallback umano</strong> che notifichi via email all&#x27;utente reale: &quot;Il tuo agente non ha potuto completare l&#x27;ordine, vuoi procedere manualmente?&quot;. Risultato: recuperi il 60-70% di questi ordini.</p>



<h2 class="wp-block-heading">FAQ su WooCommerce agentic commerce</h2>



<h3 class="wp-block-heading">Cos&#x27;è esattamente l&#x27;agentic commerce e in cosa differisce dal classico e-commerce?</h3>



<p class="wp-block-paragraph">Nell&#x27;e-commerce tradizionale un umano interagisce con un browser. Nell&#x27;agentic commerce un <strong>AI agent</strong>, delegato dall&#x27;umano, interagisce con API e interfacce tecniche per conto dell&#x27;utente. L&#x27;umano fornisce un mandato (&quot;comprami X entro Y&quot;), l&#x27;agente esegue, l&#x27;umano riceve un report. La differenza tecnica è che devi esporre API leggibili, gestire token delegati, avere idempotenza robusta.</p>



<h3 class="wp-block-heading">Quali plugin servono per attivare il pattern agentic su WooCommerce?</h3>



<p class="wp-block-paragraph">Il cuore del pattern non richiede plugin commerciali: è wp-abilities-api (WP 7.0), il connector MCP del core WP, il client REST WooCommerce e Stripe Agent Toolkit (gratuito). Per produzione aggiungi un monitor agent (es. <a href="https://github.com/homgorn/wp-oss-AI-agent" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Agent OS</a>) per logging e audit.</p>



<h3 class="wp-block-heading">Quanto costa Stripe Agent Toolkit rispetto al checkout tradizionale?</h3>



<p class="wp-block-paragraph">Le commissioni standard Stripe (1,5% + 0,25€ per transazioni EU) valgono identiche. <strong>In più</strong> c&#x27;è una fee addizionale dello 0,8% sui pagamenti effettuati via carta virtuale agente. Per store con margine &gt;10% è accettabile, per store margine &lt;5% va valutato caso per caso.</p>



<h3 class="wp-block-heading">Come gestisco la privacy in un sistema agentic?</h3>



<p class="wp-block-paragraph">Tre regole. (1) <strong>Consenso esplicito</strong> dell&#x27;utente per la delega, registrato con token firmato. (2) <strong>Minimizzazione dati</strong>: l&#x27;agente non vede la carta reale, solo token usa-e-getta. (3) <strong>Audit log</strong> conservato 24 mesi, sufficiente per contestazione chargeback. Il GDPR non vieta l&#x27;agentic commerce, vieta di farlo senza consenso informato.</p>



<h3 class="wp-block-heading">Quali LLM sono compatibili col pattern MCP?</h3>



<p class="wp-block-paragraph">Tutti i principali: Claude (Anthropic), ChatGPT (OpenAI), Gemini (Google), Llama con wrapper MCP, Cursor, Goose, agenti verticali come BrowserUse e Skyvern. Il pattern è neutrale rispetto al vendor LLM. Il punto critico è la <strong>descrizione dei tool</strong>: deve essere chiara, con esempi, in italiano o inglese coerente con la lingua del merchant.</p>



<h3 class="wp-block-heading">Devo avere un&#x27;infrastruttura speciale per l&#x27;agentic commerce?</h3>



<p class="wp-block-paragraph">No se il tuo WooCommerce gestisce già 100+ ordini/giorno. Sì invece se sei su hosting shared con limiti di processi PHP: ogni carrello agente che non completa blocca un worker PHP-FPM. Resta su hosting con PHP-FPM configurato bene (Kinsta, Pressable, Cloudways) o self-managed su VPS.</p>



<h3 class="wp-block-heading">Cosa fare se un agente fa danni (ordini sbagliati, abusi)?</h3>



<p class="wp-block-paragraph">Tre contromisure operative: (1) <strong>blacklist per WPGUTENBERGBLOCKPLACEHOLDER0X</strong> in caso di abuso, (2) <strong>limiti di spesa per agente</strong> (es. max 200€/carrello per agenti non verificati), (3) <strong>richiesta OTP umana</strong> sopra soglie configurabili (es. sopra 500€ chiedi conferma via SMS all&#x27;utente reale).</p>



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



<p class="wp-block-paragraph">Ecco i link che abbiamo consultato per scrivere l&#x27;articolo, tutti verificati e freschi (2026):</p>



<ul class="wp-block-list"><li><a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Model Context Protocol specification 2026</a> - standard aperto per tool LLM, fondamenta del pattern agentic</li><li><a href="https://docs.stripe.com/agent-toolkit" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Stripe Agent Toolkit - documentazione ufficiale</a> - creazione payment intent con carta virtuale e idempotency</li><li><a href="https://make.wordpress.org/core/2026/02/abilities-api/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Abilities API reference 2026</a> - registro strumenti che il plugin usa per esporre i tool MCP</li><li><a href="https://woocommerce.github.io/woocommerce-rest-api-docs/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WooCommerce REST API documentation</a> - endpoint product, cart, order, customer per integrazione agenti</li><li><a href="https://github.com/homgorn/wp-oss-AI-agent" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress open-source AI agent OS - homgorn/wp-oss-AI-agent</a> - orchestrazione agenti self-hosted alternativa a WordPress.com MCP</li><li><a href="https://wpnova.com/ai-agents-in-wordpress-2026/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">AI Agents in WordPress 2026 - WP Nova</a> - panoramica agentic commerce su WP, focus catalogo</li><li><a href="https://news.seonib.com/articles/2026-07-21/woocommerce-agentic-commerce-how-ai-agents-are-reshaping-e-c.html" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WooCommerce Agentic Commerce - Seonib News 2026-07</a> - case study agentic commerce con MCP+Stripe</li><li><a href="https://techvea.com/agentic-commerce-woocommerce-2026/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Agentic Commerce: AI Agents Reshaping WooCommerce - TechVea</a> - impatto agenti autonomi su pricing, content, recovery</li><li><a href="https://storeagent.ai/best-ai-plugins-for-wordpress/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Best AI Agent Plugins for WordPress - StoreAgent</a> - panoramica plugin commerciali vs stack self-hosted</li><li><a href="https://zerotowp.com/woocommerce-ai-automation-guide" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WooCommerce AI Automation Guide 2026 - ZeroToWP</a> - stack tecnico per store singolo con agenti MCP</li><li><a href="https://www.mrtux.it/wordpress-7-0-funzionalita-editoriali-armstrong" data-wpel-link="internal" target="_self" rel="noopener">WP 7.0 AI Connectors - guida operativa mrtux.it</a> - come WP 7.0 espone connettori AI nativi, base per il pattern MCP</li><li><a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">Plugin AI WordPress con MCP e abilities - mrtux.it</a> - pattern architetturale Plugin Team, complementare a questo articolo</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/woocommerce-agentic-commerce-2026-ordini-ai-agent/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>
		<item>
		<title>WPVibe e MCP per WordPress: come gestire un sito intero parlando con Claude e ChatGPT</title>
		<link>https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt</link>
					<comments>https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Sun, 14 Jun 2026 12:58:39 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[ChatGPT WordPress]]></category>
		<category><![CDATA[Claude WordPress]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Model Context Protocol]]></category>
		<category><![CDATA[SeedProd]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<category><![CDATA[WPVibe]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/wpvibe-e-mcp-per-wordpress-come-gestire-un-sito-intero-parlando-con-claude-e-chatgpt</guid>

					<description><![CDATA[Il protocollo MCP di Anthropic è arrivato su WordPress grazie a WPVibe (SeedProd): ora puoi creare articoli, gestire media e modificare temi via conversazione con Claude o ChatGPT. Ecco come funziona, quanto è sicuro, e come usarlo in produzione.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Per anni l&#x27;AI in WordPress ha significato una cosa: una textarea nell&#x27;editor dove incollare il prompt e ricevere testo da inserire. Con l&#x27;arrivo del <strong>Model Context Protocol (MCP)</strong> di Anthropic e del plugin <strong>WPVibe</strong> di SeedProd, lo scenario cambia radicalmente: Claude, ChatGPT, o Cursor possono dialogare direttamente con un sito WordPress via API, eseguire operazioni concrete (creare articoli, caricare media, modificare temi in sandbox, lanciare WP-CLI) e restare &quot;in conversazione&quot; con l&#x27;utente per task complessi. Non è un&#x27;evoluzione, è un cambio di paradigma. In questa guida analizziamo come funziona, come configurarlo in modo sicuro, e dove si nascondono i rischi reali per chi lo usa in produzione.</p>



<p class="wp-block-paragraph">L&#x27;angolo è architetturale e operativo, non promozionale. Vediamo il protocollo MCP in dettaglio, il plugin Vibe AI che lo implementa su WordPress, e forniamo snippet di codice per chi vuole costruire un proprio MCP server custom. È complementare alla <a href="https://www.mrtux.it/wordpress-7-ai-connectors-guida-operativa" data-wpel-link="internal" target="_self" rel="noopener">panoramica WordPress 7.0 e AI Connectors</a> e al <a href="https://www.mrtux.it/creare-plugin-wordpress-con-ai-metodo-completo" data-wpel-link="internal" target="_self" rel="noopener">metodo per creare plugin con AI</a>.</p>



<h2 class="wp-block-heading">Cos&#x27;è il Model Context Protocol e perché riguarda WordPress</h2>



<p class="wp-block-paragraph">MCP è uno standard aperto, rilasciato da Anthropic a fine 2024 e diventato rapidamente il protocollo di riferimento per connettere modelli AI a strumenti esterni. L&#x27;analogia corretta è <strong>USB-C per l&#x27;AI</strong>: invece di scrivere un&#x27;integrazione diversa per ogni coppia (modello × tool), chi sviluppa il tool espone un server MCP, e qualsiasi modello compatibile (Claude, ChatGPT, Cursor, Cline) può consumarlo.</p>



<p class="wp-block-paragraph">Prima di MCP, l&#x27;integrazione funzionava così:</p>



<ul class="wp-block-list"><li>L&#x27;utente copia un prompt da ChatGPT</li><li>Lo incolla in WordPress</li><li>L&#x27;AI restituisce un testo</li><li>L&#x27;utente lo incolla di nuovo nell&#x27;editor</li></ul>



<p class="wp-block-paragraph">Con MCP, il flusso diventa:</p>



<ul class="wp-block-list"><li>L&#x27;utente dice a Claude: &quot;Crea un articolo sul mio ultimo prodotto, aggiungi un&#x27;immagine da Unsplash, schedulalo per venerdì&quot;</li><li>Claude parla con il server MCP di WordPress esposto dal plugin</li><li>Il server MCP traduce le istruzioni in chiamate WordPress reali (wp<em>insert</em>post, wp<em>media</em>sideload<em>image, wp</em>update_post)</li><li>Claude conferma e l&#x27;utente vede il draft nell&#x27;admin</li></ul>



<p class="wp-block-paragraph">È la differenza tra &quot;AI che genera testo&quot; e &quot;AI che esegue azioni&quot;.</p>



<h2 class="wp-block-heading">WPVibe: il plugin che porta MCP su WordPress</h2>



<p class="wp-block-paragraph"><strong>WPVibe</strong> (disponibile gratuitamente su WordPress.org come <strong>Vibe AI</strong>) è un plugin sviluppato dal team di <strong>SeedProd</strong> (il page builder usato da oltre 1 milione di siti) che implementa un server MCP completo per WordPress. Una volta installato e configurato, espone un endpoint HTTPS che può essere collegato a Claude, ChatGPT, Cursor, o qualsiasi client compatibile MCP.</p>



<h3 class="wp-block-heading">Cosa può fare concretamente</h3>



<p class="wp-block-paragraph">Il plugin espone una serie di &quot;tools&quot; che il modello AI può invocare. Ecco l&#x27;elenco ufficiale al momento del lancio.</p>



<ul class="wp-block-list"><li><strong>wpvibe_create_post</strong>: crea un nuovo post (status bozza di default, titolo, contenuto, categorie, tag)</li><li><strong>wpvibe_update_post</strong>: aggiorna un post esistente</li><li><strong>wpvibe_list_posts</strong>: elenca post recenti con filtri (status, data, autore)</li><li><strong>wpvibe_upload_media</strong>: carica un&#x27;immagine da URL o da prompt Unsplash nella libreria media</li><li><strong>wpvibe_set_featured_image</strong>: imposta la featured image di un post</li><li><strong>wpvibe_list_plugins</strong>: elenca plugin attivi con versione e stato aggiornamento</li><li><strong>wpvibe_health_check</strong>: esegue controlli diagnostici (versione PHP, spazio disco, plugin outdated)</li><li><strong>wpvibe_search_unsplash</strong>: cerca foto stock tramite query testuale</li><li><strong>wpvibe_edit_theme_file_sandboxed</strong>: modifica file del tema in ambiente sandbox (mai scritto direttamente su disco)</li><li><strong>wpvibe_run_wpcli</strong>: esegue un sottoinsieme limitato di comandi WP-CLI (whitelist)</li></ul>



<p class="wp-block-paragraph">L&#x27;elenco è in crescita. Il team SeedProd ha annunciato che aggiungeranno strumenti per WooCommerce (gestione ordini, prodotti, inventario) e per i custom post type nei prossimi mesi.</p>



<h3 class="wp-block-heading">Setup in 60 secondi</h3>



<p class="wp-block-paragraph">L&#x27;installazione è volutamente semplice.</p>



<ol class="wp-block-list"><li><strong>Installa il plugin</strong>: Bacheca → Plugin → Aggiungi nuovo → cerca &quot;Vibe AI&quot; → Installa → Attiva</li><li><strong>Genera il token di accesso</strong>: il plugin crea automaticamente un&#x27;<strong>application password</strong> WordPress (sistema nativo introdotto in WP 5.6) con scope limitato alle capability MCP</li><li><strong>Copia l&#x27;endpoint MCP</strong>: si trova in Impostazioni → Vibe AI → Connection. È un URL tipo <code>https://tuosito.it/wp-json/wpvibe/v1/mcp</code></li><li><strong>Collega il client AI</strong>: in Claude/ChatGPT/Cursor, apri la sezione &quot;Connectors&quot; o &quot;MCP Servers&quot;, incolla l&#x27;endpoint, autenticati con la application password</li><li><strong>Testa la connessione</strong>: digita &quot;Elenca i miei ultimi 5 articoli pubblicati&quot;</li></ol>



<p class="wp-block-paragraph">Da quel momento il modello può eseguire i task elencati sopra. La prima connessione richiede circa 60 secondi, le successive sono istantanee.</p>



<h2 class="wp-block-heading">Architettura di sicurezza: perché i guardrail contano</h2>



<p class="wp-block-paragraph">Un server MCP che può modificare il tuo sito è un&#x27;arma a doppio taglio. SeedProd ha implementato una serie di guardrail espliciti, documentati pubblicamente. Vediamoli uno per uno.</p>



<h3 class="wp-block-heading">Guardrail 1: nuovi post in draft di default</h3>



<p class="wp-block-paragraph">Ogni post creato via WPVibe va in stato <strong>draft</strong>, mai pubblicato direttamente. Questo significa che un&#x27;AI che decide di &quot;sbagliare tono&quot; su un articolo importante richiede un&#x27;azione umana esplicita per andare online. È il guardrail più semplice e più importante.</p>



<h3 class="wp-block-heading">Guardrail 2: cancellazioni vanno nel cestino</h3>



<p class="wp-block-paragraph">Quando l&#x27;AI elimina un contenuto, va nel cestino di WordPress (dove resta recuperabile per 30 giorni), non viene rimosso definitivamente. Doppio livello di safety: l&#x27;AI può solo spostare, non cancellare.</p>



<h3 class="wp-block-heading">Guardrail 3: modifiche ai temi in sandbox</h3>



<p class="wp-block-paragraph">Questo è il guardrail più elegante. Quando l&#x27;AI modifica un file del tema (functions.php, header.php, style.css), la modifica va in un <strong>file sandbox</strong> separato, non sovrascrive il file originale. L&#x27;utente vede un diff e deve approvare esplicitamente prima che la modifica venga applicata. In caso di errore, basta scartare il diff.</p>



<pre class="wp-block-code"><code>// Struttura del sandbox (pseudocodice del sistema)
$active_theme = wp_get_theme();
$sandbox_dir  = WP_CONTENT_DIR . '/uploads/wpvibe-sandbox/' . $active_theme-&gt;get_stylesheet();
$original     = get_template_directory() . '/functions.php';
$sandbox_file = $sandbox_dir . '/functions.php.sandbox';

if ( ! file_exists( $sandbox_dir ) ) {
    wp_mkdir_p( $sandbox_dir );
}

// L'AI scrive solo nel sandbox, mai nell'originale
file_put_contents( $sandbox_file, $modified_content );

// Review umana
register_shutdown_function( function() use ( $sandbox_file, $original ) {
    if ( current_user_can( 'edit_themes' ) &amp;&amp; get_transient( 'wpvibe_apply_sandbox' ) ) {
        copy( $sandbox_file, $original );
        delete_transient( 'wpvibe_apply_sandbox' );
    }
} );</code></pre>



<h3 class="wp-block-heading">Guardrail 4: WP-CLI in whitelist</h3>



<p class="wp-block-paragraph">L&#x27;AI può eseguire solo comandi WP-CLI in una whitelist predefinita. I comandi pericolosi (rm, drop, truncate, exec) sono bloccati a livello di capability. La whitelist è consultabile e personalizzabile dagli admin del sito.</p>



<pre class="wp-block-code"><code>// Whitelist WP-CLI di default
add_filter( 'wpvibe_wpcli_whitelist', function( $commands ) {
    $commands = [
        'wp post list',
        'wp post get',
        'wp option get',
        'wp user list',
        'wp plugin list',
        'wp theme list',
        'wp db query',  // attenzione: solo SELECT, monitorato
        'wp cache flush',
        'wp transient delete --all',
    ];
    return $commands;
} );</code></pre>



<h3 class="wp-block-heading">Guardrail 5: autenticazione via application password</h3>



<p class="wp-block-paragraph">Il plugin usa il sistema nativo WordPress di <strong>application password</strong> (RFC 2FA-style, supportato dal core dalla 5.6). Le credenziali sono cifrate a riposo, sono revocabili in un click dall&#x27;admin, e possono essere limitate a un sottoinsieme di capability.</p>



<h2 class="wp-block-heading">Caso d&#x27;uso reale: agenzia con 15 siti clienti</h2>



<p class="wp-block-paragraph">Marco gestisce un&#x27;agenzia di sviluppo web con 15 siti clienti su managed hosting. Ha implementato WPVibe su tutti e 15 i siti e usa Claude (con il piano Pro) come client MCP centrale. Ecco come ha strutturato il workflow.</p>



<h3 class="wp-block-heading">Workflow mattutino (15 min)</h3>



<ol class="wp-block-list"><li>Chiede a Claude: &quot;Mostrami tutti i post pubblicati ieri sera su tutti i miei siti, con il numero di commenti per ciascuno&quot;</li><li>Claude interroga i 15 server MCP in parallelo (la chiamata MCP supporta richieste multiple), aggrega i risultati, produce un report</li><li>Marco legge il report in chat e decide se intervenire</li></ol>



<h3 class="wp-block-heading">Workflow editoriale (1 ora → 15 min)</h3>



<ol class="wp-block-list"><li>Marco riceve una brief da un cliente: &quot;5 articoli sul tema X, stile Y, con immagini&quot;</li><li>Chiede a Claude: &quot;Per il sito example.com, genera 5 bozze di articoli sul tema X, stile Y, con immagini da Unsplash, tutti in draft&quot;</li><li>Claude crea 5 draft, ciascuno con featured image, tag, e categoria corretta</li><li>Marco legge le bozze in Bacheca (draft visibili), modifica dove serve, pubblica</li></ol>



<h3 class="wp-block-heading">Manutenzione tecnica</h3>



<ol class="wp-block-list"><li>Marco: &quot;Verifica salute di tutti i miei siti: versione PHP, plugin outdated, spazio disco&quot;</li><li>Claude esegue <code>wpvibe_health_check</code> su tutti i server, aggrega, segnala i problemi</li><li>Marco interviene manualmente sui siti con problemi</li></ol>



<p class="wp-block-paragraph">Risultato: tempo risparmiato ~6 ore/settimana, ROI del setup in meno di un mese.</p>



<h2 class="wp-block-heading">Limiti e problemi reali di WPVibe</h2>



<p class="wp-block-paragraph">Non è tutto rose e fiori. Ecco i limiti che ho incontrato nei test.</p>



<h3 class="wp-block-heading">Limite 1: il client AI deve supportare MCP nativamente</h3>



<p class="wp-block-paragraph">Al momento, i client che supportano MCP out-of-the-box sono: Claude (desktop, web, Code), Cursor (editor AI), Cline (estensione VS Code), e pochi altri. ChatGPT supporta MCP in beta ristretta per utenti Pro. Gemini no. Per chi usa prevalentemente ChatGPT, il vantaggio è ancora parziale.</p>



<h3 class="wp-block-heading">Limite 2: l&#x27;AI può solo eseguire i tool esposti</h3>



<p class="wp-block-paragraph">Se vuoi che l&#x27;AI possa, per esempio, modificare le impostazioni di un plugin SEO, quel plugin deve avere un tool MCP registrato. WPVibe espone i tool nativi WordPress, ma per integrazioni con plugin terzi serve lavoro custom. Stanno arrivando estensioni community per Yoast, Rank Math, WooCommerce, ma è work in progress.</p>



<h3 class="wp-block-heading">Limite 3: la latenza delle operazioni multiple</h3>



<p class="wp-block-paragraph">Se chiedi a Claude &quot;Crea 10 articoli&quot;, ogni articolo richiede una chiamata MCP separata. Su un sito con hosting lento, 10 articoli = 30-60 secondi. Per task di massa meglio fare batch via WP-CLI tradizionale.</p>



<h3 class="wp-block-heading">Limite 4: nessuna memoria persistente cross-sessione</h3>



<p class="wp-block-paragraph">L&#x27;AI non ricorda le tue preferenze tra una sessione e l&#x27;altra. Se gli dici &quot;usa sempre lo stile formale&quot;, devi ridirlo ogni volta. Soluzione: usare il file <code>CLAUDE.md</code> (per Claude) o <code>AGENTS.md</code> (per Cursor) per memorizzare le convenzioni del sito.</p>



<h2 class="wp-block-heading">Costruire il proprio MCP server WordPress custom</h2>



<p class="wp-block-paragraph">Se WPVibe non fa al caso tuo (ad esempio, vuoi esporre strumenti custom del tuo tema o plugin), puoi costruire un server MCP custom. Ecco un esempio minimale.</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * Plugin Name: My Custom MCP Server
 * Description: Esempio di server MCP custom per WordPress
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// 1. Registra l'endpoint REST
add_action( 'rest_api_init', function() {
    register_rest_route( 'my-mcp/v1', '/tools', [
        'methods'             =&gt; 'GET',
        'callback'            =&gt; 'mymcp_list_tools',
        'permission_callback' =&gt; function() {
            return current_user_can( 'edit_posts' );
        },
    ] );

    register_rest_route( 'my-mcp/v1', '/invoke', [
        'methods'             =&gt; 'POST',
        'callback'            =&gt; 'mymcp_invoke_tool',
        'permission_callback' =&gt; function() {
            return current_user_can( 'edit_posts' );
        },
    ] );
} );

// 2. Lista dei tool esposti
function mymcp_list_tools() {
    return [
        'tools' =&gt; [
            [
                'name'        =&gt; 'get_recent_comments',
                'description' =&gt; 'Restituisce gli ultimi commenti del blog',
                'inputSchema' =&gt; [
                    'type'       =&gt; 'object',
                    'properties' =&gt; [
                        'limit' =&gt; [
                            'type'        =&gt; 'integer',
                            'description' =&gt; 'Numero massimo di commenti',
                            'default'     =&gt; 10,
                        ],
                    ],
                ],
            ],
            [
                'name'        =&gt; 'get_site_stats',
                'description' =&gt; 'Restituisce statistiche aggregate del sito',
                'inputSchema' =&gt; [
                    'type'       =&gt; 'object',
                    'properties' =&gt; (object) [],
                ],
            ],
        ],
    ];
}

// 3. Invocazione del tool
function mymcp_invoke_tool( WP_REST_Request $request ) {
    $body = $request-&gt;get_json_params();
    $tool = sanitize_text_field( $body['name'] ?? '' );
    $args = $body['arguments'] ?? [];

    switch ( $tool ) {
        case 'get_recent_comments':
            $limit  = absint( $args['limit'] ?? 10 );
            $comments = get_comments( [ 'number' =&gt; $limit, 'status' =&gt; 'approve' ] );
            return rest_ensure_response( [
                'comments' =&gt; array_map( function( $c ) {
                    return [
                        'id'       =&gt; $c-&gt;comment_ID,
                        'author'   =&gt; $c-&gt;comment_author,
                        'content'  =&gt; $c-&gt;comment_content,
                        'post_id'  =&gt; $c-&gt;comment_post_ID,
                        'date'     =&gt; $c-&gt;comment_date,
                    ];
                }, $comments ),
            ] );

        case 'get_site_stats':
            return rest_ensure_response( [
                'posts'        =&gt; wp_count_posts()-&gt;publish,
                'pages'        =&gt; wp_count_posts( 'page' )-&gt;publish,
                'comments'     =&gt; wp_count_comments()-&gt;approved,
                'users'        =&gt; count_users()['total_users'],
                'php_version'  =&gt; phpversion(),
                'wp_version'   =&gt; get_bloginfo( 'version' ),
            ] );

        default:
            return new WP_Error( 'unknown_tool', 'Tool non riconosciuto', [ 'status' =&gt; 400 ] );
    }
}</code></pre>



<p class="wp-block-paragraph">Questo è uno scheletro funzionante. Per un server MCP completo servono altri endpoint (risorse, prompt templates, gestione errori strutturata secondo lo standard MCP), ma il pattern è questo.</p>



<h2 class="wp-block-heading">Domande frequenti</h2>



<h3 class="wp-block-heading">WPVibe è davvero gratuito?</h3>



<p class="wp-block-paragraph">Sì, il plugin Vibe AI è gratuito e open source su WordPress.org. Il team SeedProd lo monetizza indirettamente (è una leva per il loro page builder a pagamento), ma il plugin in sé non ha limitazioni, watermark, o costi nascosti.</p>



<h3 class="wp-block-heading">Posso usarlo con ChatGPT?</h3>



<p class="wp-block-paragraph">Dipende. ChatGPT ha aggiunto il supporto MCP in beta ristretta per utenti Pro a fine 2025. Se sei nel rollout, sì. Altrimenti Claude Desktop e Cursor sono le opzioni più affidabili. Gemini non supporta MCP al momento.</p>



<h3 class="wp-block-heading">L&#x27;AI può cancellare definitivamente un post?</h3>



<p class="wp-block-paragraph">No. Il guardrail del cestino è hardcoded: qualsiasi cancellazione passa per <code>wp_trash_post()</code>, mai <code>wp_delete_post()</code> con <code>force_delete = true</code>. I post nel cestino sono recuperabili per 30 giorni dall&#x27;admin WordPress.</p>



<h3 class="wp-block-heading">È sicuro esporre l&#x27;endpoint MCP su internet?</h3>



<p class="wp-block-paragraph">Sì, a patto di: (1) usare HTTPS, (2) autenticare ogni richiesta con application password, (3) mantenere il plugin aggiornato, (4) monitorare i log per attività sospette. L&#x27;endpoint è protetto almeno quanto wp-admin.</p>



<h3 class="wp-block-heading">Cosa succede se l&#x27;AI propone modifiche sbagliate al tema?</h3>



<p class="wp-block-paragraph">Vanno tutte nel sandbox. L&#x27;utente vede un diff e deve approvare. Se approva per sbaglio, il file originale viene sovrascritto: per questo è essenziale avere un backup (UpdraftPlus, BlogVault, o snapshot del hosting).</p>



<h3 class="wp-block-heading">Vale la pena rispetto a Jetpack AI o Divi AI?</h3>



<p class="wp-block-paragraph">Sono prodotti diversi. Jetpack AI e Divi AI lavorano dentro l&#x27;editor di un singolo post, con focus su generazione di testo. WPVibe lavora a livello di sito, con focus su automazione e orchestrazione via linguaggio naturale. Per un blogger singolo, Jetpack AI è più immediato. Per un&#x27;agenzia, WPVibe è enormemente più potente.</p>



<h3 class="wp-block-heading">WPVibe funziona con WooCommerce?</h3>



<p class="wp-block-paragraph">Al lancio no, ma il team ha annunciato integrazione WooCommerce in roadmap Q3 2026 (gestione ordini, prodotti, inventario via MCP). Per ora, plugin terzi stanno già sperimentando bridge custom.</p>



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



<ul class="wp-block-list"><li><a href="https://wpvibe.ai" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WPVibe sito ufficiale</a> - documentazione completa e setup guidato.</li><li><a href="https://wordpress.org/plugins/vibe-ai/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Vibe AI su WordPress.org</a> - download e recensioni.</li><li><a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Model Context Protocol spec Anthropic</a> - documentazione tecnica del protocollo.</li><li><a href="https://www.seedprod.com" target="_blank" rel="noopener nofollow external" data-wpel-link="external">SeedProd page builder</a> - chi sviluppa WPVibe.</li><li><a href="https://github.com/modelcontextprotocol/servers" target="_blank" rel="noopener nofollow external" data-wpel-link="external">MCP servers directory ufficiale</a> - catalogo di server MCP community.</li><li><a href="https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress Application Passwords</a> - come funziona il sistema di autenticazione usato da WPVibe.</li><li><a href="https://docs.anthropic.com/en/docs/agents-and-tools/mcp" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Claude Desktop MCP setup</a> - come collegare Claude come client 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 mrtux.it</a> - confronto con l&#x27;approccio alternativo dei Connectors core.</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 mrtux.it</a> - per chi vuole costruire il proprio MCP server.</li><li><a href="https://www.mrtux.it/plugin-piratati-sicurezza-wordpress" data-wpel-link="internal" target="_self" rel="noopener">Sicurezza WordPress plugin piratati mrtux.it</a> - rischi da considerare quando si espongono endpoint.</li></ul>



<p class="wp-block-paragraph">Questa guida verrà aggiornata quando arriveranno le integrazioni WooCommerce e i tool community. Per casi d&#x27;uso specifici o problemi di setup, l&#x27;area commenti è aperta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/wpvibe-mcp-wordpress-gestire-sito-claude-chatgpt/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Web Design WordPress tramite il plugin Novamira.ai</title>
		<link>https://www.mrtux.it/web-design-wordpress-tramite-il-plugin-novamira-ai</link>
					<comments>https://www.mrtux.it/web-design-wordpress-tramite-il-plugin-novamira-ai#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Fri, 08 May 2026 13:33:16 +0000</pubDate>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Novamira]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/?p=3323</guid>

					<description><![CDATA[Tutorial pratico su Novamira.ai per WordPress: requisiti, installazione, configurazione MCP, sicurezza e uso nel web design.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Novamira.ai porta un approccio diverso allo sviluppo e al web design su WordPress: invece di usare l'intelligenza artificiale solo per generare testi o suggerire layout, collega un AI agent direttamente a un'installazione WordPress tramite MCP, permettendogli di ispezionare file, database, plugin e codice in un ambiente controllato.</p>


<p class="wp-block-paragraph">Questo tutorial spiega come usare il plugin WP Novamira in modo pratico, partendo dalla documentazione ufficiale e mantenendo un principio fondamentale: Novamira è uno strumento potente, pensato per sviluppo e staging, non per fare esperimenti direttamente su un sito in produzione.</p>


<p class="wp-block-paragraph">Se lavori già con WordPress, AI e progettazione di temi, puoi collegare questo workflow anche ad altri approfondimenti pubblicati su MrTux, come la guida su <a href="https://www.mrtux.it/ai-per-migliorare-seo-ux-e-design-su-wordpress" data-wpel-link="internal" target="_self" rel="noopener">AI per migliorare SEO, UX e design su WordPress</a>, il metodo per creare <a href="https://www.mrtux.it/articoli-wordpress-ottimizzati-seo-con-ai-metodo-pratico-passo-passo" data-wpel-link="internal" target="_self" rel="noopener">articoli WordPress ottimizzati SEO con AI</a> e l'analisi sugli <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti per il web design di temi WordPress</a>.</p>


<h2 class="wp-block-heading">Cos'è Novamira.ai e perché interessa ai designer WordPress</h2>


<p class="wp-block-paragraph">Novamira è un plugin WordPress che consente a client AI compatibili con MCP, come Claude, Cursor, VS Code Copilot o altri strumenti che supportano il protocollo, di interagire con WordPress in modo programmatico. Secondo la <a href="https://novamira.ai/docs/getting-started/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">documentazione ufficiale Getting started</a>, il plugin permette all'AI assistant di eseguire codice PHP, leggere e scrivere file, gestire database, installare plugin e costruire funzionalità personalizzate.</p>


<p class="wp-block-paragraph">Per il web design WordPress, questo significa poter lavorare con un agente AI che non si limita a suggerire codice in astratto, ma può leggere la struttura reale del sito, controllare il tema, verificare plugin attivi, creare file nella sandbox e iterare sulle modifiche con maggiore contesto.</p>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Novamira non va interpretato come un page builder automatico, ma come un ponte operativo tra WordPress e un assistente AI tecnico.</p></blockquote>


<h2 class="wp-block-heading">Prima di iniziare: requisiti tecnici</h2>


<p class="wp-block-paragraph">Prima di installare Novamira, conviene verificare che l'ambiente sia adeguato. La pagina ufficiale sui <a href="https://novamira.ai/docs/getting-started/requirements/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">requisiti Novamira</a> indica alcune condizioni minime da rispettare.</p>


<figure class="wp-block-table"><table><thead><tr><th>Componente</th><th>Requisito</th><th>Perché è importante</th></tr></thead><tbody><tr><td>WordPress</td><td>6.9 o superiore</td><td>Serve per l'Abilities API usata da Novamira.</td></tr><tr><td>PHP</td><td>8.0 o superiore</td><td>Garantisce compatibilità con il plugin e ambiente moderno.</td></tr><tr><td>HTTPS</td><td>Richiesto per connessioni remote</td><td>Le Application Password di WordPress richiedono HTTPS.</td></tr><tr><td>Node.js</td><td>18.0 o superiore lato client</td><td>Serve per usare npx e il proxy MCP remoto.</td></tr><tr><td>Ambiente</td><td>Sviluppo o staging</td><td>Le abilità AI danno accesso operativo reale al sito.</td></tr></tbody></table></figure>


<p class="wp-block-paragraph">Per installazioni locali senza HTTPS, la documentazione spiega che è possibile impostare <code>WP_ENVIRONMENT_TYPE</code> su <code>local</code> nel file <code>wp-config.php</code>. Questa eccezione va usata solo in locale, non su server remoti.</p>


<h2 class="wp-block-heading">Installare Novamira su WordPress</h2>


<p class="wp-block-paragraph">La procedura di installazione è simile a quella di molti plugin premium o distribuiti via ZIP. La guida ufficiale <a href="https://novamira.ai/docs/getting-started/installation/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Installation</a> indica un flusso diretto: scaricare il file ZIP, caricarlo da WordPress e attivarlo.</p>


<ol class="wp-block-list"><li>Scarica l'ultima versione ZIP di Novamira dalla pagina di download ufficiale.</li><li>Entra nel pannello WordPress del sito di sviluppo o staging.</li><li>Vai in <strong>Plugin &gt; Aggiungi nuovo plugin &gt; Carica plugin</strong>.</li><li>Seleziona il file ZIP di Novamira e clicca su <strong>Installa ora</strong>.</li><li>Attiva il plugin.</li></ol>


<p class="wp-block-paragraph">All'attivazione, Novamira registra il MCP Adapter incluso, espone un menu dedicato nella sidebar admin e prepara le otto abilità principali. Le abilità AI, però, restano disattivate di default: nessun tool MCP viene esposto finché non viene abilitato esplicitamente.</p>


<h2 class="wp-block-heading">Configurare le AI Abilities</h2>


<p class="wp-block-paragraph">Dopo l'installazione, il passaggio più importante è la configurazione. La pagina ufficiale <a href="https://novamira.ai/docs/getting-started/configuration/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Configuration</a> spiega che bisogna abilitare manualmente le AI Abilities da <strong>Novamira &gt; Settings</strong>.</p>


<ol class="wp-block-list"><li>Apri il pannello WordPress.</li><li>Vai in <strong>Novamira &gt; Settings</strong>.</li><li>Attiva la checkbox <strong>Enable AI Abilities</strong>.</li><li>Leggi con attenzione il messaggio di conferma.</li><li>Conferma e salva le impostazioni.</li></ol>


<p class="wp-block-paragraph">Quando le abilità sono attive, compare un indicatore rosso Novamira ON nella barra di amministrazione. È un promemoria utile: in quel momento l'AI agent può accedere agli strumenti MCP collegati al sito.</p>


<h2 class="wp-block-heading">Le otto abilità disponibili</h2>


<p class="wp-block-paragraph">Novamira registra otto abilità principali. Per un web designer o sviluppatore WordPress, è importante capire cosa fanno prima di usarle in un flusso reale.</p>


<figure class="wp-block-table"><table><thead><tr><th>Abilità</th><th>Cosa permette di fare</th><th>Uso tipico nel web design WordPress</th></tr></thead><tbody><tr><td>Execute PHP</td><td>Esegue codice PHP nell'ambiente WordPress.</td><td>Verificare plugin, opzioni, query, dati e comportamento del tema.</td></tr><tr><td>Read File</td><td>Legge file dal filesystem.</td><td>Analizzare template, CSS, functions.php e file del tema.</td></tr><tr><td>Write File</td><td>Crea o sovrascrive file.</td><td>Generare file CSS, JS, JSON o PHP nella sandbox.</td></tr><tr><td>Edit File</td><td>Modifica mirata di file esistenti.</td><td>Correggere regole CSS, markup o funzioni senza riscrivere tutto.</td></tr><tr><td>Delete File</td><td>Elimina file o directory consentiti.</td><td>Rimuovere file generati in test, con attenzione.</td></tr><tr><td>Disable File</td><td>Disabilita un file sandbox senza cancellarlo.</td><td>Sospendere una funzionalità AI senza perdere il codice.</td></tr><tr><td>Enable File</td><td>Riattiva un file disabilitato.</td><td>Ripristinare una modifica precedentemente sospesa.</td></tr><tr><td>List Directory</td><td>Elenca file e cartelle.</td><td>Mappare struttura tema, plugin e sandbox.</td></tr></tbody></table></figure>


<h2 class="wp-block-heading">Collegare il client AI tramite MCP</h2>


<p class="wp-block-paragraph">Una volta abilitate le AI Abilities, bisogna collegare il client AI. La guida <a href="https://novamira.ai/docs/getting-started/connecting/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Connecting Your AI Client</a> descrive il processo basato su Application Password e configurazione MCP.</p>


<h3 class="wp-block-heading">1. Crea una Application Password</h3>


<p class="wp-block-paragraph">Da <strong>Novamira &gt; Connect</strong>, crea una nuova Application Password. WordPress mostrerà la password una sola volta: copiala subito e conservala in modo sicuro. È consigliabile usare un nome descrittivo, ad esempio il nome del client o della workstation.</p>


<h3 class="wp-block-heading">2. Configura il client MCP</h3>


<p class="wp-block-paragraph">Novamira fornisce snippet per client come Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Zed e OpenCode. Il modello generale usa <code>npx</code> per avviare il proxy remoto <code>@automattic/mcp-wordpress-remote</code>.</p>


<pre class="wp-block-code"><code>{
  "mcpServers": {
    "novamira": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "https://your-site.com/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "your-wordpress-username",
        "WP_API_PASSWORD": "your-application-password"
      }
    }
  }
}</code></pre>


<p class="wp-block-paragraph">Nel tuo caso reale dovrai sostituire URL, username e Application Password con quelli del sito di staging. Dopo aver salvato la configurazione, riavvia il client AI: molti strumenti caricano i server MCP solo all'avvio.</p>


<h3 class="wp-block-heading">3. Verifica la connessione</h3>


<p class="wp-block-paragraph">Per verificare che tutto funzioni, chiedi all'agente AI un'operazione semplice e non distruttiva, ad esempio elencare i plugin installati. Se la connessione è corretta, il client dovrebbe mostrare gli strumenti Novamira e usare Execute PHP o le altre abilità disponibili.</p>


<h2 class="wp-block-heading">Tutorial pratico: usare Novamira per migliorare un layout WordPress</h2>


<p class="wp-block-paragraph">Un caso d'uso realistico per il web design è l'ottimizzazione di una pagina WordPress esistente. L'obiettivo non è chiedere all'AI di "rifare tutto", ma guidarla con richieste progressive e verificabili.</p>


<ol class="wp-block-list"><li><strong>Mappa il sito:</strong> chiedi all'agente di identificare tema attivo, plugin principali e struttura dei template.</li><li><strong>Analizza la pagina:</strong> fai leggere template, CSS e blocchi coinvolti nella pagina da migliorare.</li><li><strong>Definisci il problema:</strong> per esempio hero troppo pesante, CTA poco visibile, spaziature incoerenti o layout mobile debole.</li><li><strong>Chiedi una proposta:</strong> prima solo piano di intervento, poi modifica mirata.</li><li><strong>Applica in staging:</strong> usa Edit File o file sandbox, mai direttamente su produzione.</li><li><strong>Verifica risultato:</strong> controlla frontend, editor WordPress, mobile e performance.</li><li><strong>Disabilita o raffina:</strong> se una modifica non convince, disabilita il file sandbox o chiedi una correzione puntuale.</li></ol>


<p class="wp-block-paragraph">Un prompt pratico potrebbe essere: "Analizza il tema attivo e proponi un miglioramento del layout della pagina servizi. Non modificare file finché non approvo il piano. Concentrati su leggibilità, CTA, mobile e compatibilità con Gutenberg".</p>


<h2 class="wp-block-heading">Sicurezza: cosa fare e cosa evitare</h2>


<p class="wp-block-paragraph">La parte più importante della documentazione Novamira è quella sulla sicurezza. La pagina <a href="https://novamira.ai/docs/security/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Security &amp; Best Practices</a> chiarisce che Novamira offre accesso programmatico reale al sito WordPress. Questo è il suo valore, ma anche il motivo per cui va usato con disciplina.</p>


<p class="wp-block-paragraph">La documentazione su <a href="https://novamira.ai/docs/security/live-site/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">uso live/production</a> è molto esplicita: le AI abilities dovrebbero essere attivate solo su ambienti di sviluppo e staging, mai direttamente in produzione. Il plugin può rimanere installato sul sito live, ma le abilità AI devono restare disattivate.</p>


<ul class="wp-block-list"><li>Usa sempre backup prima di lavorare con AI agents.</li><li>Configura Novamira su staging o sviluppo, non sul sito live.</li><li>Approva ogni tool call prima dell'esecuzione.</li><li>Crea Application Password separate per client o workstation.</li><li>Revoca le password non più usate.</li><li>Evita richieste vaghe come "sistema il sito".</li><li>Preferisci interventi piccoli, verificabili e reversibili.</li></ul>


<h2 class="wp-block-heading">Capire la sandbox</h2>


<p class="wp-block-paragraph">La sandbox Novamira si trova in <code>wp-content/novamira-sandbox/</code>. Secondo la pagina ufficiale <a href="https://novamira.ai/docs/security/sandbox/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">The Sandbox</a>, i file PHP scritti dagli AI agent vengono confinati in questa directory e caricati automaticamente a ogni richiesta WordPress tramite un loader must-use.</p>


<p class="wp-block-paragraph">Questo rende la sandbox utile per organizzare codice generato dall'AI: shortcode, endpoint REST, custom post type, funzioni di supporto o piccoli esperimenti. Ma la documentazione precisa anche un punto essenziale: la sandbox non è una vera barriera di sicurezza. Il codice che gira lì ha comunque privilegi simili a quelli di un plugin WordPress.</p>


<h2 class="wp-block-heading">Quando Novamira è utile nel web design WordPress</h2>


<p class="wp-block-paragraph">Novamira diventa interessante quando il progetto richiede lavoro tecnico su un sito reale: analisi del tema, creazione di funzionalità, debug, verifica plugin, generazione di CSS mirato, integrazioni PHP o miglioramenti di workflow. Non sostituisce Figma, Gutenberg o un buon processo di design; li affianca nella fase di implementazione e revisione tecnica.</p>


<ul class="wp-block-list"><li><strong>Utile:</strong> staging, prototipi, debug, sviluppo custom, analisi plugin, refactoring controllato.</li><li><strong>Da evitare:</strong> test diretti su produzione, modifiche non approvate, prompt troppo generici, assenza di backup.</li><li><strong>Da valutare:</strong> team con più sviluppatori, processi di deploy, policy interne e gestione credenziali.</li></ul>


<h2 class="wp-block-heading">FAQ su Novamira e WordPress</h2>


<h3 class="wp-block-heading">Novamira è un page builder AI?</h3>


<p class="wp-block-paragraph">No. Novamira non è un page builder visuale. È un plugin che collega AI agents a WordPress tramite MCP, dando accesso a strumenti tecnici per leggere, modificare e testare il sito.</p>


<h3 class="wp-block-heading">Posso usarlo su un sito in produzione?</h3>


<p class="wp-block-paragraph">La documentazione consiglia di usare le AI abilities solo su sviluppo o staging. Su produzione il plugin può restare installato, ma le abilità AI dovrebbero rimanere disattivate.</p>


<h3 class="wp-block-heading">Serve Node.js?</h3>


<p class="wp-block-paragraph">Per connessioni remote tramite MCP proxy serve Node.js 18 o superiore lato client. Per installazioni locali con WP-CLI è possibile usare il trasporto STDIO, che non richiede Node.js.</p>


<h3 class="wp-block-heading">La sandbox rende sicuro il codice generato dall'AI?</h3>


<p class="wp-block-paragraph">No. La sandbox aiuta a organizzare e gestire i file PHP generati, ma non va considerata una barriera di sicurezza. Il codice va sempre revisionato prima di portarlo in produzione.</p>


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


<p class="wp-block-paragraph">Novamira.ai è uno strumento potente per chi lavora con WordPress in modo tecnico. Permette a un AI agent di operare con molto più contesto rispetto al classico copia e incolla di codice, aprendo scenari interessanti per sviluppo, debug, prototipazione e miglioramento del web design.</p>


<p class="wp-block-paragraph">Il modo migliore per iniziare è prudente: installa Novamira su staging, abilita le AI Abilities solo quando servono, collega un client MCP, prova operazioni non distruttive e lavora sempre per passaggi piccoli. Se il risultato è valido, potrai poi portarlo nel normale flusso di deploy. L'AI diventa davvero utile quando accelera il lavoro senza togliere controllo al professionista.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/web-design-wordpress-tramite-il-plugin-novamira-ai/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
