Saltar al contenido

MCP Shield

Llamadas y resultados de herramientas, revisados en el borde.

MCP Shield lee el JSON-RPC entre los clientes de IA y tu propio servidor MCP. Aplica listas de métodos y herramientas permitidos, revisa los argumentos y los resultados de las herramientas en busca de inyección de instrucciones y de credenciales filtradas, y limita las peticiones por token. Se activa por endpoint y empieza en modo registro.

Pon tu servidor MCP detrás
OPENWAFMCP Shield

Tu servidor MCP detrás del borde, endpoint a endpoint

Añade a una web un endpoint con kind: mcp. Desde ese momento, cada mensaje JSON-RPC que le llega se compara con tus listas de métodos y herramientas y pasa por los detectores de inyección y de credenciales.

Cómo funciona

Ocho pasos entre el cliente y tu servidor

Un endpoint MCP es una entrada de los endpoints de Bots y agentes de IA de la web con kind: mcp. Primero se aplica la política de Bots y agentes de IA de la web, como a cualquier petición; después, en el primer endpoint cuyo prefijo de ruta y métodos HTTP coinciden:

  1. 1

    Endpoint

    La petición coincide con el prefijo de ruta de tu servidor MCP, por ejemplo /mcp, y con uno de sus métodos HTTP: POST, GET o DELETE.

  2. 2

    Ritmo

    Con un límite por token, la petición se cuenta por minuto primero en un cubo por IP (/64 en IPv6) de 10 veces el límite y después con la cabecera Authorization normalizada, o con la IP del cliente si no la lleva.

  3. 3

    Tamaño

    El cuerpo del POST se lee hasta max_request_kb, 256 KiB por defecto.

  4. 4

    JSON-RPC

    El cuerpo tiene que ser un mensaje JSON-RPC 2.0 o un lote no vacío de ellos.

  5. 5

    Política

    Cada mensaje del cliente con method se compara con los métodos permitidos, y cada tools/call con las herramientas denegadas y permitidas.

  6. 6

    Revisión de la petición

    Los argumentos de las herramientas, los parámetros de resources/read y los argumentos de los prompts pasan por los detectores.

  7. 7

    Tu servidor

    La petición sigue sin cambios, salvo que se le quita Accept-Encoding para que la respuesta llegue legible.

  8. 8

    Revisión de la respuesta

    Las respuestas JSON se revisan enteras; los flujos SSE, evento a evento, y cada evento sigue en cuanto se ha revisado.

Nunca se tocan Mcp-Session-Id, MCP-Protocol-Version, Last-Event-ID, los ids de los eventos SSE, los DELETE, el enmarcado de los flujos GET ni las respuestas 202. MCP Shield no autentica a nadie: tu servidor sigue comprobando sus tokens.

Política

Métodos y herramientas permitidos

Deja pasar solo lo que implementa tu servidor y lo que ese endpoint debe ofrecer. Un endpoint solo necesita su tipo y su prefijo de ruta; el resto de ajustes tiene un valor por defecto.

  • Métodos permitidos

    De 1 a 64 métodos JSON-RPC, exactos o un prefijo como notifications/*. Por defecto, los doce métodos estándar de MCP, de initialize y tools/call a logging/setLevel.

  • Herramientas permitidas y denegadas

    Hasta 200 nombres en cada lista, comparados tal cual con el name de tools/call. Una lista de permitidas vacía deja pasar cualquier herramienta no denegada.

  • Tamaño y ritmo

    Un tope del cuerpo de la petición de 1 a 1024 KiB y, si quieres, un límite de peticiones por minuto por token. Cada nodo del borde cuenta por su cuenta: con N nodos, un token puede llegar a N veces el límite.

El mismo cambio se hace desde el panel (Control de rastreadores IA → MCP Shield), la API y la herramienta ai_agents_settings del servidor MCP de OpenWAF. La lista de endpoints se sustituye entera, y cada cambio es una nueva versión de la configuración con su motivo. Todos los campos están en la referencia de ajustes.

Revisión

Qué se revisa y qué no

Patrones deterministas, no un modelo. Frenan las formas conocidas de inyección de instrucciones y de fuga de credenciales; no demuestran que un mensaje sea seguro.

Se revisa

  • inspect_requestsDel cliente al servidor: los argumentos de tools/call y prompts/get y los parámetros de resources/read.
  • inspect_responsesDel servidor al cliente: todas las cadenas de result y error de las respuestas a peticiones con id, también las descripciones de tools/list, y los params de las peticiones del propio servidor (sampling/createMessage, elicitation/create).

Familias de detectores

  • pi.*Anulación de instrucciones, extracción del prompt de sistema, jailbreaks, mensajes de sistema, llamadas a herramientas y turnos falsificados, saltarse la aprobación, órdenes en comentarios HTML o en texto codificado.
  • agent.*Órdenes destructivas como rm -rf / o DROP TABLE.
  • exfil.*Scripts remotos a una shell, recolección de secretos, exfiltración por una imagen o un enlace.
  • hidden.*Caracteres de ancho cero, etiquetas Unicode, texto oculto con CSS.
  • dlp.*Claves de AWS, GitHub, Stripe, Slack, SendGrid, Mailgun, OpenAI, Anthropic y OpenWAF, claves privadas y URL de bases de datos, guardadas recortadas a sus cuatro primeros caracteres.
  • mcp.*La política: método no permitido, herramienta denegada o no permitida, ritmo, JSON ilegible, petición no válida, cuerpo demasiado grande.

Los mismos 27 detectores de inyección que la protección de endpoints de IA de OpenWAF, en inglés y en español. Cada uno solo se ejecuta si aparece alguna de sus palabras clave.

No se revisa

  • Lo que ningún patrón describe: paráfrasis, otros idiomas y codificaciones que los detectores no cubren. No hay clasificador semántico ni modelo de lenguaje.
  • El contenido de las notificaciones, en ninguna de las dos direcciones. Las del cliente sí pasan por los métodos permitidos.
  • Las respuestas del cliente a sampling/createMessage y elicitation/create. Esas peticiones del servidor sí se revisan, pero solo se registran; nunca se sustituyen.
  • Las respuestas JSON y los eventos SSE de más de 2 MiB, y las respuestas que siguen llegando comprimidas. Pasan tal cual y se cuentan como no revisadas.
  • Los cuerpos de más de max_request_kb en modo registro (en modo aplicar reciben un 413).
  • Los parámetros de otros métodos, como completion/complete, logging/setLevel y los métodos de listado.
  • Las cabeceras y la query string. Las URI de los recursos y los nombres de los prompts no tienen lista de permitidos ni de denegados.
  • El propio token: MCP Shield nunca lo valida; lo valida tu servidor.

Despliegue

Primero registra, después aplica

El modo de Bots y agentes de IA de la web decide si el borde actúa; cada ajuste de revisión, off, log o block, decide qué hacer con una detección. En modo registro no se bloquea nada, digan lo que digan los ajustes de revisión.

  1. 1

    Empieza en registro

    Modo registro y las dos revisiones en log, los valores por defecto. Manda tráfico real unos días y mira el informe, los eventos y las respuestas no revisadas.

  2. 2

    Ajusta la política

    Quita los métodos que tu servidor no implementa, deniega las herramientas que ese endpoint no debe ofrecer y pon un límite por token por encima de tu pico legítimo.

  3. 3

    Revisa la política de bots

    En modo aplicar se aplica al endpoint antes que MCP Shield. Los clientes MCP hechos con SDK de Node.js o de Python suelen contar como unverified_automation.

  4. 4

    Aplica la política

    Pasa el modo a aplicar: métodos, herramientas, tamaño y ritmo se aplican. La revisión en log sigue solo registrando.

  5. 5

    Bloquea, si quieres

    Pon la revisión en block solo después de mirar sus eventos: un resultado que cita con razón un texto de ataque se sustituiría por un error.

El servidor MCP de OpenWAF, mcp.openwaf.dev, es el primer endpoint detrás de MCP Shield. Siguió estos mismos pasos: primero en registro y después aplicando la política de métodos, con la revisión de los resultados de herramientas en log y sus eventos como alerta.

Errores JSON-RPC

Bloqueos que el cliente puede enseñar, sin tirar la sesión

Los clientes MCP tratan un error HTTP como un fallo del transporte. Por eso los bloqueos de política y de revisión responden HTTP 200 con un error JSON-RPC que lleva el id de la petición bloqueada: el asistente lo enseña en esa llamada y la sesión sigue.

Cada respuesta en modo aplicar

  • 200 · -32601Método fuera de los permitidos
  • 200 · -32602Herramienta denegada, o fuera de una lista de permitidas no vacía
  • 200 · -32001Inyección o credencial en la petición, con la revisión de peticiones en block
  • -32001Inyección o credencial en la respuesta, con la revisión de respuestas en block: ese mensaje, o ese evento SSE, se sustituye con el mismo id y el estado de tu servidor
  • 429 · -32000Por encima del límite por token, con Retry-After
  • 413 · -32600Cuerpo de más de max_request_kb
  • 400 · -32700El cuerpo no es JSON (id null)
  • 400 · -32600JSON pero no JSON-RPC 2.0, o un lote vacío (id null)
  • 202Una notificación bloqueada, sin cuerpo

Qué recibe el cliente

blocked by OpenWAF MCP Shield: seguido de los ids de las detecciones. error.data.openwaf repite el tipo de evento y los ids, así que un cliente distingue un bloqueo del escudo de un error de tu servidor.

{"jsonrpc": "2.0", "id": 7,
 "error": {"code": -32602,
   "message": "blocked by OpenWAF MCP Shield: mcp.tool_denied",
   "data": {"openwaf": {"kind": "mcp_blocked_tool",
                        "detections": ["mcp.tool_denied"]}}}}

Lotes: si se bloquea algún mensaje, el borde responde el lote entero y no llega nada a tu servidor. Los mensajes bloqueados llevan su error; las demás peticiones con id, -32600 batch rejected by OpenWAF MCP Shield.

En modo registro no se envía ninguna de estas respuestas: el mensaje pasa y su evento se guarda con blocked: false. Todos los códigos y tipos de evento están en la página de errores y eventos.

Eventos y documentación

Mira qué bloquearía

Cada salto de la política y cada detección deja un evento y un contador, en modo registro igual que en modo aplicar.

Eventos y contadores

  • Cada evento lleva el método JSON-RPC, la herramienta, los ids de los detectores y una huella del token: los 8 primeros bytes de un HMAC-SHA256 de Authorization con una clave por zona, nunca el token.
  • Contadores por endpoint (mensajes, bloqueados, detecciones, no revisadas) y por herramienta, hasta 50 herramientas.
  • Eventos de seguridad en directo con la regla MCP Shield y 30 días de historial.
  • En el panel (Control de rastreadores IA → MCP Shield), la API, openwaf-cloud ctl ai mcp y la herramienta MCP ai_agents_report.

Pon tu servidor MCP detrás del borde.

MCP Shield forma parte de Bots y agentes de IA en OpenWAF, gratis durante el acceso anticipado. Añade un endpoint MCP en modo registro y mira qué bloquearía antes de que bloquee nada.