get_contact_info
Retrieve contact details and conversation statistics from iMessage using a phone number or email address to identify message history and communication patterns.
Instructions
Look up a contact/handle by phone number or email and return conversation stats.
Args: identifier: Phone number (e.g. +15551234567) or email address
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- server.py:190-233 (handler)The 'get_contact_info' function is defined as an MCP tool. It queries the iMessage chat database to retrieve statistics about a contact, such as message counts and timestamps for their first and last messages.
@mcp.tool() async def get_contact_info(identifier: str) -> str: """Look up a contact/handle by phone number or email and return conversation stats. Args: identifier: Phone number (e.g. +15551234567) or email address """ db = _get_db() row = db.execute( """ SELECT h.id, h.service, h.country, COUNT(m.ROWID) as total_messages, SUM(CASE WHEN m.is_from_me = 1 THEN 1 ELSE 0 END) as sent, SUM(CASE WHEN m.is_from_me = 0 THEN 1 ELSE 0 END) as received, MIN(m.date) as first_message, MAX(m.date) as last_message FROM handle h LEFT JOIN message m ON m.handle_id = h.ROWID WHERE h.id = ? GROUP BY h.ROWID """, (identifier,), ).fetchone() db.close() if not row: return json.dumps({"error": f"No contact found for {identifier}"}) return json.dumps( { "identifier": row["id"], "service": row["service"], "country": row["country"] or "", "total_messages": row["total_messages"], "sent": row["sent"], "received": row["received"], "first_message": _apple_ts_to_iso(row["first_message"]), "last_message": _apple_ts_to_iso(row["last_message"]), }, indent=2, )