Skip to main content
Glama
index.ts3.03 kB
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; import express from 'express'; import registryTools from './tools'; // Create MCP server const server = new McpServer({ name: 'file-operation-server', version: '1.0.0' }); // Register tools registryTools(server); // Start the server async function main() { try { // SSE Server const app = express(); app.use(express.json()); // Store transport sessions const transports: { [sessionId: string]: SSEServerTransport } = {}; // CORS Configuration app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header( 'Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS' ); res.header( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization' ); if (req.method === 'OPTIONS') { res.sendStatus(200); } else { next(); } }); // SSE Connection Endpoint app.get('/sse', async (req, res) => { console.log('New SSE connection'); const transport = new SSEServerTransport('/messages', res); const sessionId = transport.sessionId; transports[sessionId] = transport; // Clean up disconnected connections res.on('close', () => { console.log(`SSE connection closed: ${sessionId}`); delete transports[sessionId]; }); await server.connect(transport); }); // Message Endpoint app.post('/messages', async (req, res) => { const sessionId = req.query.sessionId as string; const transport = transports[sessionId]; if (transport) { await transport.handlePostMessage(req, res, req.body); } else { res.status(400).send('Transport for session ID not found'); } }); // Health Check Endpoint app.get('/health', (req, res) => { console.log('Health check endpoint hit'); try { res.status(200).send('OK'); } catch (error) { console.error('Error in health check endpoint:', error); res.status(500).send('Internal Server Error'); } }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`MCP File Operation Server started on port ${PORT}`); console.log(`SSE endpoint: http://localhost:${PORT}/sse`); console.log(`Health check: http://localhost:${PORT}/health`); }); } catch (error) { console.error('Error starting server:', error); process.exit(1); } } // Handle uncaught exceptions process.on('uncaughtException', (error) => { console.error('Uncaught Exception:', error); process.exit(1); }); process.on('unhandledRejection', (reason) => { console.error('Unhandled Promise Rejection:', reason); process.exit(1); }); // Start server main().catch((error) => { console.error('Failed to start:', error); process.exit(1); });

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/Yussefgafer/MyMCP'

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