diff --git a/core/context/mcp/index.ts b/core/context/mcp/index.ts index 984ba8f7b6..772da78918 100644 --- a/core/context/mcp/index.ts +++ b/core/context/mcp/index.ts @@ -87,6 +87,15 @@ class MCPConnectionSingleton { } } + async checkClientAttribute(func: () => Promise): Promise { + try { + const result = await func(); + return result; + } catch (e) { + return null; + } + } + async modifyConfig(config: ContinueConfig): Promise { try { await this.connectClient(); @@ -97,58 +106,66 @@ class MCPConnectionSingleton { } } - // Resources <—> Context Provider - const { resources } = await this.client.listResources(); + const capabilities = this.client.getServerCapabilities(); - const submenuItems = resources.map((resource: any) => ({ - title: resource.name, - description: resource.description, - id: resource.uri, - })); + // Resources <—> Context Provider + if (capabilities?.resources) { + const { resources } = await this.client.listResources(); + const submenuItems = resources.map((resource: any) => ({ + title: resource.name, + description: resource.description, + id: resource.uri, + })); + + if (!config.contextProviders) { + config.contextProviders = []; + } - if (!config.contextProviders) { - config.contextProviders = []; + config.contextProviders.push( + new MCPContextProvider({ + submenuItems, + client: this.client, + }), + ); } - config.contextProviders!.push( - new MCPContextProvider({ - submenuItems, - client: this.client, - }), - ); - // Tools <—> Tools - const { tools } = await this.client.listTools(); - const continueTools: Tool[] = tools.map((tool) => ({ - displayTitle: tool.name, - function: { - description: tool.description, - name: tool.name, - parameters: tool.inputSchema, - }, - readonly: false, - type: "function", - wouldLikeTo: `use the ${tool.name} tool`, - uri: `mcp://${tool.name}`, - })); - - config.tools = [...config.tools, ...continueTools]; + if (capabilities?.tools) { + const { tools } = await this.client.listTools(); + const continueTools: Tool[] = tools.map((tool: any) => ({ + displayTitle: tool.name, + function: { + description: tool.description, + name: tool.name, + parameters: tool.inputSchema, + }, + readonly: false, + type: "function", + wouldLikeTo: `use the ${tool.name} tool`, + uri: `mcp://${tool.name}`, + })); + + config.tools = [...config.tools, ...continueTools]; + } // Prompts <—> Slash commands - const { prompts } = await this.client.listPrompts(); - if (!config.slashCommands) { - config.slashCommands = []; - } + if (capabilities?.prompts) { + const { prompts } = await this.client.listPrompts(); + if (!config.slashCommands) { + config.slashCommands = []; + } - const slashCommands: SlashCommand[] = prompts.map((prompt) => { - return constructMcpSlashCommand( - this.client, - prompt.name, - prompt.description, - prompt.arguments?.map((a) => a.name), + const slashCommands: SlashCommand[] = prompts.map((prompt: any) => + constructMcpSlashCommand( + this.client, + prompt.name, + prompt.description, + prompt.arguments?.map((a: any) => a.name), + ), ); - }); - config.slashCommands!.push(...slashCommands); + + config.slashCommands.push(...slashCommands); + } return config; } diff --git a/core/tools/builtIn.ts b/core/tools/builtIn.ts index 55e2c52148..d15db456c4 100644 --- a/core/tools/builtIn.ts +++ b/core/tools/builtIn.ts @@ -1,11 +1,11 @@ export enum BuiltInToolNames { - ReadFile = "read_file", - ReadCurrentlyOpenFile = "read_currently_open_file", - CreateNewFile = "create_new_file", - RunTerminalCommand = "run_terminal_command", - ViewSubdirectory = "view_subdirectory", - ViewRepoMap = "view_repo_map", - ExactSearch = "exact_search", - SearchWeb = "search_web", - ViewDiff = "view_diff", -} + ReadFile = "builtin_read_file", + ReadCurrentlyOpenFile = "builtin_read_currently_open_file", + CreateNewFile = "builtin_create_new_file", + RunTerminalCommand = "builtin_run_terminal_command", + ViewSubdirectory = "builtin_view_subdirectory", + ViewRepoMap = "builtin_view_repo_map", + ExactSearch = "builtin_exact_search", + SearchWeb = "builtin_search_web", + ViewDiff = "builtin_view_diff", +} \ No newline at end of file