get_messages
Retrieve recent messages from a specific iMessage conversation using a phone number, email, or group chat identifier to access message history.
Instructions
Get messages from a specific conversation.
Args: chat_identifier: Phone number (e.g. +15551234567), email, or group chat identifier limit: Max messages to return (default 50, most recent first)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chat_identifier | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- server.py:92-139 (handler)The `get_messages` function is implemented here, which queries the iMessage `chat.db` database to retrieve messages for a given chat identifier.
@mcp.tool() async def get_messages( chat_identifier: str, limit: int = 50, ) -> str: """Get messages from a specific conversation. Args: chat_identifier: Phone number (e.g. +15551234567), email, or group chat identifier limit: Max messages to return (default 50, most recent first) """ db = _get_db() rows = db.execute( """ SELECT m.text, m.date as apple_date, m.is_from_me, COALESCE(h.id, 'me') as sender, m.associated_message_type, m.balloon_bundle_id FROM message m LEFT JOIN handle h ON h.ROWID = m.handle_id LEFT JOIN chat_message_join cmj ON cmj.message_id = m.ROWID LEFT JOIN chat c ON c.ROWID = cmj.chat_id WHERE (c.chat_identifier = ? OR h.id = ?) AND m.text IS NOT NULL AND m.text != '' ORDER BY m.date DESC LIMIT ? """, (chat_identifier, chat_identifier, limit), ).fetchall() db.close() messages = [] for r in rows: messages.append( { "text": r["text"], "date": _apple_ts_to_iso(r["apple_date"]), "from_me": bool(r["is_from_me"]), "sender": r["sender"] if not r["is_from_me"] else "me", } ) # Return in chronological order messages.reverse() return json.dumps(messages, indent=2)