Use fluxos MCP com o MSAL Node

Ao criar aplicativos Model Context Protocol (MCP), você pode configurar o MSAL Node para impor a obtenção e o armazenamento em cache de tokens com escopo ao recurso. Quando o modo MCP está habilitado, a MSAL requer que cada solicitação de token inclua um resource parâmetro e armazene em cache tokens de acesso chaveados por esse recurso.

Note

Os fluxos mcp estão disponíveis somente para aplicativos cliente públicos.

Pré-requisitos

Habilitar o modo MCP

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

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

const pca = new msal.PublicClientApplication(config);

Incluir o parâmetro de recurso

Quando isMcp for true, cada solicitação de token deve incluir um parâmetro resource. Omitir isso gerará um resource_parameter_required erro.

const tokenRequest = {
    scopes: ["User.Read"],
    redirectUri: "http://localhost:3000/redirect",
    resource: "https://example.microsoft.com",
    code: authorizationCode,
};

const response = await pca.acquireTokenByCode(tokenRequest);

Importante

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

O exemplo a seguir mostra as maneiras corretas e incorretas de definir o resource parâmetro:

// Correct — resource on the request object
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 recurso

Quando isMcp estiver habilitado, os tokens de acesso serão armazenados em cache com o recurso associado. Isso afeta a aquisição silenciosa de token:

  • Acerto de cache: se houver um token de acesso armazenado em cache para os mesmos escopos e recursos, ele será retornado do cache.
  • Falha de cache: se o recurso solicitado não corresponder a nenhum token armazenado em cache, a MSAL retornará à rede para adquirir um novo token para o recurso solicitado.
const msalTokenCache = pca.getTokenCache();
const accounts = await msalTokenCache.getAllAccounts();

// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: accounts[0],
});

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

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

Tratamento de erros

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

Código do erro Description
resource_parameter_required isMcp é true , mas a solicitação não inclui um resource parâmetro.
misplaced_resource_parameter Um resource foi encontrado tanto na propriedade resource quanto em extraQueryParameters. Use apenas um.

Ambos os erros são gerados como ClientAuthError. Para obter mais informações, consulte Perguntas frequentes sobre o MSAL Node.

Exemplos

Próximas Etapas