MSAL Browser で MCP フローを使用する

モデル コンテキスト プロトコル (MCP) は、AI アプリケーションが外部ツール、データ ソース、およびサービスと安全に接続できるようにするオープン標準です。 MSAL Browser では、すべてのトークン要求に resource パラメーターが含まれるように強制し、そのリソースによってキー指定されたアクセス トークンをキャッシュすることで、MCP フローがサポートされます。

Note

MCP フローは、 PublicClientApplication を使用する標準ブラウザー アプリケーションと、 createNestablePublicClientApplication を使用した入れ子になったアプリ認証 (NAA) アプリケーションの両方でサポートされています。

サーバー側の実装については、 MSAL ノード MCP フローを参照してください。

Prerequisites

MCP の有効化

PublicClientApplication の作成時に、auth 構成で isMcp: true を設定します:

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

const pca = new msal.PublicClientApplication(msalConfig);

NAA アプリケーションの場合は、 createNestablePublicClientApplicationで同じ構成を使用します。

const pca = await msal.createNestablePublicClientApplication(msalConfig);

リソース パラメーター

isMcptrueである場合、すべてのトークン要求には必ずresource パラメーターを含める必要があります。 省略すると、resource_parameter_required エラーになります。

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

Important

resource パラメーターを要求オブジェクトに直接設定します。 resource プロパティと同時に、extraQueryParameters または extraParameters 経由で渡さないでください。misplaced_resource_parameter エラーがスローされます。

次の例は、 resource パラメーターを設定する正しい方法と正しくない方法を示しています。

// 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" },
};

リソース単位のキャッシュ

isMcpが有効になっている場合、アクセス トークンは関連付けられているリソースと共にキャッシュされます。 この動作は、サイレント トークンの取得に影響します。

  • キャッシュ ヒット: 同じスコープ リソースに対してキャッシュされたアクセス トークンが存在する場合は、キャッシュから返されます。
  • キャッシュ ミス: 要求されたリソースがキャッシュされたトークンと一致しない場合、MSAL はネットワークにフォールバックして、要求されたリソースの新しいトークンを取得します。
// 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,
});

エラー処理

2 つのエラーは、MCP フローに固有です。

エラー コード 説明
resource_parameter_required isMcptrue ですが、要求に resource パラメーターは含まれません。
misplaced_resource_parameter resource プロパティと resource または extraQueryParameters の両方でextraParametersが見つかりました。 1 つだけを使用します。

両方のエラーは ClientAuthError としてスローされます。 詳細については、 エラーのドキュメントを参照してください

次のステップ