Skip to main content
Glama
main.ts2.24 kB
#!/usr/bin/env node import {StdioServerTransport} from '@modelcontextprotocol/sdk/server/stdio.js'; import {StreamableHTTPServerTransport} from '@modelcontextprotocol/sdk/server/streamableHttp.js'; import express, {type Request, type Response} from 'express'; import {createServer} from './index.js'; function setupSignalHandlers(cleanup: () => Promise<void>): void { process.on('SIGINT', async () => { await cleanup(); process.exit(0); }); process.on('SIGTERM', async () => { await cleanup(); process.exit(0); }); } const transport = process.env.MCP_TRANSPORT || 'stdio'; (async () => { if (transport === 'stdio') { const server = createServer(); setupSignalHandlers(async () => server.close()); const stdioTransport = new StdioServerTransport(); await server.connect(stdioTransport); console.error('filesystem-mcp running on stdio'); } else if (transport === 'http') { const app = express(); app.use(express.json()); const port = parseInt(process.env.PORT || '3000', 10); const baseUrl = process.env.MCP_BASE_URL || `http://localhost:${port}`; app.post('/mcp', async (req: Request, res: Response) => { const server = createServer(); try { const httpTransport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true, }); await server.connect(httpTransport); await httpTransport.handleRequest(req, res, req.body); res.on('close', () => { void httpTransport.close(); void server.close(); }); } catch (error) { console.error('Error handling MCP request:', error); if (!res.headersSent) { res.status(500).json({ jsonrpc: '2.0', error: {code: -32603, message: 'Internal server error'}, id: null, }); } } }); const httpServer = app.listen(port, () => { console.error(`filesystem-mcp running on ${baseUrl}/mcp`); }); httpServer.on('error', (err: NodeJS.ErrnoException) => { console.error('FATAL: Server error', err.message); process.exit(1); }); setupSignalHandlers(async () => { httpServer.close(); }); } else { console.error(`Unknown transport: ${transport}. Use MCP_TRANSPORT=stdio or MCP_TRANSPORT=http`); 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/domdomegg/filesystem-mcp'

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