CallRelay
Drives a spare Android phone as a SIP gateway so outbound calls are placed over an explicitly selected SIM. The server connects to the gateway over USB/ADB and SIP, ships a dedicated Android gateway app, and includes a supervisor for recovering phone control.
Uses Asterisk as the PBX that carries call signaling and audio between the voice pipeline and the Android phone gateway, enabling outbound dialing, live transcripts, DTMF keypad navigation of phone menus, and call recordings.
Optional dialogue model provider for the original Twilio/OpenAI backend, offered as an alternative to the default OpenRouter-based voice pipeline.
Optional alternative telephony backend to the Asterisk/Android path, available for users who prefer Twilio-based calling instead of a local SIM gateway.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CallRelaycall the workshop and ask what time they open tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CallRelay
Let your AI assistant make phone calls through an Android phone.
Give an assistant a task. Review the brief. Let the voice agent make the call. Get the recording and full transcript back.
CallRelay connects an MCP client, a streaming voice pipeline, Asterisk, and an Android SIM gateway. The dashboard manages calls, contacts, personalities, prompts, and callbacks. CallRelay stores its call history locally. Audio and text go to the voice providers you select. Provider keys stay in server-side settings.
Built on Agent Call and Android Voice SIP Agent, with the platform extensions described below.
Community preview: the software has automated tests, but each new phone installation needs a controlled handset test. Inbound reception starts disabled. No real calls run in the test suite.
The screenshots use fictional contacts and conversations.
Install · Architecture · MCP clients · Contribute · Upstream credits
One brief, one call, a complete record
Call the workshop, reach the service department, and ask when they open tomorrow. Do not book anything.
Your assistant collects missing details and prepares a call plan.
You authorize the call. The service starts that plan once.
The voice agent talks, listens, handles interruptions, and navigates phone menus.
The service returns an MP3 recording and a full Markdown transcript.
A lost start response does not cause a second call. The client can recover the original call by its plan ID.
Related MCP server: PhoneBooth MCP Server
What you can do
Area | Features |
Calls | Outbound calls, live transcripts, recordings, notes, tags, search, and downloads |
Agent | Shared instructions, reusable personalities, recipient context, dynamic tasks, and version history |
Playground | Browser voice or text practice without a telephone call |
Phone menus | Keypad digits, extensions, silent hold, and return to a human conversation |
Contacts | Related call history, summaries, evidence-linked memory, and owner corrections |
Reception | Separate inbound instructions, business facts, intake questions, and caller recognition |
Callbacks | Confirmed schedules, one dialing attempt, cancellation, and missed-window tracking |
Integrations | MCP tools for Codex, Hermes, and other clients with private network access |
Costs | Provider usage and estimates, with clear missing-data states |
The voice agent supports English, Spanish, Russian, and Ukrainian. Model and voice choices can change per personality. Saved changes apply to future plans. Prepared and active calls keep their original settings.
How it works
flowchart LR
Client[Codex / Hermes / MCP client] -->|Prepare and authorize| API[CallRelay service]
Dashboard[Private dashboard] --> API
API --> Voice[Pipecat voice pipeline]
Voice <-->|Audio| PBX[Asterisk]
PBX <-->|SIP| Phone[Android gateway]
Phone <-->|Selected SIM| Person[Recipient]
Voice --> STT[Soniox: speech to text]
STT --> LLM[OpenRouter: dialogue]
LLM --> TTS[Inworld: text to speech]
TTS --> Voice
API --> Store[(SQLite + recordings)]MCP is the interface an assistant uses to request and manage a call. SIP carries call signaling and audio between Asterisk and the phone gateway. The selected SIM connects to the normal telephone network.
The main path uses Python, FastAPI, SQLite, React, TypeScript, Pipecat, Asterisk, and Kotlin. It uses your own OpenRouter, Soniox, and Inworld accounts. Twilio and a separate OpenAI account are not required for this path.
The original Twilio/OpenAI backend remains a separate option. See backend choices.
Start here
Explore without a phone
git clone https://github.com/highsierraloft/callrelay.git
cd callrelay
uv sync --extra android --all-groups --frozen
uv run callrelay doctor --dummyThe dummy check uses an isolated evaluation profile. It does not place a call or use provider credentials.
For a container-based API evaluation, run:
docker compose up --buildThis evaluation listens on loopback and disables live calls. It does not provide a configured phone dashboard.
Connect your own phone
You need a spare Android phone, an active SIM, a Linux server with USB access, and Tailscale. The phone needs Wi-Fi access to the server and approved USB debugging access. Hardware and Android audio support vary.
uv run python scripts/configure_phone.pyThe setup tool asks for your installation details and provider keys. It creates a new private/ directory with restricted permissions.
It does not contact a phone, change a firewall, or start services. Existing credentials are never overwritten.
Continue with the installation guide. The guide covers the gateway build, SIM selection, USB access, private dashboard, MCP connection, and acceptance checks.
Clear boundaries
One installation has one owner and one active telephone call.
The phone uses an explicitly selected SIM. It never falls back to another line.
Browser practice cannot dial or update real contacts, memory, opt-outs, or schedules.
The supervisor recovers phone control. It never places or answers a call itself.
Caller ID helps recognition. It does not authenticate a person.
A completed call is not proof that the task succeeded.
Provider credentials never enter browser JavaScript.
CallRelay is a calling system, not an emergency service or a bulk-dialing platform. The operator controls contact permission, recording policy, provider accounts, and carrier charges.
Source and operator data stay separate
In this repository | In your ignored |
Application and gateway source | Provider and SIP credentials |
Tests with fictional data | Device identifiers and ADB identity |
Portable deployment templates | Phone numbers and installation settings |
Synthetic fallback prompts | SQLite records, MP3 files, and transcripts |
Documentation and upstream notices | Backups and local logs |
This repository contains no production database, signing key, deployment credential, or prior deployment history. The Android app uses its own application ID and signing-property prefix.
Project map
Path | Purpose |
| Calling service, MCP tools, storage, and voice pipeline |
| React control panel and browser tests |
| Android gateway, with its own GPL license |
| USB and Shizuku recovery controller |
| Asterisk, proxy, and standalone Compose settings |
| Optional client skills and integration examples |
| Installation, architecture, operation, and contributor guides |
Built on open source
CallRelay extends Agent Call by XiyaoWang0519 and Android Voice SIP Agent by sparkcyf. It keeps their notices and identifies the added platform features in UPSTREAM.md.
The Python platform and dashboard use the MIT license. The separate Android gateway uses GPL-2.0-or-later, with the upstream Apache-2.0 linking exception. The platform license does not replace the gateway license. See component licenses.
Contribute
Start with CONTRIBUTING.md and the development guide. Report vulnerabilities through the security process.
This server cannot be deployed
Maintenance
Related MCP Connectors
- DialMCPOAuthcom.dialmcp
Let AI agents place real phone calls from your verified number, with transcripts and recordings.
Give your AI assistant a real phone line. Place and end real phone calls with AI voice agents, read call transcripts, run a live two-way interpreter between two people who share no language (31 languages, browser link or phone), create and edit voice agents, and search, buy and bind phone numbers in 21 countries. OAuth 2.1 with PKCE — the model never sees your API key; a read-only scope is available. Pay as you go from $0.10/min, $5 free credit for new accounts.
AI phone calls from your verified number, with answers, transcripts and recordings.
Give your AI a real phone: place calls, send SMS, fetch recordings and transcripts. Local or hosted.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to make real phone calls on your behalf using VoIP, handling conversations automatically through OpenAI's Real-Time Voice API. Simply tell Claude what you want to accomplish and it will call and manage the entire conversation for you.25MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to make real-world phone calls with AI voice technology and provides tools to track call status, transcripts, and summaries. It supports automated communication with both live numbers and simulated businesses for testing and demonstration purposes.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to place real phone calls, navigate IVR trees, and retrieve structured answers with transcripts and recordings.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to place real phone calls, engage in spoken conversations across 12 languages, and report the outcomes for tasks like booking appointments, answering questions, negotiating, or confirming orders.MIT