Create message monitor
create_message_monitorWatch the user's texts for new messages: service 'imessage' (iMessage, SMS and RCS in Messages, the default) or 'whatsapp' (the WhatsApp desktop app). Give from_contains (number, address or contact name), body_contains (the text) or both. The user's own messages are skipped unless include_own is true. Stops after ttl_hours or max_hits matches. Returns a token for check_monitor and cancel_monitor. It only records and notifies; it never sends, changes or deletes anything. routes tags the monitor for check_route; use 'duet:' for a Claude Duet channel so any later session there can read it. Requires Keeploop Pro.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "create_message_monitor"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A short name for the monitor. | |
| routes | No | Up to 8 labels check_route reads this monitor's matches by, e.g. 'duet:fissler'. Lowercase letters, digits, '.', '_', ':' and '-'. A new monitor with routes has no Mac banner or ntfy push. | |
| service | No | imessage (iMessage, SMS and RCS in Messages; default) or whatsapp. | imessage |
| max_hits | No | Stop after this many matches; 1 for a one-shot watch. | |
| match_all | No | Match every new item instead of a filter; needs routes (check_route). | |
| ttl_hours | No | Stop after this many hours (default 24; no upper limit). 0 means no end: use it only when the user asks for a monitor that keeps running. | |
| include_own | No | Also match what the user sent or wrote. | |
| body_contains | No | Message text contains this. | |
| from_contains | No | Sender address, number or name contains this. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| monitor | Yes |