Uso de flujos de MCP con el explorador MSAL

El Protocolo de contexto de modelo (MCP) es un estándar abierto que permite a las aplicaciones de inteligencia artificial conectarse de forma segura con herramientas externas, orígenes de datos y servicios. MSAL Browser admite flujos MCP aplicando que todas las solicitudes de token incluyan un resource parámetro y almacene en caché los tokens de acceso con clave de ese recurso.

Note

Los flujos de MCP se admiten para las aplicaciones de explorador estándar que usan PublicClientApplication y las aplicaciones de autenticación de aplicaciones anidadas (NAA) mediante createNestablePublicClientApplication.

Para las implementaciones del lado servidor, consulte Flujos de MCP del nodo MSAL.

Prerequisites

Habilitación de MCP

Establezca isMcp: true en la configuración auth al crear su PublicClientApplication:

const msalConfig = {
    auth: {
        clientId: "your-client-id",
        authority: "https://login.microsoftonline.com/common",
        isMcp: true,
    },
};

const pca = new msal.PublicClientApplication(msalConfig);

Para las aplicaciones NAA, use la misma configuración con createNestablePublicClientApplication:

const pca = await msal.createNestablePublicClientApplication(msalConfig);

Parámetro de recurso

Cuando isMcp es true, cada solicitud de token debe incluir un resource parámetro. Si se omite, se produce un resource_parameter_required error.

const tokenRequest = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
};

Importante

Establezca el resource parámetro directamente en el objeto de solicitud. No lo pases a través de extraQueryParameters o de extraParameters al mismo tiempo que la propiedad resource; al hacerlo, se genera un error misplaced_resource_parameter.

En el ejemplo siguiente se muestran las formas correctas e incorrectas de establecer el resource parámetro :

// Correct
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
};

// Wrong — resource in both locations
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
    extraQueryParameters: { resource: "https://example.microsoft.com" },
};

Almacenamiento en caché con ámbito de recurso

Cuando isMcp está habilitado, los tokens de acceso se almacenan en caché con su recurso asociado. Este comportamiento afecta a la adquisición silenciosa de tokens:

  • Acceso a la caché: si existe un token de acceso almacenado en caché para los mismos ámbitos y recurso, se devuelve desde la caché.
  • Error de caché: si el recurso solicitado no coincide con ningún token almacenado en caché, MSAL vuelve a la red para adquirir un nuevo token para el recurso solicitado.
// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: account,
});

// Same resource — returns cached token
const token2 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: account,
});

// Different resource — falls back to network
const token3 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-b.microsoft.com",
    account: account,
});

Gestión de errores

Dos errores son específicos de los flujos de MCP:

Código de error Description
resource_parameter_required isMcp es true pero la solicitud no incluye un resource parámetro .
misplaced_resource_parameter Se encontró resource tanto en la propiedad resource como en extraQueryParameters o extraParameters. Use solo una.

Ambos errores se lanzan como ClientAuthError. Para obtener más información, consulte la documentación de errores.

Pasos siguientes