There is not much between your client and the Twilio API, which is fine for what this does. The detail that bites people is Twilio's own: on a trial account, messages only go to numbers you have already verified, so a first test to an arbitrary phone will fail for reasons that have nothing to do with the server.
One codebase with two entry points: an MCP server your client launches over stdio, and a standalone HTTP API you can deploy. Both send SMS through Twilio using the same credentials. The MCP side is what a client talks to; the HTTP side exists so a web app can reach the same capability without MCP.
- Send an SMS to a number through your Twilio account, composed in the conversation
- Send an occasion greeting — birthday and similar — from a pre-built prompt
- The same two actions as HTTP endpoints, `POST /send-sms` and `POST /send-greeting`, when you run the web mode
- A `GET /health` endpoint and a Dockerfile for deploying the HTTP mode
- Numbers must be in E.164 form, for example +11234567890
A Twilio account with SMS enabled, and three environment variables: `ACCOUNT_SID`, `AUTH_TOKEN` and `FROM_NUMBER`. Node.js 18 or newer. Run `npm install` and `npm run build`, then `npm run start:mcp` for MCP mode; the published package is `@yiyang.1i/sms-mcp-server`, version 2025.2.24, which the README's client config launches with `npx`. On a Twilio trial account you can only message numbers you have verified.
One command plus a key — npx -y @yiyang.1i/sms-mcp-server, then supply credentials
