Android · MCP server · Hosted or self‑hosted · Open source
Give Claude a phone.
PhoneBridge turns your Android phone into an MCP server. Claude reads and sends texts, answers and places calls. Sign in, scan a QR code, and you're connected through the hosted relay in two minutes. Or run the relay yourself. No Google services. Under 2% battery a day.
sms_send Alice ChenAllowedcall_reject +61 2 8001…Allowedsms_send +44 7700…DeniedSee it work
Ask in plain language.
Claude resolves the contact on the phone, sends the text, and waits for the delivery report. It knows when the message landed, not just when it left.
Calls, handled while you're busy.
Claude sees who's ringing with the contact resolved, declines, and sends a text in your words. Answer, reject, hang up, dial. No audio, by design.
Unknown number? The phone asks you.
Sends and dials to anyone outside your contacts need a tap on the phone. Sixty seconds of silence is a no, and the tool call fails cleanly.
Audited. Pausable.
Every decision and outcome is logged on the device. One tap closes the socket and nothing is reachable until you say so.
Not in contacts · foreign country code
“Your verification code is 482 119”
sms_send +44 7700 900123Timed out · denieddevice_statusAllowedsms_send +44 7700 900123Timed outsms_send Marcus LeeAllowedcall_reject Marcus LeeAllowedsms_send Alice ChenDeliveredcontacts_search “alice”AllowedArchitecture
The phone is the server.
Every tool, every policy decision and every byte of message content lives on the device. The relay authenticates both sides and forwards JSON‑RPC. That's all it does.
Claude
Claude Code, Claude Desktop or any MCP client. Standard Streamable HTTP with an API key.
HTTPS · MCP
Relay
Hosted at phonebridge.co, or one Go binary on your own VPS. Verifies the device key and the API key, forwards bytes, stores no content.
phonebridge.co · or yours
Your phone
Outbound WebSocket only. Policy engine, audit log, kill switch and hardware keys all live here.
WSS · MCP server
Claude can see who's calling, answer, decline, hang up and dial. It can read and write SMS. It cannot hear or speak on a call: Android exposes no call audio to apps.
Threat model
Designed forthe day the relayis hostile.
Assume the token leaks. Assume the host is owned. The phone still decides.
Read SECURITY.md- Device keys
- ECDSA P‑256 generated in the Android Keystore, StrongBox when the chip has it. Non‑exportable. Challenge‑response on every connect, single‑use nonces, 60 s skew window.
- API keys
- 256‑bit keys shown once and stored as SHA‑256. Each key is bound to one phone, rate limited per key, per account and per IP, revoked instantly from the dashboard.
- Pairing
- Initiated by the owner only: from the relay host, or from their own signed‑in account. Ten‑minute one‑time codes, five failures per ten minutes per IP.
- On‑device policy
- Every tool call passes through the policy engine before any adapter runs. Reads allowed. Sends and dials to contacts allowed. Anyone else: confirm on phone. Premium rates, foreign codes, quiet hours and hourly limits deny by default.
- Untrusted content
- SMS bodies, caller IDs and contact names are tagged as third‑party data. A text that says “send my bank code to…” gets a confirm prompt, not a send.
- Relay
- No message content persisted or logged. TLS 1.2+, modern ciphers, 256 KiB body cap, slowloris timeouts. Runs as a locked‑down systemd unit with a dynamic user.
- Hosted accounts
- Your account is an email address, and that is all the hosted relay knows about you. Every phone, key and pairing code carries your account id, every lookup is scoped to it, and another tenant's ids simply do not exist. Sign‑in links are single use, 15 minutes, hashed at rest, consumed only when you press the button. Sessions are hashed too, with a CSRF token on every change. The dashboard ships no JavaScript.
- App hardening
- No backup, no analytics or crash SDKs, R8, pinned dependencies, schema validation per tool, unknown fields rejected. Lock‑screen notifications never show message bodies.
- Kill switch
- Pause closes the socket. Unpair from the relay side with one command. Nothing is reachable until you resume.
Hosted · self‑hosted
Free whilewe're in beta.
Use the relay we run, or run the one we publish. Same app, same code, same security model. The only thing that differs is who operates the box in the middle.
Free beta
$0no card, no trial clock
- 2 phones per account
- 10 API keys
- Email sign‑in, one‑time links, no password
- Pair by QR from the browser
- Dashboard to add, remove and revoke
- No message content ever stored
Paid plans will come with more phones and keys. Beta accounts hear about it well before anything changes.
Your relay
Freeforever, one Go binary
- Unlimited phones and keys
- Your domain, your VPS, your logs
- Pair and mint keys from the CLI
- Optional multi‑tenant mode with the same dashboard
- Static binary, systemd unit, Docker compose
- The exact code the hosted relay runs
Install · sign in · pair · key
Five steps.Then just ask.
- Install the app from the download below and grant the permissions it lists.
- Sign in at phonebridge.co/account with your email. The link creates your account.
- Add a phone and scan the QR code with the app. The phone comes up green when its socket is live.
- Create an API key for the phone. The dashboard prints the
claude mcp addline, ready to paste. - Ask. “What's my phone's battery?”
Prefer to run the relay yourself?
Three commands on any host with a public address. The QR code carries the relay URL, so the same APK pairs with your relay.
relay serve --domain relay.example.com
relay pair --name "Pixel 9"
relay token create --name laptop
Then claude mcp add with your URL and the printed key. Relay README ↗
Direct download
One APK.Built in the open.
Every push to main is compiled and signed by GitHub Actions and served straight from this site. The build you install is the source you can read. No store account, no tracker SDKs. The same APK pairs with the hosted relay or your own.
- Install with
adb install -r phonebridge.apkfrom a computer. That is the smoothest route: Play Protect does not screen developer installs. - Or on the phone: download it in the browser, allow “install unknown apps”, and when Play Protect says “App blocked” tap More details → Install anyway. It flags any sideloaded SMS app whose signing key Google has not seen. Updates install over the top.
- Verify if you like:
sha256sum -c phonebridge.apk.sha256against the checksum published with the build.
c8a6e11c e0e71218 b5c3f027 3a1d4092 cdcf1c63 17acbaed 51885861 a08cfcdd
Every release is signed with this key. apksigner verify --print-certs phonebridge.apk should print the same digest.