{"id":82773,"date":"2026-03-17T13:23:18","date_gmt":"2026-03-17T12:23:18","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=82773&#038;preview=true&#038;preview_id=82773"},"modified":"2026-03-23T15:23:26","modified_gmt":"2026-03-23T14:23:26","slug":"serveur-mcp-api-kinsta","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/","title":{"rendered":"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&rsquo;IA"},"content":{"rendered":"<p>Si vous g\u00e9rez de nombreux sites WordPress, vous \u00eates sans cesse \u00e0 la recherche d\u2019un moyen plus simple de r\u00e9duire le temps que vous passez \u00e0 acc\u00e9der aux tableaux de bord et \u00e0 cliquer sur une s\u00e9rie de boutons.<\/p>\n<p>Les MCP (<a href=\"https:\/\/modelcontextprotocol.io\/\">Model Context Protocols<\/a>) font beaucoup parler d\u2019eux ces derniers temps, et nous avons d\u00e9cid\u00e9 d\u2019explorer comment les MCP, associ\u00e9s \u00e0 <a href=\"https:\/\/kinsta.com\/fr\/docs\/api-kinsta\/\">l\u2019API Kinsta<\/a>, pourraient aider une agence \u00e0 g\u00e9rer un si grand nombre de sites web.<\/p>\n<p>Dans cet article, nous vous pr\u00e9sentons un exemple concret de cr\u00e9ation d\u2019un serveur MCP qui connecte des assistants IA comme Claude \u00e0 l\u2019API Kinsta pour g\u00e9rer les t\u00e2ches <a href=\"https:\/\/kinsta.com\/fr\/hebergement-wordpress\/\">d\u2019h\u00e9bergement WordPress<\/a> que les agences effectuent d\u00e9j\u00e0 au quotidien.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Ce que nous construisons<\/h2>\n<p>Nous construisons un serveur MCP qui met \u00e0 disposition un ensemble d&rsquo;outils, afin que les assistants IA puissent effectuer des actions telles que :<\/p>\n<ul>\n<li>R\u00e9pertorier tous les sites WordPress de votre compte<\/li>\n<li>Afficher les environnements d\u2019un site sp\u00e9cifique<\/li>\n<li>Vider le cache dans un environnement donn\u00e9<\/li>\n<li>Cloner un site existant pour en cr\u00e9er un nouveau<\/li>\n<li>Voir les extensions et les th\u00e8mes obsol\u00e8tes ou vuln\u00e9rables<\/li>\n<li>Lancer les mises \u00e0 jour des extensions sur des environnements sp\u00e9cifiques<\/li>\n<\/ul>\n<p>Une fois le serveur configur\u00e9, il est connect\u00e9 \u00e0 un h\u00f4te\/client MCP (dans ce cas, Claude for Desktop) :<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/01\/call-tools-mcp-claude.png\" alt=\"Claude appelant les outils MCP pour r\u00e9cup\u00e9rer des donn\u00e9es externes lors d'une invite.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude appelant les outils MCP pour r\u00e9cup\u00e9rer des donn\u00e9es externes lors d&rsquo;une invite.<\/figcaption><\/figure>\n<p>Remarquez comment il appelle divers outils puis renvoie la r\u00e9ponse suivante :<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/01\/claude-output.png\" alt=\"Claude affichant une r\u00e9ponse structur\u00e9e g\u00e9n\u00e9r\u00e9e \u00e0 partir des donn\u00e9es r\u00e9cup\u00e9r\u00e9es par les outils.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude affichant une r\u00e9ponse structur\u00e9e g\u00e9n\u00e9r\u00e9e \u00e0 partir des donn\u00e9es r\u00e9cup\u00e9r\u00e9es par les outils.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Les serveurs MCP peuvent se connecter \u00e0 n&rsquo;importe quel client. Nous utilisons ici <a href=\"https:\/\/claude.com\/download\">Claude for Desktop<\/a> pour plus de simplicit\u00e9, mais le m\u00eame serveur peut \u00eatre utilis\u00e9 avec d&rsquo;autres outils comme Cursor, ChatGPT, ou m\u00eame un client MCP personnalis\u00e9 int\u00e9gr\u00e9 \u00e0 votre propre flux de travail.<\/p>\n<\/aside>\n\n<h2>Pour commencer<\/h2>\n<p>Avant de vous plonger dans le code, il est utile de comprendre quelques notions de base sur la fa\u00e7on dont MCP s&rsquo;int\u00e8gre dans cette configuration.<\/p>\n<p>Un serveur MCP se situe entre un assistant IA et une API existante. Il ne remplace pas l&rsquo;API ni ne modifie son fonctionnement. Au lieu de cela, il expose un ensemble d&rsquo;outils que l&rsquo;IA peut appeler en cas de besoin. Chaque outil correspond \u00e0 une action sp\u00e9cifique, comme r\u00e9pertorier des sites ou vider le cache de votre site.<\/p>\n<p>Lorsque vous posez une question \u00e0 un assistant IA, celui-ci d\u00e9termine si l\u2019un de ces outils est pertinent. Si c\u2019est le cas, l\u2019assistant appelle l\u2019outil via le serveur MCP, le serveur communique avec l\u2019API, et le r\u00e9sultat est renvoy\u00e9 sous forme de simple r\u00e9ponse. Rien ne s\u2019ex\u00e9cute automatiquement sans votre accord, et seuls les outils que vous exposez sont disponibles.<\/p>\n<p>Dans cet exemple, le serveur MCP communique avec l\u2019API Kinsta et expose un ensemble limit\u00e9 d\u2019actions d\u2019h\u00e9bergement WordPress. Aucune interface utilisateur personnalis\u00e9e, aucune automatisation en arri\u00e8re-plan ni aucune configuration sp\u00e9ciale de l\u2019IA n\u2019est n\u00e9cessaire.<\/p>\n<h3>Pr\u00e9requis<\/h3>\n<p>Pour suivre, vous devez disposer de quelques \u00e9l\u00e9ments :<\/p>\n<ul>\n<li>Une installation stable de <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-node-js\/\">Node.js<\/a><\/li>\n<li>Une connaissance de base de <a href=\"https:\/\/kinsta.com\/fr\/blog\/guide-complet-typescript\/\">TypeScript<\/a><\/li>\n<li>Un compte Kinsta avec l&rsquo;acc\u00e8s \u00e0 l&rsquo;API activ\u00e9<\/li>\n<li>Votre cl\u00e9 API Kinsta et votre identifiant d&rsquo;entreprise<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Vous avez besoin d&rsquo;une cl\u00e9\/d&rsquo;un jeton API valide pour utiliser les points de terminaison de l&rsquo;API Kinsta. Vous pouvez <a href=\"https:\/\/kinsta.com\/fr\/blog\/cle-api-kinsta\/\">cr\u00e9er ou g\u00e9rer vos cl\u00e9s API<\/a> dans MyKinsta.<\/p>\n<\/aside>\n\n<p>Vous n&rsquo;zavez pas besoin d&rsquo;exp\u00e9rience pr\u00e9alable avec MCP, et vous n&rsquo;avez pas besoin de cr\u00e9er ou d&rsquo;entra\u00eener un mod\u00e8le d&rsquo;IA. On se concentre uniquement sur l&rsquo;interconnexion d&rsquo;outils existants.<\/p>\n<h3>Configuration du projet<\/h3>\n<p>Commencez par cr\u00e9er un nouveau r\u00e9pertoire pour le projet et initialiser une application 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>Ensuite, installez le <a href=\"https:\/\/www.npmjs.com\/package\/@modelcontextprotocol\/sdk\">SDK MCP<\/a> et le petit ensemble de d\u00e9pendances que nous utilisons :<\/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>Cr\u00e9ez une structure de projet de base :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir src\ntouch src\/index.ts<\/code><\/pre>\n<p>Mettez ensuite \u00e0 jour votre <code>fichier package.json<\/code> pour que Node puisse ex\u00e9cuter le serveur compil\u00e9 :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"name\": \"kinsta-mcp-server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Serveur MCP pour g\u00e9rer des sites WordPress via l'API Kinsta\",\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>Enfin, ajoutez un fichier <code>tsconfig.json<\/code> \u00e0 la racine du projet :<\/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>Une fois \u00e7a en place, vous \u00eates pr\u00eat \u00e0 commencer \u00e0 construire le serveur MCP lui-m\u00eame.<\/p>\n<h2>Construire le serveur MCP<\/h2>\n<p>Maintenant que le projet est configur\u00e9, il est temps de construire le serveur MCP lui-m\u00eame.<\/p>\n<p>On commence par importer les paquets n\u00e9cessaires et cr\u00e9er l&rsquo;instance du serveur. Ensuite, on ajoute un petit utilitaire pour communiquer avec l&rsquo;API. Apr\u00e8s \u00e7a, on enregistre les outils qui correspondent directement aux actions d&rsquo;h\u00e9bergement WordPress.<\/p>\n<h3>Importer les paquets et cr\u00e9er le serveur<\/h3>\n<p>Ouvrez <code>src\/index.ts<\/code> et ajoute les importations suivantes en haut du fichier :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">import { McpServer } from \"@modelcontextprotocol\/sdk\/server\/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol\/sdk\/server\/stdio.js\";\nimport { z } from \"zod\";<\/code><\/pre>\n<p>Cela fait trois choses :<\/p>\n<ul>\n<li><code>McpServer<\/code> est le serveur principal qui enregistre les outils et g\u00e8re les requ\u00eates provenant du client IA<\/li>\n<li><code>StdioServerTransport<\/code> permet au serveur de communiquer via des entr\u00e9es\/sorties standard, ce qui correspond au mode de connexion de la plupart des clients IA de bureau<\/li>\n<li><code>zod<\/code> sert \u00e0 d\u00e9finir et \u00e0 valider les donn\u00e9es d&rsquo;entr\u00e9e accept\u00e9es par chaque outil<\/li>\n<\/ul>\n<p>Ensuite, d\u00e9finissez quelques constantes pour l&rsquo;API et les identifiants :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">const KINSTA_API_BASE = \"https:\/\/api.kinsta.com\/v2\";\nconst KINSTA_API_KEY = process.env.KINSTA_API_KEY;\nconst KINSTA_COMPANY_ID = process.env.KINSTA_COMPANY_ID;<\/code><\/pre>\n<p>Cr\u00e9ez maintenant l&rsquo;instance du serveur 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>Le nom correspond \u00e0 la fa\u00e7on dont le serveur appara\u00eet dans un client MCP. La version est facultative, mais utile une fois que vous commencez \u00e0 it\u00e9rer.<\/p>\n<h3>Ajouter une fonction d&rsquo;aide pour les requ\u00eates API<\/h3>\n<p>La plupart des outils que nous d\u00e9veloppons doivent effectuer des requ\u00eates HTTP vers l&rsquo;API. Plut\u00f4t que de r\u00e9p\u00e9ter cette logique partout, cr\u00e9e une seule fonction d&rsquo;aide. Ajoutez ceci sous la configuration du serveur :<\/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(`Erreur API Kinsta (${response.status}): ${errorText}`);\n  }\n\n  return response.json() as Promise;\n}<\/code><\/pre>\n<h2>Mise en \u0153uvre de l&rsquo;ex\u00e9cution des outils<\/h2>\n<p>Les outils sont la principale fonctionnalit\u00e9 expos\u00e9e par un serveur MCP. Chaque outil est une fonction qu\u2019un assistant IA peut appeler, avec votre accord, pour effectuer une t\u00e2che sp\u00e9cifique.<\/p>\n<p>Sur ce serveur, chaque outil suit la m\u00eame structure :<\/p>\n<ul>\n<li>Un nom d&rsquo;outil (comme <code>list_sites<\/code>)<\/li>\n<li>Une br\u00e8ve description (cela aide l&rsquo;assistant \u00e0 savoir quand l&rsquo;utiliser)<\/li>\n<li>Un sch\u00e9ma d&rsquo;entr\u00e9e (pour que l&rsquo;outil ne s&rsquo;ex\u00e9cute qu&rsquo;avec des entr\u00e9es valides)<\/li>\n<li>Une fonction de gestion (o\u00f9 on appelle l&rsquo;API et on formate la sortie)<\/li>\n<\/ul>\n<p>On formate les r\u00e9ponses en texte brut expr\u00e8s. Les assistants IA fonctionnent mieux quand les outils renvoient une sortie claire et lisible plut\u00f4t que de balancer du JSON brut.<\/p>\n<h3>Outil 1 : Lister les sites<\/h3>\n<p>Cet outil r\u00e9cup\u00e8re tous les sites WordPress associ\u00e9s \u00e0 votre compte d&rsquo;entreprise. C&rsquo;est g\u00e9n\u00e9ralement la premi\u00e8re chose dont vous avez besoin lorsque vous travaillez avec plusieurs sites, car la plupart des autres actions commencent par un identifiant de site.<\/p>\n<p>La r\u00e9ponse de l&rsquo;API comprend des informations de base sur chaque site, nous d\u00e9finissons donc une structure simple pour travailler avec :<\/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>Une fois cela en place, on peut enregistrer l&rsquo;outil :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"list_sites\",\n  {\n    description:\n      \"R\u00e9cup\u00e8re tous les sites WordPress de ton entreprise. Renvoie les identifiants, les noms et le statut des sites.\",\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: \"Aucun site trouv\u00e9 pour cette entreprise.\" }\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  Statut : ${site.status}\n  \u00c9tiquettes : ${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>Cet outil ne n\u00e9cessite aucune entr\u00e9e, donc le sch\u00e9ma d&rsquo;entr\u00e9e est vide. Dans le gestionnaire, on appelle l\u2019API, on v\u00e9rifie si le r\u00e9sultat est vide, puis on formate la r\u00e9ponse sous forme de texte lisible.<\/p>\n<p>Au lieu de renvoyer du JSON brut, on renvoie un bref r\u00e9sum\u00e9 qui fonctionne bien dans une interface de chat. \u00c7a permet \u00e0 un assistant IA de r\u00e9pondre facilement \u00e0 des questions comme \u00ab Quels sites ais-je ? \u00bb ou \u00ab Montrez-moi tous mes sites WordPress \u00bb sans analyse suppl\u00e9mentaire.<\/p>\n<h3>Outil 2 : Obtenir les environnements<\/h3>\n<p>Une fois que vous avez un ID de site, l&rsquo;\u00e9tape suivante consiste g\u00e9n\u00e9ralement \u00e0 v\u00e9rifier ses environnements. Cet outil renvoie tous les environnements d&rsquo;un site donn\u00e9, y compris les environnements de production, de staging et de staging premium.<\/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>Certains champs sont facultatifs, comme le domaine principal ou la version PHP, ils sont donc indiqu\u00e9s comme tels. L&rsquo;outil lui-m\u00eame ne prend que l&rsquo;ID du site :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_environments\",\n  {\n    description:\n      \"R\u00e9cup\u00e8re les environnements (production, staging) pour un site sp\u00e9cifique. N\u00e9cessite l'ID du site.\",\n    inputSchema: {\n      site_id: z.string().describe(\"L'ID du site pour lequel r\u00e9cup\u00e9rer les environnements\"),\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: \"Aucun environnement trouv\u00e9 pour ce site.\" }\n        ],\n      };\n    }\n\n    const envList = envs\n      .map((env) =&gt; {\n        const domain = env.primaryDomain?.name || \"Pas de domaine\";\n        const php = env.container_info?.php_engine_version || \"Inconnu\";\n        const type = env.is_premium\n          ? \"Staging Premium\"\n          : env.name === \"live\"\n            ? \"Live\"\n            : \"Staging\";\n\n        return `\u2022 ${env.display_name} (${type})\n  ID: ${env.id}\n  Domaine: ${domain}\n  PHP: ${php}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Environnements trouv\u00e9s : ${envs.length}\\n\\n${envList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>C&rsquo;est g\u00e9n\u00e9ralement l&rsquo;\u00e9tape suivante avant des actions telles que vider le cache, cloner un site ou mettre \u00e0 jour des extensions.<\/p>\n<h3>Outil 3 : Vider le cache du site<\/h3>\n<p>Vider le cache est une t\u00e2che de routine, mais c&rsquo;est aussi une op\u00e9ration asynchrone. Quand vous la lancez, l&rsquo;API r\u00e9pond imm\u00e9diatement avec un ID d&rsquo;op\u00e9ration, tandis que le vidage du cache se poursuit en arri\u00e8re-plan.<\/p>\n<p>Voici la d\u00e9finition du type et la fonction de l&rsquo;outil :<\/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      \"Vider le cache d'un environnement de site. N\u00e9cessite l'ID de l'environnement.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"L'ID de l'environnement pour lequel vider le cache\"),\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: `Vid\u00e9age du cache lanc\u00e9 !\n\nID de l'op\u00e9ration : ${data.operation_id}\nMessage : ${data.message}\n\nUtilise get_operation_status pour v\u00e9rifier la progression.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Au lieu d&rsquo;attendre que l&rsquo;op\u00e9ration se termine, l&rsquo;outil renvoie imm\u00e9diatement l&rsquo;ID de l&rsquo;op\u00e9ration. \u00c7a permet de garder l&rsquo;interaction rapide et permet \u00e0 l&rsquo;assistant IA de faire un suivi plus tard si besoin.<\/p>\n<h3>Outil 4 : Cloner un site<\/h3>\n<p>Le clonage d\u2019un site est l\u2019une de ces actions que les agences utilisent tout le temps, surtout lorsqu\u2019elles travaillent \u00e0 partir de mod\u00e8les ou qu\u2019elles cr\u00e9ent de nouveaux sites pour des clients. Au lieu de partir de z\u00e9ro, vous prenez un environnement existant et vous cr\u00e9ez un nouveau site \u00e0 partir de celui-ci.<\/p>\n<p>La r\u00e9ponse utilise la m\u00eame structure d&rsquo;op\u00e9ration que celle vue pr\u00e9c\u00e9demment, il n&rsquo;est donc pas n\u00e9cessaire de la red\u00e9finir. L&rsquo;outil n\u00e9cessite un nom d&rsquo;affichage pour le nouveau site et l&rsquo;ID de l&rsquo;environnement \u00e0 partir duquel effectuer le clonage :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"clone_site\",\n  {\n    description:\n      \"Clone un environnement de site existant pour cr\u00e9er un nouveau site. Id\u00e9al pour cr\u00e9er rapidement de nouveaux sites clients \u00e0 partir d\u2019un mod\u00e8le.\",\n    inputSchema: {\n      display_name: z\n        .string()\n        .describe(\"Nom du nouveau site clon\u00e9\"),\n      source_env_id: z\n        .string()\n        .describe(\"L\u2019ID de l\u2019environnement \u00e0 partir duquel cloner\"),\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: `Clonage du site lanc\u00e9 !\n\nNouveau site : ${display_name}\nID de l'op\u00e9ration : ${data.operation_id}\nMessage : ${data.message}\n\nUtilise get_operation_status pour v\u00e9rifier la progression.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Cet outil est particuli\u00e8rement utile lorsqu&rsquo;il est associ\u00e9 \u00e0 d&rsquo;autres outils. Par exemple, un assistant IA peut cloner un site, puis imm\u00e9diatement lister les environnements ou v\u00e9rifier l&rsquo;\u00e9tat des extensions une fois l&rsquo;op\u00e9ration termin\u00e9e.<\/p>\n<h3>Outil 5 : Obtenir l&rsquo;\u00e9tat de l&rsquo;op\u00e9ration<\/h3>\n<p>Comme certaines actions s&rsquo;ex\u00e9cutent de mani\u00e8re asynchrone, nous avons besoin d&rsquo;un moyen de v\u00e9rifier leur progression. C&rsquo;est \u00e0 \u00e7a que sert cet outil.<\/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      \"V\u00e9rifier l'\u00e9tat d'une op\u00e9ration asynchrone (vidage du cache, clonage du site, etc.)\",\n    inputSchema: {\n      operation_id: z\n        .string()\n        .describe(\"L'ID de l'op\u00e9ration \u00e0 v\u00e9rifier\"),\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: `Op\u00e9ration termin\u00e9e avec succ\u00e8s !\n\nMessage: ${data.message || \"Op\u00e9ration termin\u00e9e\"}`,\n          },\n        ],\n      };\n    }\n\n    if (response.status === 202) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Op\u00e9ration toujours en cours...\n\nMessage : ${data.message || \"Traitement en cours\"}`,\n          },\n        ],\n      };\n    }\n  \n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `\u00c9tat de l'op\u00e9ration : ${response.status}\n\nMessage : ${data.message || \"Statut inconnu\"}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Outil n\u00b0 6 : R\u00e9cup\u00e9rer les plugins sur tous les sites<\/h3>\n<p>Quand vous g\u00e9rez plusieurs sites WordPress, c&rsquo;est souvent au niveau des extensions que les choses commencent \u00e0 d\u00e9raper. Cet outil r\u00e9sout ce probl\u00e8me en examinant les extensions \u00e0 l&rsquo;\u00e9chelle de tout le compte d&rsquo;entreprise, et non site par site.<\/p>\n<p>L&rsquo;API renvoie de nombreuses informations, notamment les environnements dans lesquels chaque extension est install\u00e9e, si des mises \u00e0 jour sont disponibles et si une version est signal\u00e9e comme vuln\u00e9rable. Pour exploiter ces donn\u00e9es, on d\u00e9finit les formes suivantes :<\/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>L&rsquo;outil lui-m\u00eame ne prend aucune entr\u00e9e :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_plugins\",\n  {\n    description:\n      \"R\u00e9cup\u00e8re tous les plugins WordPress sur tous les sites. Indique quels plugins ont des mises \u00e0 jour disponibles ou des failles de s\u00e9curit\u00e9.\",\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: \"Aucun plugin trouv\u00e9.\" }\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) \u00e0 mettre \u00e0 jour`\n          : \"\u2705 \u00c0 jour\";\n\n      const vulnerable =\n        plugin.is_latest_version_vulnerable ? \" \ud83d\udd34 VULN\u00c9RABLE\" : \"\";\n\n      return `\u2022 ${plugin.title} (${plugin.name})${vulnerable}\n  Derni\u00e8re version : ${plugin.latest_version || \"inconnue\"}\n  Install\u00e9 sur : ${plugin.environment_count} environnement(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: `${data.company.plugins.total} plugins trouv\u00e9s (${outdatedCount} ont des mises \u00e0 jour disponibles):\\n\\n${pluginList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Outil 7 : R\u00e9cup\u00e9rer les th\u00e8mes sur tous les sites<\/h3>\n<p>Les th\u00e8mes ont des probl\u00e8mes similaires \u00e0 ceux des extensions, mais ils sont souvent v\u00e9rifi\u00e9s encore moins fr\u00e9quemment. Cet outil fonctionne de la m\u00eame mani\u00e8re que l&rsquo;outil pour les extensions, mais se concentre plut\u00f4t sur les th\u00e8mes WordPress.<\/p>\n<p>La structure de la r\u00e9ponse est identique \u00e0 celle du point de terminaison des extensions, mais avec des champs sp\u00e9cifiques aux th\u00e8mes :<\/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  nombre_d'environnements : nombre ;\n  nombre_de_mises_\u00e0_jour : nombre ;\n  environnements : ThemeEnvironment[];\n}\n\ninterface GetThemesResponse {\n  entreprise : {\n    th\u00e8mes : {\n      total : nombre ;\n      \u00e9l\u00e9ments : Theme[];\n    };\n  };\n}<\/code><\/pre>\n<h3>Outil 8 : Mettre \u00e0 jour un plugin<\/h3>\n<p>R\u00e9pertorier les probl\u00e8mes est utile, mais il faut bien finir par les r\u00e9soudre. Cet outil vous permet de mettre \u00e0 jour une extension sp\u00e9cifique dans un environnement sp\u00e9cifique.<\/p>\n<p>Le point de terminaison de mise \u00e0 jour renvoie la m\u00eame structure d&rsquo;op\u00e9ration asynchrone que celle utilis\u00e9e pr\u00e9c\u00e9demment, on peut donc la passer. Voici la d\u00e9finition de l&rsquo;outil :<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"update_plugin\",\n  {\n    description:\n      \"Mettre \u00e0 jour un plugin sp\u00e9cifique vers une nouvelle version sur un environnement de site.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"L'ID de l'environnement o\u00f9 le plugin est install\u00e9\"),\n      plugin_name: z\n        .string()\n        .describe(\"Le nom\/slug du plugin (par ex., 'akismet', 'elementor')\"),\n      update_version: z\n        .string()\n        .describe(\"La version vers laquelle mettre \u00e0 jour (par ex., '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: `Mise \u00e0 jour du plugin lanc\u00e9e !\n\nPlugin : ${plugin_name}\nVersion cible : ${update_version}\nID de l'op\u00e9ration : ${data.operation_id}\nMessage : ${data.message}\n\nUtilise get_operation_status pour v\u00e9rifier la progression.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Tout comme l&rsquo;effacement du cache et les clones de site, les mises \u00e0 jour s&rsquo;ex\u00e9cutent de mani\u00e8re asynchrone. Le fait de renvoyer l&rsquo;ID de l&rsquo;op\u00e9ration permet \u00e0 l&rsquo;assistant IA de suivre la progression au lieu de supposer que la mise \u00e0 jour s&rsquo;est termin\u00e9e instantan\u00e9ment.<\/p>\n<h2>Lancer le serveur<\/h2>\n<p>Une fois tous les outils enregistr\u00e9s, la derni\u00e8re \u00e9tape consiste \u00e0 d\u00e9marrer le serveur MCP et \u00e0 le rendre accessible \u00e0 un client IA.<\/p>\n<p>Au bas de ton fichier, ajoutez la fonction main qui connecte le serveur \u00e0 l&rsquo;aide du <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/basic\/transports\">transport STDIO<\/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(\"Serveur Kinsta MCP fonctionnant sur stdio\");\n}\n\nmain().catch((error) =&gt; {\n  console.error(\"Erreur fatale :\", error);\n  process.exit(1);\n});<\/code><\/pre>\n<p>Cela indique au serveur MCP d&rsquo;\u00e9couter les requ\u00eates via l&rsquo;entr\u00e9e et la sortie standard. \u00c7a rend le serveur d\u00e9tectable par les clients de bureau compatibles MCP.<\/p>\n<p>Un d\u00e9tail important ici, c&rsquo;est la journalisation. Comme ce serveur communique via STDIO, tous les journaux doivent aller vers stderr. \u00c9crire dans stdout peut interf\u00e9rer avec les messages MCP et rompre la connexion.<\/p>\n<p>Ensuite, compilez le projet :<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Cela compile les fichiers TypeScript dans le r\u00e9pertoire build et rend le point d&rsquo;entr\u00e9e ex\u00e9cutable.<\/p>\n<p>Une fois la compilation termin\u00e9e, le serveur est pr\u00eat \u00e0 \u00eatre lanc\u00e9 par un client MCP. Vous pouvez acc\u00e9der au <a href=\"https:\/\/github.com\/olawanlejoel\/mcp-server-demo-kinsta-api\">code complet sur GitHub<\/a>.<\/p>\n<h2>Tester votre serveur avec Claude for Desktop<\/h2>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Claude for Desktop est actuellement disponible sur macOS et Windows. Si vous utilisez Linux, vous devez connecter le serveur \u00e0 un autre assistant IA ou cr\u00e9er un client MCP personnalis\u00e9 \u00e0 la place.<\/p>\n<\/aside>\n\n<p>Pour utiliser votre serveur MCP, Claude for Desktop doit savoir comment le lancer. Ouvrez le fichier de configuration de 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>Cr\u00e9ez le fichier s&rsquo;il n&rsquo;existe pas encore. Si vous utilisez VS Code, vous pouvez l&rsquo;ouvrir directement depuis le terminal :<\/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>Dans le fichier, ajoutez votre serveur MCP sous la cl\u00e9 mcpServers. Par exemple :<\/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\": \"ta-cl\u00e9-api-ici\",\n        \"KINSTA_COMPANY_ID\": \"ton-id-entreprise-ici\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Cette configuration indique \u00e0 Claude for Desktop qu\u2019il existe un serveur MCP nomm\u00e9 kinsta, qu\u2019il doit \u00eatre lanc\u00e9 \u00e0 l\u2019aide de Node.js et que le point d\u2019entr\u00e9e est le fichier index.js compil\u00e9.<\/p>\n<p>Assurez-vous que le chemin pointe vers le fichier compil\u00e9 dans le r\u00e9pertoire build, et non vers la source TypeScript. Enregistrez le fichier et red\u00e9marrez Claude for Desktop.<\/p>\n<h3>V\u00e9rification de la connexion<\/h3>\n<p>Une fois Claude red\u00e9marr\u00e9, ouvrez une nouvelle conversation. Cliquez sur l&rsquo;ic\u00f4ne \u00e0 c\u00f4t\u00e9 du champ de saisie, puis passez la souris sur \u00ab <strong>Connectors<\/strong> \u00bb. Votre serveur MCP devrait appara\u00eetre dans la liste.<\/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:\/\/kinsta.com\/wp-content\/uploads\/2026\/01\/register-mcp-claude.png\" alt=\"Registering an MCP server in Claude to enable tool access.\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Enregistrement d&rsquo;un serveur MCP dans Claude.<\/figcaption><\/figure>\n<p>Une fois le serveur connect\u00e9, vous pouvez commencer \u00e0 l&rsquo;utiliser imm\u00e9diatement. Claude choisit l&rsquo;outil \u00e0 utiliser, transmet les donn\u00e9es n\u00e9cessaires et renvoie le r\u00e9sultat sous forme de texte brut.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/01\/update-plugin-mcp-claude.png\" alt=\"Mise \u00e0 jour d'une extension WordPress \u00e0 l'aide d'un workflow aliment\u00e9 par MCP dans Claude.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Mise \u00e0 jour d&rsquo;une extension WordPress \u00e0 l&rsquo;aide d&rsquo;un workflow aliment\u00e9 par MCP dans Claude.<\/figcaption><\/figure>\n<h2>Une autre fa\u00e7on d&rsquo;utiliser les outils dont vous disposez d\u00e9j\u00e0<\/h2>\n<p>Ce qui change actuellement, ce ne sont pas les outils sous-jacents. Les API restent des API. Les plateformes d\u2019h\u00e9bergement fonctionnent toujours de la m\u00eame mani\u00e8re. Ce qui change, c\u2019est la fa\u00e7on dont on interagit avec elles.<\/p>\n<p>Les outils d\u2019IA commencent \u00e0 ressembler moins \u00e0 des bo\u00eetes de dialogue et davantage \u00e0 des interfaces. Ce serveur MCP est un petit exemple de cette \u00e9volution. Il n\u2019introduit pas de nouvelles fonctionnalit\u00e9s. Il expose celles qui existent d\u00e9j\u00e0 d\u2019une mani\u00e8re qui correspond \u00e0 la fa\u00e7on dont les gens travaillent r\u00e9ellement.<\/p>\n<p>La suite d\u00e9pend de vous. Vous pouvez choisir de rester simple et en lecture seule. Vous pouvez ajouter davantage d\u2019automatisation avec des validations et des garde-fous. Ou vous pouvez connecter ce m\u00eame serveur \u00e0 d\u2019autres outils de votre flux de travail.<\/p>\n<p>Lorsque vous explorez de nouveaux outils et flux de travail comme celui-ci, il est essentiel de disposer d\u2019une base d\u2019h\u00e9bergement solide. La derni\u00e8re chose que vous souhaitez, c\u2019est de perdre du temps \u00e0 g\u00e9rer des temps d\u2019arr\u00eat ou des probl\u00e8mes de performances au lieu de cr\u00e9er et d\u2019am\u00e9liorer vos sites.<\/p>\n<p>Kinsta propose un h\u00e9bergement infog\u00e9r\u00e9 pour WordPress qui garantit le fonctionnement fiable de vos sites, m\u00eame lorsque vous n&rsquo;\u00eates pas en ligne. Vous pouvez d\u00e9couvrir nos <a href=\"https:\/\/kinsta.com\/fr\/tarifs\/\">formules d\u2019h\u00e9bergement<\/a> ou <a href=\"https:\/\/kinsta.com\/fr\/contacter-le-service-commercial\/\">contacter notre \u00e9quipe commerciale<\/a> pour trouver celle qui vous convient le mieux.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous g\u00e9rez de nombreux sites WordPress, vous \u00eates sans cesse \u00e0 la recherche d\u2019un moyen plus simple de r\u00e9duire le temps que vous passez \u00e0 &#8230;<\/p>\n","protected":false},"author":287,"featured_media":82774,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[953],"class_list":["post-82773","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>Cr\u00e9ez un serveur MCP pour contr\u00f4ler l&#039;h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&#039;IA.<\/title>\n<meta name=\"description\" content=\"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d&#039;IA \u00e0 l&#039;API Kinsta pour g\u00e9rer les t\u00e2ches d&#039;h\u00e9bergement WordPress sur plusieurs sites.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&#039;IA\" \/>\n<meta property=\"og:description\" content=\"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d&#039;IA \u00e0 l&#039;API Kinsta pour g\u00e9rer les t\u00e2ches d&#039;h\u00e9bergement WordPress sur plusieurs sites.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-17T12:23:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T14:23:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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=\"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d&#039;IA \u00e0 l&#039;API Kinsta pour g\u00e9rer les t\u00e2ches d&#039;h\u00e9bergement WordPress sur plusieurs sites.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI-1024x512.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&rsquo;IA\",\"datePublished\":\"2026-03-17T12:23:18+00:00\",\"dateModified\":\"2026-03-23T14:23:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\"},\"wordCount\":2729,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\",\"name\":\"Cr\u00e9ez un serveur MCP pour contr\u00f4ler l'h\u00e9bergement WordPress gr\u00e2ce \u00e0 l'IA.\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"datePublished\":\"2026-03-17T12:23:18+00:00\",\"dateModified\":\"2026-03-23T14:23:26+00:00\",\"description\":\"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d'IA \u00e0 l'API Kinsta pour g\u00e9rer les t\u00e2ches d'h\u00e9bergement WordPress sur plusieurs sites.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&#8217;IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"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:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/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:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cr\u00e9ez un serveur MCP pour contr\u00f4ler l'h\u00e9bergement WordPress gr\u00e2ce \u00e0 l'IA.","description":"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d'IA \u00e0 l'API Kinsta pour g\u00e9rer les t\u00e2ches d'h\u00e9bergement WordPress sur plusieurs sites.","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:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/","og_locale":"fr_FR","og_type":"article","og_title":"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l'IA","og_description":"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d'IA \u00e0 l'API Kinsta pour g\u00e9rer les t\u00e2ches d'h\u00e9bergement WordPress sur plusieurs sites.","og_url":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2026-03-17T12:23:18+00:00","article_modified_time":"2026-03-23T14:23:26+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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":"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d'IA \u00e0 l'API Kinsta pour g\u00e9rer les t\u00e2ches d'h\u00e9bergement WordPress sur plusieurs sites.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI-1024x512.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Joel Olawanle","Dur\u00e9e de lecture estim\u00e9e":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&rsquo;IA","datePublished":"2026-03-17T12:23:18+00:00","dateModified":"2026-03-23T14:23:26+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/"},"wordCount":2729,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/","url":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/","name":"Cr\u00e9ez un serveur MCP pour contr\u00f4ler l'h\u00e9bergement WordPress gr\u00e2ce \u00e0 l'IA.","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","datePublished":"2026-03-17T12:23:18+00:00","dateModified":"2026-03-23T14:23:26+00:00","description":"Cr\u00e9ez votre propre serveur MCP qui connecte les outils d'IA \u00e0 l'API Kinsta pour g\u00e9rer les t\u00e2ches d'h\u00e9bergement WordPress sur plusieurs sites.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/serveur-mcp-api-kinsta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/fr\/sujets\/api\/"},{"@type":"ListItem","position":3,"name":"Cr\u00e9ez votre propre serveur MCP pour g\u00e9rer votre h\u00e9bergement WordPress gr\u00e2ce \u00e0 l&#8217;IA"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","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:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/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:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/82773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=82773"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/82773\/revisions"}],"predecessor-version":[{"id":82826,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/82773\/revisions\/82826"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/jp"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/translations\/es"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/82773\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/82774"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=82773"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=82773"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=82773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}