From 73ef0dc20d558ea3c84f55f52c531a568363c01c Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:56:25 +0000 Subject: [PATCH 1/7] fix(mcp-server.js): delete `console.log` and `console.error` --- src/mcp-server.js | 47 ++++++----------------------------------------- 1 file changed, 6 insertions(+), 41 deletions(-) diff --git a/src/mcp-server.js b/src/mcp-server.js index 8335812..7efd2dc 100644 --- a/src/mcp-server.js +++ b/src/mcp-server.js @@ -4,10 +4,14 @@ import { z } from "zod"; import WebSocket from 'ws'; import fetch from 'node-fetch'; +// Disable console output for MCP compatibility +console.log = function() {}; +console.error = function() {}; + // Create an MCP server const server = new McpServer({ name: "NodeJS Debugger", - version: "0.2.0", + version: "0.2.2", description: `Advanced Node.js debugger for runtime analysis and troubleshooting. This tool connects to Node.js's built-in Inspector Protocol to provide powerful debugging capabilities directly through Claude Code. DEBUGGING STRATEGY: @@ -54,28 +58,23 @@ class Inspector { const debuggerUrl = data[0]?.webSocketDebuggerUrl; if (!debuggerUrl) { - console.error('No WebSocket debugger URL found'); this.scheduleRetry(); return; } - console.log(`Connecting to debugger at: ${debuggerUrl}`); this.ws = new WebSocket(debuggerUrl); this.ws.on('open', () => { - console.log('WebSocket connection established'); this.connected = true; this.retryCount = 0; this.enableDebugger(); }); this.ws.on('error', (error) => { - console.error('WebSocket error:', error.message); this.scheduleRetry(); }); this.ws.on('close', () => { - console.log('WebSocket connection closed'); this.connected = false; this.scheduleRetry(); }); @@ -102,7 +101,6 @@ class Inspector { } }); } catch (error) { - console.error('Error initializing inspector:', error.message); this.scheduleRetry(); } } @@ -112,24 +110,12 @@ class Inspector { if (this.retryCount < this.retryOptions.maxRetries || this.continuousRetryEnabled) { this.retryCount++; - // If we're in continuous retry mode and have exceeded the initial retry count - if (this.continuousRetryEnabled && this.retryCount > this.retryOptions.maxRetries) { - // Only log every 10 attempts to avoid flooding the console - if (this.retryCount % 10 === 0) { - console.log(`Waiting for debugger connection... (retry ${this.retryCount})`); - } - } else { - console.log(`Retrying connection (${this.retryCount}/${this.retryOptions.maxRetries})...`); - } - // Use a longer interval for continuous retries to reduce resource usage const interval = this.continuousRetryEnabled && this.retryCount > this.retryOptions.maxRetries ? Math.min(this.retryOptions.retryInterval * 5, 10000) // Max 10 seconds between retries : this.retryOptions.retryInterval; setTimeout(() => this.initialize(), interval); - } else { - console.error(`Failed to connect after ${this.retryOptions.maxRetries} attempts`); } } @@ -137,7 +123,6 @@ class Inspector { if (!this.debuggerEnabled && this.connected) { try { await this.send('Debugger.enable', {}); - console.log('Debugger enabled'); this.debuggerEnabled = true; // Setup event listeners @@ -145,20 +130,16 @@ class Inspector { // Also activate possible domains we'll need await this.send('Runtime.runIfWaitingForDebugger', {}); - } catch (err) { - console.error('Failed to enable debugger:', err); } } } handleEvent(event) { - // console.log('Event received:', event.method, event.params); switch (event.method) { case 'Debugger.paused': this.paused = true; this.currentCallFrames = event.params.callFrames; - console.log('Execution paused at breakpoint'); // Notify any registered callbacks for pause events if (this.callbackHandlers.has('paused')) { @@ -170,7 +151,6 @@ class Inspector { case 'Debugger.resumed': this.paused = false; this.currentCallFrames = []; - console.log('Execution resumed'); // Notify any registered callbacks for resume events if (this.callbackHandlers.has('resumed')) { @@ -184,9 +164,6 @@ class Inspector { break; case 'Runtime.exceptionThrown': - console.log('Exception thrown:', - event.params.exceptionDetails.text, - event.params.exceptionDetails.exception?.description || ''); break; case 'Runtime.consoleAPICalled': @@ -224,7 +201,6 @@ class Inspector { this.consoleOutput.shift(); } - console.log(`[Console.${event.params.type}]`, args); break; } } @@ -299,7 +275,6 @@ class Inspector { }); return response.scriptSource; } catch (err) { - console.error('Error getting script source:', err); return null; } } @@ -320,7 +295,6 @@ class Inspector { generatePreview: true }); } catch (err) { - console.error('Error evaluating expression:', err); throw err; } } @@ -334,7 +308,6 @@ class Inspector { generatePreview: true }); } catch (err) { - console.error('Error getting properties:', err); throw err; } } @@ -372,7 +345,6 @@ server.tool( try { ${js_code} } catch (e) { - console.error('Execution error:', e); e; // Return the error } `; @@ -896,7 +868,6 @@ server.tool( try { ${expression} } catch (e) { - console.error('Evaluation error:', e); e; // Return the error } `; @@ -1159,7 +1130,6 @@ server.tool( // If a new port is specified, update the inspector's port if (port && port !== inspector.port) { inspector.port = port; - console.log(`Updated debugger port to ${port}`); } // If already connected, disconnect first @@ -1191,9 +1161,4 @@ server.tool( // Start receiving messages on stdin and sending messages on stdout const transport = new StdioServerTransport(); -await server.connect(transport); - -console.log("Inspector server ready..."); -console.log("MCP Debugger started. Connected to Node.js Inspector protocol."); -console.log("The server will continuously try to connect to any Node.js debugging session on port 9229."); -console.log("You can start a Node.js app with debugging enabled using: node --inspect yourapp.js"); \ No newline at end of file +await server.connect(transport); \ No newline at end of file From 30b1cd9b5c332fa51162ba7077344b17892a9b81 Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:56:34 +0000 Subject: [PATCH 2/7] fix(index.js): delete `console.log` and `console.error` --- index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/index.js b/index.js index f25a018..cc905f5 100755 --- a/index.js +++ b/index.js @@ -4,7 +4,4 @@ // When installed globally or run with npx, this file will be executed // Import and run the MCP server -import './src/mcp-server.js'; - -// The server is started in the imported file -console.log('MCP Debugger started. Connected to Node.js Inspector protocol.'); \ No newline at end of file +import './src/mcp-server.js'; \ No newline at end of file From f95f0d2420e8ca3501da737a2e6f9759533342fc Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:59:32 +0000 Subject: [PATCH 3/7] chore(package.json): bump minor version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 81dda17..c098d65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdrive-eng/mcp-nodejs-debugger", - "version": "0.2.1", + "version": "0.3.1", "description": "An MCP server to debug Node.js at runtime", "main": "index.js", "bin": "./index.js", From 02a6388c4989717150d7ffaf971f113188f14839 Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 19:28:12 +0000 Subject: [PATCH 4/7] chore(mcp-server.js): add missing bracket --- src/mcp-server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mcp-server.js b/src/mcp-server.js index 7efd2dc..8f6a4cb 100644 --- a/src/mcp-server.js +++ b/src/mcp-server.js @@ -121,7 +121,7 @@ class Inspector { async enableDebugger() { if (!this.debuggerEnabled && this.connected) { - try { + await this.send('Debugger.enable', {}); this.debuggerEnabled = true; @@ -130,7 +130,6 @@ class Inspector { // Also activate possible domains we'll need await this.send('Runtime.runIfWaitingForDebugger', {}); - } } } From a0da21c49aafb77b8b1bc6730c04b743ed0c43af Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 19:49:34 +0000 Subject: [PATCH 5/7] chore(mcp-server.js): add try-catch --- src/mcp-server.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/mcp-server.js b/src/mcp-server.js index 8f6a4cb..212bbdf 100644 --- a/src/mcp-server.js +++ b/src/mcp-server.js @@ -120,7 +120,8 @@ class Inspector { } async enableDebugger() { - if (!this.debuggerEnabled && this.connected) { + try { + if (!this.debuggerEnabled && this.connected) { await this.send('Debugger.enable', {}); this.debuggerEnabled = true; @@ -130,7 +131,11 @@ class Inspector { // Also activate possible domains we'll need await this.send('Runtime.runIfWaitingForDebugger', {}); - } + } + } catch (error) { + this.scheduleRetry(); + } + } handleEvent(event) { From 525d5424de90968c2e3a66aff4478ab2364e5548 Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 20:07:28 +0000 Subject: [PATCH 6/7] chore(mcp-server.js): delete empty space --- src/mcp-server.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mcp-server.js b/src/mcp-server.js index 212bbdf..3d090d1 100644 --- a/src/mcp-server.js +++ b/src/mcp-server.js @@ -135,7 +135,6 @@ class Inspector { } catch (error) { this.scheduleRetry(); } - } handleEvent(event) { From 51140a53a0074b77d32ed512bfbc52a644a82d7a Mon Sep 17 00:00:00 2001 From: arthurgousset <46296830+arthurgousset@users.noreply.github.com> Date: Sun, 23 Mar 2025 20:07:51 +0000 Subject: [PATCH 7/7] chore(package.json): bump patch version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 995564d..867a706 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@hyperdrive-eng/mcp-nodejs-debugger", - "version": "0.2.0", + "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@hyperdrive-eng/mcp-nodejs-debugger", - "version": "0.2.0", + "version": "0.2.2", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c098d65..9246cbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdrive-eng/mcp-nodejs-debugger", - "version": "0.3.1", + "version": "0.2.2", "description": "An MCP server to debug Node.js at runtime", "main": "index.js", "bin": "./index.js",