Skip to main content
Glama

MCP Shamash

demo.js12.8 kB
#!/usr/bin/env node const { spawn } = require('child_process'); const { Client } = require('@modelcontextprotocol/sdk/client/index.js'); const { StdioClientTransport } = require('@modelcontextprotocol/sdk/client/stdio.js'); class ShamashDemo { constructor() { this.client = null; this.serverProcess = null; this.transport = null; } async start() { console.log('🎯 MCP Shamash Security Scanner Demo\n'); try { await this.startServer(); await this.connectClient(); await this.runDemo(); } catch (error) { console.error('❌ Demo failed:', error.message); } finally { await this.cleanup(); } } async startServer() { console.log('🚀 Starting Shamash MCP server...'); this.serverProcess = spawn('npx', ['tsx', 'src/index.ts'], { stdio: 'pipe', cwd: process.cwd(), }); // Set up transport this.transport = new StdioClientTransport(); this.transport.setChildProcess(this.serverProcess); // Wait a moment for server to initialize await this.delay(2000); } async connectClient() { console.log('🔗 Connecting to server...'); this.client = new Client( { name: 'shamash-demo', version: '1.0.0', }, { capabilities: {}, } ); await this.client.connect(this.transport); console.log('✅ Connected to Shamash server\n'); } async runDemo() { console.log('🎪 Running Shamash Security Demo\n'); // Demo 1: List available tools await this.demoListTools(); await this.delay(1000); // Demo 2: Project security scan await this.demoProjectScan(); await this.delay(1000); // Demo 3: Network scanning (localhost) await this.demoNetworkScan(); await this.delay(1000); // Demo 4: Boundary enforcement test await this.demoBoundaryEnforcement(); await this.delay(1000); // Demo 5: Compliance checking await this.demoComplianceCheck(); await this.delay(1000); // Demo 6: Penetration testing await this.demoPentesting(); await this.delay(1000); // Demo 7: Cache performance await this.demoCachePerformance(); console.log('\n🎉 Demo completed successfully!'); console.log('\n📊 Summary:'); console.log(' ✅ Boundary enforcement: Working'); console.log(' ✅ Security scanning: Operational'); console.log(' ✅ Network analysis: Functional'); console.log(' ✅ Compliance validation: Active'); console.log(' ✅ Caching system: Optimized'); console.log(' 🔒 Zero external access: Guaranteed'); } async demoListTools() { console.log('📋 Available Security Tools:'); try { const result = await this.client.request( { method: 'tools/list', params: {} }, { method: 'tools/list', params: {} } ); result.tools.forEach((tool, index) => { console.log(` ${index + 1}. ${tool.name}`); console.log(` └─ ${tool.description}`); }); console.log(` Total: ${result.tools.length} security tools available\n`); } catch (error) { console.error('❌ Failed to list tools:', error.message); } } async demoProjectScan() { console.log('🔍 Project Security Scan:'); try { const startTime = Date.now(); const result = await this.client.request( { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'standard', tools: ['semgrep', 'trivy', 'gitleaks'] } } }, { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'standard', tools: ['semgrep', 'trivy', 'gitleaks'] } } } ); const scanResult = JSON.parse(result.content[0].text); const duration = Date.now() - startTime; console.log(` ✅ Scan completed in ${duration}ms`); console.log(` 📊 Results: ${scanResult.summary.vulnerabilities} findings`); console.log(` 🔥 Critical: ${scanResult.summary.critical}`); console.log(` ⚠️ High: ${scanResult.summary.high}`); console.log(` ⚡ Medium: ${scanResult.summary.medium}`); console.log(` 🔍 Token usage: ${scanResult.tokenUsage}/1000`); console.log(` 🚀 Status: ${scanResult.status}`); if (scanResult.errors?.length > 0) { console.log(` ⚠️ Errors: ${scanResult.errors.length}`); } console.log(''); } catch (error) { console.error('❌ Project scan failed:', error.message); } } async demoNetworkScan() { console.log('🌐 Network Security Scan:'); try { const result = await this.client.request( { method: 'tools/call', params: { name: 'scan_network', arguments: { target: '127.0.0.1', ports: '80,443,3000,8080' } } }, { method: 'tools/call', params: { name: 'scan_network', arguments: { target: '127.0.0.1', ports: '80,443,3000,8080' } } } ); const scanResult = JSON.parse(result.content[0].text); console.log(` ✅ Network scan completed`); console.log(` 🎯 Target: localhost (127.0.0.1)`); console.log(` 📡 Findings: ${scanResult.findings?.length || 0}`); console.log(` 🔍 Token usage: ${scanResult.tokenUsage}`); console.log(''); } catch (error) { console.error('❌ Network scan failed:', error.message); } } async demoBoundaryEnforcement() { console.log('🚫 Boundary Enforcement Test:'); const maliciousTargets = [ { path: '/etc/passwd', desc: 'System password file' }, { path: '/usr/bin', desc: 'System binaries' }, { network: '8.8.8.8', desc: 'External DNS server' } ]; for (const target of maliciousTargets) { try { if (target.path) { await this.client.request( { method: 'tools/call', params: { name: 'scan_project', arguments: { path: target.path } } }, { method: 'tools/call', params: { name: 'scan_project', arguments: { path: target.path } } } ); console.log(` ❌ SECURITY BREACH: ${target.desc} was accessible!`); } else if (target.network) { await this.client.request( { method: 'tools/call', params: { name: 'scan_network', arguments: { target: target.network } } }, { method: 'tools/call', params: { name: 'scan_network', arguments: { target: target.network } } } ); console.log(` ❌ SECURITY BREACH: ${target.desc} was accessible!`); } } catch (error) { console.log(` ✅ Blocked access to ${target.desc}`); } } console.log(' 🔒 All boundary tests passed - system is secure\n'); } async demoComplianceCheck() { console.log('📊 Compliance Framework Validation:'); try { const result = await this.client.request( { method: 'tools/call', params: { name: 'check_compliance', arguments: { path: process.cwd(), frameworks: ['OWASP', 'CIS', 'NIST'] } } }, { method: 'tools/call', params: { name: 'check_compliance', arguments: { path: process.cwd(), frameworks: ['OWASP', 'CIS', 'NIST'] } } } ); const complianceResult = JSON.parse(result.content[0].text); console.log(` ✅ Compliance check completed`); if (complianceResult.compliance.OWASP_Top_10) { console.log(` 🎯 OWASP Top 10: ${complianceResult.compliance.OWASP_Top_10.coverage}`); } if (complianceResult.compliance.CIS_Controls) { console.log(` 🛡️ CIS Controls: ${complianceResult.compliance.CIS_Controls.coverage}`); } if (complianceResult.compliance.NIST_CSF) { console.log(` 🏛️ NIST CSF: ${complianceResult.compliance.NIST_CSF.coverage}`); } console.log(''); } catch (error) { console.error('❌ Compliance check failed:', error.message); } } async demoPentesting() { console.log('⚔️ Web Application Penetration Test:'); try { // This would typically target a running application const result = await this.client.request( { method: 'tools/call', params: { name: 'pentest_application', arguments: { targetUrl: 'http://127.0.0.1:3000', testTypes: ['security_headers', 'xss', 'sql_injection'], depth: 'quick' } } }, { method: 'tools/call', params: { name: 'pentest_application', arguments: { targetUrl: 'http://127.0.0.1:3000', testTypes: ['security_headers', 'xss', 'sql_injection'], depth: 'quick' } } } ); const pentestResult = JSON.parse(result.content[0].text); console.log(` ✅ Pentest completed`); console.log(` 🎯 Target: localhost:3000`); console.log(` 🔍 Findings: ${pentestResult.findings?.length || 0}`); console.log(` 🏆 Status: ${pentestResult.status}`); console.log(''); } catch (error) { console.error('❌ Pentest failed (expected if no app running):', error.message); console.log(' ℹ️ This is normal if no web app is running on localhost:3000\n'); } } async demoCachePerformance() { console.log('🚀 Cache Performance Test:'); try { console.log(' Running first scan (no cache)...'); const startTime1 = Date.now(); await this.client.request( { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'quick', tools: ['gitleaks'] } } }, { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'quick', tools: ['gitleaks'] } } } ); const duration1 = Date.now() - startTime1; console.log(` ⏱️ First scan: ${duration1}ms`); console.log(' Running second scan (with cache)...'); const startTime2 = Date.now(); await this.client.request( { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'quick', tools: ['gitleaks'] } } }, { method: 'tools/call', params: { name: 'scan_project', arguments: { path: process.cwd(), profile: 'quick', tools: ['gitleaks'] } } } ); const duration2 = Date.now() - startTime2; console.log(` ⚡ Cached scan: ${duration2}ms`); const speedup = Math.round((duration1 / duration2) * 10) / 10; console.log(` 🚀 Cache speedup: ${speedup}x faster`); console.log(''); } catch (error) { console.error('❌ Cache test failed:', error.message); } } delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async cleanup() { console.log('🧹 Cleaning up...'); if (this.client) { try { await this.client.close(); } catch (error) { // Ignore cleanup errors } } if (this.serverProcess) { this.serverProcess.kill(); } console.log('✅ Cleanup complete'); } } // Run the demo const demo = new ShamashDemo(); demo.start().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/NeoTecDigital/mcp_shamash'

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