list_conversations
Retrieve recent iMessage and SMS conversations with previews of the last messages to monitor communication history.
Instructions
List recent iMessage/SMS conversations with last message preview.
Args: limit: Max number of conversations to return (default 20)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- server.py:46-89 (handler)The `list_conversations` tool is registered using `@mcp.tool()` and implemented as an async function that queries the macOS iMessage `chat.db` SQLite database to list recent conversations.
@mcp.tool() async def list_conversations(limit: int = 20) -> str: """List recent iMessage/SMS conversations with last message preview. Args: limit: Max number of conversations to return (default 20) """ db = _get_db() rows = db.execute( """ SELECT c.chat_identifier, c.display_name, c.service_name, MAX(m.date) as last_date, COUNT(m.ROWID) as message_count, (SELECT m2.text FROM message m2 JOIN chat_message_join cmj2 ON cmj2.message_id = m2.ROWID WHERE cmj2.chat_id = c.ROWID AND m2.text IS NOT NULL ORDER BY m2.date DESC LIMIT 1) as last_message FROM chat c LEFT JOIN chat_message_join cmj ON c.ROWID = cmj.chat_id LEFT JOIN message m ON cmj.message_id = m.ROWID GROUP BY c.ROWID ORDER BY last_date DESC LIMIT ? """, (limit,), ).fetchall() db.close() conversations = [] for r in rows: conversations.append( { "chat_identifier": r["chat_identifier"], "display_name": r["display_name"] or "", "service": r["service_name"] or "", "message_count": r["message_count"], "last_message_date": _apple_ts_to_iso(r["last_date"]), "last_message": (r["last_message"] or "")[:200], } ) return json.dumps(conversations, indent=2)