Android · MCP server · Open source
Give Claude a phone.
PhoneBridge turns your Android phone into an MCP server. Claude reads and sends texts, answers and places calls, through a relay you run. No Google services. No SaaS. 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 a bearer token.
HTTPS · MCP
One Go binary
Runs on any VPS. Verifies the device key and the client token, forwards bytes, stores no content.
Static · systemd
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.
- Client tokens
- 256‑bit bearer tokens shown once and stored as SHA‑256. Bound to one device, rate limited per token and per IP, revoked instantly.
- Pairing
- Initiated only from the relay host. 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.
- 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.
Relay · token · MCP
Five steps.Then just ask.
- Run the relay on a host with a public address.
- Pair by scanning the QR code the relay prints.
- Mint a token for your laptop.
- Add the MCP server to Claude.
- Ask. “What's my phone's battery?”
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.
- Download
phonebridge.apkon the phone, oradb install -r phonebridge.apk. - Allow “install unknown apps” for your browser when Android asks. The APK is signed; 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.