OAuth sin intervención para MCP
(blog.modelcontextprotocol.io)- La extensión Enterprise-Managed Authorization (EMA) se estabilizó, permitiendo a las empresas gestionar centralmente los permisos de los servidores MCP y a los usuarios iniciar sesión una sola vez para acceder a los servidores autorizados
- El enfoque anterior dependía de la aprobación individual de OAuth por usuario y por servidor, lo que dificultaba el onboarding, la aplicación de políticas de seguridad, la trazabilidad de auditoría y la separación entre cuentas de trabajo y personales
- EMA coloca al IdP de la organización como la autoridad que decide los permisos, de modo que el administrador define la política una sola vez y los usuarios heredan las conexiones MCP necesarias con su cuenta organizacional existente
- El ID-JAG emitido durante el SSO se intercambia por un token de acceso en el servidor de autorización del servidor MCP, por lo que el usuario no es redirigido a una pantalla de consentimiento por cada servidor
- El soporte inicial incluye a Okta, Anthropic, Visual Studio Code y también a Asana, Atlassian, Canva, Figma, Granola, Linear y Supabase; Slack también está agregando soporte
Estabilización de EMA y objetivo de despliegue empresarial
- La extensión Enterprise-Managed Authorization (EMA) pasó a estado stable
- Al gestionar conexiones a servidores MCP en entornos empresariales, las aprobaciones repetidas y los prompts de consentimiento eran una molestia importante, y EMA es una extensión creada para reducir ese problema
- Las organizaciones pueden controlar centralmente el acceso a servidores MCP mediante un proveedor de identidad (IdP) de confianza
- Los usuarios finales inician sesión con su cuenta organizacional existente y luego se conectan a los servidores MCP autorizados, reduciendo la carga de consentimientos OAuth por servidor o configuraciones únicas
Límites del modelo de autenticación por usuario
- El modelo estándar de permisos de MCP está diseñado para un alcance por usuario (user-scoped) y para las convenciones tradicionales de autenticación interactiva
- Puede funcionar para escenarios de consumo donde cada persona decide directamente a qué datos accede, pero no escala bien en despliegues empresariales
- En entornos empresariales destacan especialmente tres problemas
- Cada empleado debe aprobar cada servidor por separado, por lo que durante el onboarding se requieren conexiones manuales por servicio
- Los equipos de seguridad terminan dependiendo de accesos aprobados por cada usuario sin control central ni trazabilidad de auditoría
- Es difícil imponer el uso de cuentas corporativas, por lo que los usuarios pueden conectar cuentas personales a herramientas de trabajo
- Esta fricción retrasa la adopción de MCP y aumenta la posibilidad de crear implementaciones alternativas frágiles
- Sin un estándar general para conservar un estado de autenticación compartido, cada implementador termina creando su propia solución, y aun con datos y herramientas disponibles, gran parte puede quedar desactivada por el costo de los permisos por usuario
Aprobar una vez y heredar en todas partes
- Enterprise-Managed Authorization convierte al IdP de la organización en la autoridad que decide el acceso a servidores MCP
- El administrador define la política una sola vez, y los usuarios se autentican en el host MCP con su identidad organizacional existente
- El IdP puede permitir o denegar acceso según membresía de grupos, roles y reglas de acceso condicional
- El flujo interno es el siguiente
- El cliente obtiene del IdP un Identity Assertion JWT Authorization Grant (ID-JAG) durante el SSO
- El cliente lo envía al servidor de autorización del servidor MCP para intercambiarlo por un token de acceso
- El usuario no pasa por una pantalla de consentimiento por servidor
- Esta estructura produce tres efectos
- Si el administrador habilita un servidor para la organización, los usuarios obtienen acceso automáticamente dentro del alcance de sus grupos y roles existentes
- Las decisiones de acceso quedan registradas en la consola administrativa del IdP, ofreciendo un único historial auditable para todos los conectores
- Al eliminar el paso interactivo de selección de cuenta, resulta más fácil reducir la confusión en los flujos de datos entre cuentas personales y corporativas
- En el uso empresarial de MCP, el objetivo es que, cuando el usuario inicie sesión, el cliente se conecte a las herramientas y datos autorizados sin pasos adicionales
Productos con soporte inicial y ecosistema
- En este lanzamiento participan en la implementación tres grupos: proveedores de identidad, clientes y servidores
-
Proveedores de identidad
- Okta es el primer proveedor de identidad compatible
- Las organizaciones que usan Okta pueden aprovisionar acceso MCP a clientes y servidores compatibles mediante Okta’s Cross App Access (XAA)
-
Clientes
- Anthropic implementó EMA en la capa compartida de MCP de Claude
- Los administradores pueden aprobar servidores MCP para usuarios en Claude, Claude Code y Cowork
- Visual Studio Code también añadió soporte para EMA dentro del IDE
-
Servidores
- Asana, Atlassian, Canva, Figma, Granola, Linear y Supabase son compatibles con EMA
- Slack y otros servidores también están agregando soporte
- Aaron Parecki, de Okta, afirma que integrar el protocolo Cross App Access en la extensión EMA de MCP convierte la identidad en un plano central de gobernanza, ofreciendo a los equipos de seguridad controles de cumplimiento y a los usuarios una experiencia fluida
- Devdatta Akhawe, de Figma, afirma que, a medida que aumenta la adopción de MCP, XAA facilita escalar con seguridad los despliegues empresariales de MCP
- Tom Moor, de Linear, mencionó la experiencia de iniciar sesión una vez y que todos los conectores MCP queden configurados automáticamente
Documentación y canales de participación
- Los clientes, servidores y plataformas de identidad pueden revisar la especificación de la extensión y agregar soporte para el nuevo estándar en sus productos
- La página de Enterprise-Managed Authorization documenta los requisitos de flujo para clientes, servidores y servidores de autorización
- En el repositorio ext-auth y el borrador de la especificación se pueden consultar los cambios más recientes y materiales de apoyo de EMA
- El EMA Interest Group se utiliza para discutir la extensión, reportar compatibilidad e impulsar mejoras iterativas
- EMA es un trabajo de la comunidad MCP, con contribuciones de los autores de SEP-990, mantenedores del repositorio ext-auth y proveedores de identidad y de MCP que probaron las implementaciones iniciales e impulsaron la especificación
1 comentarios
Comentarios de Hacker News
Antes de caer en el típico debate de “MCP murió y Skills es el futuro”, el punto donde MCP realmente aporta valor frente a skills/CLI es que separa el flujo de autenticación de la ventana de contexto del agente y, en algunos casos, incluso fuera del harness
Desde la perspectiva de seguridad eso obviamente es importante, y también hace que la experiencia de uso sea mucho más sencilla cuando usuarios comunes o grandes empresas adoptan herramientas de IA
Entiendo las quejas sobre el crecimiento del contexto o la duplicación en las llamadas a herramientas, pero claramente hay valor en una arquitectura que maneja la autenticación de esta manera
Un MCP ideal podría ya ser suficientemente beneficioso aunque solo fuera una pasarela de autenticación delante de una API
En este momento, lo mejor que parece existir para desplegar skills es algo como “copia este archivo y ponlo aquí”, “haz checkout de este repositorio y agrega un enlace simbólico”, o “instálalo con un comando slash”
Aunque sea simple, no resulta tan fácil como esta forma de extensión para desplegar un nuevo servidor MCP a los empleados
Por ejemplo, podrías autenticar 6 cuentas de Linear de 6 clientes distintos, y luego habilitar una separación de responsabilidades donde se elige qué cuenta usar de forma determinista y auditable
Simplemente son herramientas diferentes, y según los requisitos una puede ser mejor o no
Es como preguntar qué es mejor, un cuchillo o una sierra
Cada vez que sale este tema, los ingenieros tratan a Claude Code como si fuera la única app de agentes de IA, pero hay muchísimos casos de uso en otros sectores además de programación
El harness puede ejecutarse no en una máquina local, sino en un contenedor aislado y restringido en la nube, donde ejecutar código arbitrario nunca está permitido
Aun así, cuando el cliente quiere conectar sus herramientas existentes al agente, MCP encaja perfecto porque ofrece conectores con autenticación integrada, y skills no aplica en ese terreno
Un usuario común no va a buscar el directorio de Claude para pegar ahí un archivo de skill
“Connections” es fácil de entender, y es más sencillo pegar un MCP o encontrarlo en un marketplace
Todavía no está claro si realmente será útil que un agente tenga acceso a lugares y reseñas
Muchas felicitaciones a quienes construyeron esto en Okta, Anthropic, Microsoft, Figma, Linear y otras empresas
Incluso para los escépticos de MCP hay algo aprovechable aquí
Esto funciona con un nuevo formato de token llamado ID-JAG, disponible en https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-a...
No es en absoluto exclusivo de MCP, y cualquier lugar donde aplicaciones que usan el mismo proveedor de SSO necesiten compartir datos de forma segura puede usar ID-JAG
Estoy intentando agregar autenticación con Microsoft Entra ID al servidor MCP que estoy implementando ahora mismo y, sinceramente, siento que me volví idiota
Con el encabezado
WWW-Authenticatepuedes indicarle al cliente la URL de metadatos del recurso, y mediante eso también se puede especificar Microsoft Entra como servidor de autenticación y el alcance del registro de la appPero no se puede especificar el
client_id, y la idea es que cada cliente, es decir, cada agente, lo genere por su cuentaPara iniciar sesión con la URL
.../authorizede Microsoft Entra hace falta unclient_idconocido que coincida con el registro de la app en Entra, y no hay forma de que un valor inventado arbitrariamente por el cliente coincida con EntraEn teoría se podría soportar el registro dinámico de clientes, pero Microsoft Entra obviamente no lo soporta
Al final, la única salida que veo es crear mi propio shim de registro dinámico de clientes delante de Microsoft Entra para devolverle a todo el mundo el mismo
client_idestáticoSiento que me estoy perdiendo algo obvio sobre si este protocolo realmente funciona en entornos empresariales sin hacer rodeos
Entra ID no soporta registro dinámico de clientes y el estado de este ecosistema todavía no es bueno
Normalmente el OAuth de MCP se maneja con clientes tradicionales preregistrados, pero en la práctica muchos clientes MCP asumen que existe registro dinámico de clientes y no ofrecen una opción para especificar el
client_idAun así, algunos clientes sí lo soportan y, ya que estamos haciendo algo de autopromoción, nuestra herramienta Erato también lo soporta: https://erato.chat/docs
Las soluciones empresariales típicas que se despliegan también suelen centralizar el acceso a MCP mediante una UI web, así que soportan esto
Otra alternativa es un gateway MCP; entre el gateway y el servicio puedes usar OAuth preregistrado, y entre el gateway y el cliente puedes permitir registro dinámico de clientes
client_idy no queríamos habilitar el registro dinámico de clientes por razones de seguridadAl final hicimos que la app actuara como proxy del flujo OAuth e inyectara un
client_idhardcodeadoLe haces creer al cliente MCP que soportas registro dinámico de clientes, pero internamente usas un
client_idindependiente para MCP como de costumbreHay un ejemplo aquí: https://gist.github.com/erebe/a5de36d42214721b2466fb0e66f61c...
Después creé una aplicación intermediaria de autenticación que maneja el registro del cliente con OpenID y genera los JWT
Como resultado, ahora puedes decidir si alguien puede usar una herramienta y con qué permisos según el departamento del empleado u otros criterios
Al final sí se necesita registro dinámico de clientes
También están evaluando y discutiendo activamente CIMD, un hermano más nuevo y mejor de DCR, pero todavía no está disponible: https://github.com/FusionAuth/fusionauth-issues/issues/3230
Como alternativa al proxy que propusiste, se puede crear un nuevo
client_idde Entra con PKCE habilitado para cada cliente MCP desde algo como un portal para desarrolladores, y hacer que el usuario configure ese valor en el clienteEncontré el comando de CLI para eso aquí, y supongo que también habrá una API: https://learn.microsoft.com/en-us/cli/azure/ad/app?view=azur...
La configuración de Claude Code está en https://code.claude.com/docs/en/mcp y la de ChatGPT en https://developers.openai.com/api/docs/guides/developer-mode
El preregistro de clientes puede no ser lo ideal para los desarrolladores, pero es aceptable, y en la especificación también se trata como un enfoque de primera clase: https://modelcontextprotocol.io/specification/2025-11-25/bas...
Si los usuarios principales son empleados internos y pueden seguir instrucciones de configuración para acceder al servidor MCP, este enfoque también funciona
Pero si el objetivo es una integración pública amplia para gente que no es desarrolladora, claramente no es algo aceptable, y justamente ahí es donde está gran parte de la fuerza y la oportunidad de MCP
Soy una de las personas que construyó esto en Anthropic junto con Okta y varios socios de MCP.
Me entusiasma mucho ver que este formato va tomando forma en Claude y, ahora que en la especificación de MCP EMA es una extensión estable, también me gustaría ampliar su adopción a otros proveedores de identidad y clientes.
Si tienen comentarios, sería genial que los dejaran aquí; siempre queremos escuchar experiencias reales de uso y cómo podríamos mejorarlo.
Hace tiempo que no seguía de cerca MCP, pero esto parece encajar bastante bien para hacer que MCP sea más seguro dentro de las organizaciones y para resolver las debilidades del registro dinámico de clientes.
Ahora tanto el proveedor de identidad como la organización pueden configurar directamente los clientes y los URI de redirección autorizados, así que se pueden mitigar más ampliamente ataques basados en DCR, como confused deputy o phishing.
Además, también es una gran ventaja porque reduce la lógica de autorización que antes tenía que implementar el servidor MCP cuando el proveedor de identidad o la organización no soportaban DCR.
La desventaja es que, para uso de consumidores, todavía parece que sigue siendo necesario DCR.
Tal vez se podría resolver si proveedores OAuth de consumo como GitHub, GitLab y Google soportaran registro estático de cliente/servidor MCP, si el cliente integrara un
client_idestático y si el usuario iniciara sesión con ese proveedor de identidad y administrara directamente la conexión.En general, XAA/EMA parece muy superior a DCR en seguridad y usabilidad.
Incluso las partes preocupantes son mucho más fáciles de resolver y tienen un impacto de seguridad menor que en DCR, porque un atacante no puede registrar su propio cliente y también se reducen las trampas en las que puede caer quien desarrolla el servidor MCP.
Sería bueno tener algún tipo de sesión temporal o almacén de tokens fuera de banda.
El caso de uso es que, durante el proceso comercial, compradores y vendedores tienen que intercambiar y analizar mucha información, y ese análisis se está volviendo cada vez más agentivo.
El problema con MCP es que la fricción de configuración inicial es mucho mayor que simplemente hacer que el usuario inicie sesión directamente y traiga la información necesaria.
MCP funciona bien para interacciones regulares y frecuentes, pero tiene muchos problemas para sesiones rápidas de una sola vez.
Estaría bueno que en Claude uno pudiera decir “trae documentos de X, Y y Z”, que Claude accediera a esos sitios web y que el sitio devolviera información básica del usuario junto con un enlace de inicio de sesión que el usuario pudiera abrir en el navegador.
Luego el usuario se autentica en el navegador, el callback devuelve un token único de un solo uso y de vida corta, y después ese token se intercambia en las solicitudes al sitio.
Así se podría autenticar rápidamente al usuario y al mismo tiempo mantener el estado de la sesión durante el trabajo.
Quisiera saber si es razonable esperarlo pronto o si todavía va a tomar bastante tiempo.
Parece que el caso de uso principal son empleados de empresas, pero me pregunto si hay un valor parecido también para usuarios no centralizados, como clientes o usuarios free premium.
No se me ocurre mucho, así que quería saber qué me estoy perdiendo, y creo que vi una respuesta relacionada aquí: https://news.ycombinator.com/item?id=48594381
Esto es realmente excelente.
En los últimos meses tuve la suerte de poder trabajar con gente de MCP en varios SEP y en un SDK experimental de Go.
Antes yo era de los escépticos que decían “si al final solo es una API” o “ya inventaron otra abstracción”.
Lo que la gente pasa por alto es que la “P” de MCP lleva a malentendidos.
Cuando haces una app tradicional, tienes que construir formularios, UI, manejo de request/response, canales bidireccionales, trabajos de larga duración, autenticación, etc.
Con MCP, el 80% de esa capa común ya está resuelta, así que MCP es un protocolo, sí, pero en la práctica también se parece mucho a un framework de aplicaciones.
La autenticación integrada es un refuerzo enorme, y entusiasma pensar en todo lo que viene.
Es bastante curioso ver afuera algo en lo que trabajé.
En Atlassian me encargué de la implementación del lado RAS de este flujo.
Claramente habrá mejoras iterativas en este flujo, como CIMD y mejor soporte de tenancy.
Toda la gente de Anthropic, Okta y Atlassian que llevó esto adelante fue excelente.
Estaría bueno que soportaran la web para poder simplemente emitir cookies de larga duración.
Traté de hacer esto sin servidor OAuth y terminé hackeando la especificación para pasar cookies mediante el handshake de OAuth.
Es realmente frustrante que no quieran permitir algo así.
Si no hay cookie, abres la página web; cuando la cookie queda configurada, la cierras y la guardas.
Incluso escribí un minibook de 80 páginas sobre MCP, pero igual me sigue frustrando sin parar.
Tiene problemas tanto de usabilidad como de seguridad, y las cookies fueron hechas para navegadores.
Los servidores y clientes MCP muchas veces operan en entornos donde no hay garantía de navegador.
Las credenciales de larga duración implican una carga de responsabilidad enorme.
Lo releí varias veces y sin duda es útil.
Se puede centralizar la auditoría y el control de acceso en un solo proveedor de identidad, y ese proveedor también podría actuar como una API gateway proxy que se encarga del intercambio de tokens cuando haga falta.
Es un enfoque que también han adoptado otros actores de este espacio.
En lo personal, me incomoda un poco que el proveedor de identidad delegue mis permisos a un cliente sin que yo lo advierta.
Tal vez sea porque estoy demasiado acostumbrado a flujos donde el usuario está presente en el navegador, y esto se siente como una evolución hacia una centralización del acceso cada vez más pensada para máquinas.
En entornos enterprise puede ser aceptable, porque la identidad pertenece más a la empresa que al individuo.
Pero integrarlo en customer identity ya es un desafío completamente distinto, y probablemente no sea fácil construir ese nivel de confianza entre proveedor de identidad, cliente y resource authorization server.
Por ejemplo, bastaría con crear una relación de confianza del tipo “si ya iniciaste sesión en GitHub, entonces también entras automáticamente en Sentry”.
Todavía queda mucho por hacer, pero por ahora el caso de uso más claro es, como dijiste, el enterprise.
Los administradores no quieren que cada empleado ande haciendo clic por todos lados y eligiendo credenciales arbitrarias.
En C1, la autenticación de MCP era un gran dolor de cabeza tanto para el uso interno de MCP como para el MCP Gateway dentro del producto, así que da muchísimo gusto ver que esto llegue
Hoy C1 lanzó soporte para actuar como proveedor de identidad EMA y emitir tokens de alcance limitado con vida corta
Ahora quiero conectarlo a Linear y a los otros MCP que usamos para salir de los flujos repetitivos de OAuth
Claude ya hacía algo así casi como por arte de magia con algunos conectores integrados, al menos en Slack, y la experiencia era bastante buena
Para transparentar, soy VPE de C1, y documentamos nuestro enfoque para quien quiera profundizar: https://www.c1.ai/docs/product/admin/enterprise-managed-auth...
No me queda muy claro qué ventaja tiene esto frente a OAuth normal
Creo que haría falta un ejemplo comparando los flujos de autorización
Eso tiene sentido en casos de uso de consumo, es decir, cuando el usuario final es dueño de sus datos
Pero en muchos casos de uso empresariales, quien debe compartir los datos y controlar el acceso no es el usuario final, sino la empresa
Si yo soy empleado de Acme, no debería decidir si los datos de Google Drive de Acme se conectan a Claude o ChatGPT; eso debería decidirlo el área de TI
OAuth administrado por la empresa, o Cross App Access (XAA), incorpora al framework de OAuth un modelo de compartición controlado centralmente por administradores de TI, para que funcione junto con el ecosistema existente
Además, mover la gestión del consentimiento para compartir datos del empleado al administrador de TI también trae una gran ventaja en la experiencia de usuario
El empleado no tiene que pasar por múltiples flujos de OAuth para conectar cuentas, porque el administrador de TI ya dejó configurados los controles de compartición
Piensa en llegar en tu primer día y que Slack ya esté conectado a Zoom, Drive, Calendar, etc.
Porque la decisión de delegar acceso se toma a nivel de política del proveedor de identidad
Puede que los usuarios nunca sepan qué apps o servicios quedaron autorizados para compartir su información
Espera, ¿de verdad eso es una ventaja? ;-)