Skip to main content
Glama

Brave Search MCP Server

http.ts3.4 kB
/** * HTTP transport implementation for MCP server */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { createServer, IncomingMessage, ServerResponse } from 'http'; import { WebSocketServer, WebSocket } from 'ws'; import { Config } from '../config.js'; /** * Start HTTP transport with WebSocket support for production deployment */ export function startHttpTransport(config: Config): void { const server = createServer(handleHttpRequest); const wss = new WebSocketServer({ server }); wss.on('connection', handleWebSocketConnection); server.listen(config.port, () => { console.error(`Forensics Connection MCP server running on HTTP port ${config.port}`); }); // Health check endpoint server.on('request', (req: IncomingMessage, res: ServerResponse) => { if (req.url === '/health' && req.method === 'GET') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ status: 'healthy', timestamp: new Date().toISOString(), service: 'forensics-connections-mcp' })); return; } }); // Handle process termination process.on('SIGINT', () => { console.error('Shutting down HTTP transport...'); server.close(() => { process.exit(0); }); }); process.on('SIGTERM', () => { console.error('Shutting down HTTP transport...'); server.close(() => { process.exit(0); }); }); } /** * Handle HTTP requests */ function handleHttpRequest(req: IncomingMessage, res: ServerResponse): void { // Set CORS headers res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); if (req.method === 'OPTIONS') { res.writeHead(200); res.end(); return; } if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Forensics Connection MCP Server - Use WebSocket for MCP protocol'); return; } if (req.url === '/health') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ status: 'healthy', timestamp: new Date().toISOString(), service: 'forensics-connections-mcp' })); return; } res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } /** * Handle WebSocket connections for MCP protocol */ function handleWebSocketConnection(ws: WebSocket): void { console.error('WebSocket connection established'); ws.on('message', (data: Buffer) => { try { // Handle MCP protocol messages here const message = JSON.parse(data.toString()); console.error('Received MCP message:', message.method || 'unknown'); // Echo back for now - actual MCP protocol handling would go here ws.send(JSON.stringify({ jsonrpc: '2.0', id: message.id, result: { status: 'received' } })); } catch (error) { console.error('Error handling WebSocket message:', error); ws.send(JSON.stringify({ jsonrpc: '2.0', error: { code: -32700, message: 'Parse error' } })); } }); ws.on('close', () => { console.error('WebSocket connection closed'); }); ws.on('error', (error: Error) => { console.error('WebSocket error:', 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/YC-Agents-Hackathon/mcp-forensics'

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