"Six months ago, everyone was talking about MCPs. And I was like, screw MCPs. Every MCP would be better as a CLI."
— Peter Steinberger, Founder of OpenClaw Watch on YouTube (~2:39:00) | Lex Fridman Podcast #491
A production-ready command-line interface for the Apideck SMS API. Send and manage SMS messages across multiple providers (Twilio, MessageBird, Plivo, Vonage, and more) through a single unified API from your terminal.
Disclaimer: This is an unofficial CLI tool and is not affiliated with, endorsed by, or supported by Apideck.
- Unified SMS API — One CLI to rule all SMS providers (Twilio, MessageBird, Plivo, Telnyx, Vonage, etc.)
- Message Management — List, send, get, update, and delete SMS messages
- Provider Agnostic — Switch providers without changing your code
- JSON output — All commands support
--jsonfor scripting and piping - Colorized output — Clean, readable terminal output
MCP servers are complex, stateful, and require a running server process. A CLI is:
- Simpler — Just a binary you call directly
- Composable — Pipe output to
jq,grep,awk, and other tools - Scriptable — Use in shell scripts, CI/CD pipelines, cron jobs
- Debuggable — See exactly what's happening with
--jsonflag - AI-friendly — AI agents can call CLIs just as easily as MCPs, with less overhead
npm install -g @ktmcp-cli/apideckcomsms- Sign up at apideck.com
- Create an application to get your App ID
- Generate an API key
- Connect an SMS provider (Twilio, MessageBird, etc.)
apideckcomsms config set --api-key YOUR_API_KEY --app-id YOUR_APP_IDOptionally set a consumer ID (defaults to 'default-consumer'):
apideckcomsms config set --consumer-id YOUR_CONSUMER_IDapideckcomsms config show# Set credentials
apideckcomsms config set --api-key <key> --app-id <id>
# Set consumer ID (optional)
apideckcomsms config set --consumer-id <id>
# Show current config
apideckcomsms config show# List messages
apideckcomsms messages list
# Get a specific message
apideckcomsms messages get <message-id>
# Send an SMS
apideckcomsms messages send --to "+1234567890" --body "Hello from CLI"
apideckcomsms messages send --to "+1234567890" --from "+0987654321" --body "Hello"
# Delete a message
apideckcomsms messages delete <message-id>All commands support --json for machine-readable output:
# Get all messages as JSON
apideckcomsms messages list --json
# Pipe to jq for filtering
apideckcomsms messages list --json | jq '.[] | select(.status == "delivered")'
# Send message and capture ID
ID=$(apideckcomsms messages send --to "+1234567890" --body "Test" --json | jq -r '.id')# Send a simple message
apideckcomsms messages send --to "+1234567890" --body "Your order has shipped!"
# Send with specific sender
apideckcomsms messages send \
--from "+0987654321" \
--to "+1234567890" \
--body "Verification code: 123456"# Send message and get ID
apideckcomsms messages send --to "+1234567890" --body "Test" --json
# Check message status
apideckcomsms messages get <message-id> --json | jq '.status'# Read numbers from file and send
while read number; do
apideckcomsms messages send --to "$number" --body "Important update"
sleep 1
done < phone_numbers.txtIssues and pull requests are welcome at github.com/ktmcp-cli/apideckcomsms.
MIT — see LICENSE for details.
Part of the KTMCP CLI project — replacing MCPs with simple, composable CLIs.
If you find this CLI useful, we'd greatly appreciate your support! Share your experience on:
- Twitter/X
- Hacker News
Incentive: Users who can demonstrate that their support/advocacy helped advance KTMCP will have their feature requests and issues prioritized.
Just be mindful - these are real accounts and real communities. Authentic mentions and genuine recommendations go a long way!
If you find this CLI useful, we'd appreciate support across Reddit, Twitter, Hacker News, or Moltbook. Please be mindful - these are real community accounts. Contributors who can demonstrate their support helped advance KTMCP will have their PRs and feature requests prioritized.