From e05c25b6035f6bc439a3f9d307070ae5a5d9a152 Mon Sep 17 00:00:00 2001 From: Stuart Fenton Date: Wed, 23 Jul 2025 23:28:35 +0100 Subject: [PATCH] fix: add missing MCP protocol handlers to prevent Claude Desktop crashes - Add ListResourcesRequestSchema and ListPromptsRequestSchema imports - Implement required resources and prompts capabilities in server setup - Add empty handlers for list_resources and list_prompts requests - Fixes Claude Desktop Electron crash on startup when MCP server lacks required protocol handlers Resolves issue where Claude Desktop would crash with 'dialog module can only be used after app is ready' error when connecting to MCP servers that don't implement the full MCP protocol specification. --- app/native-server/src/mcp/mcp-server-stdio.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/native-server/src/mcp/mcp-server-stdio.ts b/app/native-server/src/mcp/mcp-server-stdio.ts index aa00c23..9a1d0fd 100644 --- a/app/native-server/src/mcp/mcp-server-stdio.ts +++ b/app/native-server/src/mcp/mcp-server-stdio.ts @@ -6,6 +6,8 @@ import { CallToolRequestSchema, CallToolResult, ListToolsRequestSchema, + ListResourcesRequestSchema, + ListPromptsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { TOOL_SCHEMAS } from 'chrome-mcp-shared'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; @@ -40,6 +42,8 @@ export const getStdioMcpServer = () => { { capabilities: { tools: {}, + resources: {}, + prompts: {}, }, }, ); @@ -77,6 +81,12 @@ export const setupTools = (server: Server) => { server.setRequestHandler(CallToolRequestSchema, async (request) => handleToolCall(request.params.name, request.params.arguments || {}), ); + + // List resources handler - REQUIRED BY MCP PROTOCOL + server.setRequestHandler(ListResourcesRequestSchema, async () => ({ resources: [] })); + + // List prompts handler - REQUIRED BY MCP PROTOCOL + server.setRequestHandler(ListPromptsRequestSchema, async () => ({ prompts: [] })); }; const handleToolCall = async (name: string, args: any): Promise => {