| import { logger } from '@librechat/data-schemas'; | |
| import { Constants } from 'librechat-data-provider'; | |
| import type { PluginAuthMethods } from '@librechat/data-schemas'; | |
| import type { GenericTool } from '@librechat/agents'; | |
| import { getPluginAuthMap } from '~/agents/auth'; | |
| export async function getUserMCPAuthMap({ | |
| userId, | |
| tools, | |
| servers, | |
| toolInstances, | |
| findPluginAuthsByKeys, | |
| }: { | |
| userId: string; | |
| tools?: (string | undefined)[]; | |
| servers?: (string | undefined)[]; | |
| toolInstances?: (GenericTool | null)[]; | |
| findPluginAuthsByKeys: PluginAuthMethods['findPluginAuthsByKeys']; | |
| }) { | |
| let allMcpCustomUserVars: Record<string, Record<string, string>> = {}; | |
| let mcpPluginKeysToFetch: string[] = []; | |
| try { | |
| const uniqueMcpServers = new Set<string>(); | |
| if (servers != null && servers.length) { | |
| for (const serverName of servers) { | |
| if (!serverName) { | |
| continue; | |
| } | |
| uniqueMcpServers.add(`${Constants.mcp_prefix}${serverName}`); | |
| } | |
| } else if (tools != null && tools.length) { | |
| for (const toolName of tools) { | |
| if (!toolName) { | |
| continue; | |
| } | |
| const delimiterIndex = toolName.indexOf(Constants.mcp_delimiter); | |
| if (delimiterIndex === -1) continue; | |
| const mcpServer = toolName.slice(delimiterIndex + Constants.mcp_delimiter.length); | |
| if (!mcpServer) continue; | |
| uniqueMcpServers.add(`${Constants.mcp_prefix}${mcpServer}`); | |
| } | |
| } else if (toolInstances != null && toolInstances.length) { | |
| for (const tool of toolInstances) { | |
| if (!tool) { | |
| continue; | |
| } | |
| const mcpTool = tool as GenericTool & { mcpRawServerName?: string }; | |
| if (mcpTool.mcpRawServerName) { | |
| uniqueMcpServers.add(`${Constants.mcp_prefix}${mcpTool.mcpRawServerName}`); | |
| } | |
| } | |
| } | |
| if (uniqueMcpServers.size === 0) { | |
| return {}; | |
| } | |
| mcpPluginKeysToFetch = Array.from(uniqueMcpServers); | |
| allMcpCustomUserVars = await getPluginAuthMap({ | |
| userId, | |
| pluginKeys: mcpPluginKeysToFetch, | |
| throwError: false, | |
| findPluginAuthsByKeys, | |
| }); | |
| } catch (err) { | |
| logger.error( | |
| `[handleTools] Error batch fetching customUserVars for MCP tools (keys: ${mcpPluginKeysToFetch.join( | |
| ', ', | |
| )}), user ${userId}: ${err instanceof Error ? err.message : 'Unknown error'}`, | |
| err, | |
| ); | |
| } | |
| return allMcpCustomUserVars; | |
| } | |