Skip to main content
Glama
test-endpoints.js4.24 kB
#!/usr/bin/env node /** * Test HTTP/SSE endpoints for mcp-proxy */ const http = require('http'); const { EventSource } = require('eventsource'); async function testEndpoints() { console.log('🧪 Testing HTTP/SSE Endpoints'); console.log('============================='); // Test 1: SSE endpoint and extract session ID console.log('\n1. Testing SSE endpoint...'); let sessionId = null; try { sessionId = await new Promise((resolve, reject) => { const eventSource = new EventSource('http://localhost:8080/sse'); let timeout = setTimeout(() => { eventSource.close(); reject(new Error('SSE timeout')); }, 5000); eventSource.onmessage = (event) => { console.log(' SSE Event:', event.type, event.data); }; eventSource.addEventListener('endpoint', (event) => { console.log(' SSE Endpoint event:', event.data); const match = event.data.match(/sessionId=([^&]+)/); if (match) { clearTimeout(timeout); eventSource.close(); resolve(match[1]); } }); eventSource.onerror = (error) => { clearTimeout(timeout); eventSource.close(); reject(error); }; }); console.log('✅ SSE endpoint working, session ID:', sessionId); } catch (error) { console.log('❌ SSE endpoint failed:', error.message); return; } // Test 2: Stream endpoint with session ID if (sessionId) { console.log('\n2. Testing stream endpoint with session ID...'); try { const response = await makeMCPRequest(`/messages?sessionId=${sessionId}`, { jsonrpc: '2.0', id: 1, method: 'tools/list' }); if (response && response.result) { console.log('✅ Stream endpoint working'); console.log(` Tools available: ${response.result.tools ? response.result.tools.length : 'unknown'}`); } else { console.log('❌ Stream endpoint response invalid:', response); } } catch (error) { console.log('❌ Stream endpoint failed:', error.message); } } // Test 3: JSON-RPC over HTTP console.log('\n3. Testing JSON-RPC over HTTP...'); try { const response = await makeMCPRequest('/stream', { jsonrpc: '2.0', id: 2, method: 'tools/list' }); console.log(' Response:', response); } catch (error) { console.log('❌ JSON-RPC failed:', error.message); } console.log('\n🎉 Endpoint testing completed!'); } function makeMCPRequest(path, payload) { return new Promise((resolve, reject) => { const data = JSON.stringify(payload); const options = { hostname: 'localhost', port: 8080, path: path, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': data.length } }; const req = http.request(options, (res) => { let body = ''; res.on('data', chunk => body += chunk); res.on('end', () => { try { const response = JSON.parse(body); resolve(response); } catch (error) { reject(new Error(`Parse error: ${error.message}, body: ${body}`)); } }); }); req.on('error', reject); req.setTimeout(10000, () => reject(new Error('Timeout'))); req.write(data); req.end(); }); } // Install eventsource if not available try { require('eventsource'); } catch (e) { console.log('Installing eventsource...'); require('child_process').execSync('npm install eventsource', { stdio: 'inherit' }); } testEndpoints().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/FutureAtoms/agentic-control-framework'

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