phone-sms
SMS · KDE CONNECT · YOUR OWN PHONE · ANY MCP CLIENT
No. 3 · MMXXVI

YOUR TEXTS, TO YOUR AGENT. OVER YOUR OWN WI-FI, AND NOWHERE ELSE.

An MCP server that lets Claude, or any client that speaks MCP, read your conversations, look up a contact and send a text, from your own phone and your own number. The phone is reached through KDE Connect, which you may already have paired: the server talks to the KDE Connect daemon on your computer over D-Bus, the daemon talks to the phone across your local network, and the phone sends the message as if you had typed it. No SMS gateway, no relay in somebody's cloud, no second number, no account to open. Four tools, and the one that sends will not be called until you have seen who it goes to and what it says.

HOW A TEXT TRAVELS
XASK. “Text Sam that I'm running late.” The agent calls find_contact and gets the number from the contacts your phone has synced.
XSHOW. It puts the recipient and the exact words in front of you, and waits.
XYES. Only then send_sms. The request goes to kdeconnectd on your machine.
XPHONE. The KDE Connect app on Android receives it over the LAN and sends it through the phone's own SMS.
XCHECK. “Handed to phone” is not delivery. The sent message appears in read_thread once the phone syncs it back, usually within the minute.
AGENT │ MCP · stdio ▼ phone-sms │ D-Bus ▼ kdeconnectd │ your LAN ▼ KDE CONNECT ON ANDROID │ ▼ SMS, FROM YOUR NUMBER
FIG. 1 — NO CLOUD IN THE PATH
NO TEXT
WITHOUT YOUR YES
The four tools.
  • list_threadsconversations, newest first, with the latest message of each; filter by a name, a number fragment, or unread
  • read_threadthe last n messages of one conversation, oldest first, names in place of numbers
  • find_contacta name or part of a number against the contacts the phone shares with KDE Connect
  • send_smsone number, or several for a group text; marked destructive, and the server tells the model to wait for your approval of recipient and text
INSTALL
sudo pacman -S --needed kdeconnect uv     # or your distro's packages
kdeconnect-cli -l                         # phone: paired and reachable?

# Claude Code, as a plugin
/plugin marketplace add h-3303/phone-sms
/plugin install phone-sms@phone-sms

# or as a plain MCP server, in any client
uvx phone-sms

On the phone: the KDE Connect app from F-Droid or Play, paired with the computer, with its SMS plugin on (and Contacts, for names) and Android's SMS permission granted. Plasma is not needed; the daemon runs under GNOME, Hyprland or Sway just the same. With several phones paired, PHONE_SMS_DEVICE picks one.

WHY KDE CONNECT

The other ways to give an agent your texts all route them through someone: an SMS gateway with its own number, a relay app that forwards your messages to a server, or a script that drives the phone's screen over USB. KDE Connect already has the phone's conversations, keeps them on your network, and sends from the number your friends know. The kdeconnect-sms desktop app uses the very same D-Bus interface; this server is that app's other half, written for a model instead of a window.

BY HAND
$ phone-sms threads -n 2
[56] 2026-10-02 15:54 ← Sam <+14375550142>: see you at 7
[55] 2026-10-02 14:03 ← +18005550199: Your order shipped.

$ phone-sms contact sam
Sam: +1-437-555-0142

$ phone-sms send +14375550142 -m "running late"
handed to phone for sending to Sam <+14375550142>

The CLI runs the same code paths as the tools, so when something goes wrong you can find out whether it is the model, the server, or the phone.

WHAT IT WILL NOT DO.

It will not send a text you have not approved, word for word, to a recipient you have not approved. It will not pass your messages to any server: they go from the phone to your computer and into the model's context, and the server asks the model to quote only what the task needs. It keeps no copy, no log, no database. It needs no number but yours and no account at all.

— the server's instructions to the model

Built and used on a Pixel 7 running GrapheneOS, paired with a CachyOS laptop under Hyprland. Any Android phone KDE Connect supports should do.

your phone, your number, your network

github.com/h-3303/phone-sms · llms.txt · privacy · GPL-3.0-or-later