Skip to main content
Glama
server.ts2.64 kB
import { createServer, IncomingMessage, ServerResponse, Server } from 'node:http'; import { appendFileSync } from 'node:fs'; import type { LogEntry } from './types.js'; export class DebugLogServer { private server: Server | null = null; private port: number; private logFile: string; constructor(port: number, logFile: string) { this.port = port; this.logFile = logFile; } start(): Promise<void> { return new Promise((resolve, reject) => { this.server = createServer((req, res) => this.handleRequest(req, res)); this.server.on('error', (err) => { reject(err); }); this.server.listen(this.port, () => { resolve(); }); }); } stop(): Promise<void> { return new Promise((resolve) => { if (this.server) { this.server.close(() => { this.server = null; resolve(); }); } else { resolve(); } }); } private handleRequest(req: IncomingMessage, res: ServerResponse): void { // Set CORS headers for browser support res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); // Handle preflight if (req.method === 'OPTIONS') { res.writeHead(204); res.end(); return; } // Health check if (req.method === 'GET' && req.url === '/health') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ status: 'ok', port: this.port })); return; } // Log endpoint if (req.method === 'POST' && req.url === '/log') { let body = ''; req.on('data', (chunk) => { body += chunk.toString(); }); req.on('end', () => { try { const logEntry: LogEntry = JSON.parse(body); this.writeLog(logEntry); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ success: true })); } catch { res.writeHead(400, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Invalid JSON' })); } }); return; } // 404 for unknown routes res.writeHead(404, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Not found' })); } private writeLog(entry: LogEntry): void { const logLine = JSON.stringify({ ...entry, receivedAt: Date.now() }) + '\n'; appendFileSync(this.logFile, logLine); } isRunning(): boolean { return this.server !== null; } }

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/iarmankhan/agentic-debugger'

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