From 6671fcb714ef156ed7c0dc92902cc9dad89234d6 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 29 Jul 2025 15:09:52 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=82=20refactor:=20Use=20`discoverAutho?= =?UTF-8?q?rizationServerMetadata`=20for=20MCP=20OAuth=20(#8723)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- packages/api/src/mcp/oauth/handler.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/api/src/mcp/oauth/handler.ts b/packages/api/src/mcp/oauth/handler.ts index 99ad4971a7..1c776739f2 100644 --- a/packages/api/src/mcp/oauth/handler.ts +++ b/packages/api/src/mcp/oauth/handler.ts @@ -1,10 +1,10 @@ import { randomBytes } from 'crypto'; import { logger } from '@librechat/data-schemas'; import { - discoverOAuthMetadata, registerClient, startAuthorization, exchangeAuthorization, + discoverAuthorizationServerMetadata, discoverOAuthProtectedResourceMetadata, } from '@modelcontextprotocol/sdk/client/auth.js'; import { OAuthMetadataSchema } from '@modelcontextprotocol/sdk/shared/auth.js'; @@ -61,7 +61,7 @@ export class MCPOAuthHandler { // Discover OAuth metadata logger.debug(`[MCPOAuth] Discovering OAuth metadata from ${authServerUrl}`); - const rawMetadata = await discoverOAuthMetadata(authServerUrl); + const rawMetadata = await discoverAuthorizationServerMetadata(authServerUrl); if (!rawMetadata) { logger.error(`[MCPOAuth] Failed to discover OAuth metadata from ${authServerUrl}`); @@ -466,7 +466,10 @@ export class MCPOAuthHandler { throw new Error('No token URL available for refresh'); } else { /** Auto-discover OAuth configuration for refresh */ - const { metadata: oauthMetadata } = await this.discoverMetadata(metadata.serverUrl); + const oauthMetadata = await discoverAuthorizationServerMetadata(metadata.serverUrl); + if (!oauthMetadata) { + throw new Error('Failed to discover OAuth metadata for token refresh'); + } if (!oauthMetadata.token_endpoint) { throw new Error('No token endpoint found in OAuth metadata'); } @@ -584,7 +587,7 @@ export class MCPOAuthHandler { } /** Auto-discover OAuth configuration for refresh */ - const { metadata: oauthMetadata } = await this.discoverMetadata(metadata.serverUrl); + const oauthMetadata = await discoverAuthorizationServerMetadata(metadata.serverUrl); if (!oauthMetadata.token_endpoint) { throw new Error('No token endpoint found in OAuth metadata');