{"id":82453,"date":"2026-03-17T13:21:58","date_gmt":"2026-03-17T12:21:58","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=82453&#038;preview=true&#038;preview_id=82453"},"modified":"2026-03-23T15:13:57","modified_gmt":"2026-03-23T14:13:57","slug":"servidor-mcp-api-kinsta","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/","title":{"rendered":"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA"},"content":{"rendered":"<p>Si gestionas muchos sitios de WordPress, siempre est\u00e1s buscando la forma m\u00e1s f\u00e1cil de reducir el tiempo que pasas accediendo a los paneles de control y haciendo clic en una serie de botones.<\/p>\n<p>Los MCP (<a href=\"https:\/\/modelcontextprotocol.io\/\">Model Context Protocols<\/a>) han dado mucho que hablar \u00faltimamente, y hemos decidido explorar c\u00f3mo los MCP, junto con la <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a>, podr\u00edan ayudar a una agencia que gestiona tantos sitios web.<\/p>\n<p>En este art\u00edculo, te mostramos un ejemplo pr\u00e1ctico de c\u00f3mo crear un servidor MCP que conecte asistentes de IA como Claude con la API de Kinsta para gestionar las tareas de <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/\">alojamiento para WordPress<\/a> que las agencias ya realizan a diario.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Qu\u00e9 estamos creando<\/h2>\n<p>Estamos creando un servidor MCP que ofrece un conjunto de herramientas para que los asistentes de IA puedan realizar acciones como:<\/p>\n<ul>\n<li>Mostrar todos los sitios de WordPress de tu cuenta<\/li>\n<li>Mostrar los entornos de un sitio espec\u00edfico<\/li>\n<li>Borrar la cach\u00e9 en un entorno determinado<\/li>\n<li>Clonar un sitio existente para crear uno nuevo<\/li>\n<li>Ver qu\u00e9 plugins y temas est\u00e1n desactualizados o son vulnerables<\/li>\n<li>Activar actualizaciones de plugins en entornos espec\u00edficos<\/li>\n<\/ul>\n<p>Una vez configurado el servidor, se conecta a un host\/cliente MCP (en este caso, Claude para escritorio):<\/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 ejecutando 'callbacks' de herramientas MCP para consumir datos de APIs externas durante el ciclo de vida del prompt\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude ejecutando &#8216;callbacks&#8217; de herramientas MCP para consumir datos de APIs externas durante el ciclo de vida del prompt<\/figcaption><\/figure>\n<p>F\u00edjate en c\u00f3mo llama a varias herramientas y luego devuelve la siguiente respuesta:<\/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 mostrando una respuesta estructurada generada a partir de los datos recuperados por las herramientas.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude mostrando una respuesta estructurada generada a partir de los datos recuperados por las herramientas.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Los servidores MCP pueden conectarse a cualquier cliente. Aqu\u00ed usamos <a href=\"https:\/\/claude.com\/download\">Claude for Desktop<\/a> por simplicidad, pero el mismo servidor se puede usar con otras herramientas como Cursor, ChatGPT o incluso un cliente MCP personalizado integrado en tu propio flujo de trabajo.<\/p>\n<\/aside>\n\n<h2>Primeros pasos<\/h2>\n<p>Antes de ponerte con el c\u00f3digo, conviene entender algunos conceptos b\u00e1sicos sobre c\u00f3mo encaja MCP en esta configuraci\u00f3n.<\/p>\n<p>Un servidor MCP se sit\u00faa entre un asistente de IA y una API ya existente. No sustituye a la API ni cambia su funcionamiento. En cambio, pone a disposici\u00f3n un conjunto de herramientas a las que la IA puede recurrir cuando sea necesario. Cada herramienta corresponde a una acci\u00f3n concreta, como listar sitios o borrar la cach\u00e9 de tu sitio.<\/p>\n<p>Cuando haces una pregunta a un asistente de IA, este decide si alguna de esas herramientas es relevante. Si lo es, el asistente invoca la herramienta a trav\u00e9s del servidor MCP, el servidor se comunica con la API y el resultado se devuelve como una simple respuesta. Nada se ejecuta autom\u00e1ticamente sin tu aprobaci\u00f3n, y solo est\u00e1n disponibles las herramientas que t\u00fa expongas.<\/p>\n<p>En este ejemplo, el servidor MCP se comunica con la API de Kinsta y ofrece un conjunto limitado de acciones de Alojamiento para WordPress. No hace falta ninguna interfaz de usuario personalizada, automatizaci\u00f3n en segundo plano ni configuraci\u00f3n especial de IA.<\/p>\n<h3>Requisitos previos<\/h3>\n<p>Para seguir el tutorial, necesitas tener algunas cosas preparadas:<\/p>\n<ul>\n<li>Una instalaci\u00f3n estable de <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-node-js\/\">Node.js<\/a><\/li>\n<li>Conocimientos b\u00e1sicos de <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-typescript\/\">TypeScript<\/a><\/li>\n<li>Una cuenta de Kinsta con acceso a la API habilitado<\/li>\n<li>Tu clave API de Kinsta y tu ID de empresa<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Necesitas una clave o token de API v\u00e1lido para usar los endpoints de la API de Kinsta. Puedes <a href=\"https:\/\/kinsta.com\/es\/blog\/kinsta-api-key\/\">crear o gestionar tus claves de la API<\/a> en MyKinsta.<\/p>\n<\/aside>\n\n<p>No necesitas ninguna experiencia previa con MCP, ni tienes que crear o entrenar un modelo de IA. Nos centramos \u00fanicamente en conectar herramientas ya existentes.<\/p>\n<h3>Configuraci\u00f3n del proyecto<\/h3>\n<p>Empieza creando un nuevo directorio para el proyecto e inicializando una aplicaci\u00f3n 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>A continuaci\u00f3n, instala el <a href=\"https:\/\/www.npmjs.com\/package\/@modelcontextprotocol\/sdk\">SDK de MCP<\/a> y el peque\u00f1o conjunto de dependencias que usamos:<\/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>Crea una estructura b\u00e1sica del proyecto:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir src\ntouch src\/index.ts<\/code><\/pre>\n<p>A continuaci\u00f3n, actualiza tu <code>package.json<\/code> para que Node pueda ejecutar el servidor construido:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"name\": \"kinsta-mcp-server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Servidor MCP para gestionar sitios de WordPress a trav\u00e9s de la API de 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>Por \u00faltimo, a\u00f1ade un <code>archivo tsconfig.json<\/code> en la ra\u00edz del proyecto:<\/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>Una vez hecho esto, ya est\u00e1s listo para empezar a construir el servidor MCP.<\/p>\n<h2>Construcci\u00f3n del servidor MCP<\/h2>\n<p>Ahora que el proyecto ya est\u00e1 configurado, es hora de construir el servidor MCP propiamente dicho.<\/p>\n<p>Empezamos importando los paquetes necesarios y creando la instancia del servidor. A continuaci\u00f3n, a\u00f1adimos una peque\u00f1a ayuda para comunicarnos con la API. Despu\u00e9s de eso, registramos herramientas que se corresponden directamente con las acciones del Alojamiento para WordPress.<\/p>\n<h3>Importar paquetes y crear el servidor<\/h3>\n<p>Abre <code>src\/index.ts<\/code> y a\u00f1ade las siguientes importaciones al principio del archivo:<\/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>Esto hace tres cosas:<\/p>\n<ul>\n<li><code>McpServer<\/code> es el servidor principal que registra las herramientas y gestiona las solicitudes del cliente de IA<\/li>\n<li><code>StdioServerTransport<\/code> permite que el servidor se comunique a trav\u00e9s de la entrada\/salida est\u00e1ndar, que es como se conectan la mayor\u00eda de los clientes de IA de escritorio<\/li>\n<li><code>zod<\/code> se usa para definir y validar la entrada que acepta cada herramienta<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, define algunas constantes para la API y las credenciales:<\/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>Ahora crea la instancia del servidor 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>El nombre es c\u00f3mo aparece el servidor dentro de un cliente MCP. La versi\u00f3n es opcional, pero resulta \u00fatil una vez que empiezas a iterar.<\/p>\n<h3>A\u00f1adir un helper para las solicitudes a la API<\/h3>\n<p>La mayor\u00eda de las herramientas que desarrollamos necesitan realizar peticiones HTTP a la API. En lugar de repetir esa l\u00f3gica en todas partes, crea una \u00fanica funci\u00f3n auxiliar (helper). A\u00f1\u00e1dela debajo de la configuraci\u00f3n del servidor:<\/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(`Error de la API de Kinsta (${response.status}): ${errorText}`);\n  }\n\n  return response.json() as Promise;\n}<\/code><\/pre>\n<h2>Ejecuci\u00f3n de herramientas de implementaci\u00f3n<\/h2>\n<p>Las herramientas son lo principal que ofrece un servidor MCP. Cada herramienta es una funci\u00f3n que un asistente de IA puede invocar, con tu permiso, para realizar una tarea espec\u00edfica.<\/p>\n<p>En este servidor, cada herramienta sigue la misma estructura:<\/p>\n<ul>\n<li>Un nombre de herramienta (como <code>list_sites<\/code>)<\/li>\n<li>Una breve descripci\u00f3n (esto ayuda al asistente a saber cu\u00e1ndo usarla)<\/li>\n<li>Un esquema de entrada (para que la herramienta solo se ejecute con entradas v\u00e1lidas)<\/li>\n<li>Una funci\u00f3n de gesti\u00f3n (donde llamamos a la API y formateamos la salida)<\/li>\n<\/ul>\n<p>Formateamos las respuestas como texto sin formato a prop\u00f3sito. Los asistentes de IA funcionan mejor cuando las herramientas devuelven resultados claros y legibles, en lugar de volcar datos JSON sin procesar.<\/p>\n<h3>Herramienta 1: Listar sitios<\/h3>\n<p>Esta herramienta muestra todos los sitios de WordPress asociados a tu cuenta de empresa. Suele ser lo primero que necesitas cuando trabajas con varios sitios, como la mayor\u00eda del resto de acciones requieren un ID de sitio.<\/p>\n<p>La respuesta de la API incluye informaci\u00f3n b\u00e1sica sobre cada sitio, as\u00ed que definimos una estructura sencilla con la que trabajar:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">interface Site {\n  id: string;\n  name: string;\n  display_name: string;\n  status: string;\n  site_labels: Array;\n}\n\ninterface ListSitesResponse {\n  company: {\n    sites: Site[];\n  };\n}<\/code><\/pre>\n<p>Con eso listo, podemos registrar la herramienta:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"list_sites\",\n  {\n    description:\n      \"Obt\u00e9n todos los sitios de WordPress de tu empresa. Devuelve los ID, los nombres y el estado de los sitios.\",\n    inputSchema: {},\n  },\n  async () =&gt; {\n    const data = await kinstaRequest(\n      `\/sites?company=${KINSTA_COMPANY_ID}`\n    );\n\n    const sitios = data.company.sites;\n\n    if (!sitios || sitios.length === 0) {\n      return {\n        contenido: [\n          { tipo: \"text\", texto: \"No se han encontrado sitios para esta empresa.\" }\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  Estado: ${site.status}\n  Etiquetas: ${labels}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Se han encontrado ${sites.length} sitios:\\n\\n${siteList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Esta herramienta no requiere ninguna entrada, as\u00ed que el esquema de entrada est\u00e1 vac\u00edo. Dentro del controlador, llamamos a la API, comprobamos si el resultado est\u00e1 vac\u00edo y, a continuaci\u00f3n, formateamos la respuesta como texto legible.<\/p>\n<p>En lugar de devolver JSON sin procesar, devolvemos un breve resumen que funciona bien en una interfaz de chat. Esto facilita que un asistente de IA responda a preguntas como \u00ab\u00bfQu\u00e9 sitios tengo?\u00bb o \u00abMu\u00e9strame todos mis sitios de WordPress\u00bb sin necesidad de ning\u00fan an\u00e1lisis adicional.<\/p>\n<h3>Herramienta 2: Obtener entornos<\/h3>\n<p>Una vez que tengas un ID de sitio, el siguiente paso habitual es comprobar sus entornos. Esta herramienta muestra todos los entornos de un sitio determinado, incluidos los entornos de producci\u00f3n, staging y 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>Algunos campos son opcionales, como el dominio principal o la versi\u00f3n de PHP, as\u00ed que est\u00e1n marcados como tales. La herramienta en s\u00ed solo necesita el ID del sitio:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_environments\",\n  {\n    description:\n      \"Obtiene los entornos (productivo, staging) de un sitio espec\u00edfico. Requiere el ID del sitio.\",\n    inputSchema: {\n    site_id: z.string().describe(\"El ID del sitio para el que se quieren obtener los entornos\"),\n  },\n  },\n  async ({ site_id }) =&gt; {\n    const data = await kinstaRequest(\n      `\/sites\/${site_id}\/environments`\n    );\n\n    const envs = data.site.environments;\n\n    if (!envs || envs.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"No se han encontrado entornos para este sitio.\" }\n        ],\n      };\n    }\n\n    const envList = envs\n      .map((env) =&gt; {\n        const domain = env.primaryDomain?.name || \"Sin dominio\";\n        const php = env.container_info?.php_engine_version || \"Desconocido\";\n        const type = env.is_premium\n          ? \"Entorno de pruebas premium\"\n          : env.name === \"live\"\n            ? \"Live\"\n            : \"Staging\";\n\n        return `\u2022 ${env.display_name} (${type})\n  ID: ${env.id}\n  Dominio: ${domain}\n  PHP: ${php}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Se han encontrado ${envs.length} entornos:\\n\\n${envList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Este suele ser el siguiente paso antes de acciones como borrar la cach\u00e9, clonar un sitio o actualizar plugins.<\/p>\n<h3>Herramienta 3: Borrar la cach\u00e9 del sitio<\/h3>\n<p>Borrar la cach\u00e9 es una tarea rutinaria, pero tambi\u00e9n es una operaci\u00f3n as\u00edncrona. Cuando la inicias, la API responde de inmediato con un ID de operaci\u00f3n, mientras que el borrado de la cach\u00e9 contin\u00faa en segundo plano.<\/p>\n<p>Aqu\u00ed tienes la definici\u00f3n del tipo y la funci\u00f3n de la herramienta:<\/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      \"Borra la cach\u00e9 de un entorno del sitio. Requiere el ID del entorno.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"El ID del entorno para el que se va a borrar la cach\u00e9\"),\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: `\u00a1Se ha iniciado el borrado de la cach\u00e9!\n\nID de la operaci\u00f3n: ${data.operation_id}\nMensaje: ${data.message}\n\nUsa get_operation_status para comprobar el progreso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>En lugar de esperar a que termine la operaci\u00f3n, la herramienta devuelve inmediatamente el ID de la operaci\u00f3n. Esto mantiene la interacci\u00f3n r\u00e1pida y permite que el asistente de IA haga un seguimiento m\u00e1s tarde si es necesario.<\/p>\n<h3>Herramienta 4: Clonar sitio<\/h3>\n<p>Clonar un sitio es una de esas acciones que las agencias realizan constantemente, especialmente cuando trabajan con plantillas o crean nuevos sitios para clientes. En lugar de empezar desde cero, se toma un entorno existente y se crea un nuevo sitio basado en \u00e9l.<\/p>\n<p>La respuesta utiliza la misma estructura de operaci\u00f3n que vimos antes, as\u00ed que no hace falta volver a definirla. La herramienta requiere un nombre de visualizaci\u00f3n para el nuevo sitio y el ID del entorno desde el que clonar:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"clone_site\",\n  {\n    description:\n      \"Clona un entorno de sitio existente para crear un nuevo sitio. Ideal para crear nuevos sitios de clientes a partir de una plantilla.\",\n    inputSchema: {\n      display_name: z\n        .string()\n        .describe(\"Nombre del nuevo sitio clonado\"),\n      source_env_id: z\n        .string()\n        .describe(\"El ID del entorno desde el que clonar\"),\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: `\u00a1Clonaci\u00f3n del sitio iniciada!\n\nNuevo sitio: ${display_name}\nID de la operaci\u00f3n: ${data.operation_id}\nMensaje: ${data.message}\n\nUsa get_operation_status para comprobar el progreso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Esta herramienta es especialmente \u00fatil cuando se combina con otras herramientas. Por ejemplo, un asistente de IA puede clonar un sitio y, una vez finalizada la operaci\u00f3n, mostrar inmediatamente los entornos o comprobar el estado de los plugins.<\/p>\n<h3>Herramienta 5: Obtener el estado de la operaci\u00f3n<\/h3>\n<p>Como algunas acciones se ejecutan de forma as\u00edncrona, necesitamos una forma de comprobar su progreso. Para eso sirve esta herramienta.<\/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      \"Comprobar el estado de una operaci\u00f3n as\u00edncrona (borrado de cach\u00e9, clonaci\u00f3n del sitio, etc.)\",\n    inputSchema: {\n      operation_id: z\n        .string()\n        .describe(\"El ID de la operaci\u00f3n que se va a comprobar\"),\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: `\u00a1Operaci\u00f3n completada con \u00e9xito!\n\nMessage: ${data.message || \"Operaci\u00f3n finalizada\"}`,\n          },\n        ],\n      };\n    }\n\n    if (response.status === 202) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Operaci\u00f3n a\u00fan en curso...\n\nMensaje: ${data.message || \"Procesando\"}`,\n          },\n        ],\n      };\n    }\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Estado de la operaci\u00f3n: ${response.status}\n\nMensaje: ${data.message || \"Estado desconocido\"}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Herramienta 6: Obt\u00e9n los plugins de todos los sitios<\/h3>\n<p>Cuando gestionas muchos sitios de WordPress, los plugins suelen ser el punto donde las cosas empiezan a descontrolarse. Esta herramienta lo soluciona analizando los plugins de toda la cuenta de la empresa, en lugar de un sitio cada vez.<\/p>\n<p>La API devuelve mucha informaci\u00f3n, incluyendo en qu\u00e9 entornos est\u00e1 instalado cada plugin, si hay actualizaciones disponibles y si una versi\u00f3n est\u00e1 marcada como vulnerable. Para trabajar con esos datos, definimos las siguientes estructuras:<\/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\ninterfaz 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\ninterfaz GetPluginsResponse {\n  company: {\n    plugins: {\n      total: n\u00famero;\n      items: Plugin[];\n    };\n  };\n}<\/code><\/pre>\n<p>La herramienta en s\u00ed no requiere ninguna entrada:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_plugins\",\n  {\n    description:\n      \"Obtiene todos los plugins de WordPress de todos los sitios. Muestra qu\u00e9 plugins tienen actualizaciones disponibles o vulnerabilidades de seguridad.\",\n    inputSchema: {},\n  },\n  async () =&gt; {\n    const data = await kinstaRequest(\n      `\/company\/${KINSTA_COMPANY_ID}\/wp-plugins`\n    );\n\n    const plugins = data.company.plugins.items;\n\n    if (!plugins || plugins.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"No se han encontrado plugins.\" }\n        ],\n      };\n    }\n\n    const ordenados = [...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} sitio(s) necesitan actualizarse`\n          : \"\u2705 Al d\u00eda\";\n\n      const vulnerable =\n        plugin.is_latest_version_vulnerable ? \" \ud83d\udd34 VULNERABLE\" : \"\";\n\n      return `\u2022 ${plugin.title} (${plugin.name})${vulnerable}\n  \u00daltima versi\u00f3n: ${plugin.latest_version || \"desconocida\"}\n  Instalado en: ${plugin.environment_count} entornos\\\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: `Se han encontrado ${data.company.plugins.total} plugins (${outdatedCount} tienen actualizaciones disponibles):\\n\\n${pluginList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Herramienta 7: Busca temas en todos los sitios<\/h3>\n<p>Los temas tienen problemas similares a los de los plugins, pero a menudo se revisan con menos frecuencia. Esta herramienta funciona igual que la de los plugins, pero se centra en los temas de WordPress.<\/p>\n<p>La estructura de respuesta es igual que el endpoint del plugin, pero con campos espec\u00edficos del tema:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-typescript\">interface ThemeEnvironment {\n  id: string;\n  site_display_name: string;\n  display_name: string;\n  theme_status: string;\n  theme_update: string | null;\n  theme_version: string;\n  is_theme_version_vulnerable: boolean;\n  theme_update_version: string | null;\n}\n\ninterface Theme {\n  name: string;\n  title: string;\n  latest_version: string | null;\n  is_latest_version_vulnerable: boolean;\n  n\u00famero_de_entornos: n\u00famero;\n  n\u00famero_de_actualizaciones: n\u00famero;\n  entornos: ThemeEnvironment[];\n}\n\ninterfaz GetThemesResponse {\n  empresa: {\n    temas: {\n      total: n\u00famero;\n      elementos: Theme[];\n    };\n  };\n}<\/code><\/pre>\n<h3>Herramienta 8: Actualizar plugin<\/h3>\n<p>Enumerar los problemas es \u00fatil, pero al final hay que solucionarlos. Esta herramienta te permite actualizar un plugin espec\u00edfico en un entorno concreto.<\/p>\n<p>El endpoint de actualizaci\u00f3n devuelve la misma estructura de operaci\u00f3n as\u00edncrona que se utiliz\u00f3 antes, as\u00ed que podemos salt\u00e1rnoslo. Aqu\u00ed tienes la definici\u00f3n de la herramienta:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"update_plugin\",\n  {\n    description:\n      \"Actualiza un plugin espec\u00edfico a una nueva versi\u00f3n en un entorno de sitio.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"El ID del entorno donde est\u00e1 instalado el plugin\"),\n      plugin_name: z\n        .string()\n        .describe(\"El nombre\/slug del plugin (p. ej., 'akismet', 'elementor')\"),\n      update_version: z\n        .string()\n        .describe(\"La versi\u00f3n a la que actualizar (p. ej., '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: `\u00a1Actualizaci\u00f3n del plugin iniciada!\n\nPlugin: ${plugin_name}\nVersi\u00f3n de destino: ${update_version}\nID de la operaci\u00f3n: ${data.operation_id}\nMensaje: ${data.message}\n\nUsa get_operation_status para comprobar el progreso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Al igual que el borrado de la cach\u00e9 y los clones de sitios, las actualizaciones se ejecutan de forma as\u00edncrona. Al devolver el ID de la operaci\u00f3n, el asistente de IA puede seguir el progreso en lugar de dar por hecho que la actualizaci\u00f3n ha terminado instant\u00e1neamente.<\/p>\n<h2>Ejecutar el servidor<\/h2>\n<p>Una vez registradas todas las herramientas, el \u00faltimo paso es iniciar el servidor MCP y ponerlo a disposici\u00f3n de un cliente de IA.<\/p>\n<p>Al final de tu archivo, a\u00f1ade la funci\u00f3n principal que conecta el servidor utilizando el <a href=\"https:\/\/modelcontextprotocol.io\/specification\/2025-06-18\/basic\/transports\">transporte 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(\"Servidor MCP de Kinsta ejecut\u00e1ndose en stdio\");\n}\n\nmain().catch((error) =&gt; {\n  console.error(\"Error fatal:\", error);\n  process.exit(1);\n});<\/code><\/pre>\n<p>Esto le indica al servidor MCP que escuche las solicitudes a trav\u00e9s de la entrada y salida est\u00e1ndar. Hace que el servidor sea detectable por los clientes de escritorio compatibles con MCP.<\/p>\n<p>Un detalle importante aqu\u00ed es el registro. Como este servidor se comunica a trav\u00e9s de STDIO, todos los registros deben ir a stderr. Escribir en stdout puede interferir con los mensajes de MCP y romper la conexi\u00f3n.<\/p>\n<p>A continuaci\u00f3n, construye el proyecto:<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Esto compila los archivos de TypeScript en el directorio de construcci\u00f3n y hace que el punto de entrada sea ejecutable.<\/p>\n<p>Una vez finalizada la construcci\u00f3n, el servidor est\u00e1 listo para que lo inicie un cliente MCP. Puedes acceder al <a href=\"https:\/\/github.com\/olawanlejoel\/mcp-server-demo-kinsta-api\">c\u00f3digo completo en GitHub<\/a>.<\/p>\n<h2>Probar tu servidor con Claude for Desktop<\/h2>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Claude para Escritorio est\u00e1 disponible actualmente en macOS y Windows. Si utilizas Linux, debes conectar el servidor a otro asistente de IA o crear un cliente MCP personalizado.<\/p>\n<\/aside>\n\n<p>Para utilizar tu servidor MCP, Claude for Desktop necesita saber c\u00f3mo iniciarlo. Abre el archivo de configuraci\u00f3n 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>Crea el archivo si a\u00fan no existe. Si utilizas VS Code, puedes abrirlo directamente desde el 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>Dentro del archivo, a\u00f1ade tu servidor MCP bajo la clave mcpServers. Por ejemplo:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-json\">{\n  \"mcpServers\": {\n    \"kinsta\": {\n      \"command\": \"node\",\n      \"args\": [\"\/RUTA\/ABSOLUTA\/A\/mcp-server-demo-kinsta-api\/build\/index.js\"],\n      \"env\": {\n        \"KINSTA_API_KEY\": \"tu-clave-api-aqu\u00ed\",\n        \"KINSTA_COMPANY_ID\": \"tu-id-de-empresa-aqu\u00ed\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Esta configuraci\u00f3n le indica a Claude for Desktop que hay un servidor MCP llamado kinsta, que debe ejecutarse con Node.js y que el punto de entrada es el archivo index.js construido.<\/p>\n<p>Aseg\u00farate de que la ruta apunte al archivo compilado en el directorio de construcci\u00f3n, no al c\u00f3digo fuente de TypeScript. Guarda el archivo y reinicia Claude for Desktop.<\/p>\n<h3>Comprobaci\u00f3n de la conexi\u00f3n<\/h3>\n<p>Una vez que Claude se haya reiniciado, abre un nuevo chat. Haz clic en el icono junto al campo de entrada y, a continuaci\u00f3n, pasa el cursor por encima de <strong>Connectors<\/strong>. Deber\u00edas ver tu servidor MCP en la lista.<\/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=\"Registrar un servidor MCP en Claude para habilitar el acceso a las herramientas.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Registrando un servidor MCP en Claude.<\/figcaption><\/figure>\n<p>Una vez conectado el servidor, puedes empezar a utilizarlo de inmediato. Claude decide qu\u00e9 herramienta usar, env\u00eda los datos necesarios y devuelve el resultado como texto sin formato.<\/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=\"Actualizaci\u00f3n de un plugin de WordPress mediante un flujo de trabajo basado en MCP en Claude.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Actualizaci\u00f3n de un plugin de WordPress utilizando un flujo de trabajo basado en MCP en Claude.<\/figcaption><\/figure>\n<h2>Una forma diferente de trabajar con las herramientas que ya tienes<\/h2>\n<p>Lo que est\u00e1 cambiando ahora mismo no son las herramientas en s\u00ed. Las APIs siguen siendo las APIs. Las plataformas de alojamiento siguen funcionando igual. Lo que est\u00e1 cambiando es c\u00f3mo interactuamos con ellas.<\/p>\n<p>Las herramientas de IA empiezan a parecer menos chatbots y m\u00e1s interfaces. Este servidor MCP es un peque\u00f1o ejemplo de ese cambio. No introduce nuevas funciones, sino que pone a tu disposici\u00f3n las que ya existen de una forma que se adapta a c\u00f3mo trabajas realmente.<\/p>\n<p>Lo que hagas a partir de aqu\u00ed depende de ti. Puedes mantenerlo sencillo y en modo de solo lectura. Puedes a\u00f1adir m\u00e1s automatizaci\u00f3n con aprobaciones y controles de seguridad. O puedes conectar ese mismo servidor a otras herramientas de tu flujo de trabajo.<\/p>\n<p>A medida que exploras nuevas herramientas y flujos de trabajo como este, es importante contar con una base de alojamiento s\u00f3lida. Lo \u00faltimo que quieres es perder tiempo lidiando con problemas de inactividad o de rendimiento en lugar de crear y mejorar tus sitios.<\/p>\n<p>Kinsta ofrece alojamiento administrado para WordPress que mantiene tus sitios funcionando de forma fiable, incluso cuando est\u00e1s desconectado. Puedes explorar nuestros <a href=\"https:\/\/kinsta.com\/es\/precios\/\">planes de alojamiento<\/a> o <a href=\"https:\/\/kinsta.com\/es\/contactar-con-ventas\/\">hablar con nuestro equipo de ventas<\/a> para encontrar el plan adecuado para ti.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si gestionas muchos sitios de WordPress, siempre est\u00e1s buscando la forma m\u00e1s f\u00e1cil de reducir el tiempo que pasas accediendo a los paneles de control y &#8230;<\/p>\n","protected":false},"author":287,"featured_media":82454,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1270],"class_list":["post-82453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crea un Servidor MCP: Gestiona WordPress con IA<\/title>\n<meta name=\"description\" content=\"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.\" \/>\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\/es\/blog\/servidor-mcp-api-kinsta\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA\" \/>\n<meta property=\"og:description\" content=\"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-17T12:21:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T14:13:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA\",\"datePublished\":\"2026-03-17T12:21:58+00:00\",\"dateModified\":\"2026-03-23T14:13:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\"},\"wordCount\":2512,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\",\"name\":\"Crea un Servidor MCP: Gestiona WordPress con IA\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"datePublished\":\"2026-03-17T12:21:58+00:00\",\"dateModified\":\"2026-03-23T14:13:57+00:00\",\"description\":\"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crea un Servidor MCP: Gestiona WordPress con IA","description":"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.","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\/es\/blog\/servidor-mcp-api-kinsta\/","og_locale":"es_ES","og_type":"article","og_title":"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA","og_description":"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.","og_url":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2026-03-17T12:21:58+00:00","article_modified_time":"2026-03-23T14:13:57+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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":"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI-1024x512.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA","datePublished":"2026-03-17T12:21:58+00:00","dateModified":"2026-03-23T14:13:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/"},"wordCount":2512,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/","url":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/","name":"Crea un Servidor MCP: Gestiona WordPress con IA","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","datePublished":"2026-03-17T12:21:58+00:00","dateModified":"2026-03-23T14:13:57+00:00","description":"Conecta herramientas de IA con la API de Kinsta mediante un servidor MCP para gestionar el hosting de tus sitios.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/servidor-mcp-api-kinsta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/es\/secciones\/api\/"},{"@type":"ListItem","position":3,"name":"Crea tu propio servidor MCP para gestionar el Alojamiento de WordPress con IA"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=82453"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82453\/revisions"}],"predecessor-version":[{"id":82493,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/82453\/revisions\/82493"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/jp"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/82453\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/82454"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=82453"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=82453"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=82453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}