# MCP Shield

> MCP Shield revisa el tráfico de tu servidor MCP en el borde de OpenWAF: política de métodos y herramientas, inyección, fugas de credenciales y límite por token.

MCP Shield es una capa del borde de OpenWAF que entiende MCP. Publicas tu propio servidor MCP (Model Context Protocol, transporte Streamable HTTP) detrás de OpenWAF, declaras su ruta como **endpoint MCP** y el borde lee cada mensaje JSON-RPC que pasa: comprueba qué métodos y herramientas se llaman, 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.

Forma parte de [Bots y agentes de IA](https://developers.openwaf.dev/es/ai-crawl-control/) y sigue el mismo interruptor: viene desactivado, se activa por endpoint y empieza en **modo registro**, en el que solo anota lo que haría.

## Por qué un servidor MCP necesita sus propias comprobaciones

Un modelo lee como contexto lo que le devuelve un servidor MCP y decide con ello a qué herramienta llamar después. Eso abre riesgos que un cortafuegos de API normal no mira:

| Riesgo | Cómo llega | Qué hace MCP Shield |
|---|---|---|
| Inyección indirecta de instrucciones | Texto escrito por un tercero dentro del resultado de una herramienta, de un recurso, de un prompt o de la descripción de una herramienta: «ignore previous instructions», etiquetas `<system>` falsas, órdenes de llamar a otra herramienta sin preguntar al usuario, enlaces de exfiltración | Revisa las cadenas de cada respuesta y sustituye el mensaje envenenado por un error JSON-RPC si eliges `block` |
| Métodos o herramientas no previstos | Un cliente, o un modelo manipulado, llama a una herramienta que ese endpoint no debería ofrecer, por ejemplo una destructiva | Lista de métodos permitidos y listas de herramientas permitidas y denegadas |
| Fugas de credenciales | Claves de API, claves privadas o URL de bases de datos en los argumentos o en los resultados | Patrones DLP en las peticiones y en las respuestas |
| Clientes abusivos | Un token que lanza cientos de llamadas por minuto | Peticiones por minuto por token |
| Mensajes malformados o enormes | Cuerpos que no son JSON-RPC o que no caben | Tope de tamaño y validación JSON-RPC |

MCP Shield no autentica a nadie: tu servidor MCP sigue comprobando sus tokens. El borde solo usa un hash SHA-256 de la cabecera `Authorization` para contar las peticiones y para la huella de los eventos.

## Qué le pasa a una petición

1. **Endpoint.** Se aplica el primer endpoint de la lista del sitio (de IA o MCP) cuyo prefijo coincide con la ruta y cuyos métodos HTTP incluyen el de la petición.
2. **Ritmo.** Con límite por token, la petición cuenta para `sha256(Authorization)` (la IP del cliente si no hay esa cabecera).
3. **Tamaño.** El cuerpo del `POST` se lee hasta el tope del endpoint.
4. **JSON-RPC.** El cuerpo tiene que ser un mensaje JSON-RPC 2.0 o un lote (array) no vacío.
5. **Política.** Cada mensaje del cliente con `method` se compara con los métodos permitidos; los nombres de `tools/call`, con las listas de herramientas.
6. **Revisión de la petición.** Argumentos de las herramientas, parámetros de `resources/read` y argumentos de los prompts.
7. **Tu servidor.** La petición sigue sin cambios, salvo que se le quita `Accept-Encoding` para que la respuesta llegue legible.
8. **Revisión de la respuesta.** Las respuestas JSON se leen enteras (hasta 2 MiB); las `text/event-stream`, evento a evento según llegan, y cada evento se reenvía en cuanto está revisado.


Las cabeceras de sesión (`Mcp-Session-Id`, `MCP-Protocol-Version`, `Last-Event-ID`), los ids de los eventos SSE, las peticiones `DELETE`, el enmarcado de los flujos `GET` y las respuestas `202` nunca se tocan.

## Registro y aplicar

El modo de Bots y agentes de IA del sitio decide si el borde actúa:

- **Registro:** no se bloquea nada. Cada infracción de la política y cada detección quedan como evento y como contador, para ver qué haría el modo aplicar.
- **Aplicar:** el borde responde él mismo a las llamadas fuera de la política y, donde la revisión está en `block`, rechaza la petición o sustituye la respuesta.

Los bloqueos son errores JSON-RPC con el id de la petición bloqueada, así que tu cliente MCP enseña el error en esa llamada y la sesión sigue. La [página de errores](https://developers.openwaf.dev/es/mcp-shield/errors-and-events/) recoge cada código.

> **Atención: Patrones, no un modelo**
>
> Los detectores son expresiones regulares deterministas en inglés y en español. Frenan formas conocidas de inyección y de credenciales; no demuestran que un mensaje sea seguro, y las paráfrasis o codificaciones que no cubren pasan. Mira [qué detecta y qué no](https://developers.openwaf.dev/es/mcp-shield/detection/).


## Nuestro propio servidor MCP

El [servidor MCP de OpenWAF](https://developers.openwaf.dev/es/mcp/), `mcp.openwaf.dev`, es el primer endpoint detrás de MCP Shield. Funciona primero en modo registro, como se recomienda aquí, antes de que ninguna parte pase a aplicar.

## Siguientes pasos

- [Activar MCP Shield](https://developers.openwaf.dev/es/mcp-shield/enable/): pon un endpoint detrás desde el panel, la CLI, la API o tu asistente de IA.
- [Ajustes y modos](https://developers.openwaf.dev/es/mcp-shield/settings/): cada ajuste, su valor por defecto y cómo se combinan los modos con la revisión.
- [Qué detecta y qué no](https://developers.openwaf.dev/es/mcp-shield/detection/): el texto revisado, los detectores y los huecos.
- [Errores y eventos](https://developers.openwaf.dev/es/mcp-shield/errors-and-events/): qué recibe el cliente y qué ves tú.
- [Preguntas frecuentes](https://developers.openwaf.dev/es/mcp-shield/faq/): respuestas cortas a las dudas habituales.
