モデル コンテキスト プロトコル (MCP) は、AI アプリケーションが外部ツール、データ ソース、およびサービスと安全に接続できるようにするオープン標準です。 MSAL Browser では、すべてのトークン要求に resource パラメーターが含まれるように強制し、そのリソースによってキー指定されたアクセス トークンをキャッシュすることで、MCP フローがサポートされます。
Note
MCP フローは、 PublicClientApplication を使用する標準ブラウザー アプリケーションと、 createNestablePublicClientApplication を使用した入れ子になったアプリ認証 (NAA) アプリケーションの両方でサポートされています。
サーバー側の実装については、 MSAL ノード MCP フローを参照してください。
Prerequisites
- Microsoft ID プラットフォームにアプリケーションを登録する
-
@azure/msal-browserプロジェクトに v5 以降がインストールされている
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);
リソース パラメーター
isMcpがtrueである場合、すべてのトークン要求には必ず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 |
isMcp は true ですが、要求に resource パラメーターは含まれません。 |
misplaced_resource_parameter |
resource プロパティと resource または extraQueryParameters の両方でextraParametersが見つかりました。 1 つだけを使用します。 |
両方のエラーは ClientAuthError としてスローされます。 詳細については、 エラーのドキュメントを参照してください。