{"id":74777,"date":"2026-03-17T09:27:47","date_gmt":"2026-03-17T12:27:47","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=74777&#038;preview=true&#038;preview_id=74777"},"modified":"2026-03-23T11:47:12","modified_gmt":"2026-03-23T14:47:12","slug":"mcp-server-kinsta-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/","title":{"rendered":"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA"},"content":{"rendered":"<p>Se voc\u00ea gerencia muitos sites WordPress, est\u00e1 sempre procurando a pr\u00f3xima maneira f\u00e1cil de reduzir o tempo que gasta acessando pain\u00e9is e clicando em uma s\u00e9rie de bot\u00f5es.<\/p>\n<p>Os MCPs (<a href=\"https:\/\/modelcontextprotocol.io\/\">Model Context Protocols<\/a>) t\u00eam causado bastante impacto recentemente, e decidimos explorar como os MCPs, em conjunto com a <a href=\"https:\/\/kinsta.com\/pt\/docs\/kinsta-api\/\">API da Kinsta<\/a>, poderiam ajudar uma ag\u00eancia que gerencia tantos sites.<\/p>\n<p>Neste artigo, vamos te mostrar um exemplo pr\u00e1tico de como criar um servidor MCP que conecta assistentes de IA, como o Claude, \u00e0 API da Kinsta para gerenciar tarefas de <a href=\"https:\/\/kinsta.com\/pt\/hospedagem-wordpress\/\">hospedagem para WordPress<\/a> que as ag\u00eancias j\u00e1 realizam diariamente.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>O que estamos construindo<\/h2>\n<p>Estamos construindo um servidor MCP que disponibiliza um conjunto de ferramentas, para que assistentes de IA possam realizar a\u00e7\u00f5es como:<\/p>\n<ul>\n<li>Listar todos os sites WordPress da tua conta<\/li>\n<li>Mostrar ambientes para um site espec\u00edfico<\/li>\n<li>Limpar o cache em um determinado ambiente<\/li>\n<li>Clonar um site existente para criar um novo<\/li>\n<li>Verificar quais plugins e temas est\u00e3o desatualizados ou vulner\u00e1veis<\/li>\n<li>Habilitar atualiza\u00e7\u00f5es de plugins em ambientes espec\u00edficos<\/li>\n<\/ul>\n<p>Depois que o servidor estiver configurado, ele \u00e9 conectado a um host\/cliente MCP (neste caso, o Claude para 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=\"O Claude chamando ferramentas MCP para recuperar dados externos durante um prompt.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">O Claude chamando ferramentas MCP para recuperar dados externos durante um prompt.<\/figcaption><\/figure>\n<p>Observe como ele chama v\u00e1rias ferramentas e, em seguida, retorna a seguinte resposta:<\/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 exibindo uma resposta estruturada gerada a partir dos dados recuperados pelas ferramentas.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Claude exibindo uma resposta estruturada gerada a partir dos dados recuperados pelas ferramentas.<\/figcaption><\/figure>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Os servidores MCP podem se conectar a qualquer cliente. Estamos usando o <a href=\"https:\/\/claude.com\/download\">Claude for Desktop<\/a>, por uma quest\u00e3o de simplicidade, mas o mesmo servidor pode ser usado com outras ferramentas como o Cursor, o ChatGPT ou at\u00e9 mesmo um cliente MCP personalizado integrado ao seu pr\u00f3prio fluxo de trabalho.<\/p>\n<\/aside>\n\n<h2>Introdu\u00e7\u00e3o<\/h2>\n<p>Antes de mais nada, \u00e9 bom entender alguns conceitos b\u00e1sicos sobre como o MCP se encaixa nessa configura\u00e7\u00e3o.<\/p>\n<p>Um servidor MCP fica entre um assistente de IA e uma API existente. Ele n\u00e3o substitui a API nem altera seu funcionamento. Em vez disso, ele exp\u00f5e um conjunto de ferramentas que a IA pode chamar quando necess\u00e1rio. Cada ferramenta corresponde a uma a\u00e7\u00e3o espec\u00edfica, como listar sites ou limpar o cache do seu site.<\/p>\n<p>Quando voc\u00ea faz uma pergunta a um assistente de IA, ele decide se uma dessas ferramentas \u00e9 relevante. Se for, o assistente chama a ferramenta por meio do servidor MCP, o servidor se comunica com a API e o resultado \u00e9 retornado como uma resposta simples. Nada \u00e9 executado automaticamente sem a sua aprova\u00e7\u00e3o, e apenas as ferramentas que voc\u00ea exp\u00f5e ficam dispon\u00edveis.<\/p>\n<p>Neste exemplo, o servidor MCP se comunica com a API da Kinsta e exp\u00f5e um conjunto limitado de a\u00e7\u00f5es de hospedagem para WordPress. N\u00e3o \u00e9 necess\u00e1ria nenhuma interface personalizada, automa\u00e7\u00e3o em segundo plano nem configura\u00e7\u00e3o especial de IA.<\/p>\n<h3>Pr\u00e9-requisitos<\/h3>\n<p>Para acompanhar, voc\u00ea precisa ter algumas coisas instaladas:<\/p>\n<ul>\n<li>Uma instala\u00e7\u00e3o est\u00e1vel do <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a><\/li>\n<li>Conhecimento b\u00e1sico de <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-typescript\/\">TypeScript<\/a><\/li>\n<li>Uma conta Kinsta com acesso \u00e0 API habilitado<\/li>\n<li>Sua chave de API da Kinsta e ID da empresa<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Voc\u00ea precisa de uma chave\/token de API v\u00e1lido para usar os endpoints da API da Kinsta. Voc\u00ea pode <a href=\"https:\/\/kinsta.com\/pt\/blog\/chave-api-kinsta\/\">criar ou gerenciar suas chaves API<\/a> no MyKinsta.<\/p>\n<\/aside>\n\n<p>Voc\u00ea n\u00e3o precisa de nenhuma experi\u00eancia pr\u00e9via com MCP, nem precisa construir ou treinar um modelo de IA. Nosso foco \u00e9 apenas conectar as ferramentas existentes.<\/p>\n<h3>Configurando o projeto<\/h3>\n<p>Comece criando um novo diret\u00f3rio para o projeto e inicializando um aplicativo 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>Em seguida, instale o <a href=\"https:\/\/www.npmjs.com\/package\/@modelcontextprotocol\/sdk\">SDK do MCP<\/a> e o pequeno conjunto de depend\u00eancias 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>Crie uma estrutura b\u00e1sica de projeto:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-bash\">mkdir src\ntouch src\/index.ts<\/code><\/pre>\n<p>Depois, atualiza o seu <code>package.json<\/code> para que o Node possa executar o servidor compilado:<\/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 gerenciar sites WordPress via a API da 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 fim, adiciona um arquivo <code>tsconfig.json<\/code> na raiz do projeto:<\/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>Com isso pronto, voc\u00ea est\u00e1 pronto para come\u00e7ar a construir o pr\u00f3prio servidor MCP.<\/p>\n<h2>Construindo o servidor MCP<\/h2>\n<p>Agora que o projeto est\u00e1 configurado, \u00e9 hora de construir o pr\u00f3prio servidor MCP.<\/p>\n<p>Come\u00e7amos importando os pacotes necess\u00e1rios e criando a inst\u00e2ncia do servidor. Depois, adicionamos um pequeno auxiliar para interagir com a API. Em seguida, registramos ferramentas que mapeiam diretamente para as a\u00e7\u00f5es de hospedagem do WordPress.<\/p>\n<h3>Importando pacotes e criando o servidor<\/h3>\n<p>Abra o <code>src\/index.ts<\/code> e adicione as seguintes importa\u00e7\u00f5es no topo do arquivo:<\/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>Elas fazem tr\u00eas coisas:<\/p>\n<ul>\n<li><code>McpServer<\/code> \u00e9 o servidor principal que registra as ferramentas e lida com as requisi\u00e7\u00f5es do cliente de IA<\/li>\n<li><code>StdioServerTransport<\/code> permite que o servidor se comunique por entrada\/sa\u00edda padr\u00e3o, que \u00e9 como a maioria dos clientes de IA para desktop se conecta<\/li>\n<li><code>zod<\/code> \u00e9 usado para definir e validar o input que cada ferramenta aceita<\/li>\n<\/ul>\n<p>Em seguida, defina algumas constantes para a API e as credenciais:<\/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>Agora cria a inst\u00e2ncia do 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>O nome \u00e9 como o servidor aparece dentro de um cliente MCP. A vers\u00e3o \u00e9 opcional, mas \u00fatil quando voc\u00ea come\u00e7ar a iterar.<\/p>\n<h3>Adicionando um helper para solicita\u00e7\u00f5es de API<\/h3>\n<p>A maioria das ferramentas que criamos precisa fazer solicita\u00e7\u00f5es HTTP para a API. Em vez de repetir essa l\u00f3gica em todos os lugares, cria uma \u00fanica fun\u00e7\u00e3o auxiliar. Adiciona isso abaixo da configura\u00e7\u00e3o do 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(`Erro na API da Kinsta (${response.status}): ${errorText}`);\n  }\n\n  return response.json() as Promise;\n}<\/code><\/pre>\n<h2>Implementando a execu\u00e7\u00e3o de ferramentas<\/h2>\n<p>As ferramentas s\u00e3o o principal recurso que um servidor MCP exp\u00f5e. Cada ferramenta \u00e9 uma fun\u00e7\u00e3o que um assistente de IA pode chamar, com a tua aprova\u00e7\u00e3o, para realizar uma tarefa espec\u00edfica.<\/p>\n<p>Neste servidor, cada ferramenta segue a mesma estrutura:<\/p>\n<ul>\n<li>Um nome de ferramenta (como <code>list_sites<\/code>)<\/li>\n<li>Uma descri\u00e7\u00e3o curta (que ajuda o assistente a saber quando us\u00e1-la)<\/li>\n<li>Um schema de input (para que a ferramenta s\u00f3 seja executada com um input v\u00e1lido)<\/li>\n<li>Uma fun\u00e7\u00e3o handler (onde chamamos a API e formatamos o output)<\/li>\n<\/ul>\n<p>Formatamos as respostas como texto simples de forma intencional. Os assistentes de IA funcionam melhor quando as ferramentas retornam um output claro e leg\u00edvel em vez de despejar JSON bruto.<\/p>\n<h3>Ferramenta 1: Listar sites<\/h3>\n<p>Esta ferramenta recupera todos os sites WordPress da sua conta da empresa. Geralmente, \u00e9 a primeira coisa que voc\u00ea deseja quando trabalha com v\u00e1rios sites, j\u00e1 que a maioria das outras a\u00e7\u00f5es come\u00e7a com um ID de site.<\/p>\n<p>A resposta da API inclui informa\u00e7\u00f5es b\u00e1sicas sobre cada site, ent\u00e3o definimos uma estrutura simples para trabalhar com eles:<\/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>Com isso pronto, podemos registrar a ferramenta:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"list_sites\",\n  {\n    description:\n      \"Pega todos os sites WordPress da tua empresa. Retorna IDs, nomes e status dos sites.\",\n    inputSchema: {},\n  },\n  async () =&gt; {\n    const data = await kinstaRequest(\n      `\/sites?company=${KINSTA_COMPANY_ID}`\n    );\n\n    const sites = data.company.sites;\n\n    if (!sites || sites.length === 0) {\n      return {\n        content: [\n          { type: \"text\", text: \"Nenhum site encontrado 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(\", \") || \"nenhum\";\n\n        return `\u2022 ${site.display_name} (${site.name})\n  ID: ${site.id}\n  Status: ${site.status}\n  Etiquetas: ${labels}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Encontrados ${sites.length} site(s):\\n\\n${siteList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Esta ferramenta n\u00e3o exige nenhum input, portanto o schema de input est\u00e1 vazio. Dentro do handler, chamamos a API, verificamos se o resultado est\u00e1 vazio e, em seguida, formatamos a resposta como texto leg\u00edvel.<\/p>\n<p>Em vez de retornar JSON bruto, retornamos um resumo curto que funciona bem em uma interface de chat. Isso facilita para o assistente de IA responder perguntas como &#8220;Quais sites eu tenho?&#8221; ou &#8220;Mostre todos os meus sites WordPress&#8221; sem nenhum processamento adicional.<\/p>\n<h3>Ferramenta 2: Obter ambientes<\/h3>\n<p>Ap\u00f3s ter um ID do site, o pr\u00f3ximo passo comum \u00e9 verificar seus ambientes. Esta ferramenta retorna todos os ambientes de um determinado site, incluindo os ambientes de produ\u00e7\u00e3o, de teste e de teste 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>Alguns campos s\u00e3o opcionais, como o dom\u00ednio principal ou a vers\u00e3o do PHP, ent\u00e3o eles est\u00e3o marcados como tal. A ferramenta em si aceita apenas o ID do site:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_environments\",\n  {\n    description:\n      \"Obt\u00e9m ambientes (produ\u00e7\u00e3o, staging) para um site espec\u00edfico. Requer o ID do site.\",\n    inputSchema: {\n      site_id: z.string().describe(\"O ID do site para o qual se deseja obter os ambientes\"),\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: \"Nenhum ambiente encontrado para este site.\" }\n        ],\n      };\n    }\n\n    const envList = envs\n      .map((env) =&gt; {\n        const domain = env.primaryDomain?.name || \"Sem dom\u00ednio\";\n        const php = env.container_info?.php_engine_version || \"Desconhecido\";\n        const type = env.is_premium\n          ? \"Staging Premium\"\n          : env.name === \"live\"\n            ? \"Live\"\n            : \"Staging\";\n\n        return `\u2022 ${env.display_name} (${type})\n  ID: ${env.id}\n  Dom\u00ednio: ${domain}\n  PHP: ${php}`;\n      })\n      .join(\"\\n\\n\");\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Encontrados ${envs.length} ambientes:\\n\\n${envList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Esse geralmente \u00e9 o pr\u00f3ximo passo antes de a\u00e7\u00f5es como limpar o cache, clonar um site ou atualizar plugins.<\/p>\n<h3>Ferramenta 3: Limpar o cache do site<\/h3>\n<p>Limpar o cache \u00e9 uma tarefa de rotina, mas tamb\u00e9m \u00e9 uma opera\u00e7\u00e3o ass\u00edncrona. Quando voc\u00ea a aciona, a API responde imediatamente com um ID de opera\u00e7\u00e3o, enquanto a limpeza do cache continua em segundo plano.<\/p>\n<p>A seguir, a defini\u00e7\u00e3o de tipo e a fun\u00e7\u00e3o da ferramenta:<\/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      \"Limpa o cache de um ambiente do site. Requer o ID do ambiente.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"O ID do ambiente para o qual limpar o cache\"),\n    },\n  },\n  async ({ environment_id }) =&gt; {\n    const data = await kinstaRequest(\n      \"\/sites\/tools\/clear-cache\",\n      {\n        method: \"POST\",\n        body: JSON.stringify({ environment_id }),\n      }\n    );\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Limpeza do cache iniciada!\n\nID da opera\u00e7\u00e3o: ${data.operation_id}\nMensagem: ${data.message}\n\nUse get_operation_status para verificar o progresso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Em vez de aguardar a conclus\u00e3o da opera\u00e7\u00e3o, a ferramenta retorna imediatamente o ID da opera\u00e7\u00e3o. Isso mant\u00e9m a intera\u00e7\u00e3o \u00e1gil e permite que o assistente de IA fa\u00e7a um acompanhamento posterior, se necess\u00e1rio.<\/p>\n<h3>Ferramenta 4: Clonar site<\/h3>\n<p>Clonar um site \u00e9 uma daquelas a\u00e7\u00f5es que as ag\u00eancias usam o tempo todo, especialmente quando trabalham com templates ou criam novos sites para clientes. Em vez de come\u00e7ar do zero, voc\u00ea usa um ambiente existente e cria um novo site com base nele.<\/p>\n<p>A resposta usa a mesma estrutura de opera\u00e7\u00e3o que vimos anteriormente, ent\u00e3o n\u00e3o \u00e9 necess\u00e1rio defini-la novamente. A ferramenta exige um nome de exibi\u00e7\u00e3o para o novo site e o ID do ambiente a ser clonado:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"clone_site\",\n  {\n    description:\n      \"Clona um ambiente de site existente para criar um novo site. \u00d3timo para criar novos sites de clientes a partir de um modelo.\",\n    inputSchema: {\n      display_name: z\n        .string()\n        .describe(\"Nome do novo site clonado\"),\n      source_env_id: z\n        .string()\n        .describe(\"O ID do ambiente a partir do qual 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: `Clonagem do site iniciada!\n\nNovo site: ${display_name}\nID da opera\u00e7\u00e3o: ${data.operation_id}\nMensagem: ${data.message}\n\nUse get_operation_status para verificar o progresso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Esta ferramenta \u00e9 especialmente \u00fatil quando combinada com outras ferramentas. Por exemplo, um assistente de IA pode clonar um site e, em seguida, listar os ambientes imediatamente ou verificar o status dos plugins assim que a opera\u00e7\u00e3o for conclu\u00edda.<\/p>\n<h3>Ferramenta 5: Obter o status da opera\u00e7\u00e3o<\/h3>\n<p>Como algumas a\u00e7\u00f5es s\u00e3o executadas de forma ass\u00edncrona, precisamos de uma maneira de verificar o progresso delas. \u00c9 exatamente para isso que esta ferramenta serve.<\/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      \"Verificar o status de uma opera\u00e7\u00e3o ass\u00edncrona (limpar cache, clonar site, etc.)\",\n    inputSchema: {\n      operation_id: z\n        .string()\n        .describe(\"O ID da opera\u00e7\u00e3o a ser verificada\"),\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: `Opera\u00e7\u00e3o conclu\u00edda com sucesso!\n\nMensagem: ${data.message || \"Opera\u00e7\u00e3o conclu\u00edda\"}`,\n          },\n        ],\n      };\n    }\n\n    if (response.status === 202) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Opera\u00e7\u00e3o ainda em andamento...\n\nMensagem: ${data.message || \"Processando\"}`,\n          },\n        ],\n      };\n    }\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Status da opera\u00e7\u00e3o: ${response.status}\n\nMensagem: ${data.message || \"Status desconhecido\"}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Ferramenta 6: Obter plugins em todos os sites<\/h3>\n<p>Quando voc\u00ea gerencia muitos sites WordPress, os plugins geralmente s\u00e3o onde as coisas come\u00e7am a divergir. Esta ferramenta resolve isso verificando os plugins em toda a conta da empresa, e n\u00e3o um site por vez.<\/p>\n<p>A API retorna muitas informa\u00e7\u00f5es, incluindo em quais ambientes cada plugin est\u00e1 instalado, se h\u00e1 atualiza\u00e7\u00f5es dispon\u00edveis e se uma vers\u00e3o est\u00e1 marcada como vulner\u00e1vel. Para trabalhar com esses dados, definimos as seguintes estruturas:<\/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>A ferramenta em si n\u00e3o recebe nenhuma entrada:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"get_plugins\",\n  {\n    description:\n      \"Pega todos os plugins do WordPress em todos os sites. Mostra quais plugins t\u00eam atualiza\u00e7\u00f5es dispon\u00edveis ou vulnerabilidades de seguran\u00e7a.\",\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: \"Nenhum plugin encontrado.\" }\n        ],\n      };\n    }\n\n    const sorted = [...plugins].sort(\n      (a, b) =&gt; b.update_count - a.update_count\n    );\n\n    const pluginList = sorted.slice(0, 20).map((plugin) =&gt; {\n      const status =\n        plugin.update_count &gt; 0\n          ? `\u26a0\ufe0f ${plugin.update_count} site(s) precisam de atualiza\u00e7\u00e3o`\n          : \"\u2705 Em dia\";\n\n      const vulner\u00e1vel =\n        plugin.is_latest_version_vulnerable ? \" \ud83d\udd34 VULNER\u00c1VEL\" : \"\";\n\n      return `\u2022 ${plugin.title} (${plugin.name})${vulner\u00e1vel}\n  Vers\u00e3o mais recente: ${plugin.latest_version || \"desconhecida\"}\n  Instalado em: ${plugin.environment_count} ambiente(s)\n  ${status}`;\n    }).join(\"\\n\\n\");\n\n    const outdatedCount = plugins.filter(\n      (p) =&gt; p.update_count &gt; 0\n    ).length;\n\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Encontrados ${data.company.plugins.total} plugins (${outdatedCount} t\u00eam atualiza\u00e7\u00f5es dispon\u00edveis):\\n\\n${pluginList}`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<h3>Ferramenta 7: Verificar temas em todos os sites<\/h3>\n<p>Os temas t\u00eam problemas semelhantes aos dos plugins, mas costumam ser verificados com ainda menos frequ\u00eancia. Esta ferramenta funciona da mesma forma que a ferramenta de plugins, mas foca nos temas WordPress.<\/p>\n<p>A estrutura da resposta espelha o endpoint de plugins, apenas com campos espec\u00edficos de temas:<\/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  contagem_de_ambientes: n\u00famero;\n  contagem_de_atualiza\u00e7\u00f5es: n\u00famero;\n  ambientes: ThemeEnvironment[];\n}\n\ninterface GetThemesResponse {\n  empresa: {\n    temas: {\n      total: n\u00famero;\n      itens: Theme[];\n    };\n  };\n}<\/code><\/pre>\n<h3>Ferramenta 8: Atualizar plugin<\/h3>\n<p>Listar problemas \u00e9 \u00fatil, mas, eventualmente, voc\u00ea precisa corrigi-los. Essa ferramenta permite que voc\u00ea atualize um plugin espec\u00edfico em um ambiente espec\u00edfico.<\/p>\n<p>O endpoint de atualiza\u00e7\u00e3o retorna a mesma forma de opera\u00e7\u00e3o ass\u00edncrona usada anteriormente, ent\u00e3o podemos pular essa parte. Aqui est\u00e1 a defini\u00e7\u00e3o da ferramenta:<\/p>\n<pre style=\"margin: 0 0 8px\"><code class=\"language-js\">server.registerTool(\n  \"update_plugin\",\n  {\n    description:\n      \"Atualiza um plugin espec\u00edfico para uma nova vers\u00e3o em um ambiente do site.\",\n    inputSchema: {\n      environment_id: z\n        .string()\n        .describe(\"O ID do ambiente onde o plugin est\u00e1 instalado\"),\n      plugin_name: z\n        .string()\n        .describe(\"O nome\/slug do plugin (por exemplo, 'akismet', 'elementor')\"),\n      update_version: z\n        .string()\n        .describe(\"A vers\u00e3o para a qual atualizar (por exemplo, '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: `Atualiza\u00e7\u00e3o do plugin iniciada!\n\nPlugin: ${plugin_name}\nVers\u00e3o de destino: ${update_version}\nID da opera\u00e7\u00e3o: ${data.operation_id}\nMensagem: ${data.message}\n\nUse get_operation_status para verificar o progresso.`,\n        },\n      ],\n    };\n  }\n);<\/code><\/pre>\n<p>Assim como a limpeza do cache e a clonagem de sites, as atualiza\u00e7\u00f5es s\u00e3o executadas de forma ass\u00edncrona. Retornar o ID da opera\u00e7\u00e3o permite que o assistente de IA acompanhe o progresso, em vez de presumir que a atualiza\u00e7\u00e3o terminou instantaneamente.<\/p>\n<h2>Executando o servidor<\/h2>\n<p>Com todas as ferramentas registradas, o \u00faltimo passo \u00e9 iniciar o servidor MCP e disponibiliz\u00e1-lo para um cliente de IA.<\/p>\n<p>No final do seu arquivo, adicione a fun\u00e7\u00e3o main que conecta o servidor usando o <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 Kinsta MCP em execu\u00e7\u00e3o no stdio\");\n}\n\nmain().catch((error) =&gt; {\n  console.error(\"Erro fatal:\", error);\n  process.exit(1);\n});<\/code><\/pre>\n<p>Isso instrui o servidor MCP a aguardar requisi\u00e7\u00f5es por entrada e sa\u00edda padr\u00e3o. Isso torna o servidor detect\u00e1vel por clientes desktop compat\u00edveis com MCP.<\/p>\n<p>Um detalhe importante aqui \u00e9 o logging. Como este servidor se comunica por STDIO, todos os logs devem ser direcionados para stderr. Escrever no stdout pode interferir nas mensagens MCP e interromper a conex\u00e3o.<\/p>\n<p>Em seguida, fa\u00e7a o build do projeto:<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Isso compila os arquivos TypeScript no diret\u00f3rio build e torna o ponto de entrada execut\u00e1vel.<\/p>\n<p>Quando a compila\u00e7\u00e3o terminar, o servidor estar\u00e1 pronto para ser iniciado por um cliente MCP. Voc\u00ea pode acessar o <a href=\"https:\/\/github.com\/olawanlejoel\/mcp-server-demo-kinsta-api\">c\u00f3digo completo no GitHub<\/a>.<\/p>\n<h2>Testando seu servidor com o Claude for Desktop<\/h2>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>O Claude for Desktop est\u00e1 dispon\u00edvel atualmente no macOS e no Windows. Se voc\u00ea estiver no Linux, ser\u00e1 necess\u00e1rio conectar o servidor a outro assistente de IA ou criar um cliente MCP personalizado.<\/p>\n<\/aside>\n\n<p>Para usar seu servidor MCP, o Claude for Desktop precisa saber como inici\u00e1-lo. Abra o arquivo de configura\u00e7\u00e3o do 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>Crie o arquivo se ele ainda n\u00e3o existir. Se voc\u00ea estiver usando o VS Code, pode abri-lo diretamente pelo 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 do arquivo, adicione o seu servidor MCP na chave mcpServers. Por exemplo:<\/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\": \"tua-chave-api-aqui\",\n        \"KINSTA_COMPANY_ID\": \"tua-id-da-empresa-aqui\"\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>Esta configura\u00e7\u00e3o informa ao Claude for Desktop que h\u00e1 um servidor MCP chamado <code>kinsta<\/code>, que ele deve ser iniciado usando Node.js e que o ponto de entrada \u00e9 o arquivo <code>index.js<\/code> compilado.<\/p>\n<p>Certifique-se de que o caminho aponta para o arquivo compilado no diret\u00f3rio de build, n\u00e3o para o c\u00f3digo-fonte TypeScript. Salve o arquivo e reinicie o Claude for Desktop.<\/p>\n<h3>Verificando a conex\u00e3o<\/h3>\n<p>Ap\u00f3s o rein\u00edcio do Claude, abra um novo chat. Clique no \u00edcone <strong>+<\/strong> ao lado do campo de input e, em seguida, passe o cursor sobre <strong>Connectors<\/strong>. Voc\u00ea dever\u00e1 ver o seu servidor MCP listado.<\/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=\"Registrando um servidor MCP no Claude.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Registrando um servidor MCP no Claude.<\/figcaption><\/figure>\n<p>Com o servidor conectado, voc\u00ea j\u00e1 pode come\u00e7ar a us\u00e1-lo. O Claude decide qual ferramenta usar, passa o input necess\u00e1rio e retorna o resultado como texto simples.<\/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=\"Atualizando um plugin WordPress usando um fluxo de trabalho com MCP no Claude.\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Atualizando um plugin WordPress usando um fluxo de trabalho com MCP no Claude.<\/figcaption><\/figure>\n<h2>Uma forma diferente de trabalhar com as ferramentas que voc\u00ea j\u00e1 tem<\/h2>\n<p>O que est\u00e1 mudando agora n\u00e3o s\u00e3o as ferramentas em si. As APIs ainda s\u00e3o APIs. As plataformas de hospedagem ainda funcionam da mesma forma. O que est\u00e1 mudando \u00e9 a maneira como interagimos com elas.<\/p>\n<p>As ferramentas de IA est\u00e3o come\u00e7ando a parecer menos caixas de chat e mais interfaces. Este servidor MCP \u00e9 um pequeno exemplo dessa mudan\u00e7a. Ele n\u00e3o introduz novas funcionalidades. Ele exp\u00f5e as existentes de uma forma que se adapta \u00e0 maneira como as pessoas realmente trabalham.<\/p>\n<p>Para onde isso vai a seguir depende de voc\u00ea. Voc\u00ea pode manter as coisas simples e somente leitura. Pode adicionar mais automa\u00e7\u00e3o com aprova\u00e7\u00f5es e guardrails. Ou pode conectar o mesmo servidor a outras ferramentas no seu fluxo de trabalho.<\/p>\n<p>\u00c0 medida que voc\u00ea explora novas ferramentas e fluxos de trabalho como este, ter uma base s\u00f3lida de hospedagem \u00e9 fundamental. A \u00faltima coisa que voc\u00ea quer \u00e9 perder tempo lidando com quedas ou problemas de desempenho em vez de criar e melhorar os seus sites.<\/p>\n<p>A Kinsta oferece hospedagem gerenciada para WordPress que mant\u00e9m seus sites funcionando de forma confi\u00e1vel, mesmo quando voc\u00ea est\u00e1 off-line. Voc\u00ea pode explorar nossos <a href=\"https:\/\/kinsta.com\/pt\/precos\/\">planos de hospedagem<\/a> ou <a href=\"https:\/\/kinsta.com\/pt\/falar-com-vendas\/\">falar com nossa equipe de vendas<\/a> para encontrar o plano ideal para voc\u00ea.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea gerencia muitos sites WordPress, est\u00e1 sempre procurando a pr\u00f3xima maneira f\u00e1cil de reduzir o tempo que gasta acessando pain\u00e9is e clicando em uma s\u00e9rie &#8230;<\/p>\n","protected":false},"author":287,"featured_media":74778,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[951],"class_list":["post-74777","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>Crie um servidor MCP para controlar a hospedagem WordPress com IA<\/title>\n<meta name=\"description\" content=\"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA\" \/>\n<meta property=\"og:description\" content=\"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-17T12:27:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T14:47:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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\/pt\/blog\/mcp-server-kinsta-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA\",\"datePublished\":\"2026-03-17T12:27:47+00:00\",\"dateModified\":\"2026-03-23T14:47:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\"},\"wordCount\":2442,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\",\"name\":\"Crie um servidor MCP para controlar a hospedagem WordPress com IA\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"datePublished\":\"2026-03-17T12:27:47+00:00\",\"dateModified\":\"2026-03-23T14:47:12+00:00\",\"description\":\"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crie um servidor MCP para controlar a hospedagem WordPress com IA","description":"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/","og_locale":"pt_PT","og_type":"article","og_title":"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA","og_description":"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.","og_url":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2026-03-17T12:27:47+00:00","article_modified_time":"2026-03-23T14:47:12+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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":"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI-1024x512.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Joel Olawanle","Tempo estimado de leitura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA","datePublished":"2026-03-17T12:27:47+00:00","dateModified":"2026-03-23T14:47:12+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/"},"wordCount":2442,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/","url":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/","name":"Crie um servidor MCP para controlar a hospedagem WordPress com IA","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","datePublished":"2026-03-17T12:27:47+00:00","dateModified":"2026-03-23T14:47:12+00:00","description":"Crie seu pr\u00f3prio servidor MCP que conecta ferramentas de IA \u00e0 API da Kinsta para gerenciar tarefas de hospedagem WordPress em m\u00faltiplos sites.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2026\/03\/create-your-own-mcp-server-to-control-wordpress-hosting-with-AI.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/mcp-server-kinsta-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/pt\/topicos\/api\/"},{"@type":"ListItem","position":3,"name":"Cria o teu pr\u00f3prio servidor MCP para gerenciar a hospedagem do WordPress com IA"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=74777"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74777\/revisions"}],"predecessor-version":[{"id":74816,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/74777\/revisions\/74816"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/jp"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/de"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/74777\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/74778"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=74777"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=74777"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=74777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}