Skip to main content
Glama
ooples

MCP Console Automation Server

interactive-debugger.js4.72 kB
// Example: Interactive debugger automation // This example shows how to automate debugging sessions import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; async function automatedDebugging(client) { console.log('Starting automated debugging session...'); // Start Python debugger const session = await client.callTool('console_create_session', { command: 'python', args: ['-m', 'pdb', 'buggy_script.py'], detectErrors: true }); const sessionId = JSON.parse(session.content[0].text).sessionId; console.log('Debugger session started:', sessionId); // Helper function to run debugger command and get output async function runDebugCommand(command) { await client.callTool('console_send_input', { sessionId, input: command + '\n' }); await new Promise(resolve => setTimeout(resolve, 500)); const output = await client.callTool('console_get_output', { sessionId, limit: 20 }); return output.content[0].text; } // Set breakpoints console.log('\nSetting breakpoints...'); let output = await runDebugCommand('b main'); console.log('Breakpoint set at main function'); output = await runDebugCommand('b 42'); console.log('Breakpoint set at line 42'); // Start execution console.log('\nStarting execution...'); output = await runDebugCommand('c'); // Check if we hit a breakpoint if (output.includes('->')) { console.log('Hit breakpoint!'); // Inspect variables console.log('\nInspecting variables...'); output = await runDebugCommand('pp locals()'); console.log('Local variables:', output); // Step through code console.log('\nStepping through code...'); for (let i = 0; i < 5; i++) { output = await runDebugCommand('n'); console.log(`Step ${i + 1}:`, output.split('\n')[0]); // Check for errors const errors = await client.callTool('console_detect_errors', { text: output }); const errorData = JSON.parse(errors.content[0].text); if (errorData.hasErrors) { console.log('Error detected during execution!'); console.log('Stack trace analysis:', errorData.stackTrace); // Get more context output = await runDebugCommand('where'); console.log('Call stack:', output); break; } } // Continue or quit output = await runDebugCommand('q'); } // Stop the session await client.callTool('console_stop_session', { sessionId }); console.log('\nDebugging session completed.'); } async function interactiveRepl(client) { console.log('Starting interactive REPL session...'); // Start Node.js REPL const session = await client.callTool('console_create_session', { command: 'node', detectErrors: true }); const sessionId = JSON.parse(session.content[0].text).sessionId; // Example REPL interactions const commands = [ 'const data = [1, 2, 3, 4, 5]', 'data.map(x => x * 2)', 'const sum = data.reduce((a, b) => a + b, 0)', 'console.log("Sum:", sum)', 'undefined_function()', // This will cause an error ]; for (const cmd of commands) { console.log(`\n> ${cmd}`); await client.callTool('console_send_input', { sessionId, input: cmd + '\n' }); await new Promise(resolve => setTimeout(resolve, 500)); const output = await client.callTool('console_get_output', { sessionId, limit: 10 }); console.log(output.content[0].text); // Check for errors const errors = await client.callTool('console_detect_errors', { sessionId }); const errorData = JSON.parse(errors.content[0].text); if (errorData.hasErrors) { console.log('⚠️ Error detected:', errorData.errors[0].match); } } // Exit REPL await client.callTool('console_send_key', { sessionId, key: 'ctrl+d' }); await client.callTool('console_stop_session', { sessionId }); console.log('\nREPL session ended.'); } async function main() { const transport = new StdioClientTransport({ command: 'node', args: ['../dist/index.js'] }); const client = new Client({ name: 'interactive-debugger', version: '1.0.0' }); await client.connect(transport); try { // Run automated debugging await automatedDebugging(client); // Run interactive REPL await interactiveRepl(client); } catch (error) { console.error('Error:', error); } finally { await client.close(); } } main().catch(console.error);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ooples/mcp-console-automation'

If you have feedback or need assistance with the MCP directory API, please join our Discord server