wppoland.com/mcp como servidor MCP ao vivo: arquitetura, integrações e casos de uso práticos para WordPress e comércio eletrónico
PT-PT

wppoland.com/mcp como servidor MCP ao vivo: arquitetura, integrações e casos de uso práticos para WordPress e comércio eletrónico

Última verificação: 21 de agosto de 2026
24 min de leitura
Guia
500+ projetos WP
Integração IA

A forma mais rápida de compreender o que é realmente o Model Context Protocol (MCP) na prática não é ler extensas especificações teóricas nem examinar diapositivos gerados por computador. A forma mais rápida é enviar um único pedido para um URL ativo e funcional na web aberta:

https://wppoland.com/mcp

Nesse endereço funciona um servidor Model Context Protocol de produção no nosso site. Pode enviar pedidos POST com formato JSON-RPC 2.0. O servidor responde imediatamente com dados estruturados e tipados. Não requer nenhum plugin no painel de administração do WordPress, não precisa de chave de API, não tem custos e não realiza escritas na base de dados.

Se um assistente de IA (como o Claude Desktop, Claude Code, Cursor ou um agente autónomo de desenvolvimento) suporta MCP, pode consultar diretamente os nossos sistemas: Que serviços oferecemos realmente? Que tecnologias suportamos? Qual é o URL canónico para submeter um brief de projeto? O que o assistente não pode fazer é enviar um email em seu nome ou criar leads não verificadas no nosso CRM. Esta restrição é a base do nosso modelo de segurança de defesa em profundidade.

Neste guia aprofundado analisamos detalhadamente o funcionamento do endpoint MCP ao vivo em wppoland.com, a arquitetura do nosso servidor irmão de código aberto woocommerce-mcp, casos de uso empresarial reais para agências e lojas online, e lições aprendidas em produção na infraestrutura edge (incluindo a história da barra final que eliminava 90 % dos pedidos de agentes).


#Por que um servidor MCP direto muda as regras do jogo

As plataformas web tradicionais já dispõem de interfaces de programação. O WooCommerce inclui uma API REST madura. O WordPress disponibiliza /wp-json/ há muitos anos. O nosso próprio site publica um catálogo de serviços legível por máquinas em formato JSON sob /api/services.json.

Por que motivo, então, os assistentes de IA continuam a alucinar e a perder o contexto quando questionados sobre uma empresa numa janela de chat habitual?

Os grandes modelos de linguagem (LLM) operam através da previsão probabilística de sequências de texto. Quando um assistente tenta analisar um site através de extração de HTML ou dados de treino desatualizados, frequentemente inventa subpáginas inexistentes, assume serviços que nunca foram prestados ou fornece dados de contacto obsoletos. Os documentos HTML são desenhados para apresentação visual a utilizadores humanos: possuem estruturas DOM complexas, menus de navegação, cabeçalhos, banners de cookies, scripts analíticos e estilizações visuais. Quando um LLM é forçado a ler 50 kilobytes de HTML para extrair três serviços, a janela de contexto é inundada por ruído desnecessário.

O Model Context Protocol (publicado pela Anthropic em novembro de 2024 e gerido sob a Agentic AI Foundation da Linux Foundation; especificação: modelcontextprotocol.io) resolve este problema fundamentalmente. O MCP atua como um padrão universal - a porta USB para agentes de inteligência artificial.

Arquitetura do Model Context Protocol ligando assistentes de IA a sistemas

Assim como um computador portátil não necessita de um driver específico para cada fabricante de teclado graças às portas USB normalizadas, um assistente de IA precisa de um protocolo uniforme para interagir com ferramentas externas. Uma ferramenta (Tool) no MCP é uma operação nomeada e determinística com um esquema JSON rigoroso para entradas e saídas.

Quando um cliente de IA suporta MCP, pode ligar-se a qualquer servidor compatível: um repositório de código, um gestor de tickets, uma base de dados de produtos ou um site de agência como o wppoland.com.

Isto transforma por completo o desenvolvimento de integrações: em vez de programar conectores feitos à medida para cada plataforma de IA, a empresa publica um único servidor MCP. O cliente descobre dinamicamente as ferramentas, gera parâmetros válidos e recebe informação fidedigna que se incorpora de forma natural na conversa.


#Os três componentes em termos práticos: Cliente, servidor e ferramenta

Uma arquitetura MCP é constituída por três elementos fundamentais:

  1. O Cliente (Client): A aplicação com a qual o utilizador interage (Claude Desktop, Claude Code, Cursor IDE, Windsurf). Gere a janela de contexto, interpreta a intenção do utilizador e decide quando invocar uma ferramenta específica. O cliente gere o ciclo de vida da ligação e entrega as respostas diretamente ao fluxo de raciocínio do modelo.
  2. O Servidor (Server): Um programa leve ou função na edge (em wppoland.com, uma Cloudflare Pages Function) que publica o manifesto de ferramentas e executa os pedidos recebidos. O servidor não é o WordPress nem um plugin PHP. Corre de forma isolada em nós de edge distribuídos globalmente com latências mínimas.
  3. A Ferramenta (Tool): Uma ação determinística única. No nosso endpoint público são disponibilizadas duas ferramentas: check_services e request_quote. Cada ferramenta possui um nome exclusivo, uma descrição semântica clara e um esquema JSON estrito para a validação dos parâmetros.

O ciclo de vida de uma sessão MCP inicia-se com o passo de inicialização (initialize), negociando versões do protocolo e verificando capacidades. De seguida, o cliente consulta o inventário de ferramentas (tools/list). Quando o utilizador formula um pedido que necessita de dados estruturados, o modelo prepara os parâmetros válidos e o cliente executa a invocação (tools/call). O servidor executa a lógica e devolve JSON estruturado, a partir do qual o modelo gera uma resposta clara e contextualizada.


#Interação passo a passo a partir do terminal

Pode testar o endpoint diretamente a partir do terminal com curl sem necessidade de escrever código de orquestração de IA:

curl -s -X POST https://wppoland.com/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

A resposta devolve o manifesto com as ferramentas e os respetivos esquemas JSON Schema:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "check_services",
        "description": "List or search WPPoland services catalog with localized canonical URLs.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Optional search term to filter services"
            },
            "lang": {
              "type": "string",
              "enum": ["pl", "en", "de", "nb", "es", "pt-pt"],
              "description": "Target language for service titles and URLs"
            }
          }
        }
      },
      {
        "name": "request_quote",
        "description": "Get localized contact URL and brief submission instructions.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "project_type": {
              "type": "string",
              "description": "Type of project (e.g. mcp-server-development, woocommerce, audit)"
            },
            "lang": {
              "type": "string",
              "enum": ["pl", "en", "de", "nb", "es", "pt-pt"],
              "description": "Preferred language for the inquiry"
            }
          }
        }
      }
    ]
  }
}

Resposta do tools/list no terminal a partir do endpoint wppoland.com/mcp

Ao abrir https://wppoland.com/mcp no navegador, um pedido GET aponta para o cartão de descoberta:

https://wppoland.com/.well-known/mcp/server-card.json

Resposta GET com estado do servidor e link para o cartão discovery

Este cartão confirma que o transporte é Streamable HTTP, que a autenticação não é necessária e que o servidor disponibiliza unicamente capacidades de tools (sem declarações vazias de resources ou prompts). Omitir capacidades não implementadas é uma boa prática indispensável para evitar bloqueios e revalidações desnecessárias por parte dos clientes.


#Configuração no Claude Desktop, Cursor IDE e agentes modernos

A integração do endpoint ao vivo com os ambientes de desenvolvimento requer apenas algumas linhas de configuração.

#Configuração para Claude Desktop

No ficheiro claude_desktop_config.json (no macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "wppoland": {
      "url": "https://wppoland.com/mcp/"
    }
  }
}

#Configuração para Cursor IDE

No ficheiro .cursor/mcp.json na raiz do projeto ou nas definições globais:

{
  "mcpServers": {
    "wppoland": {
      "url": "https://wppoland.com/mcp/"
    }
  }
}

Configuração do servidor MCP de wppoland no Claude Desktop e Cursor

Após reiniciar o assistente, pode perguntar: “Que serviços de otimização de WooCommerce e desenvolvimento de servidores MCP disponibiliza a WPPoland?”. O assistente invoca check_services com query: "woocommerce" e devolve links canónicos reais.

#Configuração no Claude Code CLI e Windsurf

Assistentes de linha de comandos e novos editores como o Claude Code e o Windsurf ligam-se a endpoints MCP sem complicações. No Claude Code, basta executar:

claude mcp add wppoland https://wppoland.com/mcp/

Assim, o agente de terminal obtém acesso imediato a todo o catálogo de competências e links de brief durante a sessão de programação.


#Lição de produção: A barra final que quebrava 90 % do tráfego

O JSON-RPC através de HTTP exige pedidos POST com corpo (body). Muitos servidores web e motores estáticos redirecionam automaticamente (301) caminhos sem barra final (/mcp) para caminhos com barra (/mcp/).

Muitos clientes automatizados falhavam perante isto:

  • Algumas bibliotecas cancelavam a ligação imediatamente ao receberem um código 301, interpretando o redirecionamento como um erro irrecuperável de protocolo.
  • Outras seguiam o redirecionamento, mas convertiam o pedido num GET, descartando por completo o corpo do POST. O servidor recebia um pedido GET vazio e respondia com erro.

Na especificação HTTP (RFC 7231 / RFC 9110), o código 301 permite historicamente que o cliente mute o método de POST para GET. Apenas os códigos 307 Temporary Redirect e 308 Permanent Redirect forçam estritamente a preservação do método original e do corpo do pedido. Muitos clientes automáticos em Python (requests, aiohttp), Go ou embutidos em assistentes convertem o POST em GET ao receberem 301, descartando os dados JSON-RPC.

As nossas medições registaram 29 chamadas falhadas por dia contra apenas 2 com sucesso no caminho sem barra.

A solução: Uma regra de zona na Cloudflare (Transform / URL Rewrite Rule) que processa os pedidos POST para /mcp diretamente sem redirecionamento e devolve o estado HTTP 200. A taxa de sucesso subiu imediatamente para 100 %.

Conclusão essencial: Ferramentas convencionais de analítica web (como o Google Analytics) não identificam estas quebras porque os bots de IA não executam JavaScript. A telemetria perimetral na camada HTTP é indispensável.


#Arquitetura de segurança: Por que o só de leitura é innegociável

A primeira questão colocada por diretores de tecnologia e proprietários de lojas é: “Um assistente de IA pode acidentalmente alterar encomendas, apagar tabelas ou modificar preços?”.

No wppoland.com/mcp isso é inviável, dado que o endpoint não possui rotinas de escrita ou mutação.

A ferramenta request_quote devolve informações estruturadas e precisas:

{
  "contact_url": "https://wppoland.com/pt-pt/contacto/?source=mcp",
  "method": "web-form",
  "note": "Endpoint só de leitura. Envie a mensagem através do formulário de contacto; esta ferramenta não envia emails automaticamente.",
  "suggested_message": "Pedido de orçamento: desenvolvimento de servidor MCP. Por favor incluir âmbito e stack tecnológico.",
  "reply_time": "no prazo de um dia útil"
}

Resposta estruturada da ferramenta request_quote em JSON

Por que motivo não envia um email diretamente?

  1. Prevenção de spam: Um endpoint aberto com envio de mensagens seria alvo de bots e scripts maliciosos em poucas horas.
  2. Defesa contra injeção de prompts: Instruções maliciosas não podem forçar alterações na base de dados se a rotina do handler for desprovida de comandos de escrita.
  3. Defesa em profundidade: Ações formais são canalizadas para formulários com validação e proteção antibot (Cloudflare Turnstile ou reCAPTCHA).

#O homólogo para lojas: O pacote open-source woocommerce-mcp

Para lojas WooCommerce, criámos e publicámos o pacote open-source:

Servidor woocommerce-mcp open source para WordPress e WooCommerce

https://github.com/wppoland/woocommerce-mcp

Disponível no npm como @wppoland/woocommerce-mcp (MIT, TypeScript), comunica diretamente com as APIs REST do WooCommerce utilizando chaves só de leitura, fornecendo cinco ferramentas:

Chaves REST API do WooCommerce com permissões de Read-only

  • list_products: Pesquisa no catálogo por categoria e estado de stock.
  • get_product: Obtenção de detalhes completos do produto por ID.
  • list_orders: Consulta de encomendas recentes com filtros de estado (processing, on-hold).
  • sales_report: Agregação de números de vendas e totais por períodos de datas.
  • search_posts: Pesquisa em artigos de blog e base de conhecimento via WordPress REST API.

#Implementação em TypeScript com validação Zod

import { z } from "zod";

server.registerTool(
  "list_orders",
  {
    title: "List orders",
    description: "List recent WooCommerce orders, newest first. Optionally filter by status.",
    inputSchema: {
      per_page: z.number().int().min(1).max(100).optional(),
      status: z.enum([
        "any", "pending", "processing", "on-hold",
        "completed", "cancelled", "refunded", "failed"
      ]).optional(),
    },
  },
  async ({ per_page, status }) => {
    const cfg = loadConfig(true);
    const data = await wc(cfg, "orders", {
      per_page: per_page ?? 10,
      status,
      orderby: "date",
      order: "desc",
    });
    
    return ok(data.map((order) => ({
      id: order.id,
      number: order.number,
      status: order.status,
      total: order.total,
      currency: order.currency,
      date_created: order.date_created,
      item_count: order.line_items?.length ?? 0,
    })));
  },
);

Arquitetura de fluxo de dados entre assistente de IA, servidor MCP e loja WooCommerce

Repositório woocommerce-mcp no GitHub com licença MIT

Dois detalhes cruciais de segurança:

  1. Restrições com enumerados: O uso de z.enum impede que o modelo alucine estados inválidos como almost-paid.
  2. Minimização do payload: Objetos originais de encomendas no WooCommerce ultrapassam facilmente 30 KB com moradas e notas. O handler filtra apenas o essencial, poupando tokens e assegurando conformidade com o RGPD.

#Regra de ouro para fluxos stdio

Em servidores stdio locais, todos os registos e mensagens de depuração devem ser enviados exclusivamente para stderr. Enviar um único caractere para stdout danifica a estrutura do protocolo JSON-RPC e provoca falhas imediatas de ligação no cliente.


#Implementação técnica: Criação de uma função edge personalizada de MCP em TypeScript

Para equipas de engenharia que pretendam criar um servidor MCP perimetral robusto em Cloudflare Pages Functions ou Cloudflare Workers sem frameworks pesados, esta implementação serve como modelo completo:

// functions/mcp.ts - Servidor MCP só de leitura em Cloudflare Pages Functions
import type { PagesFunction } from "@cloudflare/workers-types";

interface JsonRpcRequest {
  jsonrpc: string;
  id?: string | number | null;
  method: string;
  params?: Record<string, unknown>;
}

interface JsonRpcResponse {
  jsonrpc: "2.0";
  id: string | number | null;
  result?: unknown;
  error?: { code: number; message: string; data?: unknown };
}

const SERVER_CARD = {
  name: "wppoland-mcp",
  version: "1.0.0",
  title: "WPPoland MCP Production Server",
};

const TOOLS = [
  {
    name: "check_services",
    description: "Catálogo de serviços da WPPoland para WordPress e WooCommerce: ID, nome, descrição, categoria e URL canónico.",
    inputSchema: {
      type: "object",
      properties: {
        query: {
          type: "string",
          description: "Termo opcional para filtrar por nome, descrição ou categoria.",
        },
        lang: {
          type: "string",
          enum: ["pl", "en", "de", "nb", "es", "pt-pt"],
          description: "Idioma pretendido para títulos e URLs.",
        },
      },
    },
  },
  {
    name: "request_quote",
    description: "Devolve o URL canónico de contacto e diretrizes para solicitação de orçamento. Segurança só de leitura.",
    inputSchema: {
      type: "object",
      properties: {
        lang: { type: "string", enum: ["pl", "en", "de", "nb", "es", "pt-pt"], description: "Idioma preferencial." },
        project_type: { type: "string", description: "Âmbito opcional do projeto ou ID do serviço." },
      },
    },
  },
];

export const onRequestPost: PagesFunction = async (context) => {
  let body: JsonRpcRequest;
  try {
    body = await context.request.json();
  } catch {
    return new Response(JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "Erro ao processar JSON" } }), {
      status: 400,
      headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" },
    });
  }

  const { id = null, method, params } = body;

  if (method === "initialize") {
    return new Response(JSON.stringify({
      jsonrpc: "2.0",
      id,
      result: {
        protocolVersion: "2025-06-18",
        capabilities: { tools: { listChanged: false } },
        serverInfo: SERVER_CARD,
      },
    }), { headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" } });
  }

  if (method === "tools/list") {
    return new Response(JSON.stringify({
      jsonrpc: "2.0",
      id,
      result: { tools: TOOLS },
    }), { headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" } });
  }

  if (method === "tools/call") {
    const toolName = String(params?.name ?? "");
    const args = (params?.arguments as Record<string, unknown>) ?? {};

    if (toolName === "check_services") {
      const q = String(args.query ?? "").toLowerCase().trim();
      const lang = String(args.lang ?? "pt-pt");
      const services = await fetchCatalog(new URL(context.request.url).origin, lang);
      const filtered = q ? services.filter(s => `${s.name} ${s.description}`.toLowerCase().includes(q)) : services;
      return new Response(JSON.stringify({
        jsonrpc: "2.0",
        id,
        result: { content: [{ type: "text", text: JSON.stringify({ count: filtered.length, services: filtered }, null, 2) }] },
      }), { headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" } });
    }

    if (toolName === "request_quote") {
      const lang = String(args.lang ?? "pt-pt");
      return new Response(JSON.stringify({
        jsonrpc: "2.0",
        id,
        result: {
          content: [{
            type: "text",
            text: JSON.stringify({
              contact_url: `https://wppoland.com/${lang}/contacto/`,
              method: "web-form",
              note: "Endpoint só de leitura. Os pedidos são processados através de formulários verificados.",
            }, null, 2),
          }],
        },
      }), { headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" } });
    }

    return new Response(JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32602, message: `Ferramenta não encontrada: ${toolName}` } }), {
      status: 400,
      headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" },
    });
  }

  return new Response(JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32601, message: `Método não encontrado: ${method}` } }), {
    status: 404,
    headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" },
  });
};

Esta implementação suporta os códigos de erro JSON-RPC 2.0 (-32700 para erro de parse, -32600 para pedido inválido, -32601 para método inexistente e -32602 para parâmetros incorretos), tirando total partido do ambiente Cloudflare.

A estrutura desacoplada facilita a adição de novas ferramentas de consulta sem interferir com o núcleo do protocolo. Além disso, os dados podem ser sincronizados de forma assíncrona através do Cloudflare KV ou ficheiros estáticos gerados durante o build, assegurando que o servidor de produção nunca sofre picos de carga imprevistos.


#Análise detalhada do protocolo JSON-RPC 2.0 na edge

O alicerce do Model Context Protocol é o protocolo leve JSON-RPC 2.0. Ao contrário de interfaces REST, onde os recursos dependem de URLs e verbos HTTP, o JSON-RPC adota uma estrutura previsível com quatro propriedades:

  • jsonrpc: Deve conter o valor "2.0". Qualquer pedido com versão divergente é rejeitado com o código de erro -32600 (Invalid Request).
  • id: Um identificador numérico ou de texto gerado pelo cliente. O servidor inclui o mesmo ID no payload de resposta para permitir a sincronização em clientes assíncronos. Se for omitido, o pedido é tratado como uma notificação simples sem retorno.
  • method: O nome da operação requerida (initialize, tools/list ou tools/call).
  • params: O objeto contendo os argumentos validados pelo esquema.

Em situações de erro, o servidor emite uma estrutura transparente:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Parâmetros inválidos: o campo 'lang' deve conter um código de idioma suportado.",
    "data": {
      "allowed": ["pl", "en", "de", "nb", "es", "pt-pt"]
    }
  }
}

Esta consistência previne falhas de ligação e garante conformidade total com todos os clientes e bibliotecas da Agentic AI Foundation.


#Padrões de cache e sincronização de dados na edge

Enviar cada pedido de ferramenta diretamente para o MySQL do WordPress pode degradar a base de dados quando múltiplos agentes realizam varrimentos automáticos.

A nossa infraestrutura na Cloudflare Edge aplica uma estratégia em três patamares:

  1. Geração estática durante a integração contínua: O catálogo é compilado em ficheiros JSON localizados antes do deployment.
  2. Cloudflare Cache API: Consultas repetitivas a ferramentas são armazenadas na cache perimetral (caches.default), com tempos de resposta inferiores a 15 ms.
  3. Invalidação seletiva por eventos: Ao atualizar um artigo ou serviço no WordPress, um webhook aciona a purga das tags de cache relevantes na Cloudflare.

Desta forma, o WordPress Origin permanece totalmente isolado de picos de tráfego de agentes e robôs de IA.


#Telemetria, observabilidade e monitorização em tempo real na edge (/mcp?stats=true)

Em ambientes empresariais, é essencial dispor de visibilidade clara sobre as invocações de máquinas sem degradar a velocidade de execução nem armazenar dados confidenciais:

// Telemetria leve em memória na edge
interface TelemetryRecord {
  timestamp: string;
  method: string;
  tool?: string;
  client: string;
  country: string;
  durationMs: number;
}

const stats = {
  totalRequests: 0,
  toolsCalled: {} as Record<string, number>,
  topClients: {} as Record<string, number>,
};

export function recordMcpInvocation(req: Request, method: string, tool?: string, durationMs = 0) {
  stats.totalRequests++;
  if (tool) stats.toolsCalled[tool] = (stats.toolsCalled[tool] || 0) + 1;

  const ua = req.headers.get("user-agent") || "unknown";
  const clientName = parseClientName(ua, req.headers.get("x-client-name"));
  stats.topClients[clientName] = (stats.topClients[clientName] || 0) + 1;
}

Os administradores do sistema podem monitorizar a atividade em tempo real executando no terminal:

curl -s "https://wppoland.com/mcp?stats=true" | jq .

A resposta apresenta os métodos invocados, ferramentas mais procuradas, clientes dominantes (Claude Code, Cursor, Windsurf) e origens geográficas (cf-ipcountry) sem qualquer sobrecarga de bases de dados relacionais.


#Blindagem de segurança: Defesas contra prompt injection e filtragem RGPD

Disponibilizar ferramentas a agentes autónomos exige princípios rigorosos de defesa em profundidade. Uma vez que o modelo processa instruções e respostas no mesmo contexto de atenção, conteúdos maliciosos em avaliações ou notas poderiam tentar manipular o comportamento do assistente.

#Quatro princípios para servidores MCP seguros:

  1. Validação estrita com Zod: Todos os parâmetros recebidos são validados por esquemas com limites de comprimento e expressões regulares. Campos não declarados são descartados de imediato.
  2. Sanitização de delimitadores de contexto: Respostas em texto e Markdown são limpas para evitar que textos injetados simulem instruções de sistema.
  3. Princípio Zero-PII (RGPD): Emails de clientes, números de telefone e endereços são totalmente removidos na edge antes de os dados chegarem ao modelo.
  4. JSON compacto em vez de HTML: As ferramentas entregam objetos estruturados e concisos, diminuindo o consumo de tokens e prevenindo erros de interpretação.
// Esquema de validação Zod para consultas seguras
import { z } from "zod";

export const ProductQuerySchema = z.object({
  query: z.string().trim().max(100).regex(/^[a-zA-Z0-9\s\-_]+$/, {
    message: "A pesquisa contém caracteres não permitidos",
  }).optional(),
  category: z.string().trim().max(50).optional(),
  limit: z.number().int().min(1).max(25).default(10),
});

Graças a este desenho, o assistente de IA recebe dados limpos, estáveis e sem fugas de privacidade, garantindo a inviolabilidade do backend do WordPress e o cumprimento integral do RGPD.


#Comparação: Model Context Protocol vs. Function Calling proprietário

Dimensão de análiseModel Context Protocol (MCP)Function Calling proprietário (OpenAI / isolado)
NormalizaçãoPadrão aberto gerido pela Linux FoundationFormatos proprietários e exclusivos de cada fornecedor
InteroperabilidadeUm único servidor funciona em Claude, Cursor, Windsurf, Zed, CLIRequer código de adaptação específico para cada modelo
Transportes suportadosStreamable HTTP, SSE (Server-Sent Events), stdioChamadas HTTPS REST POST clássicas com envelopes fechados
Descoberta de ferramentasNegociação dinâmica através de tools/list em tempo realDefinições estáticas inseridas nos prompts do cliente
Dependência do fornecedorZero dependência; implementações abertas em TS, Python, GoElevada dependência das APIs do fornecedor contratado
Compatibilidade na edgeExecução nativa em Cloudflare Pages, Workers, Vercel, NodeFrequentemente exige servidores dedicados ou proxies backend
ManutençãoUma atualização no servidor reflete-se em todos os clientesCada aplicação cliente tem de ser revista a cada mudança

O grande benefício do MCP reside na sua portabilidade: um único serviço publicado na edge fica imediatamente disponível para qualquer cliente presente ou futuro compatível com o padrão, sem retrabalho.


#Comparação técnica de transportes: stdio vs. Streamable HTTP vs. SSE

CaracterísticaTransporte StdioStreamable HTTP (wppoland.com)Server-Sent Events (SSE)
AmbienteLocal (Desktop / CLI)Edge Functions / NuvemServidores backend dedicados
Latência< 5 ms20 - 50 ms (Edge)50 - 150 ms (Com estado)
SegurançaLimites de processo localProteção pública só de leituraTokens Bearer / OAuth
ConfiguraçãoBinário Node localURL direto no clienteInfraestrutura de servidor necessária
ManutençãoAtualizações no hostZero configuração para clientesLigações persistentes

#Quatro casos de uso práticos para comércio eletrónico e agências

#Caso de uso 1: Assistente operacional para comércio eletrónico

Desafio: Os gestores de lojas despendem tempo excessivo no painel de administração do WordPress a filtrar tabelas e a identificar encomendas com estado on-hold.

Solução: Claude Desktop ligado ao woocommerce-mcp.

Pedido em linguagem natural:

“Analisa as últimas 10 encomendas com estado on-hold. Calcula o valor total e identifica os produtos em falta.”

Execução das ferramentas:

  1. O assistente invoca list_orders(status="on-hold", per_page=10).
  2. O servidor MCP devolve identificadores e totais sem dados PII.
  3. Para artigos relevantes, invoca get_product(id=...).
  4. O assistente gera uma tabela executiva clara em segundos.

#Caso de uso 2: Triagem de consultas B2B para agências

Desafio: Clientes potenciais e agentes de pesquisa consultam competências técnicas específicas (por exemplo, migrações para Google Merchant API ou auditorias Core Web Vitals). Os motores de busca internos devolvem frequentemente excertos desajustados.

Solução: O agente consulta diretamente https://wppoland.com/mcp.

Processo:

  1. O agente invoca check_services(query="merchant", lang="pt-pt").
  2. Obtém a descrição oficial e o URL canónico da solução.
  3. Invoca request_quote(project_type="mcp-server-development", lang="pt-pt").
  4. Apresenta ao utilizador um link estruturado para o formulário de brief (?source=mcp).

#Caso de uso 3: Suporte ao cliente de primeiro nível

Desafio: A equipa de atendimento precisa de verificar stock e variantes durante conversas no Slack ou Zendesk sem ter acesso de administrador ao painel do WordPress.

Solução: Bot de Slack integrado com MCP para executar list_products e get_product.

Vantagens:

  • Consulta imediata em menos de 300 ms através do comando /stock SKU-4410.
  • Redução de 70 % nos tempos de resposta e proteção absoluta da área de administração.

#Caso de uso 4: Orquestração de conteúdo em WordPress Headless

Desafio: Em plataformas headless (Astro/Next.js com WordPress), os redatores e agentes de escrita devem garantir que novos artigos não causam canibalização de SEO com temas já abordados.

Solução: Invocar search_posts antes da criação de novos textos.

Processo:

  • O agente executa search_posts(query="Core Web Vitals").
  • Analisa artigos e datas de publicação existentes.
  • O novo conteúdo é estruturado com links internos para os pilares existentes.

#Arquitetura de produção: Separação recomendada de responsabilidades

Para implementações sólidas com WordPress, WooCommerce e agentes de IA, recomendamos a divisão em três camadas:

  1. Registo transacional (Catalogue of Record): Permanece na base de dados do WooCommerce ou no ERP integrado (SAP, Primavera, Microsoft Dynamics). O modelo de IA nunca deve estimar preços ou inventar existências em armazém.
  2. Camada de conteúdo editorial: Gerida no WordPress ou em ficheiros estáticos Markdown/MDX.
  3. Camada de ferramentas MCP: Implementada como funções perimetrais (Cloudflare Workers / Pages) com limitação de pedidos (rate limiting) e regras de cache, garantindo que consultas automatizadas não afetam o processo de checkout dos clientes humanos.

#O que o MCP não é: Mitos e conceitos errados frequentes

  • Não é um widget de chat para o site: Um widget de chat comunica com utilizadores no navegador. O MCP é uma interface máquina a máquina para agentes de IA e ferramentas de desenvolvimento.
  • Não substitui a integração com ERP: A sincronização de dados entre SAP e WooCommerce exige pipelines determinísticos. O MCP permite consultas pontuais para análise, não transferências massivas de dados.
  • Não garante automaticamente a conformidade com o RGPD: Chaves de leitura acedem a registos de compras; o servidor MCP tem de filtrar proativamente os dados pessoais antes de os passar ao LLM.
  • Não dispensa programadores experientes: Configurações avançadas, manutenção de temas, índices de base de dados e segurança continuam a depender de conhecimento técnico qualificado.

#Conclusão e próximos passos

Disponibilizar o WordPress e o WooCommerce a agentes de inteligência artificial através de wppoland.com/mcp e do woocommerce-mcp no GitHub é um processo seguro, escalável e sem impacto na infraestrutura.

Ao adotar o protocolo aberto Model Context Protocol e uma arquitetura perimetral só de leitura, websites e lojas online preparam-se eficazmente para a nova geração de ferramentas de inteligência artificial.

Conheça os nossos serviços de desenvolvimento de servidores MCP para WordPress ou experimente o endpoint diretamente a partir do seu terminal.

Próximo passo

Transforme o artigo numa implementação real

Este bloco reforça a ligação interna e conduz o leitor para o passo seguinte mais útil dentro da arquitetura do site.

Quer implementar isto no seu site?

Se está a planear headless WordPress, desacoplamento de frontend ou migração para Astro, posso desenhar e implementar a arquitetura completa.

Cluster relacionado

Explorar outros serviços WordPress e base de conhecimento

Reforce o seu negócio com suporte técnico profissional em áreas-chave do ecossistema WordPress.

O que é exatamente o endpoint https://wppoland.com/mcp?#
É um servidor Model Context Protocol (MCP) em produção acessível publicamente que corre na edge através de Cloudflare Pages Functions. Responde a pedidos POST JSON-RPC 2.0 sem exigir chave de API e disponibiliza duas ferramentas tipadas só de leitura: check_services e request_quote.
Por que motivo um servidor MCP público deve ser estritamente só de leitura?#
Permitir operações de escrita num endpoint aberto cria riscos imediatos de ataques de spam e modificações de estado descontroladas por modelos LLM alucinantes. A ferramenta request_quote devolve um URL de formulário localizado com parâmetros de atribuição, deixando a ação final nas mãos humanas.
Em que difere o wppoland.com/mcp do servidor open-source woocommerce-mcp?#
O endpoint wppoland.com é um servidor leve HTTP na edge para o catálogo de serviços de marketing. Em contraste, woocommerce-mcp (@wppoland/woocommerce-mcp no npm) é um servidor local stdio em TypeScript para lojas WooCommerce que comunica com a API REST oficial com chaves só de leitura.
Os assistentes de IA podem danificar a base de dados ou alterar encomendas?#
Não. O princípio só de leitura é aplicado estritamente ao nível do esquema, nos controladores e nas permissões da API (chaves WooCommerce Read-only, sem manipuladores de mutação em JSON-RPC).
Que requisitos técnicos um cliente deve cumprir para se ligar?#
O cliente deve suportar o transporte Streamable HTTP ou pedidos HTTP POST padrão com payloads JSON-RPC 2.0. Isto é suportado nativamente pelo Claude Desktop, Claude Code, Cursor IDE e bibliotecas de clientes MCP.

Precisa de FAQ adaptado ao setor e mercado? Criamos uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados

O seu site como servidor MCP só de leitura

Transformámos um site de marketing estático num servidor Model Context Protocol ativo e só de leitura em POST /mcp. Não uma loja, um site de conteúdos: porque o fizemos, a Cloudflare Pages Function que o executa, JSON-RPC feito à mão sem qualquer SDK, e a postura de segurança só de leitura por trás da ferramenta request_quote.

Cloudflare Workers e WordPress: servir o WooCommerce na edge

O Cloudflare Workers executa JavaScript e WebAssembly em centenas de centros de dados em mais de 100 países. Combinar Workers com uma origem WordPress retira o caminho de leitura do servidor WordPress e transforma o WooCommerce numa loja renderizada na edge. Eis como funciona a arquitetura, onde quebra e o que medir antes de adoptar.