JavaScript MCP Server

// Simple test script to validate our MCP server fixes const { executeJavaScript } = require('./dist/core/executor'); const { SessionManager } = require('./dist/core/session-manager'); const { typescriptTranspiler } = require('./dist/core/typescript-transpiler'); // Test 1: Basic JavaScript execution with modern syntax async function testJavaScriptExecution() { console.log('\n--- Test 1: JavaScript Execution ---'); try { const result = await executeJavaScript(` // Using modern syntax const person = { name: "Alice", age: 30 }; let numbers = [1, 2, 3, 4, 5]; let sum = 0; for (const num of numbers) { sum += num; } console.log("Person:", person); console.log("Sum of numbers:", sum); return { person, sum }; `); console.log("Success:", result.success); console.log("Result:", result.result); console.log("Console output:", result.consoleOutput); } catch (error) { console.error("Error in JavaScript execution:", error); } } // Test 2: Session variable tracking async function testSessionVariables() { console.log('\n--- Test 2: Session Variables ---'); try { const sessionManager = new SessionManager(); const session = sessionManager.createSession(); console.log("Created session:", session.id); // First execution: define variables const result1 = await sessionManager.executeInSession(session.id, ` this.user = { name: "Bob", age: 25 }; this.numbers = [10, 20, 30]; this.message = "Hello, world!"; // Log some info about what we've set console.log("Set variables in session"); // Return the variables return Object.keys(this).filter(key => !key.startsWith('_') && typeof this[key] !== 'function' && !['global', 'queueMicrotask', 'clearImmediate', 'setImmediate', 'structuredClone', 'clearInterval', 'clearTimeout', 'setInterval', 'setTimeout', 'atob', 'btoa', 'performance', 'fetch', 'console'].includes(key) ); `); console.log("First execution result:", result1.result); console.log("Console output:", result1.consoleOutput); // Second execution: use previous variables const result2 = await sessionManager.executeInSession(session.id, ` // Check if we can access previous variables console.log("User from previous execution:", this.user); console.log("Numbers from previous execution:", this.numbers); console.log("Message from previous execution:", this.message); // Modify variables this.user.age++; this.numbers.push(40); this.message += " Updated!"; // Check _userVariables return { variables: Object.keys(this).filter(key => !key.startsWith('_') && typeof this[key] !== 'function' && !['global', 'queueMicrotask', 'clearImmediate', 'setImmediate', 'structuredClone', 'clearInterval', 'clearTimeout', 'setInterval', 'setTimeout', 'atob', 'btoa', 'performance', 'fetch', 'console'].includes(key) ), userVariables: this._userVariables }; `); console.log("Second execution result:", result2.result); console.log("Console output:", result2.consoleOutput); // Check session info directly console.log("Session info:", { id: session.id, historyCount: session.history.length, contextKeys: Object.keys(session.context) }); // Check _userVariables directly if (session.context._userVariables) { console.log("_userVariables content:", session.context._userVariables); } else { console.log("_userVariables not found in context"); } } catch (error) { console.error("Error in session variables test:", error); } } // Test 3: TypeScript execution async function testTypeScriptExecution() { console.log('\n--- Test 3: TypeScript Execution ---'); try { // First transpile TypeScript const tsCode = ` interface User { name: string; age: number; } // Create a variable matching the interface const user: User = { name: "Charlie", age: 35 }; // Log the user console.log("TypeScript User:", user); // Return the user user; `; console.log("Transpiling TypeScript code..."); const transpileResult = await typescriptTranspiler.transpile(tsCode); if (transpileResult.success) { console.log("Transpilation successful"); console.log("JavaScript code:", transpileResult.jsCode); // Execute the transpiled code console.log("\nExecuting transpiled TypeScript code..."); // Wrap the transpiled code in a function to handle return values const jsCode = ` (function() { ${transpileResult.jsCode} // Return undefined by default if no explicit return return undefined; })(); `; const executeResult = await executeJavaScript(jsCode); console.log("Execution success:", executeResult.success); console.log("Execution result:", executeResult.result); console.log("Console output:", executeResult.consoleOutput); } else { console.error("Transpilation failed:", transpileResult.error); } } catch (error) { console.error("Error in TypeScript execution test:", error); } } // Run all tests async function runTests() { try { await testJavaScriptExecution(); await testSessionVariables(); await testTypeScriptExecution(); console.log("\nAll tests completed!"); } catch (error) { console.error("Error running tests:", error); } } // Execute tests runTests();