mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00
76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
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;
|
|
}
|