Ringback
2.5 points
6.5K

Installation

Copy the following command to your Client for configuration
Note: Your key is sensitive information, do not share it with anyone.

๐Ÿ“ž ringback

MCP

Your AI agent can call your phone โ€” and actually talk to you.

ringback gives an LLM (Claude, or any MCP client) tools to reach you on your phone โ€” from a one-way "fierce" alert all the way to a live, interruptible voice conversation โ€” using only free, self-hosted pieces. No paid telephony. No extra API key for the conversation: the model already driving the MCP is the voice on the line.


โœจ Highlights

  • ๐Ÿ“ž Two-way voice calls โ€” the agent rings your phone, you talk, it transcribes you and replies in speech. Barge-in: talk over it and it stops.
  • ๐Ÿ”” Tiered alerts โ€” a loud push (ntfy / Pushover) or a real SIP ring + chat message, fired only when the LLM judges it urgent.
  • ๐Ÿ†“ Free & self-hosted โ€” pjsua2 + whisper.cpp + Piper neural TTS + a free Linphone SIP account. No Twilio, no per-minute fees.
  • ๐Ÿง  No conversation API key โ€” the calling model is the brain; these tools are just its ears and mouth.

It ships two MCP servers, ringback-alert and ringback-voice:

Platform: macOS, Linux, and Windows (via WSL2 or Docker). TTS is Piper by default (same voice everywhere), falling back to the OS-native voice (say on macOS). The engine is headless โ€” it never opens a local mic/speaker (all audio is WAV โ†” SIP/RTP), so no sound card is required. Setup guides: macOS ยท Linux ยท Windows ยท Docker.

๐Ÿงฉ The two servers

Server Tools What it does
ringback-alert alert_me, alert_test, alert_status Fire-and-forget notification: a loud push (ntfy / Pushover) and/or a SIP ring + chat message.
ringback-voice call_start, converse, get_conversation, call_end, โ€ฆ A real two-way phone conversation. Rings your phone; you talk, it transcribes you, the LLM replies in speech. Supports barge-in (talk over it and it stops).

The criteria for when to contact you live in the tool descriptions โ€” the calling LLM decides. These servers are just the mechanism.

๐ŸŽฌ What a call looks like

agent โ†’ call_start("Your nightly deploy failed โ€” want me to walk you through it?")
   ๐Ÿ“ž your phone rings; you pick up and hear the line
you   โ†’ "yeah, which step broke?"
agent โ†’ "The database migration. I can roll it back and retry โ€” want that?"
you   โ†’ "yes, do it"            โ† you can also just talk over the agent to interrupt
agent โ†’ call_end()

The LLM calls call_start once, then converse(...) for each turn. Plain alerts are even simpler: one alert_me(...) call.


๐Ÿค– Let Claude Code install it for you

Easiest path: copy the prompt below and paste it into Claude Code โ€” it'll clone, build, configure, and register everything, asking you only for what it needs (a free SIP account + your phone to answer a test call).

Set up the ringback MCP server for me โ€” it lets you (the agent) call my phone when you
need a decision while I'm away. Repo: https://github.com/mohitbadwal/ringback
(runs on macOS, Linux, or Windows via WSL2/Docker).

Please:
1. Detect my OS and pick the path:
   - macOS                 โ†’ ./setup.sh (Homebrew); read docs/SETUP_MACOS.md
   - Linux or Windows-WSL2 โ†’ ./setup-linux.sh; read docs/SETUP_LINUX.md
   - Windows without WSL2   โ†’ use Docker; read docs/SETUP_DOCKER.md
2. Clone https://github.com/mohitbadwal/ringback, cd in, and read the README + the doc above.
3. Run the setup for my OS (compiles pjsua2 from source โ€” ~20โ€“30 min โ€” installs whisper +
   Piper TTS, downloads models, and creates voice.env).
4. I need a free Linphone SIP account (the phone line): walk me through signing up at
   https://subscribe.linphone.org and installing the Linphone app on my phone, then put my
   SIP id/username/password into voice.env (and set VOICE_DISPLAY_NAME to a caller-ID name).
5. Register it (per OS):
   - macOS:      claude mcp add ringback-voice --scope user -- "$PWD/run_voice_mcp.sh"
   - Linux/WSL2: claude mcp add ringback-voice --scope user -- python3 "$PWD/run_voice_mcp.py"
   - Docker:     see docs/SETUP_DOCKER.md (build image, convert creds to voice.docker.env, then register a `docker run -i` command)
6. macOS only: if a test call fails with error -32000 or a segfault, run ./fix_macos_twolevel.sh.
7. Tell me to start a fresh session, then call me to confirm two-way voice works.

Ask me whenever you need input (SIP credentials, my phone to answer the test call, etc.).

๐Ÿ’ก Prefer to do it by hand? The quick start and full walkthrough are below.


๐Ÿš€ Quick start

git clone https://github.com/mohitbadwal/ringback && cd ringback
./setup.sh        # installs EVERYTHING (toolchain, pjsua2, whisper model, deps) + creates voice.env
# edit voice.env โ†’ add your 3 SIP vars (free account: https://subscribe.linphone.org), then:
claude mcp add ringback-voice --scope user -- "$PWD/run_voice_mcp.sh"

Full walkthrough + env-var reference: Set up ringback-voice below.


โš ๏ธ Honest caveats (read first)

  • Cross-platform. macOS (native), Linux (native), Windows (via WSL2 or Docker). The engine is headless โ€” no sound card needed. Native Windows (MSVC) is intentionally not supported; WSL2/Docker is the Windows path.
  • Not ChatGPT-realtime. The voice loop is record โ†’ whisper STT โ†’ LLM โ†’ Piper/say TTS, so expect ~1โ€“2 s per turn. It's a reliable walkie-talkie with barge-in, not a streaming realtime voice.
  • The voice feature depends on GPL software (pjproject/pjsua2). This repo is Apache-2.0, but redistributing a bundle that links pjsua2 carries GPL obligations โ€” see . The ringback-alert server is unaffected.
  • Your machine must be awake and online, and for a voice call a Claude session must be live (it's the brain) for the duration.
  • Barge-in assumes low acoustic echo (handset or headset). On speakerphone, the TTS can echo into the mic and false-trigger "interruption." There's no echo cancellation in this path.
  • iOS push reality: a self-hosted/free push can't truly pierce Focus/Silent on iPhone except via Pushover's Critical Alerts (paid) โ€” see the ringback-alert notes below.

๐Ÿ—๏ธ Architecture

  LLM (Claude)  โ”€โ”€MCP toolsโ”€โ”€โ–ถ  ringback-voice server (Python)
                                   โ”‚  call_start / converse / listen / speak
                                   โ–ผ
                 pjsua2 (SIP+SRTP, built from source)  โ”€โ”€โ–ถ  Linphone SIP server
                   โ”‚  Piper/say โ†’ ffmpeg โ†’ WAV  (speak)        โ”‚ APNs VoIP push
                   โ”‚  record โ†’ whisper.cpp (listen)            โ–ผ
                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ  your iPhone rings

ringback-alert is simpler: it shells out to ntfy/Pushover HTTP and/or baresip for a SIP ring + chat message.


๐Ÿ“ฆ Prerequisites

  • One of:
    • macOS (Apple Silicon or Intel) with Homebrew โ€” run ./setup.sh
    • Linux (Debian/Ubuntu/Fedora) โ€” run ./setup-linux.sh (see docs/SETUP_LINUX.md)
    • Windows โ€” WSL2 (run ./setup-linux.sh inside it) or Docker Desktop (see docs/SETUP_WINDOWS.md)
    • Any OS with Docker โ€” docker build -t ringback . (see docs/SETUP_DOCKER.md)
  • A free Linphone SIP account (sip.linphone.org) and the Linphone iOS/Android app (for the ring/voice features)
  • Python 3.10+ (the pjsua2 bindings are built against whichever python3 you point at)

๐Ÿ”ง Set up ringback-voice โ€” 4 steps

1๏ธโƒฃ Clone + install everything

git clone https://github.com/mohitbadwal/ringback && cd ringback
./setup.sh

setup.sh installs the toolchain, compiles pjsua2 from source (~20โ€“30 min โ€” no Homebrew formula exists for the bindings), relinks the pjproject dylibs to a two-level OpenSSL namespace (the macOS fix that makes SIP/SRTP work), downloads the whisper model, installs Piper + a voice, installs deps, and creates voice.env for you. Safe to re-run. (Override PYTHON_BIN / PJPROJECT_DIR / WHISPER_MODEL_NAME if your layout differs.)

๐Ÿง On Linux? Use instead โ€” it does the same build with apt/dnf and needs no OpenSSL relink. ๐ŸชŸ On Windows? Use WSL2 (docs/SETUP_WINDOWS.md) or Docker. Register the server with the cross-platform launcher python3 run_voice_mcp.py (the .sh is macOS-only).

๐ŸŽ Hit a snag on macOS? is a field-tested root-cause + troubleshooting guide (build target, the OpenSSL flat-namespace fix, whisper model, symptomโ†’fix table).

2๏ธโƒฃ Get a free SIP account (this is the phone that rings)

  • Sign up at https://subscribe.linphone.org (or tap Create account in the Linphone app). You get a username and password; your address is sip:<username>@sip.linphone.org.
  • Install the Linphone app on your iPhone, sign in, and confirm it shows Connected.

3๏ธโƒฃ Fill in voice.env (already created by setup.sh โ€” just edit it)

Only three vars are required:

export VOICE_SIP_ID="sip:yourname@sip.linphone.org"
export VOICE_SIP_USER="yourname"
export VOICE_SIP_PASS="your-password"

Full variable reference:

Variable Required Default What it is
VOICE_SIP_ID โœ… โ€” Your SIP address, e.g. sip:you@sip.linphone.org
VOICE_SIP_USER โœ… โ€” SIP username (the part before @)
VOICE_SIP_PASS โœ… โ€” Your SIP password
VOICE_SIP_CALLEE โ€” = VOICE_SIP_ID Address to call (normally yourself)
VOICE_SIP_PROXY โ€” sip:sip.linphone.org;transport=tls SIP registrar/proxy
WHISPER_MODEL โ€” ~/.whisper-models/ggml-small.en.bin STT model: base.en (fast) ยท small.en (default) ยท medium.en (accurate)
VOICE_TTS โ€” auto TTS engine: auto (Piper if installed, else OS voice) ยท piper ยท say ยท espeak ยท sapi
VOICE_PIPER_MODEL โ€” ~/.piper-voices/en_US-lessac-medium.onnx Piper voice (.onnx; needs the matching .onnx.json beside it)
VOICE_TTS_CMD โ€” โ€” Custom TTS command template with {text}/{out} (overrides VOICE_TTS)
VOICE_NULL_AUDIO โ€” auto Force pjsua2 null audio device (auto = on except macOS; 1/0 to force)
RINGBACK_PRESENCE โ€” โ€” Override watchdog idle/presence: present or absent (for Wayland/headless)
PJPROJECT_DIR โ€” ~/build/pjproject-2.17 pjsua2 build dir (auto-detected)
PYTHON_BIN โ€” $(command -v python3) Python that has pjsua2 (auto-detected)
OPENSSL_PREFIX โ€” $(brew --prefix openssl@3) OpenSSL libs (macOS; auto-detected)

4๏ธโƒฃ Register + test

# macOS:
claude mcp add ringback-voice --scope user -- "$PWD/run_voice_mcp.sh"
# Linux / Windows-WSL2 (cross-platform launcher):
claude mcp add ringback-voice --scope user -- python3 "$PWD/run_voice_mcp.py"
# Any OS via Docker (convert creds to voice.docker.env first โ€” see docs/SETUP_DOCKER.md):
claude mcp add ringback-voice --scope user -- docker run -i --rm --network host --env-file voice.docker.env ringback

Then in a fresh Claude session say: "Use ringback-voice to call me and say hello." Your phone should ring.

๐Ÿ–ฅ๏ธ Claude Desktop instead of Code? Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (absolute path required; restart the app):

{ "mcpServers": { "ringback-voice": { "command": "/absolute/path/to/ringback/run_voice_mcp.sh" } } }

๐Ÿ”” Set up ringback-alert (optional)

ringback-alert reads its config from the MCP client's env block (no file to source). Register it with the channels you want:

# Claude Code
claude mcp add ringback-alert --scope user \
  --env ALERT_CHANNEL=ntfy \
  --env NTFY_URL=https://ntfy.sh/your-long-random-topic \
  -- /opt/homebrew/bin/uv --directory "$PWD" run server.py

See alert.env.example for all variables (ntfy / Pushover / SIP ring). Use a long random ntfy topic โ€” anyone who knows it can read/publish.


๐Ÿ’ป Using ringback-voice (the conversation)

The LLM drives a simple loop:

reply = call_start("Hi, it's your assistant โ€” your deploy failed. Want details?")
# rings the phone, speaks the line, returns the user's first words
reply = converse("It failed on the database migration step. Want me to retry it?")
# speaks AND listens in one interruptible turn
... repeat converse() each turn ...
call_end()   # when the user says "bye" / hangs up
  • converse(text) speaks while listening. If you talk over it, it stops immediately and tells the LLM how far it got and what you said (barge-in).
  • get_conversation() returns the full transcript so far โ€” both sides, plus where it got interrupted.
  • TTS reads text literally, so the tool descriptions instruct the model to speak plain-language summaries, never raw logs/codes โ€” those go via alert_me as text instead.

๐Ÿ’ก Whisper model accuracy/speed trade-off (set WHISPER_MODEL): base.en (fast/rough) โ†’ small.en (balanced, default) โ†’ medium.en (most accurate/slow).


๐Ÿ”” Using ringback-alert (notifications)

alert_me(message, severity, title) with severity = info | warn | critical. Channels via ALERT_CHANNEL (comma list of ntfy, pushover, call):

  • ntfy โ€” free push; loud but does not pierce iOS Focus/Silent unless whitelisted per-Focus.
  • Pushover โ€” $5 one-time; true iOS Critical Alerts (pierces Focus/Silent, repeats until acknowledged) at critical.
  • call โ€” free SIP ring + Linphone chat message via baresip; rings full-screen, only at critical by default.

A built-in rate-limit guard (default 5/60s, per-process) stops a misfiring caller from spamming you.


๐Ÿ• Bundled skill: watchdog

is a ready-to-use Claude skill built on these servers. It watches a condition you give it (a CI run, a deploy, a pod, a file) and escalates only when you're actually away from the laptop โ€” chat status โ†’ chat warning โ†’ ringback-alert push โ†’ ringback-voice call โ€” judged by input-idle time (macOS, Linux, or Windows; see platform_compat.hid_idle_seconds). It never interrupts you while you're typing, and de-escalates the moment you touch the keyboard.

cp -r skills/watchdog ~/.claude/skills/watchdog   # install for Claude Code

Then: /watchdog <what to watch> | priority=<low|medium|critical> โ€” low = chat only, medium = may send a phone alert, critical = may place a call. Full design in .


๐Ÿ”’ Security

  • SIP credentials live only in your local, gitignored voice.env (and the baresip accounts file for ringback-alert) โ€” never in the repo or the MCP client config when you can avoid it.
  • The voice server only ever calls the single SIP URI you configure โ€” it cannot dial arbitrary numbers.
  • Treat ntfy topics as secrets (use a long random topic); don't put sensitive detail in alert bodies on public ntfy.sh.
  • See for the GPL/pjproject licensing caveat before redistributing.

๐Ÿ“„ License

Apache-2.0 (see ), with an important GPL caveat for the voice component's pjproject dependency โ€” see .


๐Ÿ™ Credits

Built on pjproject/pjsua2, whisper.cpp, baresip, ntfy, and Linphone.

Alternatives

M
Markdownify MCP
Markdownify is a multi-functional file conversion service that supports converting multiple formats such as PDFs, images, audio, and web page content into Markdown format.
TypeScript
50.6K
5 points
D
Duckduckgo MCP Server
Certified
The DuckDuckGo Search MCP Server provides web search and content scraping services for LLMs such as Claude.
Python
107.5K
4.3 points
G
Gitlab MCP Server
Certified
The GitLab MCP server is a project based on the Model Context Protocol that provides a comprehensive toolset for interacting with GitLab accounts, including code review, merge request management, CI/CD configuration, and other functions.
TypeScript
39.2K
4.3 points
N
Notion Api MCP
Certified
A Python-based MCP Server that provides advanced to-do list management and content organization functions through the Notion API, enabling seamless integration between AI models and Notion.
Python
35.1K
4.5 points
U
Unity
Certified
UnityMCP is a Unity editor plugin that implements the Model Context Protocol (MCP), providing seamless integration between Unity and AI assistants, including real - time state monitoring, remote command execution, and log functions.
C#
49.8K
5 points
F
Figma Context MCP
Framelink Figma MCP Server is a server that provides access to Figma design data for AI programming tools (such as Cursor). By simplifying the Figma API response, it helps AI more accurately achieve one - click conversion from design to code.
TypeScript
91.6K
4.5 points
G
Gmail MCP Server
A Gmail automatic authentication MCP server designed for Claude Desktop, supporting Gmail management through natural language interaction, including complete functions such as sending emails, label management, and batch operations.
TypeScript
33.6K
4.5 points
M
Minimax MCP Server
The MiniMax Model Context Protocol (MCP) is an official server that supports interaction with powerful text-to-speech, video/image generation APIs, and is suitable for various client tools such as Claude Desktop and Cursor.
Python
79.9K
4.8 points