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.
$ curl -fsSL https://bluetextrelay.com/install.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.
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.
API keys, tokens, private keys, passwords in URLs and stream keys become [redacted: …] before any text leaves the database. On by default.
Every filter is a fixed, deterministic rule compiled into the app. No model, local or remote, reads your messages inside Blue Text Relay.
No telemetry, no account, and the license is verified offline. The only outbound call is an optional update check you can switch off.
Full disclosure
Software that reads your messages should be auditable by the person running it. Every purchase includes the complete source of every release: the exact code behind the binary you run. Read it, build it yourself, diff it between versions. Nothing hidden, no closed core.
swift build and run your own binary if you'd rather trust your compiler than ours.$ 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
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
Run it on a Mac mini in a closet. Every setting has a command, and every command has --json, so your agent can drive the setup too.
imx setupCheck access, pick threads, create a key, choose the network.
imx service installA launchd service that runs at login and restarts if it stops.
imx remote tailscalePrivate over your tailnet. Funnel, Cloudflare Tunnel and ngrok are one command each.
imx status --jsonLicense, server, threads, keys and remote in one machine-readable call.
imx export --threads 7b0d4e6f --since 2026-10-01Markdown plus JSONL for batch AI intake, with "since last export".
imx privacy onCredential redaction for exports and the server. Use --raw when you need it off.
Your network, your accounts
The server binds only to localhost and your Tailscale address, so traffic is end-to-end encrypted between your own devices. Need a public URL? Tailscale Funnel, Cloudflare Tunnel or ngrok each set up with one click, on your own account, never ours. The app tells you what each provider can see before you turn it on.
● Mode Tailscale (private)
URL http://your-mac.your-tailnet.ts.net:8766/mcp
Bound to 127.0.0.1, 100.x.y.z
Encryption WireGuard, end to end
Rate limit 20 req/s · 10 bad keys → 15 min lockout
Why it exists
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 iMessage 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. It can't write anything. It's yours to run, inspect and keep.
— Chris Gonzalez, maker of Blue Text Relay
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.
Everything you need to install, connect and help your user buy is in plain text. Start with /llms.txt, or read the agent guide.
$ curl https://bluetextrelay.com/llms.txt
Questions
No. Apple doesn't offer a public API for reading iMessage conversations. Blue Text Relay reads the Messages database on your own Mac, with the Full Disk Access permission you grant, and serves the threads you pick as an MCP server.
Because then it can read everything: every thread, every 2FA code, all of your history, plus the rest of your disk. Blue Text Relay holds that permission so your agent doesn't need it, and hands out narrow, revocable, metered access instead.
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.
Both. macOS 14 or later.
The server answers HTTP 402 with JSON that tells your agent exactly how to help you buy and activate. Nothing is deleted. Paste your key with imx license <KEY> and it's back.
$ curl -fsSL https://bluetextrelay.com/install.sh | sh