Skip to main content
Glama
comprehensive-audit-debug.js•5.53 kB
#!/usr/bin/env bun // Comprehensive audit test with debug output import { spawn } from 'child_process'; import { promisify } from 'util'; import fs from 'fs'; const sleep = promisify(setTimeout); async function runComprehensiveAudit() { console.log('Starting comprehensive moidvk server audit with debug output...\n'); // Start the server const server = spawn('bun', ['run', 'server.js'], { stdio: ['pipe', 'pipe', 'pipe'] }); let allOutput = ''; let responses = []; // Listen for all output server.stdout.on('data', (data) => { const output = data.toString(); allOutput += output; console.log('[STDOUT]:', output); const lines = output.split('\n').filter(line => line.trim()); lines.forEach(line => { try { const response = JSON.parse(line); responses.push(response); if (response.result && response.result.content) { console.log('\n' + '='.repeat(80)); console.log(`āœ… Response for request ${response.id}:`); console.log('='.repeat(80)); response.result.content.forEach(content => { if (content.type === 'text') { console.log(content.text); } }); } } catch (e) { // Log non-JSON output if (line.trim()) { console.log('[Non-JSON]:', line); } } }); }); // Listen for stderr server.stderr.on('data', (data) => { console.log('[STDERR]:', data.toString()); }); // Wait for server to start await sleep(2000); // Send initialization request const initRequest = { jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: '2024-10-07', capabilities: {}, clientInfo: { name: 'audit-client', version: '1.0.0' } } }; console.log('\nSending initialization request...'); server.stdin.write(JSON.stringify(initRequest) + '\n'); await sleep(1000); // Test each tool individually with proper error handling const tests = [ { name: 'check_code_practices', description: 'Code practices on server.js', request: { jsonrpc: '2.0', id: 2, method: 'tools/call', params: { name: 'check_code_practices', arguments: { code: fs.readFileSync('server.js', 'utf8').slice(0, 1000), // First 1000 chars filename: 'server.js' } } } }, { name: 'check_production_readiness', description: 'Production readiness with strict mode', request: { jsonrpc: '2.0', id: 3, method: 'tools/call', params: { name: 'check_production_readiness', arguments: { code: `console.error('Test error'); debugger; // TODO: Fix this const api_key = "hardcoded-key";`, filename: 'test.js', strict: true } } } }, { name: 'check_safety_rules', description: 'Safety rules on RateLimiter', request: { jsonrpc: '2.0', id: 4, method: 'tools/call', params: { name: 'check_safety_rules', arguments: { code: fs.readFileSync('lib/security/RateLimiter.js', 'utf8'), filename: 'RateLimiter.js' } } } }, { name: 'check_accessibility', description: 'Accessibility on HTML content', request: { jsonrpc: '2.0', id: 5, method: 'tools/call', params: { name: 'check_accessibility', arguments: { code: `<div class="container"> <h1>Security Audit Report</h1> <p>This is a sample HTML page for accessibility testing.</p> <button onclick="alert('test')">Click me</button> <img src="test.jpg" alt="Test image"> <img src="no-alt.jpg"> <div onclick="doSomething()">Clickable div without role</div> </div>`, filename: 'test.html' } } } }, { name: 'scan_security_vulnerabilities', description: 'Security vulnerability scan', request: { jsonrpc: '2.0', id: 6, method: 'tools/call', params: { name: 'scan_security_vulnerabilities', arguments: { format: 'summary', includeTests: false } } } } ]; // Run each test for (const test of tests) { console.log(`\n\nšŸ” Testing: ${test.description}`); console.log('Request:', JSON.stringify(test.request, null, 2)); server.stdin.write(JSON.stringify(test.request) + '\n'); await sleep(3000); // Give more time for each test } // Final wait await sleep(2000); // Clean up console.log('\n\nStopping server...'); server.kill(); // Save debug output fs.writeFileSync('audit-debug-output.txt', allOutput); console.log('\n' + '='.repeat(80)); console.log('AUDIT SUMMARY'); console.log('='.repeat(80)); console.log('Total responses received:', responses.length); console.log('Debug output saved to: audit-debug-output.txt'); // Analyze responses if (responses.length > 0) { console.log('\nSuccessful responses:'); responses.forEach(r => { if (r.result) { console.log(`- Request ${r.id}: Success`); } else if (r.error) { console.log(`- Request ${r.id}: Error - ${r.error.message}`); } }); } } // Run the audit runComprehensiveAudit().catch(console.error);

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/moikas-code/moidvk'

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