#!/usr/bin/env node import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { TwilioMCPServer } from './server.js'; // Validate environment const TWILIO_ACCOUNT_SID = process.env.TWILIO_ACCOUNT_SID; const TWILIO_AUTH_TOKEN = process.env.TWILIO_AUTH_TOKEN; if (!TWILIO_ACCOUNT_SID) { console.error('āŒ ERROR: TWILIO_ACCOUNT_SID environment variable is required'); console.error(''); console.error('Get your Account SID from:'); console.error(' 1. Log in to Twilio Console: https://console.twilio.com/'); console.error(' 2. Your Account SID is displayed on the dashboard'); console.error(' 3. Set: export TWILIO_ACCOUNT_SID=your_account_sid_here'); console.error(''); process.exit(1); } if (!TWILIO_AUTH_TOKEN) { console.error('āŒ ERROR: TWILIO_AUTH_TOKEN environment variable is required'); console.error(''); console.error('Get your Auth Token from:'); console.error(' 1. Log in to Twilio Console: https://console.twilio.com/'); console.error(' 2. Click "Show" next to Auth Token on the dashboard'); console.error(' 3. Set: export TWILIO_AUTH_TOKEN=your_auth_token_here'); console.error(''); console.error('āš ļø WARNING: Keep your Auth Token secret! It provides full account access.'); process.exit(1); } // Create server instance const server = new TwilioMCPServer({ accountSid: TWILIO_ACCOUNT_SID, authToken: TWILIO_AUTH_TOKEN, }); // Graceful shutdown let isShuttingDown = false; const shutdown = async (signal: string) => { if (isShuttingDown) return; isShuttingDown = true; console.error(`\nšŸ“” Received ${signal}, shutting down Twilio MCP server...`); try { await server.close(); console.error('āœ… Server closed gracefully'); process.exit(0); } catch (error) { console.error('āŒ Error during shutdown:', error); process.exit(1); } }; process.on('SIGINT', () => shutdown('SIGINT')); process.on('SIGTERM', () => shutdown('SIGTERM')); // Start server const transport = new StdioServerTransport(); server.connect(transport).catch((error) => { console.error('āŒ Failed to start Twilio MCP server:', error); process.exit(1); }); console.error('šŸš€ Twilio MCP Server running on stdio'); console.error('šŸ“± Ready to handle SMS, voice, verify, conversations, and lookups');