Skip to main content
Glama
index.ts1.58 kB
#!/usr/bin/env node import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { createMcpServer, createServices } from './server/index.js'; import type { Services } from './server/services.js'; const storagePath = process.env.MCP_PLANNING_STORAGE_PATH ?? './.mcp-plans'; /** * Cleanup resources on shutdown */ async function cleanup(services: Services): Promise<void> { console.error('Shutting down MCP Planning Server...'); try { await services.repositoryFactory.dispose(); await services.lockManager.dispose(); console.error('Cleanup completed'); } catch (error: unknown) { console.error('Error during cleanup:', error instanceof Error ? error.message : String(error)); } } async function main(): Promise<void> { const services = await createServices(storagePath); const { server } = createMcpServer(services); // Setup graceful shutdown handlers let isShuttingDown = false; const handleShutdown = async (): Promise<void> => { if (isShuttingDown) { return; // Prevent multiple cleanup attempts } isShuttingDown = true; await cleanup(services); process.exit(0); }; process.on('SIGINT', () => { void handleShutdown(); }); process.on('SIGTERM', () => { void handleShutdown(); }); const transport = new StdioServerTransport(); await server.connect(transport); console.error('MCP Planning Server started'); } main().catch((error: unknown) => { console.error('Fatal error:', error instanceof Error ? error.message : String(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/cppmyjob/cpp-mcp-planner'

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