{"id":75733,"date":"2026-03-17T13:18:22","date_gmt":"2026-03-17T12:18:22","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=75733&#038;preview=true&#038;preview_id=75733"},"modified":"2026-03-23T15:09:32","modified_gmt":"2026-03-23T14:09:32","slug":"mcp-server-kinsta-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/","title":{"rendered":"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten"},"content":{"rendered":"<p>Wenn du viele WordPress-Websites verwaltest, bist du immer auf der Suche nach der n\u00e4chsten einfachen M\u00f6glichkeit, den Zeitaufwand f\u00fcr den Zugriff auf Dashboards und das Klicken durch eine Reihe von Schaltfl\u00e4chen zu reduzieren.<\/p>\n<p>MCPs (<a href=\"https:\/\/modelcontextprotocol.io\/\">Model Context Protocols<\/a>) haben in letzter Zeit f\u00fcr viel Aufsehen gesorgt, und wir haben uns vorgenommen zu untersuchen, wie MCPs in Verbindung mit der <a href=\"https:\/\/kinsta.com\/de\/docs\/kinsta-api\/\">Kinsta-API<\/a> einer Agentur helfen k\u00f6nnen, die so viele Websites verwaltet.<\/p>\n<p>In diesem Artikel f\u00fchren wir dich durch ein praktisches Beispiel f\u00fcr den Aufbau eines MCP-Servers, der KI-Assistenten wie Claude mit der Kinsta-API verbindet, um <a href=\"https:\/\/kinsta.com\/de\/wordpress-hosting\/\">WordPress-Hosting-Aufgaben<\/a> zu verwalten, die Agenturen ohnehin schon t\u00e4glich erledigen.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was wir aufbauen<\/h2>\n<p>Wir bauen einen MCP-Server, der eine Reihe von Tools bereitstellt, damit KI-Assistenten Aktionen ausf\u00fchren k\u00f6nnen wie:<\/p>\n<ul>\n<li>Alle WordPress-Websites unter deinem Konto auflisten<\/li>\n<li>Umgebungen f\u00fcr eine bestimmte Website anzeigen<\/li>\n<li>Den Cache in einer bestimmten Umgebung leeren<\/li>\n<li>Eine bestehende Website klonen, um eine neue zu erstellen<\/li>\n<li>Anzeigen, welche Plugins und Themes veraltet oder anf\u00e4llig sind<\/li>\n<li>Plugin-Updates in bestimmten Umgebungen ausl\u00f6sen<\/li>\n<\/ul>\n<p>Sobald der Server eingerichtet ist, wird er mit einem MCP-Host\/Client verbunden (in diesem Fall 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 ruft MCP-Tools auf, um w\u00e4hrend einer Eingabeaufforderung externe Daten abzurufen\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude ruft MCP-Tools auf, um w\u00e4hrend einer Eingabeaufforderung externe Daten abzurufen<\/figcaption><\/figure>\n<p>Beachte, wie es verschiedene Tools aufruft und dann die folgende Antwort zur\u00fcckgibt:<\/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 zeigt eine strukturierte Antwort an, die aus den abgerufenen Tool-Daten generiert wurde\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude zeigt eine strukturierte Antwort an, die aus den abgerufenen Tool-Daten generiert wurde<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>MCP-Server k\u00f6nnen sich mit jedem Client verbinden. Wir verwenden hier der Einfachheit halber <a href=\"https:\/\/claude.com\/download\">Claude for Desktop<\/a>, aber derselbe Server kann auch mit anderen Tools wie Cursor, ChatGPT oder sogar einem benutzerdefinierten MCP-Client verwendet werden, der in deinen eigenen Workflow integriert ist.<\/p>\n<\/aside>\n\n<h2>Erste Schritte<\/h2>\n<p>Bevor wir uns mit dem Code besch\u00e4ftigen, ist es hilfreich, ein paar Grundlagen dar\u00fcber zu verstehen, wie MCP in dieses Setup passt.<\/p>\n<p>Ein MCP-Server sitzt zwischen einem KI-Assistenten und einer bestehenden API. Er ersetzt die API nicht und ver\u00e4ndert auch nicht ihre Funktionsweise. Stattdessen stellt er eine Reihe von Tools bereit, die die KI bei Bedarf aufrufen kann. Jedes Tool ist einer bestimmten Aktion zugeordnet, wie zum Beispiel das Auflisten von Websites oder das Leeren des Caches deiner Website.<\/p>\n<p>Wenn du eine Frage an einen KI-Assistenten stellst, entscheidet dieser, ob eines dieser Tools relevant ist. Ist dies der Fall, ruft der Assistent das Tool \u00fcber den MCP-Server auf, der Server kommuniziert mit der API und das Ergebnis wird als einfache Antwort zur\u00fcckgegeben. Nichts l\u00e4uft automatisch ohne deine Zustimmung, und es stehen nur die Tools zur Verf\u00fcgung, die du bereitstellst.<\/p>\n<p>In diesem Beispiel kommuniziert der MCP-Server mit der Kinsta-API und stellt eine begrenzte Anzahl von WordPress-Hosting-Aktionen bereit. Es ist keine benutzerdefinierte Benutzeroberfl\u00e4che, keine Hintergrundautomatisierung und keine spezielle KI-Konfiguration erforderlich.<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Um mitzumachen, brauchst du ein paar Dinge:<\/p>\n<ul>\n<li>Eine stabile <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-node-js\/\">Node.js<\/a>-Installation<\/li>\n<li>Grundlegende Kenntnisse in <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-typescript\/\">TypeScript<\/a><\/li>\n<li>Ein Kinsta-Konto mit aktiviertem API-Zugriff<\/li>\n<li>Deinen Kinsta-API-Schl\u00fcssel und deine Unternehmens-ID<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Du ben\u00f6tigst einen g\u00fcltigen API-Schl\u00fcssel\/Token, um die Kinsta-API-Endpunkte zu nutzen. Du kannst <a href=\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-schluessel\/\">deine API-Schl\u00fcssel in MyKinsta erstellen oder verwalten<\/a>.<\/p>\n<\/aside>\n\n<p>Du brauchst keine Vorkenntnisse in MCP und musst kein KI-Modell erstellen oder trainieren. Wir konzentrieren uns ausschlie\u00dflich darauf, bestehende Tools miteinander zu verkn\u00fcpfen.<\/p>\n<h3>Einrichten des Projekts<\/h3>\n<p>Erstelle zun\u00e4chst ein neues Verzeichnis f\u00fcr das Projekt und initialisiere eine Node.js-App:<\/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>Installiere anschlie\u00dfend das <a href=\"https:\/\/www.npmjs.com\/package\/@modelcontextprotocol\/sdk\">MCP SDK<\/a> und die wenigen Abh\u00e4ngigkeiten, die wir verwenden:<\/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>Erstelle eine grundlegende Projektstruktur:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir src\ntouch src\/index.ts<\/code><\/pre>\n<p>Aktualisiere dann deine <code>package.json<\/code>, damit Node den erstellten Server ausf\u00fchren kann:<\/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 zur Verwaltung von WordPress-Seiten \u00fcber die 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>F\u00fcge zum Schluss eine <code>tsconfig.json<\/code> im Stammverzeichnis des Projekts hinzu:<\/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>Damit bist du bereit, mit dem Erstellen des MCP-Servers selbst zu beginnen.<\/p>\n<h2>Erstellen des MCP-Servers<\/h2>\n<p>Nachdem das Projekt nun eingerichtet ist, ist es an der Zeit, den MCP-Server selbst zu erstellen.<\/p>\n<p>Wir beginnen damit, die erforderlichen Pakete zu importieren und die Serverinstanz zu erstellen. Dann f\u00fcgen wir einen kleinen Helfer f\u00fcr die Kommunikation mit der API hinzu. Danach registrieren wir Tools, die direkt mit WordPress-Hosting-Aktionen verkn\u00fcpft sind.<\/p>\n<h3>Pakete importieren und den Server erstellen<\/h3>\n<p>\u00d6ffne <code>src\/index.ts<\/code> und f\u00fcge die folgenden Importe am Anfang der Datei hinzu:<\/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>Diese Importe bewirken drei Dinge:<\/p>\n<ul>\n<li><code>McpServer<\/code> ist der Kernserver, der Tools registriert und Anfragen vom KI-Client verarbeitet.<\/li>\n<li><code>StdioServerTransport<\/code> erm\u00f6glicht es dem Server, \u00fcber Standard-Ein- und -Ausgabe zu kommunizieren \u2013 so verbinden sich die meisten Desktop-KI-Clients.<\/li>\n<li><code>zod<\/code> wird verwendet, um die Eingaben zu definieren und zu validieren, die jedes Tool akzeptiert.<\/li>\n<\/ul>\n<p>Als N\u00e4chstes definierst du ein paar Konstanten f\u00fcr die API und die Anmeldedaten:<\/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>Erstelle nun die MCP-Serverinstanz:<\/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>Der Name gibt an, wie der Server innerhalb eines MCP-Clients angezeigt wird. Die Version ist optional, aber n\u00fctzlich, sobald du mit der Iteration beginnst.<\/p>\n<h3>Hinzuf\u00fcgen einer Hilfsfunktion f\u00fcr API-Anfragen<\/h3>\n<p>Die meisten Tools, die wir erstellen, m\u00fcssen HTTP-Anfragen an die API senden. Anstatt diese Logik \u00fcberall zu wiederholen, erstelle eine einzige Hilfsfunktion. F\u00fcge dies unterhalb der Server-Einrichtung ein:<\/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-Fehler (${response.status}): ${errorText}`);\n  }\n\n  return response.json() as Promise;\n}<\/code><\/pre>\n<h2>Implementierung der Tool-Ausf\u00fchrung<\/h2>\n<p>Tools sind das Wichtigste, was ein MCP-Server bereitstellt. Jedes Tool ist eine Funktion, die ein KI-Assistent mit deiner Zustimmung aufrufen kann, um eine bestimmte Aufgabe auszuf\u00fchren.<\/p>\n<p>In diesem Server folgt jedes Tool derselben Struktur:<\/p>\n<ul>\n<li>Ein Tool-Name (z. B. <code>list_sites<\/code>)<\/li>\n<li>Eine kurze Beschreibung (damit der Assistent wei\u00df, wann er es einsetzen soll)<\/li>\n<li>Ein Eingabeschema (damit das Tool nur mit g\u00fcltigen Eingaben l\u00e4uft)<\/li>\n<li>Eine Handler-Funktion (in der wir die API aufrufen und die Ausgabe formatieren)<\/li>\n<\/ul>\n<p>Wir formatieren die Antworten bewusst als Klartext. KI-Assistenten funktionieren am besten, wenn Tools klare, lesbare Ausgaben liefern, anstatt rohes JSON auszugeben.<\/p>\n<h3>Tool 1: Websites auflisten<\/h3>\n<p>Dieses Tool ruft alle WordPress-Websites unter deinem Unternehmenskonto ab. Das ist normalerweise das Erste, was du brauchst, wenn du mit mehreren Websites arbeitest, da die meisten anderen Aktionen mit einer Website-ID beginnen.<\/p>\n<p>Die API-Antwort enth\u00e4lt grundlegende Informationen zu jeder Seite, daher definieren wir eine einfache Struktur, mit der wir arbeiten k\u00f6nnen:<\/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>Damit k\u00f6nnen wir das Tool registrieren:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"list_sites\",\n  {\n    description:\n      \"Ruft alle WordPress-Websites deines Unternehmens ab. Gibt Website-IDs, Namen und Status zur\u00fcck.\",\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: \"Keine Websites f\u00fcr dieses Unternehmen gefunden.\" }\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>Dieses Tool ben\u00f6tigt keine Eingaben, daher ist das Eingabeschema leer. Im Handler rufen wir die API auf, pr\u00fcfen, ob das Ergebnis leer ist, und formatieren die Antwort dann als lesbaren Text.<\/p>\n<p>Anstatt rohes JSON zur\u00fcckzugeben, geben wir eine kurze Zusammenfassung zur\u00fcck, die sich gut f\u00fcr eine Chat-Oberfl\u00e4che eignet. Das macht es einem KI-Assistenten leicht, Fragen wie \u201eWelche Websites habe ich?\u201c oder \u201eZeig mir alle meine WordPress-Websites\u201c zu beantworten, ohne dass zus\u00e4tzliches Parsen n\u00f6tig ist.<\/p>\n<h3>Tool 2: Umgebungen abrufen<\/h3>\n<p>Sobald du eine Site-ID hast, ist der n\u00e4chste \u00fcbliche Schritt, die zugeh\u00f6rigen Umgebungen zu \u00fcberpr\u00fcfen. Dieses Tool gibt alle Umgebungen f\u00fcr eine bestimmte Site zur\u00fcck, einschlie\u00dflich Live-, Staging- und Premium-Staging-Umgebungen.<\/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>Einige Felder sind optional, wie die prim\u00e4re Domain oder die PHP-Version, daher sind sie entsprechend gekennzeichnet. Das Tool selbst ben\u00f6tigt nur die Website-ID:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_environments\",\n  {\n    description:\n      \"Umgebungen (Live, Staging) f\u00fcr eine bestimmte Website abrufen. Erfordert die Website-ID.\",\n    inputSchema: {\n      site_id: z.string().describe(\"Die Website-ID, f\u00fcr die Umgebungen abgerufen werden sollen\"),\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: \"Keine Umgebungen f\u00fcr diese Website gefunden.\" }\n        ],\n      };\n    }\n\n    const envList = envs\n      .map((env) =&gt; {\n        const domain = env.primaryDomain?.name || \"Keine Domain\";\n        const php = env.container_info?.php_engine_version || \"Unbekannt\";\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: `${envs.length} Umgebung(en) gefunden:\\n\\n${envList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Dies ist normalerweise der n\u00e4chste Schritt vor Aktionen wie dem Leeren des Caches, dem Klonen einer Website oder dem Aktualisieren von Plugins.<\/p>\n<h3>Tool 3: Website-Cache leeren<\/h3>\n<p>Das Leeren des Caches ist eine Routineaufgabe, aber auch ein asynchroner Vorgang. Wenn du ihn ausl\u00f6st, antwortet die API sofort mit einer Vorgangs-ID, w\u00e4hrend das Leeren des Caches im Hintergrund weiterl\u00e4uft.<\/p>\n<p>Hier sind die Typdefinition und die Tool-Funktion:<\/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      \"Cache f\u00fcr eine Website-Umgebung l\u00f6schen. Erfordert die Umgebungs-ID.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"Die Umgebungs-ID, f\u00fcr die der Cache gel\u00f6scht werden soll\"),\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-Leerung gestartet!\n\nVorgangs-ID: ${data.operation_id}\nMeldung: ${data.message}\n\nVerwende get_operation_status, um den Fortschritt zu \u00fcberpr\u00fcfen.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Anstatt darauf zu warten, dass der Vorgang abgeschlossen ist, gibt das Tool sofort die Vorgangs-ID zur\u00fcck. Das sorgt f\u00fcr eine schnelle Interaktion und erm\u00f6glicht es dem KI-Assistenten, bei Bedarf sp\u00e4ter nachzufassen.<\/p>\n<h3>Tool 4: Website klonen<\/h3>\n<p>Das Klonen einer Website ist eine der Aktionen, die Agenturen st\u00e4ndig ausf\u00fchren, insbesondere wenn sie mit Vorlagen arbeiten oder neue Kundenwebsites einrichten. Anstatt bei Null anzufangen, nimmst du eine bestehende Umgebung und erstellst darauf basierend eine neue Website.<\/p>\n<p>Die Antwort verwendet dieselbe Operationsform, die wir zuvor gesehen haben, daher musst du sie nicht erneut definieren. Das Tool ben\u00f6tigt einen Anzeigenamen f\u00fcr die neue Website und die Umgebungs-ID, von der geklont werden soll:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"clone_site\",\n  {\n    description:\n      \"Klone eine bestehende Website-Umgebung, um eine neue Website zu erstellen. Ideal, um neue Kunden-Websites aus einer Vorlage zu erstellen.\",\n    inputSchema: {\n      display_name: z\n        .string()\n        .describe(\"Name f\u00fcr die neue geklonte Website\"),\n      source_env_id: z\n        .string()\n        .describe(\"Die Umgebungs-ID, von der geklont werden soll\"),\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: `Klon der Website gestartet!\n\nNeue Website: ${display_name}\nVorgangs-ID: ${data.operation_id}\nMeldung: ${data.message}\n\nVerwende get_operation_status, um den Fortschritt zu \u00fcberpr\u00fcfen.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Dieses Tool ist besonders n\u00fctzlich, wenn es mit anderen Tools kombiniert wird. Ein KI-Assistent kann beispielsweise eine Website klonen und dann sofort die Umgebungen auflisten oder den Plugin-Status \u00fcberpr\u00fcfen, sobald der Vorgang abgeschlossen ist.<\/p>\n<h3>Tool 5: Betriebsstatus abrufen<\/h3>\n<p>Da einige Aktionen asynchron ablaufen, brauchen wir eine M\u00f6glichkeit, ihren Fortschritt zu \u00fcberpr\u00fcfen. Daf\u00fcr ist dieses Tool da.<\/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      \"Den Status eines asynchronen Vorgangs pr\u00fcfen (Cache leeren, Site klonen usw.)\",\n    inputSchema: {\n      operation_id: z\n        .string()\n        .describe(\"Die zu pr\u00fcfende Vorgangs-ID\"),\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: `Vorgang erfolgreich abgeschlossen!\n\nMessage: ${data.message || \"Vorgang abgeschlossen\"}`,\n          },\n        ],\n      };\n    }\n\n    if (response.status === 202) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Vorgang l\u00e4uft noch...\n\nMeldung: ${data.message || \"Wird verarbeitet\"}`,\n          },\n        ],\n      };\n    }\n  \n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Vorgangsstatus: ${response.status}\n\nMeldung: ${data.message || \"Unbekannter Status\"}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Tool 6: Plugins \u00fcber alle Websites hinweg abrufen<\/h3>\n<p>Wenn du viele WordPress-Websites verwaltest, sind Plugins oft der Punkt, an dem es zu Abweichungen kommt. Dieses Tool l\u00f6st das Problem, indem es Plugins im gesamten Unternehmenskonto betrachtet, statt nur eine Website nach der anderen.<\/p>\n<p>Die API liefert viele Informationen zur\u00fcck, darunter in welchen Umgebungen jedes Plugin installiert ist, ob Updates verf\u00fcgbar sind und ob eine Version als anf\u00e4llig markiert ist. Um mit diesen Daten zu arbeiten, definieren wir die folgenden Shapes:<\/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>Das Tool selbst ben\u00f6tigt keine Eingaben:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_plugins\",\n  {\n    description:\n      \"Alle WordPress-Plugins auf allen Websites abrufen. Zeigt an, f\u00fcr welche Plugins Updates verf\u00fcgbar sind oder Sicherheitsl\u00fccken bestehen.\",\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: \"Keine Plugins gefunden.\" }\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} Website(s) m\u00fcssen aktualisiert werden`\n          : \"\u2705 Auf dem neuesten Stand\";\n\n      const vulnerable =\n        plugin.is_latest_version_vulnerable ? \" \ud83d\udd34 ANF\u00c4LLIG\" : \"\";\n\n      return `\u2022 ${plugin.title} (${plugin.name})${vulnerable}\n  Aktuellste Version: ${plugin.latest_version || \"unbekannt\"}\n  Installiert auf: ${plugin.environment_count} Umgebung(en)\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 gefunden (${outdatedCount} haben verf\u00fcgbare Updates):\\n\\n${pluginList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Tool 7: Themes auf allen Websites abrufen<\/h3>\n<p>Themes haben \u00e4hnliche Probleme wie Plugins, werden aber oft noch seltener \u00fcberpr\u00fcft. Dieses Tool funktioniert genauso wie das Plugin-Tool, konzentriert sich aber stattdessen auf WordPress-Themes.<\/p>\n<p>Die Antwortstruktur entspricht dem Plugin-Endpunkt, nur mit themenspezifischen Feldern:<\/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: Zahl;\n  update_count: Zahl;\n  environments: ThemeEnvironment[];\n}\n\ninterface GetThemesResponse {\n  company: {\n    themes: {\n      total: Zahl;\n      items: Theme[];\n    };\n  };\n}<\/code><\/pre>\n<h3>Tool 8: Plugin aktualisieren<\/h3>\n<p>Probleme aufzulisten ist n\u00fctzlich, aber irgendwann musst du sie beheben. Mit diesem Tool kannst du ein bestimmtes Plugin in einer bestimmten Umgebung aktualisieren.<\/p>\n<p>Der Update-Endpunkt gibt dieselbe asynchrone Operationsform zur\u00fcck wie zuvor, daher k\u00f6nnen wir ihn \u00fcberspringen. Hier ist die Tool-Definition:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"update_plugin\",\n  {\n    description:\n      \"Ein bestimmtes Plugin in einer Site-Umgebung auf eine neue Version aktualisieren.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"Die Umgebungs-ID, in der das Plugin installiert ist\"),\n      plugin_name: z\n        .string()\n        .describe(\"Der Name\/Slug des Plugins (z. B. 'akismet', 'elementor')\"),\n      update_version: z\n        .string()\n        .describe(\"Die Version, auf die aktualisiert werden soll (z. B. '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 gestartet!\n\nPlugin: ${plugin_name}\nZielversion: ${update_version}\nVorgangs-ID: ${data.operation_id}\nMeldung: ${data.message}\n\nVerwende get_operation_status, um den Fortschritt zu \u00fcberpr\u00fcfen.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Genau wie beim Leeren des Caches und beim Klonen von Websites laufen Updates asynchron ab. Durch die R\u00fcckgabe der Vorgangs-ID kann der KI-Assistent den Fortschritt verfolgen, anstatt davon auszugehen, dass das Update sofort abgeschlossen ist.<\/p>\n<h2>Den Server starten<\/h2>\n<p>Nachdem alle Tools registriert sind, besteht der letzte Schritt darin, den MCP-Server zu starten und ihn f\u00fcr einen KI-Client verf\u00fcgbar zu machen.<\/p>\n<p>F\u00fcge am Ende deiner Datei die Hauptfunktion hinzu, die den Server \u00fcber den <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/basic\/transports\">STDIO-Transport<\/a> verbindet:<\/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 l\u00e4uft auf stdio\");\n}\n\nmain().catch((error) =&gt; {\n  console.error(\"Schwerwiegender Fehler:\", error);\n  process.exit(1);\n});<\/code><\/pre>\n<p>Dies weist den MCP-Server an, auf Anfragen \u00fcber die Standardeingabe und -ausgabe zu warten. Dadurch wird der Server f\u00fcr MCP-kompatible Desktop-Clients auffindbar.<\/p>\n<p>Ein wichtiges Detail hierbei ist die Protokollierung. Da dieser Server \u00fcber STDIO kommuniziert, m\u00fcssen alle Protokolle an stderr gesendet werden. Das Schreiben in stdout kann MCP-Nachrichten st\u00f6ren und die Verbindung unterbrechen.<\/p>\n<p>Als N\u00e4chstes erstellst du das Projekt:<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Dadurch werden die TypeScript-Dateien in das Build-Verzeichnis kompiliert und der Einstiegspunkt wird ausf\u00fchrbar gemacht.<\/p>\n<p>Sobald der Build abgeschlossen ist, kann der Server von einem MCP-Client gestartet werden. Den <a href=\"https:\/\/github.com\/olawanlejoel\/mcp-server-demo-kinsta-api\">vollst\u00e4ndigen Code findest du auf GitHub<\/a>.<\/p>\n<h2>Testen deines Servers mit 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 ist derzeit f\u00fcr macOS und Windows verf\u00fcgbar. Wenn du Linux nutzt, musst du den Server stattdessen mit einem anderen KI-Assistenten verbinden oder einen benutzerdefinierten MCP-Client erstellen.<\/p>\n<\/aside>\n\n<p>Um deinen MCP-Server zu nutzen, muss Claude for Desktop wissen, wie er gestartet wird. \u00d6ffne die Konfigurationsdatei von 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>Erstelle die Datei, falls sie noch nicht existiert. Wenn du VS Code verwendest, kannst du sie direkt \u00fcber das Terminal \u00f6ffnen:<\/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>F\u00fcge in der Datei deinen MCP-Server unter dem Schl\u00fcssel \u201emcpServers\u201c hinzu. Zum Beispiel:<\/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\": \"dein-api-schl\u00fcssel-hier\",\n        \"KINSTA_COMPANY_ID\": \"deine-firm-id-hier\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Diese Konfiguration teilt Claude for Desktop mit, dass es einen MCP-Server namens kinsta gibt, der mit Node.js gestartet werden soll, und dass der Einstiegspunkt die kompilierte Datei index.js ist.<\/p>\n<p>Stelle sicher, dass der Pfad auf die kompilierte Datei im Build-Verzeichnis verweist, nicht auf die TypeScript-Quelldatei. Speichere die Datei und starte Claude for Desktop neu.<\/p>\n<h3>Verbindung \u00fcberpr\u00fcfen<\/h3>\n<p>Sobald Claude neu gestartet ist, \u00f6ffne einen neuen Chat. Klicke auf das Symbol \u201e \u201c neben dem Eingabefeld und fahre dann mit der Maus \u00fcber <strong>Connectors<\/strong>. Dein MCP-Server sollte dort aufgef\u00fchrt sein.<\/p>\n<figure 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=\"Registrieren eines MCP-Servers in Claude\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Registrieren eines MCP-Servers in Claude<\/figcaption><\/figure>\n<p>Sobald der Server verbunden ist, kannst du ihn sofort nutzen. Claude entscheidet, welches Tool verwendet wird, \u00fcbergibt die erforderlichen Eingaben und gibt das Ergebnis als Klartext zur\u00fcck.<\/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=\"Aktualisieren eines WordPress-Plugins mithilfe eines MCP-basierten Workflows in Claude.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Aktualisieren eines WordPress-Plugins mithilfe eines MCP-basierten Workflows in Claude<\/figcaption><\/figure>\n<h2>Eine andere Art, mit den Tools zu arbeiten, die du bereits hast<\/h2>\n<p>Was sich gerade \u00e4ndert, sind nicht die zugrunde liegenden Tools. APIs sind immer noch APIs. Hosting-Plattformen funktionieren nach wie vor auf die gleiche Weise. Was sich \u00e4ndert, ist die Art und Weise, wie wir mit ihnen interagieren.<\/p>\n<p>KI-Tools f\u00fchlen sich langsam weniger wie Chatboxen und mehr wie Schnittstellen an. Dieser MCP-Server ist ein kleines Beispiel f\u00fcr diesen Wandel. Er f\u00fchrt keine neuen Funktionen ein. Er macht bestehende Funktionen auf eine Weise zug\u00e4nglich, die der tats\u00e4chlichen Arbeitsweise der Menschen entspricht.<\/p>\n<p>Wie es weitergeht, liegt ganz bei dir. Du kannst die Dinge einfach und schreibgesch\u00fctzt halten. Du kannst mehr Automatisierung mit Genehmigungen und Sicherheitsvorkehrungen hinzuf\u00fcgen. Oder du kannst denselben Server mit anderen Tools in deinem Workflow verbinden.<\/p>\n<p>Wenn du neue Tools und Workflows wie diesen ausprobierst, ist eine solide Hosting-Grundlage wichtig. Das Letzte, was du willst, ist, Zeit mit Ausf\u00e4llen oder Leistungsproblemen zu verschwenden, anstatt deine Websites aufzubauen und zu verbessern.<\/p>\n<p>Kinsta bietet Managed Hosting f\u00fcr WordPress, das deine Websites zuverl\u00e4ssig am Laufen h\u00e4lt, auch wenn du offline bist. Du kannst dir unsere <a href=\"https:\/\/kinsta.com\/de\/preise\/\">Hosting-Pakete<\/a> ansehen oder <a href=\"https:\/\/kinsta.com\/de\/mit-dem-vertrieb-sprechen\/\">mit unserem Vertriebsteam sprechen<\/a>, um das richtige Paket f\u00fcr dich zu finden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn du viele WordPress-Websites verwaltest, bist du immer auf der Suche nach der n\u00e4chsten einfachen M\u00f6glichkeit, den Zeitaufwand f\u00fcr den Zugriff auf Dashboards und das Klicken &#8230;<\/p>\n","protected":false},"author":287,"featured_media":75734,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[925],"class_list":["post-75733","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>WordPress-Hosting mit KI und MCP-Server steuern<\/title>\n<meta name=\"description\" content=\"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.\" \/>\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\/de\/blog\/mcp-server-kinsta-api\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten\" \/>\n<meta property=\"og:description\" content=\"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-17T12:18:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T14:09:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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=\"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten\",\"datePublished\":\"2026-03-17T12:18:22+00:00\",\"dateModified\":\"2026-03-23T14:09:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\"},\"wordCount\":2190,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\",\"name\":\"WordPress-Hosting mit KI und MCP-Server steuern\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"datePublished\":\"2026-03-17T12:18:22+00:00\",\"dateModified\":\"2026-03-23T14:09:32+00:00\",\"description\":\"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"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\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WordPress-Hosting mit KI und MCP-Server steuern","description":"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.","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\/de\/blog\/mcp-server-kinsta-api\/","og_locale":"de_DE","og_type":"article","og_title":"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten","og_description":"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.","og_url":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2026-03-17T12:18:22+00:00","article_modified_time":"2026-03-23T14:09:32+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/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":"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI-1024x512.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Joel Olawanle","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten","datePublished":"2026-03-17T12:18:22+00:00","dateModified":"2026-03-23T14:09:32+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/"},"wordCount":2190,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/","url":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/","name":"WordPress-Hosting mit KI und MCP-Server steuern","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","datePublished":"2026-03-17T12:18:22+00:00","dateModified":"2026-03-23T14:09:32+00:00","description":"Erstelle deinen eigenen MCP-Server, der KI-Tools mit der Kinsta-API verbindet, um WordPress-Hosting-Aufgaben \u00fcber mehrere Websites hinweg zu verwalten.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/mcp-server-kinsta-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/de\/thema\/api\/"},{"@type":"ListItem","position":3,"name":"Erstelle deinen eigenen MCP-Server, um dein WordPress-Hosting mit KI zu verwalten"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","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\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/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\/de\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=75733"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75733\/revisions"}],"predecessor-version":[{"id":75772,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/75733\/revisions\/75772"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/jp"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/75733\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/75734"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=75733"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=75733"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=75733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}