{"id":83478,"date":"2026-03-09T10:51:25","date_gmt":"2026-03-09T09:51:25","guid":{"rendered":"https:\/\/kinqsta.com\/it\/?p=83478&#038;preview=true&#038;preview_id=83478"},"modified":"2026-03-10T12:34:15","modified_gmt":"2026-03-10T11:34:15","slug":"mcp-server-api-kinsta","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/","title":{"rendered":"Crea il tuo server MCP per controllare l&#8217;hosting WordPress con l&#8217;intelligenza artificiale"},"content":{"rendered":"<p>Se gestisci molti siti WordPress, sei sempre alla ricerca di un modo semplice per limitare la quantit\u00e0 di tempo che passi ad accedere alle dashboard e a cliccare su una serie di pulsanti.<\/p>\n<p>Gli MCP (<a href=\"https:\/\/modelcontextprotocol.io\/\">Model Context Protocols<\/a>) hanno fatto molto parlare di s\u00e9 negli ultimi tempi, e abbiamo deciso di esplorare come gli MCP, insieme alli<a href=\"https:\/\/kinqsta.com\/it\/docs\/kinsta-api\/\">API di Kinsta<\/a>, possano aiutare un&#8217;agenzia che gestisce molti siti web.<\/p>\n<p>In questo articolo, vediamo un esempio pratico di costruzione di un server MCP che collega gli assistenti AI come Claude all&#8217;API di Kinsta per gestire le operazioni dell&#8217;<a href=\"https:\/\/kinqsta.com\/it\/hosting-wordpress\/\">hosting per WordPress<\/a> che le agenzie svolgono gi\u00e0 ogni giorno.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Cosa stiamo costruendo<\/h2>\n<p>Stiamo costruendo un server MCP che espone una serie di strumenti, in modo che gli assistenti AI possano eseguire azioni come:<\/p>\n<ul>\n<li>Elencare tutti i siti WordPress in un account<\/li>\n<li>Mostrare gli ambienti per un sito specifico<\/li>\n<li>Svuotare la cache in un determinato ambiente<\/li>\n<li>Clonare un sito esistente per crearne uno nuovo<\/li>\n<li>Vedere quali plugin e temi sono obsoleti o vulnerabili<\/li>\n<li>Avviare gli aggiornamenti dei plugin su ambienti specifici<\/li>\n<\/ul>\n<p>Una volta configurato il server, questo viene collegato a un host\/client MCP (in questo caso, Claude for Desktop):<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2026\/01\/call-tools-mcp-claude.png\" alt=\"Claude chiama gli strumenti MCP per recuperare dati esterni durante un prompt.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Claude chiama gli strumenti MCP per recuperare dati esterni durante un prompt.<\/figcaption><\/figure>\n<p>Chiama vari strumenti e poi restituisce la seguente risposta:<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2026\/01\/claude-output.png\" alt=\"Claude che visualizza una risposta strutturata generata dai dati degli strumenti recuperati.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Claude che mostra una risposta strutturata generata dai dati degli strumenti recuperati.<\/figcaption><\/figure>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><\/p>\n<\/aside>\nI server MCP possono connettersi a qualsiasi client. Qui utilizziamo <a href=\"https:\/\/claude.com\/download\">Claude for Desktop<\/a> per semplicit\u00e0, ma lo stesso server pu\u00f2 essere utilizzato con altri strumenti come Cursor, ChatGPT, o anche un client MCP personalizzato costruito nel proprio flusso di lavoro.[\/nota]<\/p>\n<h2>Come iniziare<\/h2>\n<p>Prima di addentrarci nel codice, \u00e8 utile comprendere alcune nozioni di base su come un MCP si inserisce in questa configurazione.<\/p>\n<p>Un server MCP si colloca tra un assistente AI e un&#8217;API esistente. Non sostituisce l&#8217;API n\u00e9 cambia il suo funzionamento. Al contrario, espone una serie di strumenti che l&#8217;AI pu\u00f2 chiamare quando necessario. Ogni strumento corrisponde a un&#8217;azione specifica, come l&#8217;elenco dei siti o la cancellazione della cache del sito.<\/p>\n<p>Quando si pone una domanda all&#8217;assistente AI, questo decide se uno di questi strumenti \u00e8 pertinente. Se lo \u00e8, l&#8217;assistente chiama lo strumento attraverso il server MCP, il server parla con l&#8217;API e il risultato viene restituito come semplice risposta. Nulla viene eseguito automaticamente senza la sua approvazione, e sono disponibili solo gli strumenti che scegli di esporre.<\/p>\n<p>In questo esempio, il server MCP comunica con l&#8217;API Kinsta ed espone un insieme limitato di azioni di hosting WordPress. Non \u00e8 necessaria un&#8217;interfaccia utente personalizzata, un&#8217;automazione in background o un&#8217;impostazione speciale dell&#8217;intelligenza artificiale.<\/p>\n<h3>Prequisiti<\/h3>\n<p>Per seguire il tutorial serviranno:<\/p>\n<ul>\n<li>Una configurazione stabile di <a href=\"https:\/\/kinqsta.com\/it\/blog\/node-js\/\">Node.js<\/a><\/li>\n<li>Familiarit\u00e0 di base con <a href=\"https:\/\/kinqsta.com\/it\/blog\/typescript\/\">TypeScript<\/a><\/li>\n<li>Un account Kinsta con accesso API abilitato<\/li>\n<li>La tua chiave API Kinsta e il tuo ID azienda<\/li>\n<\/ul>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><\/p>\n<\/aside>\nHai bisogno di una chiave\/token API valida per utilizzare gli endpoint API di Kinsta. Puoi <a href=\"https:\/\/kinqsta.com\/it\/blog\/chiave-api-kinsta\/\">creare o gestire le tue chiavi API<\/a> in MyKinsta.[\/nota]<\/p>\n<p>Non \u00e8 necessaria alcuna esperienza precedente con MCP e non \u00e8 necessario costruire o addestrare un modello AI. Ci concentreremo solo sul collegamento di strumenti esistenti.<\/p>\n<h3>Impostazione del progetto<\/h3>\n<p>Iniziamo creando una nuova directory per il progetto e inizializzando un&#8217;applicazione Node.js:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir kinsta-mcp\ncd kinsta-mcp\nnpm init -y<\/code><\/pre>\n<p>Successivamente, installiamo <a href=\"https:\/\/www.npmjs.com\/package\/@modelcontextprotocol\/sdk\">MCP SDK<\/a> e la piccola serie di dipendenze che utilizzeremo:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">npm install @modelcontextprotocol\/sdk zod@3\nnpm install -D typescript @types\/node<\/code><\/pre>\n<p>Creiamo una struttura di progetto di base:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir src\ntoccare src\/index.ts<\/code><\/pre>\n<p>Quindi aggiorniamo il <code>package.json<\/code> in modo che Node possa eseguire il server costruito:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"name\": \"kinsta-mcp-server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"MCP server for managing WordPress sites via the Kinsta API\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsc\"\n  },\n  \"dependencies\": {\n    \"@modelcontextprotocol\/sdk\": \"^1.0.0\",\n    \"zod\": \"^3.24.0\"\n  },\n  \"devDependencies\": {\n    \"@types\/node\": \"^22.0.0\",\n    \"typescript\": \"^5.0.0\"\n  }\n}<\/code><\/pre>\n<p>Infine, aggiungiamo un <code>tsconfig.json<\/code> alla root del progetto:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"Node16\",\n    \"moduleResolution\": \"Node16\",\n    \"outDir\": \".\/build\",\n    \"rootDir\": \".\/src\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true\n  },\n  \"include\": [\"src\/**\/*\"],\n  \"exclude\": [\"node_modules\"]\n}<\/code><\/pre>\n<p>Con questo, siamo pronti per iniziare a costruire il server MCP.<\/p>\n<h2>Costruzione del server MCP<\/h2>\n<p>Ora che il progetto \u00e8 impostato, \u00e8 il momento di costruire il server MCP.<\/p>\n<p>Iniziamo importando i pacchetti necessari e creando l&#8217;istanza del server. Poi aggiungiamo un piccolo helper per parlare con l&#8217;API. Dopodich\u00e9, registriamo gli strumenti che corrispondono direttamente alle azioni di hosting di WordPress.<\/p>\n<h3>Importazione dei pacchetti e creazione del server<\/h3>\n<p>Apri <code>src\/index.ts<\/code> e aggiungi le seguenti importazioni nella parte superiore del file:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">import { McpServer } from \u201c@modelcontextprotocol\/sdk\/server\/mcp.js\u201d;\nimport { StdioServerTransport } da \u201c@modelcontextprotocol\/sdk\/server\/stdio.js\u201d;\nimportare { z } da \u201czod\u201d;<\/code><\/pre>\n<p>Queste fanno tre cose:<\/p>\n<ul>\n<li><code>McpServer<\/code> \u00e8 il server principale che registra gli strumenti e gestisce le richieste del client AI<\/li>\n<li><code>StdioServerTransport<\/code> consente al server di comunicare tramite input\/output standard, che \u00e8 il modo in cui la maggior parte dei client AI desktop si connette<\/li>\n<li><code>zod<\/code> \u00e8 utilizzato per definire e convalidare l&#8217;input che ogni strumento accetta<\/li>\n<\/ul>\n<p>Successivamente, definiamo alcune costanti per l&#8217;API e le credenziali:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">const KINSTA_API_BASE = \"https:\/\/api.kinqsta.com\/v2\";\nconst KINSTA_API_KEY = process.env.KINSTA_API_KEY;\nconst KINSTA_COMPANY_ID = process.env.KINSTA_COMPANY_ID;<\/code><\/pre>\n<p>Ora creiamo l&#8217;istanza del server MCP:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">const server = new McpServer({\n  name: \"kinsta\",\n  version: \"1.0.0\",\n});<\/code><\/pre>\n<p>Il nome \u00e8 il modo in cui il server appare all&#8217;interno di un client MCP. La versione \u00e8 opzionale, ma utile quando si inizia a iterare.<\/p>\n<h3>Aggiungere un helper per le richieste API<\/h3>\n<p>La maggior parte degli strumenti che costruiamo deve effettuare richieste HTTP all&#8217;API. Piuttosto che ripetere questa logica ovunque, creiamo una singola funzione helper. Aggiungiamola sotto la configurazione del server:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">async function kinstaRequest(\n  endpoint: string,\n  options: RequestInit = {}\n): Promise {\n  const url = `${KINSTA_API_BASE}${endpoint}`;\n  const headers = {\n    Authorization: `Bearer ${KINSTA_API_KEY}`,\n    \"Content-Type\": \"application\/json\",\n    ...options.headers,\n  };\n\n  const response = await fetch(url, { ...options, headers });\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    throw new Error(`Kinsta API error (${response.status}): ${errorText}`);\n  }\n\n  return response.json() as Promise;\n}<\/code><\/pre>\n<h2>Implementazione dell&#8217;esecuzione degli strumenti<\/h2>\n<p>Gli strumenti sono la cosa principale che un server MCP espone. Ogni strumento \u00e8 una funzione che un assistente AI pu\u00f2 chiamare, con la tua approvazione, per eseguire un compito specifico.<\/p>\n<p>In questo server, ogni strumento segue la stessa struttura:<\/p>\n<ul>\n<li>Un nome di strumento (come <code>list_sites<\/code>)<\/li>\n<li>Una breve descrizione (che aiuta l&#8217;assistente a sapere quando utilizzarlo)<\/li>\n<li>Uno schema di input (in modo che lo strumento venga eseguito solo con input validi)<\/li>\n<li>Una funzione di gestione (in cui chiamiamo l&#8217;API e formattiamo l&#8217;output)<\/li>\n<\/ul>\n<p>Formattiamo le risposte come testo semplice di proposito. Gli assistenti AI funzionano meglio quando gli strumenti restituiscono un output chiaro e leggibile, invece di scaricare JSON grezzi.<\/p>\n<h3>Strumento 1: elencare i siti<\/h3>\n<p>Questo strumento recupera tutti i siti WordPress sotto il tuo account aziendale. Di solito \u00e8 la prima cosa che si desidera quando si lavora con pi\u00f9 siti, dal momento che la maggior parte delle altre azioni inizia con l&#8217;ID del sito.<\/p>\n<p>La risposta dell&#8217;API include informazioni di base su ogni sito, quindi definiamo una forma semplice con cui lavorare:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">interface Site {\n  id: string;\n  name: string;\n  display_name: string;\n  status: string;\n  site_labels: Array;\n}\n\ninterface ListSitesResponse {\n  company: {\n    sites: Site[];\n  };\n}<\/code><\/pre>\n<p>Con questo, possiamo registrare lo strumento:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"list_sites\",\n  {\n    description:\n      \"Get all WordPress sites for your company. Returns site IDs, names, and status.\",\n    inputSchema: {},\n  },\n  async () =&gt; {\n    const data = await kinstaRequest(\n      `\/sites?company=${KINSTA_COMPANY_ID}`\n    );\n\n    const sites = data.company.sites;\n\n    if (!sites || sites.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"No sites found for this company.\" }\n        ],\n      };\n    }\n\n    const siteList = sites\n      .map((site) =&gt; {\n        const labels =\n          site.site_labels?.map((l) =&gt; l.name).join(\", \") || \"none\";\n\n        return `\u2022 ${site.display_name} (${site.name})\n  ID: ${site.id}\n  Status: ${site.status}\n  Labels: ${labels}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Found ${sites.length} site(s):\\n\\n${siteList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Questo strumento non richiede alcun input, quindi lo schema di input \u00e8 vuoto. All&#8217;interno del gestore, chiamiamo l&#8217;API, verifichiamo se il risultato \u00e8 vuoto e poi formattiamo la risposta come testo leggibile.<\/p>\n<p>Invece di restituire un JSON grezzo, restituiamo un breve riassunto che funziona bene in un&#8217;interfaccia di chat. In questo modo \u00e8 facile per un assistente AI rispondere a domande come \u201cQuali siti ho?\u201d o \u201cMostrami tutti i miei siti WordPress\u201d senza alcun parsing aggiuntivo.<\/p>\n<h3>Strumento 2: ottenere gli ambienti<\/h3>\n<p>Una volta ottenuto l&#8217;ID di un sito, il passo successivo pi\u00f9 comune \u00e8 la verifica dei tuoi ambienti. Questo strumento restituisce tutti gli ambienti per un determinato sito, compresi gli ambienti live, staging e premium staging.<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-typescript\">interface Environment {\n  id: string;\n  name: string;\n  display_name: string;\n  is_premium: boolean;\n  primaryDomain?: {\n    id: string;\n    name: string;\n  };\n  container_info?: {\n    php_engine_version: string;\n  };\n}\n\ninterface GetEnvironmentsResponse {\n  site: {\n    environments: Environment[];\n  };\n}<\/code><\/pre>\n<p>Alcuni campi sono opzionali, come il dominio primario o la versione PHP, quindi sono contrassegnati di conseguenza. Lo strumento stesso prende solo l&#8217;ID del sito:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_environments\",\n  {\n    description:\n      \"Get environments (live, staging) for a specific site. Requires the site ID.\",\n    inputSchema: {\n      site_id: z.string().describe(\"The site ID to get environments for\"),\n    },\n  },\n  async ({ site_id }) =&gt; {\n    const data = await kinstaRequest(\n      `\/sites\/${site_id}\/environments`\n    );\n\n    const envs = data.site.environments;\n\n    if (!envs || envs.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"No environments found for this site.\" }\n        ],\n      };\n    }\n\n    const envList = envs\n      .map((env) =&gt; {\n        const domain = env.primaryDomain?.name || \"No domain\";\n        const php = env.container_info?.php_engine_version || \"Unknown\";\n        const type = env.is_premium\n          ? \"Premium Staging\"\n          : env.name === \"live\"\n            ? \"Live\"\n            : \"Staging\";\n\n        return `\u2022 ${env.display_name} (${type})\n  ID: ${env.id}\n  Domain: ${domain}\n  PHP: ${php}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Found ${envs.length} environment(s):\\n\\n${envList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Questo \u00e8 solitamente il passo successivo prima di azioni come la cancellazione della cache, la clonazione di un sito o l&#8217;aggiornamento dei plugin.<\/p>\n<h3>Strumento 3: svuotare la cache del sito<\/h3>\n<p>La cancellazione della cache \u00e8 un&#8217;attivit\u00e0 di routine, ma \u00e8 anche un&#8217;operazione asincrona. Quando la avviamo, l&#8217;API risponde immediatamente con un ID di operazione, mentre la cancellazione della cache continua in background.<\/p>\n<p>Ecco la definizione del tipo e la funzione tool:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">interface OperationResponse {\n  operation_id: string;\n  message: string;\n  status: number;\n}\n\nserver.registerTool(\n  \"clear_site_cache\",\n  {\n    description:\n      \"Clear the cache for a site environment. Requires the environment ID.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"The environment ID to clear cache for\"),\n    },\n  },\n  async ({ environment_id }) =&gt; {\n    const data = await kinstaRequest(\n      \"\/sites\/tools\/clear-cache\",\n      {\n        method: \"POST\",\n        body: JSON.stringify({ environment_id }),\n      }\n    );\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Cache clear initiated!\n\nOperation ID: ${data.operation_id}\nMessage: ${data.message}\n\nUse get_operation_status to check progress.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Invece di attendere il termine dell&#8217;operazione, lo strumento restituisce immediatamente l&#8217;ID dell&#8217;operazione. In questo modo l&#8217;interazione \u00e8 veloce e l&#8217;assistente AI pu\u00f2 seguire l&#8217;operazione in un secondo momento, se necessario.<\/p>\n<h3>Strumento 4: clonare un sito<\/h3>\n<p>La clonazione di un sito \u00e8 una di quelle azioni che le agenzie utilizzano di continuo, soprattutto quando si lavora da template o si creano nuovi siti per i clienti. Invece di partire da zero, si prende un ambiente esistente e si crea un nuovo sito basato su di esso.<\/p>\n<p>La risposta utilizza la stessa forma di operazione che abbiamo visto in precedenza, quindi non \u00e8 necessario definirla di nuovo. Lo strumento richiede un nome di visualizzazione per il nuovo sito e l&#8217;ID dell&#8217;ambiente da cui clonare:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"clone_site\",\n  {\n    description:\n      \"Clone an existing site environment to create a new site. Great for spinning up new client sites from a template.\",\n    inputSchema: {\n      display_name: z\n        .string()\n        .describe(\"Name for the new cloned site\"),\n      source_env_id: z\n        .string()\n        .describe(\"The environment ID to clone from\"),\n    },\n  },\n  async ({ display_name, source_env_id }) =&gt; {\n    const data = await kinstaRequest(\n      \"\/sites\/clone\",\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          company: KINSTA_COMPANY_ID,\n          display_name,\n          source_env_id,\n        }),\n      }\n    );\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Site clone initiated!\n\nNew site: ${display_name}\nOperation ID: ${data.operation_id}\nMessage: ${data.message}\n\nUse get_operation_status to check progress.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Questo strumento \u00e8 particolarmente utile se abbinato ad altri strumenti. Ad esempio, un assistente AI pu\u00f2 clonare un sito e poi elencare immediatamente gli ambienti o controllare lo stato dei plugin una volta completata l&#8217;operazione.<\/p>\n<h3>Strumento 5: ottenere lo stato dell&#8217;operazione<\/h3>\n<p>Poich\u00e9 alcune azioni vengono eseguite in modo asincrono, abbiamo bisogno di un modo per verificarne l&#8217;avanzamento. Ecco a cosa serve questo strumento.<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">interface OperationStatusResponse {\n  status?: number;\n  message?: string;\n}\n\nserver.registerTool(\n  \"get_operation_status\",\n  {\n    description:\n      \"Check the status of an async operation (cache clear, site clone, etc.)\",\n    inputSchema: {\n      operation_id: z\n        .string()\n        .describe(\"The operation ID to check\"),\n    },\n  },\n  async ({ operation_id }) =&gt; {\n    const response = await fetch(\n      `${KINSTA_API_BASE}\/operations\/${encodeURIComponent(operation_id)}`,\n      {\n        headers: {\n          Authorization: `Bearer ${KINSTA_API_KEY}`,\n        },\n      }\n    );\n\n    const data: OperationStatusResponse = await response.json();\n\n    if (response.status === 200) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Operation completed successfully!\n\nMessage: ${data.message || \"Operation finished\"}`,\n          },\n        ],\n      };\n    }\n\n    if (response.status === 202) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Operation still in progress...\n\nMessage: ${data.message || \"Processing\"}`,\n          },\n        ],\n      };\n    }\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Operation status: ${response.status}\n\nMessage: ${data.message || \"Unknown status\"}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Strumento 6: ottenere i plugin in tutti i siti<\/h3>\n<p>Quando si gestiscono molti siti WordPress, i plugin sono di solito il motivo per cui le cose iniziano ad andare alla deriva. Questo strumento risolve il problema esaminando i plugin nell&#8217;intero account aziendale, non un sito alla volta.<\/p>\n<p>L&#8217;API restituisce molte informazioni, tra cui gli ambienti in cui \u00e8 installato ogni plugin, se sono disponibili aggiornamenti e se una versione \u00e8 contrassegnata come vulnerabile. Per lavorare con questi dati, definiamo le seguenti forme:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-typescript\">interface PluginEnvironment {\n  id: string;\n  site_display_name: string;\n  display_name: string;\n  plugin_status: string;\n  plugin_update: string | null;\n  plugin_version: string;\n  is_plugin_version_vulnerable: boolean;\n  plugin_update_version: string | null;\n}\n\ninterface Plugin {\n  name: string;\n  title: string;\n  latest_version: string | null;\n  is_latest_version_vulnerable: boolean;\n  environment_count: number;\n  update_count: number;\n  environments: PluginEnvironment[];\n}\n\ninterface GetPluginsResponse {\n  company: {\n    plugins: {\n      total: number;\n      items: Plugin[];\n    };\n  };\n}<\/code><\/pre>\n<p>Lo strumento stesso non richiede alcun input:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_plugins\",\n  {\n    description:\n      \"Get all WordPress plugins across all sites. Shows which plugins have updates available or security vulnerabilities.\",\n    inputSchema: {},\n  },\n  async () =&gt; {\n    const data = await kinstaRequest(\n      `\/company\/${KINSTA_COMPANY_ID}\/wp-plugins`\n    );\n\n    const plugins = data.company.plugins.items;\n\n    if (!plugins || plugins.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"No plugins found.\" }\n        ],\n      };\n    }\n\n    const sorted = [...plugins].sort(\n      (a, b) =&gt; b.update_count - a.update_count\n    );\n\n    const pluginList = sorted.slice(0, 20).map((plugin) =&gt; {\n      const status =\n        plugin.update_count &gt; 0\n          ? `\u26a0\ufe0f ${plugin.update_count} site(s) need update`\n          : \"\u2705 Up to date\";\n\n      const vulnerable =\n        plugin.is_latest_version_vulnerable ? \" \ud83d\udd34 VULNERABLE\" : \"\";\n\n      return `\u2022 ${plugin.title} (${plugin.name})${vulnerable}\n  Latest: ${plugin.latest_version || \"unknown\"}\n  Installed on: ${plugin.environment_count} environment(s)\n  ${status}`;\n    }).join(\"\\n\\n\");\n\n    const outdatedCount = plugins.filter(\n      (p) =&gt; p.update_count &gt; 0\n    ).length;\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Found ${data.company.plugins.total} plugins (${outdatedCount} have updates available):\\n\\n${pluginList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Strumento 7: ottenere temi in tutti i siti<\/h3>\n<p>I temi hanno problemi simili a quelli dei plugin, ma spesso vengono controllati ancora meno frequentemente. Questo strumento funziona come quello dei plugin, ma si concentra sui temi di WordPress.<\/p>\n<p>La struttura della risposta rispecchia l&#8217;endpoint del plugin, ma con campi specifici per il tema:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-typescript\">interface ThemeEnvironment {\n  id: string;\n  site_display_name: string;\n  display_name: string;\n  theme_status: string;\n  theme_update: string | null;\n  theme_version: string;\n  is_theme_version_vulnerable: boolean;\n  theme_update_version: string | null;\n}\n\ninterface Theme {\n  name: string;\n  title: string;\n  latest_version: string | null;\n  is_latest_version_vulnerable: boolean;\n  environment_count: number;\n  update_count: number;\n  environments: ThemeEnvironment[];\n}\n\ninterface GetThemesResponse {\n  company: {\n    themes: {\n      total: number;\n      items: Theme[];\n    };\n  };\n}<\/code><\/pre>\n<h3>Strumento 8: aggiornamento di un plugin<\/h3>\n<p>Elencare i problemi \u00e8 utile, ma alla fine \u00e8 necessario risolverli. Questo strumento consente di aggiornare un plugin specifico su un ambiente specifico.<\/p>\n<p>L&#8217;endpoint di aggiornamento restituisce la stessa forma di operazione asincrona utilizzata in precedenza, quindi possiamo saltarla. Ecco la definizione dello strumento:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"update_plugin\",\n  {\n    description:\n      \"Update a specific plugin to a new version on a site environment.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"The environment ID where the plugin is installed\"),\n      plugin_name: z\n        .string()\n        .describe(\"The plugin name\/slug (e.g., 'akismet', 'elementor')\"),\n      update_version: z\n        .string()\n        .describe(\"The version to update to (e.g., '5.3')\"),\n    },\n  },\n  async ({ environment_id, plugin_name, update_version }) =&gt; {\n    const data = await kinstaRequest(\n      `\/sites\/environments\/${environment_id}\/plugins`,\n      {\n        method: \"PUT\",\n        body: JSON.stringify({\n          name: plugin_name,\n          update_version,\n        }),\n      }\n    );\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Plugin update initiated!\n\nPlugin: ${plugin_name}\nTarget version: ${update_version}\nOperation ID: ${data.operation_id}\nMessage: ${data.message}\n\nUse get_operation_status to check progress.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Come la pulizia della cache e la clonazione del sito, gli aggiornamenti vengono eseguiti in modo asincrono. Restituendo l&#8217;ID dell&#8217;operazione, l&#8217;assistente AI pu\u00f2 seguire i progressi, invece di supporre che l&#8217;aggiornamento sia terminato all&#8217;istante.<\/p>\n<h2>Avviare il server<\/h2>\n<p>Con tutti gli strumenti registrati, l&#8217;ultimo passo \u00e8 avviare il server MCP e renderlo disponibile a un client AI.<\/p>\n<p>In fondo al file, aggiungiamo la funzione principale che collega il server utilizzando <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/basic\/transports\">STDIO transport<\/a>:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">async function main() {\n  const transport = new StdioServerTransport();\n  await server.connect(transport);\n  console.error(\"Kinsta MCP Server running on stdio\");\n}\n\nmain().catch((error) =&gt; {\n  console.error(\"Fatal error:\", error);\n  process.exit(1);\n});<\/code><\/pre>\n<p>Questo indica al server MCP di ascoltare le richieste tramite input e output standard. Rende il server individuabile dai client desktop compatibili con MCP.<\/p>\n<p>Un dettaglio importante sono i log. Poich\u00e9 questo server comunica su STDIO, tutti i log devono andare su stderr. La scrittura su stdout pu\u00f2 interferire con i messaggi MCP e interrompere la connessione.<\/p>\n<p>Successivamente, eseguiamo la build del progetto:<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Questo compila i file TypeScript nella directory di compilazione e rende eseguibile il punto di ingresso.<\/p>\n<p>Una volta terminata la compilazione, il server \u00e8 pronto per essere lanciato da un client MCP. Puoi accedere al <a href=\"https:\/\/github.com\/olawanlejoel\/mcp-server-demo-kinsta-api\">codice completo su GitHub<\/a>.<\/p>\n<h2>Testare il server con Claude for Desktop<\/h2>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><\/p>\n<\/aside>\nClaude for Desktop \u00e8 attualmente disponibile su macOS e Windows. Se utilizzi Linux, dovrai collegare il server ad un altro assistente AI o costruire un client MCP personalizzato.[\/nota]<\/p>\n<p>Per utilizzare il tuo server MCP, Claude for Desktop deve sapere come avviarlo. Apri il file di configurazione di Claude Desktop:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">~\/Library\/Application Support\/Claude\/claude_desktop_config.json<\/code><\/pre>\n<p>Crea il file se non esiste gi\u00e0. Se utilizzi VS Code, puoi aprirlo direttamente dal terminale:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">code ~\/Library\/Application\\ Support\/Claude\/claude_desktop_config.json<\/code><\/pre>\n<p>All&#8217;interno del file, aggiungi il tuo server MCP sotto la chiave mcpServers. Ad esempio:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"mcpServers\": {\n    \"kinsta\": {\n      \"command\": \"node\",\n      \"args\": [\"\/ABSOLUTE\/PATH\/TO\/mcp-server-demo-kinsta-api\/build\/index.js\"],\n      \"env\": {\n        \"KINSTA_API_KEY\": \"your-api-key-here\",\n        \"KINSTA_COMPANY_ID\": \"your-company-id-here\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Questa configurazione indica a Claude for Desktop che esiste un server MCP chiamato kinsta, che deve essere lanciato utilizzando Node.js e che il punto di ingresso \u00e8 il file index.js compilato.<\/p>\n<p>Assicurati che il percorso punti al file compilato nella directory di compilazione, non alla sorgente TypeScript. Salva il file e riavvia Claude for Desktop.<\/p>\n<h3>Verificare la connessione<\/h3>\n<p>Una volta riavviato Claude, apri una nuova chat. Clicca sull&#8217;icona <strong>+<\/strong> accanto al campo di immissione, quindi passa il mouse su <strong>Connectors<\/strong>. Dovresti vedere il tuo server MCP elencato.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2026\/01\/register-mcp-claude.png\" alt=\"Registrazione di un server MCP in Claude per abilitare l'accesso agli strumenti.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Registrazione di un server MCP in Claude.<\/figcaption><\/figure>\n<p>Una volta collegato il server, puoi iniziare subito ad utilizzarlo. Claude decide quale strumento utilizzare, passa l&#8217;input richiesto e restituisce il risultato come testo normale.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2026\/01\/update-plugin-mcp-claude.png\" alt=\"Aggiornamento di un plugin WordPress utilizzando un flusso di lavoro alimentato da MCP in Claude.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Aggiornamento di un plugin WordPress utilizzando un flusso di lavoro alimentato da MCP in Claude.<\/figcaption><\/figure>\n<h2>Un modo diverso di lavorare con gli strumenti che gi\u00e0 hai<\/h2>\n<p>Ci\u00f2 che sta cambiando in questo momento non sono gli strumenti. Le API sono sempre API. Le piattaforme di hosting funzionano ancora allo stesso modo. Ci\u00f2 che sta cambiando \u00e8 il modo in cui interagiamo con essi.<\/p>\n<p>Gli strumenti di intelligenza artificiale stanno iniziando a essere meno simili a caselle di chat e pi\u00f9 a interfacce. Questo server MCP \u00e8 un piccolo esempio di questo cambiamento. Non introduce nuove funzionalit\u00e0. Espone quelle esistenti e le adatta al modo in cui le persone lavorano.<\/p>\n<p>La direzione da seguire dipende da te. Puoi scegliere di mantenere le cose semplici e di sola lettura. Puoi aggiungere pi\u00f9 automazione con approvazioni e guardrail. Oppure collegare lo stesso server ad altri strumenti del tuo flusso di lavoro.<\/p>\n<p>Quando scopri nuovi strumenti e flussi di lavoro come questo, \u00e8 importante avere una solida base di hosting. L&#8217;ultima cosa che vuoi \u00e8 perdere tempo a gestire downtime o problemi di prestazioni, invece di costruire e migliorare i tuoi siti.<\/p>\n<p>Kinsta offre un hosting gestito per WordPress che consente ai tuoi siti di funzionare in modo affidabile, anche quando sei offline. Puoi dare un&#8217;occhiata ai nostri <a href=\"https:\/\/kinqsta.com\/it\/prezzi\/\">piani di hosting<\/a> o <a href=\"https:\/\/kinqsta.com\/it\/contatta-il-servizio-vendite\/\">parlare con il nostro team di vendita<\/a> per trovare il piano che fa per te.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se gestisci molti siti WordPress, sei sempre alla ricerca di un modo semplice per limitare la quantit\u00e0 di tempo che passi ad accedere alle dashboard e &#8230;<\/p>\n","protected":false},"author":287,"featured_media":83479,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26232],"class_list":["post-83478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crea un server MCP per controllare l&#039;hosting WordPress con l&#039;AI<\/title>\n<meta name=\"description\" content=\"Crea il tuo server MCP che collega gli strumenti di AI all&#039;API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crea il tuo server MCP per controllare l&#039;hosting WordPress con l&#039;intelligenza artificiale\" \/>\n<meta property=\"og:description\" content=\"Crea il tuo server MCP che collega gli strumenti di AI all&#039;API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-09T09:51:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-10T11:34:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Crea il tuo server MCP che collega gli strumenti di AI all&#039;API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Crea il tuo server MCP per controllare l&#8217;hosting WordPress con l&#8217;intelligenza artificiale\",\"datePublished\":\"2026-03-09T09:51:25+00:00\",\"dateModified\":\"2026-03-10T11:34:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\"},\"wordCount\":2239,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\",\"url\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\",\"name\":\"Crea un server MCP per controllare l'hosting WordPress con l'AI\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"datePublished\":\"2026-03-09T09:51:25+00:00\",\"dateModified\":\"2026-03-10T11:34:15+00:00\",\"description\":\"Crea il tuo server MCP che collega gli strumenti di AI all'API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinqsta.com\/it\/argomenti\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crea il tuo server MCP per controllare l&#8217;hosting WordPress con l&#8217;intelligenza artificiale\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/it\/#website\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crea un server MCP per controllare l'hosting WordPress con l'AI","description":"Crea il tuo server MCP che collega gli strumenti di AI all'API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/","og_locale":"it_IT","og_type":"article","og_title":"Crea il tuo server MCP per controllare l'hosting WordPress con l'intelligenza artificiale","og_description":"Crea il tuo server MCP che collega gli strumenti di AI all'API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.","og_url":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2026-03-09T09:51:25+00:00","article_modified_time":"2026-03-10T11:34:15+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Crea il tuo server MCP che collega gli strumenti di AI all'API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.","twitter_image":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"13 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Crea il tuo server MCP per controllare l&#8217;hosting WordPress con l&#8217;intelligenza artificiale","datePublished":"2026-03-09T09:51:25+00:00","dateModified":"2026-03-10T11:34:15+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/"},"wordCount":2239,"publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/","url":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/","name":"Crea un server MCP per controllare l'hosting WordPress con l'AI","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","datePublished":"2026-03-09T09:51:25+00:00","dateModified":"2026-03-10T11:34:15+00:00","description":"Crea il tuo server MCP che collega gli strumenti di AI all'API Kinsta per gestire le attivit\u00e0 di hosting WordPress su pi\u00f9 siti.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#primaryimage","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/it\/blog\/mcp-server-api-kinsta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinqsta.com\/it\/argomenti\/api\/"},{"@type":"ListItem","position":3,"name":"Crea il tuo server MCP per controllare l&#8217;hosting WordPress con l&#8217;intelligenza artificiale"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/it\/#website","url":"https:\/\/kinqsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinqsta.com\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/83478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/comments?post=83478"}],"version-history":[{"count":4,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/83478\/revisions"}],"predecessor-version":[{"id":83503,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/83478\/revisions\/83503"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/jp"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/translations\/es"},{"href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/83478\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media\/83479"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media?parent=83478"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/tags?post=83478"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/topic?post=83478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}