Hi! I've been building on kcd (great work — docs/IPC_PROTOCOL.md was enough to implement a full client) and wanted to share it, plus propose an integration.
What I built: kdeconnect-mcp — an MCP (Model Context Protocol) server that exposes kcd to LLM agents:
- Unified timeline of SMS, calls and notifications, with an incremental cursor (
get_events / wait_for_events) and text search.
- Pairing tools (scan / request / accept / reject) and SMS tools (conversations, call log).
- A redaction layer that strips OTPs, card numbers, IBANs and phone numbers at ingest, before anything is persisted: SQLite only ever contains redacted text plus an HMAC for dedup.
- Runs fully headless: kcd + a systemd user unit for the listener, no Qt/KDE stack.
It's Python today because MCP tooling iterates fastest there, but the design is not Python-specific: it consumes the documented IPC (watch NDJSON plus devices, pair, unpair, notify_reply, notify_dismiss, send_sms, sms_request_conversations).
Field notes that might be useful for kcd:
- SMS are not pushed: every client has to call
sms_request_conversations periodically (I poll every 60s and dedup the re-sends). A proactive push (or an sms.incoming event on new messages) would remove a polling loop from every client.
- On headless hosts there is no notification daemon, so the SMS plugin's
notify-send calls fail with ServiceUnknown for every message (log noise). A config knob to disable desktop notifications would help headless deployments.
- Pairing over IPC (including accepting incoming requests) works well.
The offer: if you're interested, I'm happy to port this to Go and contribute it in-tree as a first-class feature — e.g. kcd mcp over stdio, or an internal/mcp module — keeping the redaction layer and the agent tools. Alternatively it can stay an external companion project (current state); no pressure either way.
Would you be open to a PoC PR in that direction? Any preference on transport (stdio vs HTTP), redaction defaults, or in-tree vs out-of-tree?
Hi! I've been building on kcd (great work —
docs/IPC_PROTOCOL.mdwas enough to implement a full client) and wanted to share it, plus propose an integration.What I built: kdeconnect-mcp — an MCP (Model Context Protocol) server that exposes kcd to LLM agents:
get_events/wait_for_events) and text search.It's Python today because MCP tooling iterates fastest there, but the design is not Python-specific: it consumes the documented IPC (
watchNDJSON plusdevices,pair,unpair,notify_reply,notify_dismiss,send_sms,sms_request_conversations).Field notes that might be useful for kcd:
sms_request_conversationsperiodically (I poll every 60s and dedup the re-sends). A proactive push (or ansms.incomingevent on new messages) would remove a polling loop from every client.notify-sendcalls fail withServiceUnknownfor every message (log noise). A config knob to disable desktop notifications would help headless deployments.The offer: if you're interested, I'm happy to port this to Go and contribute it in-tree as a first-class feature — e.g.
kcd mcpover stdio, or aninternal/mcpmodule — keeping the redaction layer and the agent tools. Alternatively it can stay an external companion project (current state); no pressure either way.Would you be open to a PoC PR in that direction? Any preference on transport (stdio vs HTTP), redaction defaults, or in-tree vs out-of-tree?