diff --git a/package-lock.json b/package-lock.json index 94f19f2123..136db583a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48815,7 +48815,7 @@ }, "packages/data-schemas": { "name": "@librechat/data-schemas", - "version": "0.0.10", + "version": "0.0.11", "license": "MIT", "devDependencies": { "@rollup/plugin-alias": "^5.1.0", diff --git a/packages/api/src/mcp/oauth/handler.ts b/packages/api/src/mcp/oauth/handler.ts index adf1e24372..99ad4971a7 100644 --- a/packages/api/src/mcp/oauth/handler.ts +++ b/packages/api/src/mcp/oauth/handler.ts @@ -269,18 +269,17 @@ export class MCPOAuthHandler { authorizationUrl.searchParams.set('state', flowId); logger.debug(`[MCPOAuth] Added state parameter to authorization URL`); - if (resourceMetadata?.resource) { + if (resourceMetadata?.resource != null && resourceMetadata.resource) { authorizationUrl.searchParams.set('resource', resourceMetadata.resource); + logger.debug( + `[MCPOAuth] Added resource parameter to authorization URL: ${resourceMetadata.resource}`, + ); } else { logger.warn( `[MCPOAuth] Resource metadata missing 'resource' property for ${serverName}. ` + 'This can cause issues with some Authorization Servers who expect a "resource" parameter.', ); } - - logger.debug( - `[MCPOAuth] Added resource parameter to authorization URL: ${resourceMetadata.resource}`, - ); } catch (error) { logger.error(`[MCPOAuth] startAuthorization failed:`, error); throw error; @@ -343,9 +342,9 @@ export class MCPOAuthHandler { throw new Error('Invalid flow metadata'); } - let resource; + let resource: URL | undefined; try { - if (metadata.resourceMetadata?.resource) { + if (metadata.resourceMetadata?.resource != null && metadata.resourceMetadata.resource) { resource = new URL(metadata.resourceMetadata.resource); logger.debug(`[MCPOAuth] Resource URL for flow ${flowId}: ${resource.toString()}`); } @@ -358,12 +357,12 @@ export class MCPOAuthHandler { } const tokens = await exchangeAuthorization(metadata.serverUrl, { + redirectUri: metadata.clientInfo.redirect_uris?.[0] || this.getDefaultRedirectUri(), metadata: metadata.metadata as unknown as SDKOAuthMetadata, clientInformation: metadata.clientInfo, - authorizationCode, codeVerifier: metadata.codeVerifier, - redirectUri: metadata.clientInfo.redirect_uris?.[0] || this.getDefaultRedirectUri(), - resource: resource, + authorizationCode, + resource, }); logger.debug('[MCPOAuth] Raw tokens from exchange:', { diff --git a/packages/data-schemas/package.json b/packages/data-schemas/package.json index cbe0e5578a..219df2b718 100644 --- a/packages/data-schemas/package.json +++ b/packages/data-schemas/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/data-schemas", - "version": "0.0.10", + "version": "0.0.11", "description": "Mongoose schemas and models for LibreChat", "type": "module", "main": "dist/index.cjs", diff --git a/packages/data-schemas/src/types/role.ts b/packages/data-schemas/src/types/role.ts index 590da9432e..13bb5116e7 100644 --- a/packages/data-schemas/src/types/role.ts +++ b/packages/data-schemas/src/types/role.ts @@ -35,5 +35,8 @@ export interface IRole extends Document { [PermissionTypes.WEB_SEARCH]?: { [Permissions.USE]?: boolean; }; + [PermissionTypes.FILE_SEARCH]?: { + [Permissions.USE]?: boolean; + }; }; }