MCP seguridad y autorización

MCP estandariza cómo se describen y se invocan las capacidades. No decide qué capacidades debe recibir un agente ni qué efectos secundarios ha aprobado un usuario.

Cuatro decisiones separadas

  1. Autenticación de conexión — ¿puede este cliente conectarse a este servidor?
  2. Visibilidad de capacidades — ¿qué herramientas y recursos puede ver el modelo?
  3. Autorización de ejecución — ¿puede esta identidad realizar esta acción específica sobre este recurso ahora?
  4. Aprobación humana — ¿requiere una acción con consecuencias que una persona confirme sus entradas y efectos exactos?

No conviertas estas decisiones en una lista de configuración de autoApprove.

Servidores locales stdio

Un proceso hijo local hereda una posición poderosa dentro del host de la aplicación.

  • Usa una ruta de ejecutable absoluta y revisada.
  • Fija las versiones del paquete y del binario; evita etiquetas latest.
  • Pasa solo las variables de entorno necesarias.
  • No pongas secretos en argumentos de línea de comandos.
  • Restringe las raíces del sistema de archivos y los directorios de trabajo.
  • Aplica un perfil de sandbox del SO cuando el servidor maneje entrada no confiable.
  • Trata las descripciones, recursos y resultados del servidor como contenido no confiable.

Las rutas de carga y actualización en tiempo de ejecución de JSON validan los identificadores de servidor. McpServerManager no aísla en sandbox el comando configurado.

HTTP remota transmitible

McpHttpClientBuilder puede aplicar:

  • tokens portador;
  • un encabezado de clave API seleccionado por quien llama;
  • encabezados arbitrarios revisados;
  • adquisición fija de token de credenciales de cliente 2.0 de OAuth;
  • tiempos de espera de solicitud; y
  • una re-inicialización de sesión limitada después de una respuesta de sesión caducada.

OAuth2Config no es el flujo completo de autorización de MCP. No realiza descubrimiento de metadatos del recurso protegido, descubrimiento del servidor de autorización, autorización en el navegador, PKCE ni negociación del indicador de recurso. Usa la APIs de autorización de rmcp o un componente de identidad cuando la implementación requiera ese flujo.

Limita la solicitud de token para que un servidor de autorización lento o no disponible no pueda bloquear la configuración de la conexión, y ten en cuenta que el cliente nunca devuelve el secreto del cliente — los cuerpos de error del punto final de token se redactan antes de llegar a los registros:

use adk_tool::mcp::OAuth2Config;
use std::time::Duration;

let auth = OAuth2Config::new(client_id, token_url)
    .with_secret(client_secret)
    .with_scopes(vec!["mcp.read".into(), "mcp.invoke".into()])
    .with_timeout(Duration::from_secs(10)); // token request timeout

El tiempo de espera predeterminado para la solicitud de token es de 30 segundos.

Exposición y ejecución de herramientas

Usa with_tools o with_filter para mantener las capacidades innecesarias fuera de la solicitud al modelo. Luego aplica la autorización y confirmación de herramientas de ADK-Rust en tiempo de ejecución.

Para herramientas con consecuencias:

  • muestra a la persona los argumentos finales resueltos;
  • distingue entre permitir una vez y una política duradera;
  • mantén la aprobación vinculada al ID exacto de la llamada de función;
  • haz que las escrituras externas sean idempotentes cuando sea posible;
  • almacena juntos la decisión de aprobación y el resultado de la herramienta; y
  • nunca trates una respuesta de protocolo exitosa como prueba de un resultado empresarial exitoso sin comprobar la evidencia devuelta.

Elicitación

La elicitación es una solicitud del servidor para obtener más información, no una instrucción que la aplicación deba obedecer. Revisa el mensaje, URL, los campos solicitados y los metadatos. Rechaza las solicitudes no admitidas o inesperadas. Valida todos los valores de formulario aceptados antes de usarlos.

Registro y secretos

Redacta variables de entorno, encabezados de autorización, claves API, respuestas de elicitación y argumentos sensibles de herramientas. Registra en su lugar el ID del servidor, el nombre de la herramienta, el ID de la tarea, el estado, el tiempo, la aprobación y un resumen limitado del resultado.