@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
text/typescript
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();