# AX-SYS-27: Mantén los secretos del usuario fuera del contexto del agente

> Access and identity · advanced · AX-SYS-27

Cuando necesites una contraseña, una clave API, un número de tarjeta o una autorización de un tercero, envía al usuario a una página que tú alojas para que la introduzca allí, de modo que el secreto nunca pase por el modelo, el cliente del agente ni sus registros.

## Por qué

Todo lo que se le dice a un agente acaba en su contexto, y el contexto se copia en transcripciones, registros, trazas y a veces en procesos de entrenamiento. Un secreto que recorre ese camino deja de ser secreto, y OWASP nombra el resultado en su MCP Top 10 (MCP01): el modelo o la capa de protocolo se convierten en un almacén involuntario de secretos. Sus mitigaciones empiezan por mantener los datos sensibles fuera de la memoria y de la ventana de contexto del modelo. MCP lo convierte en una regla para los servidores. La elicitación en modo formulario, en la que el cliente muestra un formulario y devuelve las respuestas, sirve para elecciones y valores simples (consulta [AX-SYS-25](ax-sys-25-ask-for-missing-input.mdx)), pero los servidores NO DEBEN usarla para contraseñas, claves API, tokens de acceso ni credenciales de pago, y DEBEN usar el modo URL. En el modo URL el servidor da al cliente un enlace a una página segura que aloja; el usuario introduce allí el secreto, el servidor lo guarda vinculado a la identidad de ese usuario y las llamadas posteriores lo usan sin que nadie lo repita. La especificación describe el resultado: las credenciales sensibles nunca pasan por el contexto del LLM, el cliente MCP ni ningún servidor MCP intermedio. El mismo patrón sirve para una autorización OAuth de un tercero o un paso de pago. El modo URL no es la forma en que el cliente se autentica ante tu servidor; eso sigue siendo tu flujo de autorización habitual.

## Haz

Recoge los secretos y las autorizaciones de terceros en una página que alojas, y guárdalos en el servidor, vinculados al usuario.

## No hagas

Pedir al agente que transmita una contraseña, una clave o un número de tarjeta, ni devolver un secreto en el resultado de una herramienta.

## Artefacto

```json
{
  "resultType": "input_required",
  "inputRequests": {
    "api_key": {
      "method": "elicitation/create",
      "params": {
        "mode": "url",
        "url": "https://mcp.example.com/ui/set_api_key",
        "message": "Please provide your API key to continue."
      }
    }
  },
  "requestState": "AEAD-protected blob"
}
```

El cliente responde `{"action": "accept"}` cuando el usuario acepta abrir la página; eso es consentimiento, no finalización. Reintenta con el mismo `requestState`, y el servidor comprueba si la clave ya llegó antes de continuar.

## Fuentes

1. [MCP Specification 2026-07-28: Elicitation](https://modelcontextprotocol.io/specification/2026-07-28/client/elicitation): Servers MUST NOT use form mode elicitation to request sensitive information such as passwords, API keys, access tokens, or payment credentials, and MUST use URL mode for interactions involving such information; URL mode ensures that sensitive credentials never pass through the LLM context, MCP client or any intermediate MCP servers
2. [OWASP MCP Top 10 (MCP01:2025 Token Mismanagement & Secret Exposure)](https://owasp.github.io/www-project-mcp-top-10/2025/MCP01-2025-Token-Mismanagement-and-Secret-Exposure): Contextual secret leakage, where the model or protocol layer itself becomes an unintentional secret repository; mitigations include preventing sensitive data persistence in model memory or context windows and redacting or masking secrets before writing to logs or telemetry

---
Source: Agent Experience Principles (axprinciples.com)