Nothing is stored
No mirror, no cache, no cloud. Each request reads the Messages database at that moment and returns only what the calling key allows. Turn a thread off and it's gone right away.
Blue Text Relay turns the Messages database on your Mac into an MCP server for your agents. You pick the threads, the dates and the limits, and the server enforces them. It stores nothing, and it can't write.
$ brew trust bluetextrelay/tap $ brew install bluetextrelay/tap/imx $ imx setup
$ curl -fsSL https://bluetext.sh | sh $ imx setup
$ claude mcp add --transport http imessage \
http://your-mac.your-tailnet.ts.net:8766/mcp \
--header "Authorization: Bearer $BTR_KEY"# Prefer a menu bar app? Same server, same config. $ open https://bluetextrelay.com/download
Privacy first
Giving an agent your whole Messages history means two-factor codes, bank alerts and years of family chats. Blue Text Relay is built so the agent only ever gets what you meant to share. And you don't have to take our word for it: you own the code, so you can review every line that touches your messages.
No mirror, no cache, no cloud. Each request reads the Messages database at that moment and returns only what the calling key allows. Turn a thread off and it's gone right away.
The database is opened read-only and there is no send tool. Your agent can't send, edit or delete a message, even if someone tells it to.
Every key carries its own threads, from-date, daily cap, per-call cap and expiry. The server enforces them, so you don't depend on the agent behaving.
Every purchase includes the full source of the release you run. Read every line that touches your messages, build it yourself with swift build, and modify it for your own use. It isn't open source: your copy is yours to inspect and change, not to redistribute. How source access works.
Every filter is a fixed, deterministic rule compiled into the app. No model, local or remote, reads your messages inside Blue Text Relay.
There are no user accounts. Payment and checkout details are held by Paddle™, our merchant of record, and we never see your card. The app has no telemetry, verifies its license offline, and only makes an optional update check.
API keys, tokens, private keys, passwords in URLs and stream keys become [redacted: …] before any text leaves the database. On by default. Want raw, unfiltered output? Turn it off in Settings or with imx privacy off. Your call.
Software, the way it should be
Every purchase includes the complete source of every release: the exact code behind the binary you run. Read every line, build it yourself, change it. It isn't open source, but nothing is hidden from the person who paid for it.
swift build and run your own binary if you'd rather trust your compiler than ours.* Your copy, for your own use: read it, build it and change it however you like. You just can't redistribute it. See the license.
$ unzip blue-text-relay-1.0.0-source.zip $ cd blue-text-relay-1.0.0-source # every network call the app makes $ grep -rln URLSession Sources/ Sources/ExporterCore/UpdateChecker.swift # how Messages is opened $ grep -rln SQLITE_OPEN_READONLY Sources/ Sources/ExporterCore/SQLite.swift $ swift build -c release && swift test ✓ Executed 51 tests, with 0 failures
Permissioned access vs. raw access
The usual route is to give the agent's process Full Disk Access, or run an MCP server that opens the whole Messages database. Blue Text Relay puts a permission layer in between.
[redacted: …]Returned as-isBuild vs. buy
An afternoon gets you a script that reads chat.db. What takes weeks is everything after it. That part is already built, tested and turnkey.
attributedBody message text
SMS and iMessage merged per thread
Late iCloud deliveries, exact cursors
Contact names, you shown as you
Per-key scopes, caps and expiry
Lockouts and rate limits
Credential redaction with tests
Audit log without message text
Tailscale, Funnel, Cloudflare, ngrok in one click
launchd service and a headless CLI
Signed, notarized Mac app
Full Disk Access survives updates
It's $9.99. Your afternoon is worth more than that.
Permissions, not prompts
$ imx keys add "claude-on-mini" --threads 3f9c2e1a,7b0d4e6f \ --daily 500 --per-call 200 --expires 2027-01-01 Created key "claude-on-mini". Token (shown once): •••••••••••••••••••••••••••••••• $ imx history 7b0d4e6f 2026-10-01 Agents can read 7b0d4e6f from Oct 1, 2026 onward # meanwhile, on the agent's machine → get_new_messages {"thread_id": "7b0d4e6f", "cursor": "88190"} ← {"messages": [{"from": "Sam", "text": "staging key is [redacted: Stripe key], deploy at 4"}], "next_cursor": "88213"}
Search your threads, not your whole life
MCP over Streamable HTTP with JSON responses, plus a REST mirror under /api. Names are resolved from your contacts, and you show up as you, not "me".
list_threadsIds, names, participants, message counts and each thread's history floor.
get_messagesJSON, oldest first, with since, until and limit.
get_transcriptClean Markdown grouped by day, ready to drop into context.
search_messagesCase-insensitive search across the threads this key can see.
get_new_messagesCursor-based polling that never misses or repeats a message, including late iCloud deliveries.
Headless-first: every setting is an imx command with --json, and it runs as a launchd service on a Mac mini in a closet. Private over Tailscale by default; Funnel, Cloudflare Tunnel or ngrok on your own account. Docs →
Rather do it by hand? The Mac app exports any thread to a Markdown transcript or JSONL, for all time, since your last export, or a date range, with photos and files if you want them. Same thing from the terminal with imx export.
Why I built it
My agent runs on a machine that does real work. It needed a handful of my work threads, kept up to date. What I didn't want was to give that machine every message I've ever received: 2FA codes, bank alerts, family chats, a decade of history. One bad prompt and all of it is in play.
So I built the thing I wanted. It reads my Mac and shares only what I allow, with limits the agent can't talk its way around.
I also wanted you to feel comfortable connecting your messages to it. That's why you (and your agent) can read the source code. Trust, but verify.
Box price · software sold the way it should be
Launch price $19.99
imx CLIWhat you won't get
Checkout by Paddle, our merchant of record. Your key arrives by email within a minute. All sales are final; see the sales policy.
Questions
No. It's read-only by design. There is no send tool and no write path.
Yes. The endpoint is live while the app or service runs. Agents are told to back off and retry, and their cursor picks up exactly where it left off.
It uses Full Disk Access, the permission macOS provides for exactly this, to read your own data on your own Mac. It bypasses nothing and modifies nothing. Blue Text Relay is an independent product, not affiliated with Apple.
No. The docs, the security model and this page describe exactly what it does and how, and at $9.99 it's priced so you can just try it. All sales are final.
Read /llms.txt. Everything you need to install, connect and help your user buy is there.
$ curl -fsSL https://bluetext.sh | sh