Skip to main content
Glama
cameronsjo

MCP Server Template

by cameronsjo
index.ts3.04 kB
#!/usr/bin/env node /** * MCP Server Template - Entry Point * * This file is the CLI entry point for the MCP server. * It initializes observability, database, tools, and starts the server. * * IMPORTANT: instrumentation.ts must be imported first for proper tracing. */ // Initialize observability FIRST (before any other imports) import './instrumentation.js'; import { createServer, runStdioServer, setupGracefulShutdown } from './server.js'; import { initDatabase, closeDatabase, saveDatabase } from './db/index.js'; import { getToolRegistry } from './tools/registry.js'; import { createLogger } from './shared/logger.js'; import { getConfig, validateConfig } from './config/index.js'; import { shutdownObservability } from './instrumentation.js'; // Import example tools (remove/replace with your own) import { registerExampleTools } from './tools/examples.js'; const logger = createLogger('main'); /** * Main entry point */ async function main(): Promise<void> { try { // Validate configuration const configValidation = validateConfig(); if (!configValidation.valid) { logger.critical('Invalid configuration', { errors: configValidation.errors }); process.exit(1); } const config = getConfig(); logger.info('Starting MCP server', { name: config.serverName, version: config.serverVersion, }); // Initialize database await initDatabase(); logger.info('Database initialized'); // Register tools const registry = getToolRegistry(); registerExampleTools(registry); logger.info('Tools registered', { count: registry.size }); // Create and configure server const server = createServer(); // Setup graceful shutdown const cleanup = async (): Promise<void> => { saveDatabase(); closeDatabase(); await shutdownObservability(); }; setupGracefulShutdown(server, cleanup); // Start server based on transport mode const transport = process.env['MCP_SERVER_TRANSPORT'] ?? 'stdio'; if (transport === 'http') { // HTTP transport (for cloud deployment) const { createHttpTransport, startSessionCleanup } = await import('./transport/index.js'); const app = createHttpTransport({ requireAuth: !config.debugMode, }); const port = parseInt(process.env['MCP_SERVER_PORT'] ?? '3000', 10); const host = process.env['MCP_SERVER_HOST'] ?? '127.0.0.1'; // Start session cleanup startSessionCleanup(); app.listen(port, host, () => { logger.info('HTTP server started', { host, port }); console.error(`MCP server listening on http://${host}:${port}`); }); } else { // Stdio transport (default, for Claude Desktop) await runStdioServer(server); } } catch (error) { logger.critical('Failed to start server', { error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, }); process.exit(1); } } // Run main void main();

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/cameronsjo/mcp-server-template'

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