UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

56 lines (44 loc) 1.67 kB
import { isDesktop } from '@/const/version'; import { desktopClient, toolsClient } from '@/libs/trpc/client'; import { ChatToolPayload } from '@/types/message'; import { CustomPluginMetadata } from '@/types/tool/plugin'; class MCPService { async invokeMcpToolCall(payload: ChatToolPayload, { signal }: { signal?: AbortSignal }) { const { pluginSelectors } = await import('@/store/tool/selectors'); const { getToolStoreState } = await import('@/store/tool/store'); const s = getToolStoreState(); const { identifier, arguments: args, apiName } = payload; const plugin = pluginSelectors.getCustomPluginById(identifier)(s); if (!plugin) return; const data = { args, params: { ...plugin.customParams?.mcp, name: identifier } as any, toolName: apiName, }; const isStdio = plugin?.customParams?.mcp?.type === 'stdio'; // For desktop and stdio, use the desktopClient if (isDesktop && isStdio) { return desktopClient.mcp.callTool.mutate(data, { signal }); } return toolsClient.mcp.callTool.mutate(data, { signal }); } async getStreamableMcpServerManifest( identifier: string, url: string, metadata?: CustomPluginMetadata, ) { return toolsClient.mcp.getStreamableMcpServerManifest.query({ identifier, metadata, url }); } async getStdioMcpServerManifest( stdioParams: { args?: string[]; command: string; env?: Record<string, string>; name: string; }, metadata?: CustomPluginMetadata, ) { return desktopClient.mcp.getStdioMcpServerManifest.query({ ...stdioParams, metadata }); } } export const mcpService = new MCPService();