Skip to content

Commit 6671fcb

Browse files
jhrozekdanny-avila
andauthored
🛂 refactor: Use discoverAuthorizationServerMetadata for MCP OAuth (#8723)
* Use discoverAuthorizationServerMetadata instead of discoverMetadata Uses the discoverAuthorizationServerMetadata function from the upstream TS SDK. This has the advantage of falling back to OIDC discovery metadata if the OAuth discovery metadata doesn't exist which is the case with e.g. keycloak. * chore: import order --------- Co-authored-by: Danny Avila <[email protected]>
1 parent c4677ab commit 6671fcb

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

‎packages/api/src/mcp/oauth/handler.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { randomBytes } from 'crypto';
22
import { logger } from '@librechat/data-schemas';
33
import {
4-
discoverOAuthMetadata,
54
registerClient,
65
startAuthorization,
76
exchangeAuthorization,
7+
discoverAuthorizationServerMetadata,
88
discoverOAuthProtectedResourceMetadata,
99
} from '@modelcontextprotocol/sdk/client/auth.js';
1010
import { OAuthMetadataSchema } from '@modelcontextprotocol/sdk/shared/auth.js';
@@ -61,7 +61,7 @@ export class MCPOAuthHandler {
6161

6262
// Discover OAuth metadata
6363
logger.debug(`[MCPOAuth] Discovering OAuth metadata from ${authServerUrl}`);
64-
const rawMetadata = await discoverOAuthMetadata(authServerUrl);
64+
const rawMetadata = await discoverAuthorizationServerMetadata(authServerUrl);
6565

6666
if (!rawMetadata) {
6767
logger.error(`[MCPOAuth] Failed to discover OAuth metadata from ${authServerUrl}`);
@@ -466,7 +466,10 @@ export class MCPOAuthHandler {
466466
throw new Error('No token URL available for refresh');
467467
} else {
468468
/** Auto-discover OAuth configuration for refresh */
469-
const { metadata: oauthMetadata } = await this.discoverMetadata(metadata.serverUrl);
469+
const oauthMetadata = await discoverAuthorizationServerMetadata(metadata.serverUrl);
470+
if (!oauthMetadata) {
471+
throw new Error('Failed to discover OAuth metadata for token refresh');
472+
}
470473
if (!oauthMetadata.token_endpoint) {
471474
throw new Error('No token endpoint found in OAuth metadata');
472475
}
@@ -584,7 +587,7 @@ export class MCPOAuthHandler {
584587
}
585588

586589
/** Auto-discover OAuth configuration for refresh */
587-
const { metadata: oauthMetadata } = await this.discoverMetadata(metadata.serverUrl);
590+
const oauthMetadata = await discoverAuthorizationServerMetadata(metadata.serverUrl);
588591

589592
if (!oauthMetadata.token_endpoint) {
590593
throw new Error('No token endpoint found in OAuth metadata');

0 commit comments

Comments
 (0)