Releases: dkdc-io/imessage
v0.2.2
Changed
- replace the stale Claude block with the real channel-push capture from the blog
- mirror the tested setup differences section in the repo README
- document Claude's experimental push-mode flag: --dangerously-load-development-channels server:imessage
- clarify in scripts/README that demo-claude-imessage.sh is lightweight verification, not the only inbound path
Verification
- cargo test --workspace
- cargo publish -p dkdc-io-imessage
v0.2.1 — fix: declare experimental.claude/channel capability
Fixed
- 0.2.0 shipped the auto-push watcher but Claude Code silently dropped every
notifications/claude/channelevent because the server never declared the matching experimental capability in itsinitializeresponse. End result: the watcher was working but the LLM never saw a thing. - 0.2.1 adds
capabilities.experimental["claude/channel"] = {}to the initialize reply, matching Anthropic's TypeScript iMessage plugin and thenetsky-ioreference implementation. Inbound iMessages from allowlisted handles now surface as channel events within the first poll tick (~750 ms).
Regression guards
- Unit test in
crates/imessage-mcp/src/mcp.rsasserts the capability appears in the in-process handler's reply. tests/stdio_smoke.rsasserts the same on the full stdio wire so the binary can't drift away from the unit path.
Upgrade
cargo install dkdc-io-imessage --forceAnyone on 0.2.0 should upgrade — watch mode is non-functional there against Claude Code.
v0.2.0 — automatic push mode
Highlights
Inbound iMessages now auto-inject into your LLM session. Install the MCP server, register it with Claude Code or the codex fork, and texts from allowlisted handles land in the session as channel events — no list_messages poll loop, no bridge, no tmux watcher.
What changed
- New watch mode, ON by default. The MCP server tails
~/Library/Messages/chat.dbin the background and emits anotifications/claude/channelJSON-RPC notification for every new allowlisted inbound iMessage. Claude Code and the codex fork both consume this method. - Codex filesystem channel support. If
CODEX_CHANNEL_DIRis set, the same event is also written as a JSON envelope under<dir>/inbox/<name>.jsonin the fork's expected shape (hardlink-atomic,kind = "brief", spec filename). --watch/--no-watchCLI flags.DKDC_IO_WATCH=0disables.DKDC_IO_WATCH_INTERVAL_MStunes the poll cadence (default 750 ms, min 100 ms).- End-to-end integration tests at
crates/imessage-mcp/tests/watch_push.rsexercise both emission paths and the allowlist gate. - Repo renamed from
dkdc-io/imessage-mcptodkdc-io/imessage. Crate and binary names staydkdc-io-imessage.
Full details: CHANGELOG.md.
Install
cargo install dkdc-io-imessageThen grant Full Disk Access, populate ~/.config/dkdc-io/imessage/access.toml, and point your LLM CLI at dkdc-io-imessage --stdio. Full setup in the crate README.
Security
Allowlist is the only access surface. Non-allowlisted senders are never pushed. Groups and SMS are dropped for now — only service = 'iMessage' and chat.style = 45 (DM) rows flow through. Empty allowlist still fails closed.
v0.1.6
Changed
- rename the repo and crate from imessage-plugin / dkdc-io-imessage to imessage-mcp / imessage-mcp
- rename the binary to imessage-mcp and update docs, screenshots, scripts, and GitHub URLs
- keep the README wording fixes: MCP server terminology, Codex fork note, and the staged prior-art arc
- leave the old dkdc-io-imessage crate published on crates.io; publish the fresh imessage-mcp crate at 0.1.6
Verification
- bash -n scripts/*.sh
- cargo test --workspace
- cargo publish --package imessage-mcp
v0.1.5
Changes
- add an opt-in Claude Code parity integration test under cargo test
- add the captured Claude Code round-trip block to the repo README
- release dkdc-io-imessage 0.1.5