Skip to main content
Glama
hubermjonathan

imessage-mcp

README.md
# imessage-mcp

A minimal MCP server with one tool, `text_user`, that sends an iMessage to a
configured handle. macOS only, Node 18+.

It is only a channel. When an agent should text you, and how often, is for your
harness or agent config to decide, not this server.

## Setup

```sh
npm install && npm run build
```

Requirements on the machine running the server:

- `IMESSAGE_HANDLE` set to the recipient's phone number in E.164 form
  (`+11234567890`) or their Apple ID email
- `Messages.app` signed in to iMessage
- Automation permission for Messages (System Settings > Privacy & Security >
  Automation). macOS prompts once on the first send.

## Add to Claude Code

```sh
claude mcp add imessage --env IMESSAGE_HANDLE=+11234567890 -- node /absolute/path/to/imessage-mcp/dist/index.js
```

## Tool: `text_user`

One required field, `message` (string), sent verbatim. Returns `{ sent: true }`,
or an error string explaining why it wasn't sent. It never throws.

Sending is one-way: no receive path, no `chat.db` reading, no contact lookup,
no other tools.

## Notes

`src/send.applescript` is a fixed script file, invoked with the message and
handle as arguments, so message content is never interpolated into its source.
It omits `activate`, so sending won't steal focus.