MCP Shield revisa el texto con patrones deterministas. Esta página dice exactamente qué texto, con qué detectores y qué pasa sin que nadie lo mire.
Qué texto se revisa
| Dirección | Ajuste | Texto |
|---|---|---|
| Del cliente al servidor | inspect_requests | params.arguments de tools/call, los params de resources/read, params.arguments de prompts/get |
| Del servidor al cliente | inspect_responses | Todas las cadenas de result y de error de las respuestas del servidor a peticiones con id (resultados de herramientas, contenido de recursos, prompts y las descripciones de herramientas de tools/list), y los params de las peticiones que el servidor manda al cliente (sampling/createMessage, elicitation/create) |
Las respuestas JSON se leen enteras, hasta 2 MiB. Los flujos de eventos del servidor (text/event-stream, de un POST o del flujo GET) se revisan evento a evento según llegan; cada evento se reenvía en cuanto está revisado, así que el streaming y el vaciado del búfer siguen funcionando.
Inyección de instrucciones y exfiltración
Los mismos 27 detectores que protegen los endpoints de IA, en inglés y en español. Cada uno solo se ejecuta si aparece alguna de sus palabras clave en el texto, así que el tráfico normal se salta casi todos. Sus ids empiezan por:
pi.: anulación de instrucciones, extracción del prompt de sistema, personajes y modos de jailbreak, avisos de sistema o de cumplimiento falsos, órdenes de ocultar algo al usuario, tokens de plantilla de chat, llamadas, resultados de herramientas y turnos de conversación falsificados, envenenamiento de memoria, órdenes de llamar a una herramienta, saltarse la aprobación, e instrucciones dentro de comentarios HTML, en base64 o codificadas por porcentaje o en hexadecimal.agent.: órdenes destructivas comorm -rf /oDROP TABLE.exfil.: scripts remotos pasados a una shell, recolección de secretos, envío de datos del equipo, exfiltración por una imagen o un enlace renderizados.hidden.: texto escondido a quien lee: caracteres de ancho cero, caracteres de etiqueta Unicode, texto oculto con CSS.
Fugas de credenciales (DLP)
| Id | Qué encuentra |
|---|---|
dlp.aws_access_key | Ids de clave de acceso de AWS (AKIA…) |
dlp.github_token | Tokens personales y de servidor de GitHub (ghp_…, ghs_…) |
dlp.stripe_secret_key, dlp.stripe_test_key | Claves secretas de Stripe (sk_live_…, sk_test_…) |
dlp.private_key | Cabeceras de clave privada PEM |
dlp.database_url | URL de conexión de PostgreSQL, MySQL y MongoDB |
dlp.slack_token | Tokens de Slack (xox…) |
dlp.sendgrid_key, dlp.mailgun_key | Claves de SendGrid y Mailgun |
dlp.openai_key, dlp.anthropic_key | Claves de proyecto, de cuenta de servicio y de administración de OpenAI, claves de Anthropic (sk-ant-…) |
dlp.openwaf_token, dlp.openwaf_egress_token | Tokens de API de OpenWAF (owf_…) y marcadores de OpenWAF Egress (OWE_TOKEN_…) |
dlp.generic_api_secret | Un valor entre comillas de 20 caracteres o más asignado a api_secret o secret_key |
Un hallazgo DLP se guarda redactado: solo sus cuatro primeros caracteres seguidos de …. El secreto nunca llega a los eventos, al panel ni a la API.
Comprobaciones de política
Además de la revisión, cada mensaje JSON-RPC del cliente se compara con la política del endpoint. Sus ids de detección son mcp.method_not_allowed, mcp.tool_denied, mcp.tool_not_allowed, mcp.rate_limited, mcp.parse_error, mcp.invalid_request y mcp.too_large.
Qué no se detecta
- Lo que ningún patrón describe. No hay clasificador semántico ni modelo de lenguaje. Las instrucciones parafraseadas, otros idiomas y las codificaciones que los detectores no cubren pasan. Un resultado limpio no demuestra que un mensaje sea seguro.
- Las notificaciones. Su contenido no se revisa, en ninguna dirección. Las del cliente sí pasan por los métodos permitidos.
- Las peticiones del servidor al cliente (
sampling/createMessage,elicitation/create) se revisan pero solo se anotan; nunca se sustituyen. - Las respuestas del cliente a esas peticiones no se revisan.
- Respuestas grandes o codificadas. Una respuesta JSON de más de 2 MiB, un evento SSE de más de 2 MiB y una respuesta que sigue llegando comprimida (
Content-Encoding) pasan sin cambios. El informe las cuenta como sin revisar. - Peticiones grandes en modo registro. Un cuerpo de más de
max_request_kbpasa sin revisar en modo registro; en modo aplicar se rechaza. - Los parámetros de otros métodos.
completion/complete,logging/setLevel, los métodos de listado y el resto solo se comparan con los métodos permitidos. - Recursos y prompts por nombre. Las listas de herramientas solo valen para
tools/call; no hay lista de URI de recursos ni de nombres de prompt. - Cabeceras y query string.
- Autenticación. MCP Shield nunca valida el token; lo hace tu servidor.
Falsos positivos
Una herramienta que devuelve material de seguridad, como registros de ataques bloqueados, una página sobre inyección de instrucciones o un .env de ejemplo, disparará detecciones con contenido legítimo. Por eso la revisión empieza en log: lee primero los ids y los fragmentos de las detecciones en los eventos, y deja block para los endpoints en los que un resultado sustituido es aceptable.