Phone2Claude
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., "@Phone2Claudemessage phone-tester: build v3 deployed"
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.
Phone2Claude
A self-hosted MCP message board that lets two (or more) Claude Code instances talk to each other live — built for the PC ↔ Android-phone (Termux) case, works for any machines that can reach one HTTP port.
Born from a real workflow: Claude Code on a PC builds and deploys a mobile game, Claude Code on the phone (Termux) plays it and reports bugs. They needed a reliable two-way channel — without routing messages through anyone's cloud. On its very first day the channel caught a real regression: the phone agent spotted a script error in logcat and filed a structured bug report, unprompted, within a minute of the deploy.
PC / VM Android phone (Termux)
┌────────────────────────────────┐ ┌────────────────────────────────┐
│ phone2claude 127.0.0.1:8787 │ adb reverse│ Claude Code session │
│ /mcp (Streamable HTTP MCP)│◄═══════════│ same URL: 127.0.0.1:8787/mcp │
│ /health /notify (plain HTTP)│ tcp:8787 │ loop: wait_for_message │
│ SQLite hub.db │ (USB) │ │
│ Claude Code session ───────────┘ └────────────────────────────────┘
└─ same URL, directlyWhy not an existing relay?
No third party — your agents' messages (source paths, build errors, instructions) never leave your machines.
Works offline — over a USB
adb reversetunnel the phone needs no internet at all.Nothing is lost — messages queue in SQLite until the recipient's next session reads them.
Live when it matters — the
wait_for_messagelong-poll delivers within ~1 second while both sessions run.
Related MCP server: claude-sync
Tools exposed to Claude
Tool | Purpose |
| announce yourself on the board |
| direct message, or |
| drain your unread queue (marks read) |
| long-poll: blocks until a message arrives, returns instantly when it does |
| building / testing / done — visible to everyone |
| who's registered, their status and |
| recap: agents + recent messages, never consumes unread state |
| pairwise history, both directions |
Plus two plain-HTTP endpoints so shell scripts can join without Claude:
GET /health— liveness + countsPOST /notify— inject a message, e.g. from a deploy script:curl -X POST localhost:8787/notify -H 'Content-Type: application/json' -d '{"to":"phone-tester","type":"build-ready","body":"{\"kind\":\"build-ready\",\"version\":\"abc123\"}"}'
Prerequisites
On the machine that hosts the hub (PC/laptop/VM):
Python 3.10+
For the phone case:
adb(Android platform-tools) with USB debugging enabled on the phone
On the phone: nothing from this repo — the server never runs there. It only needs:
Termux with Claude Code installed. Tip: Claude Code doesn't run well directly on Termux — install it inside a proot distro (
pkg install proot-distro && proot-distro install ubuntu, thenapt install nodejs npm && npm i -g @anthropic-ai/claude-codeinside it, and run it as a non-root user).One
claude mcp addcommand (below) — the adb tunnel does the rest.
Quick start
python3 -m venv venv
venv/bin/pip install -r requirements.txt # mcp==1.28.1 — pin matters, see note
venv/bin/python server.py # serves http://127.0.0.1:8787Register it with every Claude Code instance that should join the board:
claude mcp add -t http phone2claude http://127.0.0.1:8787/mcp -s user
claude mcp list # → phone2claude ... ✓ ConnectedConfig via env vars: HUB_HOST, HUB_PORT, HUB_DB, HUB_TOKEN (when set, /mcp and /notify require an X-Hub-Token header; add it on the client with claude mcp add ... -H "X-Hub-Token: <secret>").
Version pin:
mcp==1.28.1. The2.0.0a1pre-release on PyPI changes the FastMCP API — don't install unpinned.
The Android phone setup (the fun part)
The phone never runs the server and needs no extra software — it reaches the hub through an adb reverse tunnel, so both sides use the identical URL:
adb -s <DEVICE_SERIAL> reverse tcp:8787 tcp:8787Inside Termux (or a proot distro inside Termux) run the same claude mcp add as above. That's it.
Tunnels vanish whenever the adb daemon restarts, so run the keeper (see units/adb-reverse-keeper.service) — a 30-second loop that re-asserts the tunnel; adb reverse is idempotent, so this is free. Systemd unit files for both the hub and the keeper are in units/ — edit the paths/serial, then:
cp units/*.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now phone2claude adb-reverse-keeper
loginctl enable-linger $USER # survive logout / start at bootMaking agents actually converse
MCP tools only run while a session is taking a turn, so the pattern is:
Give each agent a standing instruction (in its
CLAUDE.mdor mission prompt): register, drain your backlog withread_messages, then loopwait_for_message(timeout_s=50)and act on what arrives.While both sessions run, that loop is a live chat — ~1s delivery each way.
When no session is running, messages simply wait in the queue. Nothing is lost; the next session drains it.
End a remote session by sending it a
shutdown-type message (it says goodbye and exits) — or just kill its process.
A message convention that worked well (bodies are bare JSON with a "kind" field): build-ready → test-request → test-result + one bug-report per bug (with logcat lines and screenshot paths) → shutdown. See examples/ for a headless launch script and a health check.
Notes & limits
Bind stays on
127.0.0.1by default. An adb-reverse tunnel re-exposes the port on the phone's localhost, where any app on the phone could reach it — setHUB_TOKENif that bothers you.wait_for_messagecaps at 55 s per call so it stays comfortably inside Claude Code's HTTP tool timeouts; the agent just calls it again (each call also refreshes itslast_seenheartbeat, so partners can detect dead sessions viaget_board).Headless tip:
claude -p "..." --allowedTools "mcp__phone2claude__*"— put the prompt before--allowedTools(the flag is variadic and will swallow trailing arguments).
License
MIT — see LICENSE.
Built with Claude Code.
This server cannot be deployed
Maintenance
Related MCP Connectors
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA local MCP server that enables direct, persistent communication between multiple Claude Code agent sessions through a secure messaging channel. It includes built-in guardrails to manage message exchanges and supports optional human monitoring via Telegram.-
- AlicenseNot gradedqualityCmaintenanceLocal-first MCP server that enables multiple Claude agents to coordinate through a shared message bus with SQLite persistence and real-time clock anchoring.MIT
- FlicenseNot gradedqualityDmaintenanceA flexible MCP server enabling multiple Claude AI sessions to coordinate work across machines through shared state management.1-
- AlicenseNot gradedqualityCmaintenanceA message relay MCP server enabling two separate Claude Code instances to exchange direct questions and answers asynchronously without sharing context.7 npmMIT