La forma más rápida de comprender qué es realmente el Model Context Protocol (MCP) en la práctica no es leer extensas especificaciones teóricas ni examinar diapositivas conceptuales. La forma más rápida es enviar una sola solicitud a una URL activa y operativa en la web abierta:
https://wppoland.com/mcp
En esa dirección funciona un servidor Model Context Protocol de producción en nuestro sitio web. Puede enviarle solicitudes POST con formato JSON-RPC 2.0. El servidor responde de inmediato con datos estructurados y tipados. No requiere ningún plugin en el panel de administración de WordPress, no necesita clave de API, no tiene coste y no realiza escrituras en la base de datos.
Si un asistente de IA (como Claude Desktop, Claude Code, Cursor o un agente autónomo de desarrollo) habla MCP, puede consultar directamente nuestros sistemas: ¿Qué servicios ofrecemos realmente? ¿Qué tecnologías admitimos? ¿Cuál es la URL canónica para enviar un brief de proyecto? Lo que no puede hacer es enviar un correo electrónico en su nombre ni insertar clientes potenciales no verificados en nuestro CRM. Esta restricción es la base de nuestro modelo de seguridad de defensa en profundidad.
En esta guía exhaustiva analizamos detalladamente el funcionamiento del endpoint MCP en vivo en wppoland.com, la arquitectura de nuestro servidor gemelo de código abierto woocommerce-mcp, casos de uso empresarial reales para agencias y tiendas online, y lecciones aprendidas en producción en infraestructura edge (incluida la historia de una barra final que eliminaba el 90 % de las solicitudes automáticas).
Por qué un servidor MCP directo cambia las reglas del juego
Las plataformas web tradicionales ya disponen de interfaces de programación. WooCommerce incluye una API REST madura. WordPress expone /wp-json/ desde hace años. Nuestro propio sitio publica un catálogo de servicios legible por máquinas en formato JSON bajo /api/services.json.
¿Por qué, entonces, los asistentes de IA siguen alucinando y perdiendo el contexto cuando se les pregunta sobre una empresa en una ventana de chat habitual?
Los modelos de lenguaje grande (LLM) operan mediante la predicción probabilística de secuencias de texto. Cuando un asistente intenta analizar un sitio web mediante raspado de HTML o pesos de entrenamiento desactualizados, a menudo inventa subpáginas inexistentes, asume servicios que nunca se han ofrecido o proporciona datos de contacto obsoletos. Los documentos HTML están optimizados para el renderizado visual en navegadores humanos: contienen árboles DOM profundos, barras de navegación, estilos CSS, anuncios, rastreadores y avisos de cookies. Cuando un modelo de IA se ve obligado a ingerir decenas de kilobytes de código HTML para extraer tres datos simples, su ventana de contexto se satura de ruido innecesario.
El Model Context Protocol (publicado por Anthropic en noviembre de 2024 y desarrollado bajo la Agentic AI Foundation de la Linux Foundation; especificación: modelcontextprotocol.io) soluciona este problema de raíz. MCP actúa como un estándar universal: el puerto USB para agentes de inteligencia artificial.

De la misma manera que un portátil no necesita un controlador específico para cada fabricante de teclado gracias a los puertos USB normalizados, un asistente de IA necesita un protocolo uniforme para interactuar con herramientas externas. Una herramienta (Tool) en MCP es una operación nombrada y determinista con un esquema JSON estricto para entradas y salidas.
Cuando un cliente de IA admite MCP, puede conectarse a cualquier servidor compatible: un repositorio de código, un gestor de tickets, una base de datos de productos o una web de agencia como wppoland.com.
Esto transforma por completo el desarrollo de integraciones: en lugar de programar conectores a medida para cada plataforma de IA, la empresa publica un único servidor MCP. El cliente descubre dinámicamente las herramientas, genera parámetros válidos y recibe información fidedigna que se incorpora de forma natural a la conversación.
Los tres componentes en términos prácticos: Cliente, servidor y herramienta
Una arquitectura MCP consta de tres elementos fundamentales:
- El Cliente (Client): La aplicación con la que interactúa el usuario (Claude Desktop, Claude Code, Cursor IDE, Windsurf). Gestiona la ventana de contexto, interpreta la intención del usuario y decide cuándo invocar una herramienta determinada. Gestiona el ciclo de vida de la conexión y transmite las respuestas de forma segura al modelo de lenguaje.
- El Servidor (Server): Un programa ligero o función en el edge (en wppoland.com, una Cloudflare Pages Function) que publica el manifiesto de herramientas y ejecuta las solicitudes recibidas. El servidor no es WordPress ni un plugin PHP. Funciona de manera aislada en nodos perimetrales distribuidos globalmente con latencias mínimas.
- La Herramienta (Tool): Una acción determinista única. En nuestro endpoint público se ofrecen dos herramientas:
check_servicesyrequest_quote. Cada herramienta posee un identificador único, una descripción semántica clara para orientar al LLM y un esquema JSON riguroso para la validación de parámetros.
El flujo de trabajo es directo: el cliente inicializa la sesión (initialize) para verificar capacidades y versiones de protocolo. A continuación consulta las herramientas disponibles (tools/list). Cuando el usuario realiza una pregunta que requiere información estructurada, el modelo genera los parámetros correspondientes y el cliente ejecuta la llamada (tools/call). El servidor procesa la consulta de manera determinista y devuelve JSON estructurado, a partir del cual el modelo sintetiza una respuesta precisa y fundamentada.
Interacción paso a paso desde la terminal
Puede probar el endpoint directamente desde la terminal con curl sin necesidad de escribir código de orquestación de IA:
curl -s -X POST https://wppoland.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
La respuesta devuelve el manifiesto con las herramientas y sus esquemas JSON Schema correspondientes:
{
"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"
}
}
}
}
]
}
}

Al abrir https://wppoland.com/mcp en el navegador, una petición GET apunta a la tarjeta de descubrimiento oficial:
https://wppoland.com/.well-known/mcp/server-card.json

Esta tarjeta de descubrimiento informa a los agentes de que el transporte es Streamable HTTP, no se requiere autenticación previa y las capacidades se limitan estrictamente a tools (sin declarar secciones vacías de resources o prompts). Omitir capacidades no implementadas es una buena práctica indispensable para evitar bloqueos y reintentos innecesarios en librerías de clientes.
Configuración en Claude Desktop, Cursor IDE y agentes modernos
La integración del endpoint en los entornos de desarrollo habituales se realiza en cuestión de segundos.
Configuración para Claude Desktop
En el archivo claude_desktop_config.json (en macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"wppoland": {
"url": "https://wppoland.com/mcp/"
}
}
}
Configuración para Cursor IDE
En el archivo .cursor/mcp.json en la raíz del proyecto o en la configuración global:
{
"mcpServers": {
"wppoland": {
"url": "https://wppoland.com/mcp/"
}
}
}

Tras reiniciar el asistente, puede preguntar: “¿Qué servicios de optimización de WooCommerce y desarrollo de servidores MCP ofrece WPPoland?”. El asistente invoca check_services con query: "woocommerce" y devuelve enlaces canónicos reales.
Configuración en Claude Code CLI y Windsurf
Los asistentes de terminal y editores modernos admiten endpoints HTTP de MCP de forma nativa. En Claude Code, basta con ejecutar:
claude mcp add wppoland https://wppoland.com/mcp/
De este modo, el agente de línea de comandos puede consultar catálogos de servicios y solicitar presupuestos estructurados directamente durante el flujo de programación.
Lección de producción: La barra final que rompía el 90 % del tráfico
JSON-RPC a través de HTTP requiere peticiones POST con cuerpo (body). Muchos servidores web y motores estáticos redirigen automáticamente (301) las rutas sin barra final (/mcp) a rutas con barra (/mcp/).
Muchos clientes automatizados fallaban ante esto:
- Algunas librerías abortaban la conexión inmediatamente al recibir un código 301, tratándolo como un error irrecuperable de protocolo.
- Otras seguían la redirección pero convertían la petición en un GET, descartando por completo el cuerpo POST. El servidor recibía una petición GET vacía y devolvía un error.
En la especificación HTTP (RFC 7231 / RFC 9110), el código 301 permite históricamente que el cliente mute el método de POST a GET. Únicamente los códigos 307 Temporary Redirect y 308 Permanent Redirect obligan a conservar el método y los datos. Muchos clientes en Python (requests, aiohttp), Go o clientes embebidos en asistentes convierten el POST en GET durante la redirección 301, perdiendo el payload JSON-RPC.
Nuestras mediciones registraron 29 llamadas fallidas al día frente a solo 2 exitosas en la ruta sin barra.
La solución: Una regla de zona en Cloudflare (Transform / URL Rewrite Rule) que procesa las solicitudes POST a /mcp directamente sin redirección y devuelve un estado HTTP 200 limpio. La tasa de éxito pasó inmediatamente al 100 %.
Conclusión fundamental: Las herramientas habituales de analítica web (como Google Analytics) no detectan estos fallos porque los bots de IA no ejecutan JavaScript en el cliente. La observabilidad a nivel de cabeceras HTTP en el edge es imprescindible.
Arquitectura de seguridad: Por qué el solo lectura es innegociable
Los responsables técnicos suelen plantear una duda clave: “¿Puede un asistente de IA alterar pedidos, eliminar tablas o modificar precios accidentalmente?”.
En wppoland.com/mcp esto es imposible, ya que el endpoint carece de funciones de mutación o escritura.
La herramienta request_quote devuelve información estructurada y precisa:
{
"contact_url": "https://wppoland.com/es/contacto/?source=mcp",
"method": "web-form",
"note": "Endpoint de solo lectura. Envíe la consulta a través del formulario de contacto; esta herramienta no envía mensajes automáticamente.",
"suggested_message": "Solicitud de presupuesto: desarrollo de servidor MCP. Por favor incluir alcance y tecnología.",
"reply_time": "en un plazo de un día laborable"
}

¿Por qué no envía un correo electrónico directamente?
- Protección contra spam: Un servidor abierto con capacidad de envío se convertiría en objetivo de granjas de spam en cuestión de horas.
- Defensa contra inyecciones de prompts: Instrucciones maliciosas no pueden forzar cambios de estado si el controlador carece de rutinas de escritura.
- Defensa en profundidad: Las acciones vinculantes se canalizan a través de formularios seguros protegidos por CAPTCHA/Turnstile y validaciones en servidor.
El homólogo para tiendas: El paquete de código abierto woocommerce-mcp
Para tiendas WooCommerce, hemos creado y publicado el paquete de código abierto:

https://github.com/wppoland/woocommerce-mcp
Disponible en npm como @wppoland/woocommerce-mcp (MIT, TypeScript), se comunica directamente con las API REST oficiales utilizando claves de solo lectura, proporcionando cinco herramientas:

list_products: Búsqueda en el catálogo por categoría y estado de stock.get_product: Obtención de detalles completos de producto por ID.list_orders: Consulta de pedidos recientes con filtros de estado (processing,on-hold).sales_report: Agregación de cifras de ventas y totales por rangos de fecha.search_posts: Búsqueda en artículos de blog y base de conocimientos vía WordPress REST API.
Implementación en TypeScript con validación 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,
})));
},
);


Dos aspectos esenciales de diseño:
- Restricción por enumerados:
z.enumimpide que los modelos alucinen estados inexistentes comoalmost-paid. - Minimización de payload: Las respuestas crudas de WooCommerce superan a menudo 30 KB por pedido con datos sensibles. El servidor reduce el objeto a metadatos operativos, ahorrando tokens y protegiendo datos personales (RGPD).
Regla del flujo stdio en servidores locales
En servidores stdio locales, todos los registros de depuración deben enviarse estrictamente a stderr. Enviar una sola línea de registro a stdout corrompe las tramas JSON-RPC e interrumpe la comunicación con el cliente de IA.
Implementación técnica: Creación de una función edge personalizada de MCP en TypeScript
Para equipos de ingeniería que deseen desplegar un servidor MCP ligero y robusto en Cloudflare Pages Functions o Cloudflare Workers sin depender de marcos pesados, esta implementación de referencia ofrece una solución completa:
// functions/mcp.ts - Servidor MCP de solo lectura en 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 servicios de WPPoland para WordPress y WooCommerce: ID, nombre, descripción, categoría y URL canónica.",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: "Término opcional para filtrar por nombre, descripción o categoría.",
},
lang: {
type: "string",
enum: ["pl", "en", "de", "nb", "es", "pt-pt"],
description: "Idioma de destino para títulos y URLs.",
},
},
},
},
{
name: "request_quote",
description: "Obtiene la URL canónica de contacto e instrucciones para solicitud de presupuesto. Seguridad de solo lectura.",
inputSchema: {
type: "object",
properties: {
lang: { type: "string", enum: ["pl", "en", "de", "nb", "es", "pt-pt"], description: "Idioma de preferencia." },
project_type: { type: "string", description: "Alcance opcional del proyecto o ID de servicio." },
},
},
},
];
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: "Error al procesar 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 ?? "es");
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 ?? "es");
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 de solo lectura. Las consultas se gestionan a través de formularios 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: `Herramienta no 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 no encontrado: ${method}` } }), {
status: 404,
headers: { "Content-Type": "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*" },
});
};
Esta implementación cubre todos los códigos de error estándar de JSON-RPC 2.0 (-32700 para errores de parseo, -32600 para peticiones inválidas, -32601 para métodos desconocidos y -32602 para parámetros inválidos), aprovechando las ventajas de ejecución perimetral de Cloudflare.
La estructura desacoplada facilita la adición de nuevas herramientas de consulta sin interferir con el núcleo del protocolo. Además, la carga de datos puede sincronizarse de forma asíncrona mediante Cloudflare KV o archivos estáticos generados durante la compilación, garantizando que el servidor de producción nunca sufra picos de carga imprevistos.
Análisis detallado del protocolo JSON-RPC 2.0 en el edge
La base operativa del Model Context Protocol es la especificación JSON-RPC 2.0. A diferencia de las arquitecturas REST, donde los recursos están ligados a rutas y verbos HTTP, JSON-RPC define una envoltura homogénea con cuatro campos clave:
- jsonrpc: Debe contener exactamente la cadena
"2.0". Las solicitudes con versiones distintas se rechazan con el código -32600 (Invalid Request). - id: Un identificador único (entero o cadena) generado por el cliente. El servidor lo refleja en su respuesta para permitir la correlación en clientes asíncronos. Si se omite, se procesa como una notificación (Notification) sin respuesta.
- method: El nombre de la operación solicitada (
initialize,tools/listotools/call). - params: Un objeto estructurado que contiene los parámetros de entrada.
En caso de error, el servidor entrega un objeto estandarizado:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Parámetros inválidos: el campo 'lang' debe ser uno de los códigos de idioma admitidos.",
"data": {
"allowed": ["pl", "en", "de", "nb", "es", "pt-pt"]
}
}
}
Esta rigurosidad garantiza la interoperabilidad con todos los SDK oficiales de MCP y previene bloqueos imprevistos en los agentes de IA.
Patrones de caché y sincronización de datos en el edge
Canalizar cada llamada de herramienta directamente a la base de datos MySQL de WordPress supone un riesgo de sobrecarga ante consultas repetitivas de agentes.
Nuestra arquitectura en Cloudflare Edge implementa una estrategia de tres capas:
- Generación estática en el proceso de compilación: El catálogo de servicios se procesa y se empaqueta en archivos JSON optimizados durante el despliegue.
- Cloudflare Cache API: Las llamadas sin parámetros complejos se almacenan en la memoria caché perimetral (
caches.default), logrando respuestas en menos de 15 ms. - Invalidación dirigida por eventos: Cuando se edita una entrada en WordPress, un webhook purga selectivamente las etiquetas de caché afectadas en Cloudflare.
Este desacoplamiento protege por completo el servidor de origen frente a picos repentinos de tráfico de bots y agentes.
Telemetría, observabilidad y monitorización en tiempo real en el edge (/mcp?stats=true)
En entornos de producción, es fundamental contar con métricas precisas sin degradar el rendimiento ni registrar datos personales. Utilizamos un búfer circular en memoria en las instancias Worker:
// Recopilación de telemetría en el 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;
}
Los administradores pueden inspeccionar el estado en tiempo real ejecutando en su terminal:
curl -s "https://wppoland.com/mcp?stats=true" | jq .
La respuesta desglosa métodos ejecutados, herramientas más demandadas, clientes principales (Claude Code, Cursor, Windsurf) y distribución geográfica (cf-ipcountry) sin necesidad de consultar bases de datos pesadas.
Blindaje de seguridad: Defensas contra prompt injection y filtrado RGPD
Exponer herramientas a modelos de lenguaje exige una estrategia de defensa en profundidad. Como los modelos procesan instrucciones y datos en la misma ventana de atención, un comentario malicioso o una reseña manipulada podrían intentar ejecutar ataques de inyección de prompts.
Cuatro principios para servidores MCP seguros:
- Validación estricta con esquemas Zod: Cada argumento debe ajustarse a esquemas con límites de longitud y expresiones regulares. Cualquier campo inesperado es rechazado antes de su procesamiento.
- Escape de delimitadores de contexto: El contenido textual devuelto se sanea para evitar que fragmentos de texto simulen instrucciones del sistema.
- Filtrado de datos personales (Zero-PII / RGPD): Direcciones de correo, números de teléfono y detalles de pago se eliminan en el edge antes de enviarse al modelo de lenguaje.
- Respuestas JSON concisas: Las herramientas entregan datos compactos y estructurados en lugar de código HTML extenso, evitando alucinaciones y ahorrando tokens de cómputo.
// Esquema de validación 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: "La consulta contiene caracteres no permitidos",
}).optional(),
category: z.string().trim().max(50).optional(),
limit: z.number().int().min(1).max(25).default(10),
});
Gracias a este diseño, el asistente de IA recibe datos limpios, estables y sin fugas de privacidad, garantizando la inviolabilidad del backend de WordPress y el cumplimiento íntegro del RGPD.
Comparativa: Model Context Protocol frente a Function Calling propietario
| Dimensión de evaluación | Model Context Protocol (MCP) | Function Calling propietario (OpenAI / aislado) |
|---|---|---|
| Estandarización | Estándar abierto respaldado por la Linux Foundation | Formatos propietarios específicos de cada proveedor |
| Interoperabilidad | Un solo servidor sirve para Claude, Cursor, Windsurf, Zed, CLI | Requiere código adaptador específico para cada modelo |
| Transportes soportados | Streamable HTTP, SSE (Server-Sent Events), stdio | Peticiones HTTPS POST tradicionales con cargas a medida |
| Descubrimiento de herramientas | Negociación dinámica mediante tools/list en tiempo de ejecución | Definiciones estáticas fijadas en los prompts del cliente |
| Dependencia de proveedor | Cero dependencia; implementaciones abiertas en TS, Python, Go | Fuerte acoplamiento con la API del proveedor contratado |
| Compatibilidad con el edge | Se ejecuta nativamente en Cloudflare Pages, Workers, Vercel, Node | Suele requerir servidores dedicados o proxies de backend |
| Mantenimiento | Una actualización del servidor actualiza todos los clientes | Cada aplicación cliente requiere ajustes individuales |
El gran beneficio de MCP radica en su portabilidad: un único servicio desplegado en el edge queda inmediatamente disponible para cualquier cliente actual o futuro compatible con el estándar, sin rehacer integraciones.
Comparativa técnica de transportes: stdio frente a Streamable HTTP frente a SSE
| Característica | Transporte Stdio | Streamable HTTP (wppoland.com) | Server-Sent Events (SSE) |
|---|---|---|---|
| Entorno | Local (Desktop / CLI) | Edge Functions / Cloud | Servidores backend dedicados |
| Latencia | < 5 ms | 20 - 50 ms (Edge) | 50 - 150 ms (Con estado) |
| Seguridad | Límites de proceso local | Protección pública de solo lectura | Tokens Bearer / OAuth |
| Configuración | Binario Node local | URL directa en el cliente | Infraestructura de servidor requerida |
| Mantenimiento | Actualizaciones en el host | Cero configuración para clientes | Conexiones persistentes |
Cuatro casos de uso prácticos para comercio electrónico y agencias
Caso de uso 1: Asistente operativo para tiendas online
Desafío: Los gestores de e-commerce dedican tiempo valioso a iniciar sesión en WordPress, aplicar filtros y revisar pedidos en estado on-hold.
Solución: Claude Desktop conectado a woocommerce-mcp.
Consulta en lenguaje natural:
“Revisa los últimos 10 pedidos con estado on-hold. Calcula el importe total e identifica los productos afectados.”
Flujo de herramientas:
- El asistente invoca
list_orders(status="on-hold", per_page=10). - El servidor MCP devuelve identificadores y totales sin datos PII.
- Para los artículos clave se invoca
get_product(id=...). - El asistente sintetiza una tabla ejecutiva clara en segundos.
Caso de uso 2: Triaje de consultas B2B para agencias
Desafío: Clientes potenciales y agentes de análisis consultan capacidades técnicas concretas (p. ej., migraciones a Google Merchant API o auditorías de Core Web Vitals). Las búsquedas internas a menudo devuelven artículos descontextualizados.
Solución: El agente del cliente consulta directamente https://wppoland.com/mcp.
Flujo de trabajo:
- El agente invoca
check_services(query="merchant", lang="es"). - Recibe la descripción del servicio y la URL canónica.
- Invoca
request_quote(project_type="mcp-server-development", lang="es"). - Presenta al usuario una respuesta con enlace directo al formulario (
?source=mcp).
Caso de uso 3: Soporte al cliente de primer nivel
Desafío: El equipo de soporte necesita verificar rápidamente existencias y variantes durante conversaciones en Slack o Zendesk sin necesidad de disponer de privilegios de administrador en WordPress.
Solución: Bot de Slack integrado con MCP para ejecutar list_products y get_product.
Beneficios:
- Respuesta en menos de 300 ms directamente en Slack con el comando
/stock SKU-4410. - Reducción del 70 % en tiempos de atención y protección total del backend.
Caso de uso 4: Orquestación de contenido en WordPress Headless
Desafío: En arquitecturas headless (Astro/Next.js como frontend, WordPress como CMS), los redactores y agentes de IA deben confirmar que nuevos artículos no generen canibalización SEO con temas ya tratados.
Solución: Ejecutar search_posts antes de generar nuevos borradores.
Proceso:
- El agente ejecuta
search_posts(query="Core Web Vitals"). - Revisa artículos y fechas de actualización existentes.
- El nuevo texto se redacta enlazando de forma orgánica a los pilares temáticos existentes.
Arquitectura de producción: Separación recomendada de responsabilidades
Para implementaciones corporativas con WordPress, WooCommerce y asistentes de IA, recomendamos una división clara en tres niveles:
- Registro transaccional (Catalogue of Record): Reside en la base de datos de WooCommerce o en el ERP integrado (SAP, Microsoft Dynamics). La IA nunca debe inventar precios ni estimar inventarios.
- Capa de contenido editorial: Se gestiona en WordPress o en archivos Markdown/MDX para optimizar el flujo editorial.
- Capa de herramientas MCP: Desplegada como funciones en el edge (Cloudflare Workers / Pages) con limitación estricta de peticiones (rate limiting) y reglas de caché, evitando que consultas de agentes sobrecarguen el proceso de compra durante periodos de alta demanda.
Lo que no es MCP: Mitos y conceptos erróneos frecuentes
- No es un widget de chat para la web: Un widget de chat interactúa con usuarios humanos en el navegador. MCP es una interfaz máquina a máquina para agentes de IA y entornos de desarrollo.
- No sustituye a las integraciones ERP: La sincronización bidireccional entre SAP y WooCommerce requiere tuberías deterministas. MCP facilita consultas puntuales de análisis, no réplicas masivas de datos.
- No garantiza automáticamente el cumplimiento del RGPD: Las claves de solo lectura acceden a registros de clientes; el servidor MCP debe limpiar activamente los datos PII antes de entregarlos al LLM.
- No reemplaza a los desarrolladores experimentados: Las personalizaciones complejas, la optimización de bases de datos y la seguridad siguen requiriendo supervisión profesional especializada.
Conclusión y próximos pasos
Implementar wppoland.com/mcp y publicar woocommerce-mcp en GitHub demuestra que abrir WordPress a los agentes de IA es factible de forma segura, escalable y sin sobrecargar la infraestructura.
Al adoptar el estándar Model Context Protocol y una arquitectura perimetral de solo lectura, los sitios web y tiendas online se preparan para la nueva generación de herramientas de IA.
Consulte nuestros servicios de desarrollo de servidores MCP para WordPress o pruebe el endpoint directamente desde su terminal.






