Saltar al contenido principal

Habilitar el acceso de agentes de IA de terceros a tu servidor MCP

tip:

Explora las soluciones de IA de Logto: autenticación (Authentication) y autorización (Authorization) para servidores MCP, agentes de IA y aplicaciones.

Esta guía te guía paso a paso para integrar Logto con tu servidor MCP usando mcp-auth y el SDK oficial de MCP v2, permitiendo que agentes de IA de terceros autentiquen usuarios con su consentimiento y accedan de forma segura a tu servidor MCP.

Aprenderás a:

  • Configurar Logto como el servidor de autorización para tu servidor MCP.
  • Incorporar agentes de IA de terceros, ya sea registrando aplicaciones de terceros o habilitando aplicaciones dinámicas para que cualquier agente pueda conectarse sin pre-registro.
  • Configurar una herramienta “whoami” en tu servidor MCP para devolver los reclamos de identidad del usuario actual.
  • Probar el flujo con un agente de IA de terceros (cliente MCP).

Después de este tutorial, tu servidor MCP podrá:

  • Autenticar usuarios en tu tenant de Logto, con consentimiento del usuario para agentes de IA de terceros.
  • Verificar tokens de acceso JWT emitidos por Logto (firma, emisor, audiencia y expiración).
  • Devolver los reclamos de identidad verificados (sub, iss, aud, etc.) para la invocación de la herramienta "whoami".
Código de ejemplo:

El código de ejemplo completo y ejecutable para esta guía se puede encontrar en el repositorio mcp-auth/js:

  • whoami-express: el servidor "whoami" de esta guía, en Node.js con Express.
  • whoami: el mismo servidor construido con fetch-native (Request / Response estándar web con Hono), desplegable en Cloudflare Workers.

Diferencia entre agente de IA de terceros (cliente MCP) y tu propio cliente MCP

Veamos un ejemplo. Imagina que eres un desarrollador que ejecuta un servidor MCP para gestionar el acceso y la automatización del correo electrónico.

Aplicación de correo oficial (Tu propio cliente MCP)

  • Proporcionas una aplicación de correo oficial para que los usuarios lean y gestionen sus correos electrónicos.
  • Cómo funciona: La aplicación de correo oficial se conecta a tu servidor MCP usando Logto para autenticar a los usuarios. Cuando Alice inicia sesión, obtiene acceso automáticamente a sus correos electrónicos, sin necesidad de pantallas de permisos adicionales, ya que es tu aplicación de confianza.

Agente de IA de terceros (Cliente MCP de terceros)

  • Estás construyendo un ecosistema alrededor de tu servidor MCP, así que otro desarrollador crea “SmartMail AI” (un asistente de IA que puede resumir correos y programar reuniones automáticamente) integrándolo como cliente de terceros.
  • Cómo funciona: SmartMail AI (cliente MCP de terceros) quiere acceder a los correos electrónicos del usuario a través de tu servidor MCP. Cuando Alice inicia sesión en SmartMail AI usando su cuenta:
    • Se le muestra una pantalla de consentimiento, solicitando permiso para que SmartMail AI lea sus correos y calendario.
    • Alice puede permitir o denegar este acceso.
    • Solo los datos a los que ella consiente son compartidos con SmartMail AI, y SmartMail AI no puede acceder a ningún dato adicional sin un nuevo consentimiento explícito.

Este control de acceso (permiso) garantiza la seguridad de los datos del usuario, incluso si tu servidor MCP gestiona todos los datos, las aplicaciones de terceros como SmartMail AI solo pueden acceder a lo que el usuario ha permitido explícitamente. No pueden eludir este proceso, ya que está reforzado por tu implementación de control de acceso en el servidor MCP.

Resumen

Tipo de clienteEjemplo¿Requiere consentimiento?¿Quién lo controla?
Aplicación de correo oficialTu propia aplicación de correoNoTú (el desarrollador)
Agente de IA de tercerosAsistente SmartMail AIOtro desarrollador
nota:

Si deseas integrar tu servidor MCP con tu propio agente o aplicación de IA, consulta la guía Habilitar autenticación para tus aplicaciones impulsadas por MCP con Logto.

Requisitos previos

  • Un tenant de Logto Cloud (o autogestionado)
  • Entorno Node.js >= 20

Entendiendo la arquitectura

  • Servidor MCP: El servidor que expone herramientas y recursos a los clientes MCP. Siguiendo la última especificación de MCP, actúa como un servidor de recursos OAuth 2.0 que valida los tokens de acceso emitidos por Logto.
  • Cliente MCP: Un cliente utilizado para iniciar el flujo de autenticación y probar la integración. El agente de IA de terceros se utilizará como cliente en esta guía.
  • Logto: Funciona como el proveedor de OpenID Connect (servidor de autorización), gestiona las identidades de los usuarios y emite tokens de acceso JWT ligados a la audiencia para tu servidor MCP.

Un diagrama de secuencia no normativo ilustra el flujo general del proceso:

nota:

Debido a que MCP está evolucionando rápidamente, el diagrama anterior puede no estar completamente actualizado. Por favor, consulta la documentación de mcp-auth para la información más reciente.

Configura un agente de IA de terceros en Logto

Para permitir que el agente de IA de terceros acceda a tu servidor MCP, necesitas configurar una aplicación de terceros en Logto. Esta aplicación representará al agente de IA y obtendrá las credenciales necesarias para la autenticación y autorización.

¿Qué es una aplicación de terceros?:

Una aplicación de terceros es una aplicación creada por desarrolladores externos (no el propietario del recurso) que necesita el consentimiento del usuario para acceder a recursos protegidos. A diferencia de las aplicaciones de primer partido (tus propias aplicaciones), las aplicaciones de terceros mostrarán una pantalla de consentimiento pidiendo a los usuarios aprobar permisos específicos antes de acceder a sus datos. Esto asegura que los usuarios tengan control sobre qué datos comparten con servicios externos.

Para saber más, consulta Aplicaciones de terceros.

Hay tres formas de incorporar agentes de IA:

Permitir que los desarrolladores creen aplicaciones de terceros en Logto

Si estás construyendo un marketplace o quieres permitir que los desarrolladores creen aplicaciones de terceros en Logto, puedes aprovechar la Logto Management API para crear aplicaciones de terceros de forma programática. Esto permite a los desarrolladores registrar sus aplicaciones y obtener las credenciales necesarias para la autenticación.

Necesitarás alojar tu propio servicio para manejar el proceso de registro de clientes. Este servicio interactuará con la Logto Management API para crear aplicaciones de terceros en nombre de los desarrolladores.

Alternativamente, puedes crear manualmente aplicaciones de terceros en la Consola de Logto para familiarizarte con el proceso.

Permitir que cualquier agente de IA se conecte sin pre-registro

En un ecosistema MCP abierto, normalmente no conoces los agentes de antemano. Aplicación dinámica elimina el paso de registro: el agente utiliza una URL pública HTTPS que sirve su propio documento de metadatos de cliente como su client_id, y Logto lo resuelve cuando llega la solicitud de autorización.

Aún controlas qué agentes pueden solicitar a través de los permisos otorgados a la aplicación dinámica, y cada autorización pasa por la pantalla de consentimiento del usuario.

Crear manualmente una aplicación de terceros en Logto

Puedes crear manualmente una aplicación de terceros en la Consola de Logto para propósitos de prueba o integraciones puntuales. Esto es útil cuando quieres probar rápidamente la integración sin implementar un flujo completo de registro de clientes.

  1. Inicia sesión en tu Consola de Logto.

  2. Ve a AplicacionesCrear aplicaciónAplicación de terceros -> OIDC.

  3. Rellena el nombre de la aplicación y otros campos requeridos, luego haz clic en Crear aplicación.

  4. Haz clic en la pestaña Permisos para otorgar permisos a la aplicación:

    • Sección Usuario: permisos de datos de usuario como profile y email, para reclamos básicos de identidad.
    • Sección Recurso de API (API resource): permisos (alcances) de los recursos de API que has definido en Logto, por ejemplo, el recurso de API que representa tu servidor MCP.
    • Sección Organización (Organization): permisos de organización, si usas organizaciones de Logto.
  5. En la aplicación de terceros, configura los alcances para solicitar los permisos que otorgaste, por ejemplo, openid profile email más los alcances de recursos de API.

    Nota: openid es obligatorio para OIDC. Para recibir un token de acceso vinculado a un recurso de API, la aplicación también debe incluir el parámetro resource en la solicitud de autorización. Los clientes MCP que siguen la última especificación MCP hacen esto automáticamente según los metadatos del recurso protegido.

  6. Configura la URI de redirección de tu aplicación de terceros en consecuencia. Recuerda actualizar también la URI de redirección en Logto.

Permisos de aplicación de terceros

En el fondo, una aplicación de terceros es un cliente estándar de OAuth 2.0 / OIDC. Esto significa que tú (o el desarrollador de terceros) puedes usar cualquier biblioteca o framework de OAuth 2.0 / OIDC para integrarte con Logto.

Algunas cosas a tener en cuenta:

  1. Al crear una aplicación de terceros, selecciona el tipo de aplicación adecuado según la arquitectura de la app:
    • Web tradicional: Utiliza un secreto de cliente para la autenticación.
    • Aplicación de una sola página / Nativa: Utiliza PKCE para una autorización segura sin un secreto de cliente.
  2. La mayoría de nuestras guías de inicio rápido están escritas para aplicaciones de primera parte, pero aún puedes usarlas como referencia para la integración de aplicaciones de terceros.
  3. La principal diferencia es que las aplicaciones de terceros mostrarán una pantalla de consentimiento (Consent screen), solicitando a los usuarios permiso explícito para acceder a sus datos.

Consulta Aplicaciones de terceros para la guía completa de integración.

Configura el servidor MCP

Usaremos el SDK oficial de MCP v2 y mcp-auth para crear un servidor MCP con una herramienta "whoami" que devuelve los reclamos de identidad del usuario actual.

Crea el proyecto e instala las dependencias

mkdir mcp-server
cd mcp-server
npm init -y
npm pkg set type="module"
npm pkg set main="whoami.js"
npm pkg set scripts.start="node whoami.js"
npm install @modelcontextprotocol/server @modelcontextprotocol/express @modelcontextprotocol/node express mcp-auth
  • @modelcontextprotocol/server es el SDK principal de MCP v2, que utiliza los estándares web Request / Response.
  • @modelcontextprotocol/express y @modelcontextprotocol/node lo adaptan a Express en Node.js.
  • mcp-auth proporciona el verificador de tokens y los metadatos de descubrimiento OAuth para el SDK de MCP.
nota:

El SDK v2 de MCP y mcp-auth son solo ESM y requieren Node.js >= 20.

Registra el servidor MCP como un recurso de API

La especificación más reciente de MCP requiere que los tokens de acceso estén vinculados al recurso para el que se emiten (RFC 8707), y mcp-auth lo aplica: el reclamo aud del token debe coincidir con el identificador de recurso de tu servidor MCP. En Logto, esto se hace creando un recurso de API cuyo indicador coincida con la URL de tu servidor MCP:

  1. Inicia sesión en tu Logto Console.
  2. Ve a Recursos de API (API resources)Crear recurso de API (Create API resource).
  3. Rellena los detalles y haz clic en Crear recurso de API (Create API resource):
    • Nombre de la API (API name): Ingresa un nombre, por ejemplo, "Who am I".
    • Identificador de la API (API identifier): Ingresa http://localhost:3001/. Debe coincidir con el identificador de recurso que configuraremos en el servidor MCP.
Barra diagonal al final en el indicador de recurso:

Incluye siempre una barra diagonal (/) al final del indicador de recurso. Debido a un error actual en el SDK oficial de MCP, los clientes que usan el SDK agregarán automáticamente una barra diagonal al final de los identificadores de recurso al iniciar solicitudes de autenticación. Si tu indicador de recurso no incluye la barra diagonal, la validación del recurso fallará para esos clientes.

Configura MCP Auth con Logto

Declara tu servidor MCP como un recurso protegido: su identificador de recurso y el servidor de autorización en el que confía. Recuerda reemplazar <your-logto-issuer-endpoint> con el endpoint del emisor que copiaste anteriormente (se encuentra en la página de detalles de la aplicación bajo Endpoints & Credentials, por ejemplo, https://my-project.logto.app/oidc).

En whoami.js:

import { MCPAuth } from 'mcp-auth';

const authIssuer = '<your-logto-issuer-endpoint>';

const mcpAuth = new MCPAuth({
protectedResourceMetadata: {
// El identificador de recurso; debe coincidir con el indicador de recurso de API registrado en Logto
resource: 'http://localhost:3001/',
// El servidor de autorización en el que confía este servidor MCP
authorizationServer: { issuer: authIssuer, type: 'oidc' },
},
});

Los metadatos del servidor de autorización se obtienen de forma diferida la primera vez que se necesitan y se almacenan en caché después. La instancia de MCPAuth verifica los tokens de acceso JWT contra el JWKS de Logto: la firma, el emisor, la audiencia y la expiración se aplican. No es necesario realizar una verificación manual de tokens.

Implementa la herramienta "whoami"

Ahora, implementemos la herramienta "whoami" que devuelve los reclamos de identidad del usuario actual a partir del token de acceso verificado. Usa getAuthInfo para leer la información de autenticación que mcp-auth ha verificado desde el contexto del callback de la herramienta.

import { McpServer } from '@modelcontextprotocol/server';
import { getAuthInfo } from 'mcp-auth';

// Función de fábrica para crear una instancia del servidor MCP
// Cada solicitud obtiene su propia instancia del servidor, manteniendo las solicitudes aisladas
const createMcpServer = () => {
const mcpServer = new McpServer({
name: 'WhoAmI',
version: '0.0.0',
});

// Añade una herramienta al servidor que devuelve la información del usuario actual
mcpServer.registerTool(
'whoami',
{
description: 'Obtener la información del usuario actual',
},
(context) => {
const { claims } = getAuthInfo(context);
return {
content: [{ type: 'text', text: JSON.stringify(claims) }],
};
}
);

return mcpServer;
};

Conecta el servidor

Por último, sirve los documentos de descubrimiento OAuth (RFC 9728 / RFC 8414) para que los clientes MCP puedan encontrar tu servidor de autorización, y protege el endpoint MCP con el middleware Bearer auth del SDK.

import {
createMcpExpressApp,
mcpAuthMetadataRouter,
requireBearerAuth,
} from '@modelcontextprotocol/express';
import { toNodeHandler } from '@modelcontextprotocol/node';
import { createMcpHandler } from '@modelcontextprotocol/server';

const PORT = 3001;

// El handler MCP utiliza los estándares web Request / Response; `toNodeHandler` lo adapta a Express
const mcpNodeHandler = toNodeHandler(createMcpHandler(createMcpServer));

const app = createMcpExpressApp();

// Sirve los documentos de descubrimiento OAuth (`/.well-known/...`), públicos por diseño
app.use(mcpAuthMetadataRouter(await mcpAuth.getAuthMetadataOptions()));

app.all(
'/',
// Requiere un token Bearer válido; la información de autenticación verificada fluye al handler vía `req.auth`
requireBearerAuth(mcpAuth.getBearerAuthOptions()),
// `createMcpExpressApp` aplica `express.json()`, que consume el stream de la solicitud, por lo que el
// cuerpo parseado se pasa explícitamente
async (request, response) => mcpNodeHandler(request, response, request.body)
);

app.listen(PORT);

Ejecuta el servidor con:

npm start

Probar la integración

  1. Inicia el servidor MCP.
  2. Conecta el agente de IA de terceros a tu servidor MCP e invoca la herramienta whoami.
  3. El agente recibe una respuesta 401 No autorizado, descubre Logto a través de los metadatos de recursos protegidos del servidor MCP y redirige al usuario a Logto para autenticación.
  4. El usuario inicia sesión y revisa la pantalla de consentimiento, que enumera los permisos que solicita el agente, luego aprueba (o deniega) el acceso.
  5. El agente recibe un token de acceso JWT vinculado a la audiencia y lo utiliza para invocar la herramienta nuevamente.
  6. El servidor MCP verifica el token de acceso contra el JWKS de Logto y devuelve los reclamos de identidad verificados al agente.

Lecturas adicionales

Tu servidor MCP ahora verifica los tokens de acceso entrantes de agentes de IA de terceros. Como siguiente paso, aprende cómo puede llamar de forma segura a tus APIs empresariales downstream en nombre de los usuarios, sin traspaso de tokens ni pérdida de contexto de usuario:

Cómo un servidor MCP llama a tu API en nombre de los usuarios: una estrategia de tokens en producción