LabscoMCP early access ↗
mohitbadwalMCP SERVER

Ringback

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

by mohitbadwal ↗Notifications & Alerting to HumansCommunity

LABSCO 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

Build from source — git clone https://github.com/mohitbadwal/ringback && cd ringback