Labsco
MCP SERVER

Ringback

by mohitbadwal

Your agent rings your phone and holds a real conversation — self-hosted SIP, whisper and Piper, no telephony bill.

Notifications & Alerting to Humans
Summary
The escalation ladder ends with your phone actually ringing.

Plenty of tools can send a notification; very few can hold a conversation and let you interrupt. Two design calls make it work: the calling model is the brain, so there is no second API to pay for, and the voice server can only dial the one SIP URI you configure — it cannot reach arbitrary numbers. The caveats section in the README is unusually honest, and worth reading before you rely on it for anything time-critical.

What it is

Two MCP servers that let an LLM reach you away from the keyboard: `ringback-alert` for a one-way push or SIP ring, and `ringback-voice` for a live two-way phone call where you speak, it transcribes you, and the model answers in speech. The model already driving the MCP is the voice on the line, so there is no separate conversation API key.

What you get
  • `ringback-alert` — `alert_me` with `severity` of `info`, `warn` or `critical`, plus `alert_test` and `alert_status`; channels are chosen with `ALERT_CHANNEL` from ntfy, pushover and call, and a rate-limit guard defaults to 5 alerts per 60s
  • `ringback-voice` — `call_start` rings your phone and returns your first words, `converse` speaks and listens in one interruptible turn, `get_conversation` returns the full transcript including where it was interrupted, `call_end` hangs up
  • Barge-in: talk over the agent and it stops immediately, telling the model how far it got and what you said
  • Fully self-hosted — pjsua2 for SIP, whisper.cpp for speech-to-text, Piper for neural TTS, and a free Linphone SIP account; no Twilio and no per-minute fees
  • A bundled watchdog skill escalates only when you are actually away, judged by input-idle time: chat status, then a chat warning, then a push, then a call — and de-escalates the moment you touch the keyboard
Requirements

macOS or Linux natively, Windows through WSL2 or Docker; Python 3.10+, and a free Linphone SIP account plus the Linphone app on your phone. The Docker plugin path is one command in Claude Code; the native path runs `./setup.sh` (or `./setup-linux.sh`), which compiles pjsua2 from source in roughly 20 to 30 minutes and creates `voice.env`. Three variables are required there: `VOICE_SIP_ID`, `VOICE_SIP_USER` and `VOICE_SIP_PASS`. Register with `claude mcp add ringback-voice --scope user`. Things to know before relying on it: expect about 1 to 2 s per turn, since the loop is record then whisper then LLM then TTS; your machine must be awake and a Claude session live for the call's duration; barge-in assumes a handset or headset, because speakerphone echo can false-trigger interruption; and on iPhone only Pushover's paid Critical Alerts truly pierce Focus and Silent. Apache-2.0, with a GPL caveat for the pjproject dependency behind the voice server.

Setup effort

One command plus a key — docker build -t ringback ., then supply credentials