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.

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:
- 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.
- 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.
- A Ferramenta (Tool): Uma ação determinística única. No nosso endpoint público são disponibilizadas duas ferramentas:
check_serviceserequest_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"
}
}
}
}
]
}
}

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

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/"
}
}
}

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"
}

Por que motivo não envia um email diretamente?
- Prevenção de spam: Um endpoint aberto com envio de mensagens seria alvo de bots e scripts maliciosos em poucas horas.
- 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.
- 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:

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:

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,
})));
},
);


Dois detalhes cruciais de segurança:
- Restrições com enumerados: O uso de
z.enumimpede que o modelo alucine estados inválidos comoalmost-paid. - 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/listoutools/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:
- Geração estática durante a integração contínua: O catálogo é compilado em ficheiros JSON localizados antes do deployment.
- Cloudflare Cache API: Consultas repetitivas a ferramentas são armazenadas na cache perimetral (
caches.default), com tempos de resposta inferiores a 15 ms. - 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:
- 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.
- Sanitização de delimitadores de contexto: Respostas em texto e Markdown são limpas para evitar que textos injetados simulem instruções de sistema.
- 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.
- 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álise | Model Context Protocol (MCP) | Function Calling proprietário (OpenAI / isolado) |
|---|---|---|
| Normalização | Padrão aberto gerido pela Linux Foundation | Formatos proprietários e exclusivos de cada fornecedor |
| Interoperabilidade | Um único servidor funciona em Claude, Cursor, Windsurf, Zed, CLI | Requer código de adaptação específico para cada modelo |
| Transportes suportados | Streamable HTTP, SSE (Server-Sent Events), stdio | Chamadas HTTPS REST POST clássicas com envelopes fechados |
| Descoberta de ferramentas | Negociação dinâmica através de tools/list em tempo real | Definições estáticas inseridas nos prompts do cliente |
| Dependência do fornecedor | Zero dependência; implementações abertas em TS, Python, Go | Elevada dependência das APIs do fornecedor contratado |
| Compatibilidade na edge | Execução nativa em Cloudflare Pages, Workers, Vercel, Node | Frequentemente exige servidores dedicados ou proxies backend |
| Manutenção | Uma atualização no servidor reflete-se em todos os clientes | Cada 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ística | Transporte Stdio | Streamable HTTP (wppoland.com) | Server-Sent Events (SSE) |
|---|---|---|---|
| Ambiente | Local (Desktop / CLI) | Edge Functions / Nuvem | Servidores backend dedicados |
| Latência | < 5 ms | 20 - 50 ms (Edge) | 50 - 150 ms (Com estado) |
| Segurança | Limites de processo local | Proteção pública só de leitura | Tokens Bearer / OAuth |
| Configuração | Binário Node local | URL direto no cliente | Infraestrutura de servidor necessária |
| Manutenção | Atualizações no host | Zero configuração para clientes | Ligaçõ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:
- O assistente invoca
list_orders(status="on-hold", per_page=10). - O servidor MCP devolve identificadores e totais sem dados PII.
- Para artigos relevantes, invoca
get_product(id=...). - 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:
- O agente invoca
check_services(query="merchant", lang="pt-pt"). - Obtém a descrição oficial e o URL canónico da solução.
- Invoca
request_quote(project_type="mcp-server-development", lang="pt-pt"). - 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:
- 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.
- Camada de conteúdo editorial: Gerida no WordPress ou em ficheiros estáticos Markdown/MDX.
- 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.






