Utilize fluxos de trabalho MCP com o MSAL Browser

O Model Context Protocol (MCP) é um standard aberto que permite que aplicações de IA se conectem de forma segura com ferramentas externas, fontes de dados e serviços. O MSAL Browser suporta fluxos MCP ao exigir que todos os pedidos de token incluam um parâmetro resource e ao armazenar em cache os tokens de acesso indexados por esse recurso.

Note

Os fluxos MCP são suportados tanto para aplicações de navegador padrão que utilizam PublicClientApplication como para aplicações de Autenticação de Aplicações Aninhadas (NAA) que utilizam createNestablePublicClientApplication.

Para implementações do lado do servidor, veja MSAL Node MCP flows.

Pré-requisitos

Ativação do MCP

Defina isMcp: true na configuração auth ao criar o seu PublicClientApplication:

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

const pca = new msal.PublicClientApplication(msalConfig);

Para aplicações NAA, use a mesma configuração com createNestablePublicClientApplication:

const pca = await msal.createNestablePublicClientApplication(msalConfig);

Parâmetro de recurso

Quando isMcp é true, cada pedido de token deve incluir um resource parâmetro. Omitir isso gera um resource_parameter_required erro.

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

Importante

Defina o resource parâmetro diretamente no objeto de pedido. Não a passe por extraQueryParameters ou extraParameters ao mesmo tempo que a propriedade resource — isso gera um erro misplaced_resource_parameter.

O exemplo seguinte mostra as formas corretas e incorretas de definir o 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" },
};

Cache com escopo de recursos

Quando isMcp está ativado, os tokens de acesso são armazenados em cache com o seu recurso associado. Este comportamento afeta a aquisição silenciosa de tokens:

  • Impacto na cache: Se existir um token de acesso em cache para os mesmos escopos e recurso, ele é devolvido da cache.
  • Cache miss: Se o recurso solicitado não corresponder a nenhum token em cache, o MSAL recorre à rede para adquirir um novo token para o 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,
});

Tratamento de erros

Dois erros são específicos dos fluxos MCP:

Código de erro Description
resource_parameter_required isMcp é true , mas o pedido não inclui um resource parâmetro.
misplaced_resource_parameter Foi encontrado(a) um(a) resource tanto na propriedade resource como em extraQueryParameters ou extraParameters. Usa apenas um.

Ambos os erros são apresentados como ClientAuthError. Para mais informações, consulte a documentação de erros.

Passos seguintes