MCP server that provides safe access to macOS iMessage database through the FastMCP framework. Exposes iMessage conversation data to LLMs with proper validation and safety measures.
Four tools with clear verb-noun naming (get_*, search_*) and reasonable descriptions (100-150 chars each). All tools have input schemas with typed parameters and descriptions. However, output schemas are completely undocumented, LLMs cannot plan downstream calls or extract structured data. Parameter descriptions lack format constraints (date format stated but no validation guidance). No error handling guidance, no pagination support despite search_messages returning up to 50 results, and no indication of what fields are returned. Missing idempotency hints and permission scope declarations. Baseline: 194 chars avg description (these are 100-150), 4 params avg (these have 3-4), 100% of A+ tools document output schemas (this server: 0%).
Get statistics for a specific conversation including message count, participant count, date range, and message frequency analysis.
Get iMessage conversations with optional filtering by participant, date range, and message count. Returns conversation metadata including participants, message counts, and timestamps.
Get messages from a specific conversation with optional filtering by date range and message count limit. Returns message content, timestamps, sender information, and message types.
Search for messages containing specific text across all conversations. Returns matching messages with context including sender, timestamp, and conversation participants.
Output schemas completely undocumented. LLMs cannot infer what fields are returned (e.g., does get_conversations return participant_count, message_count, last_message_date?). This forces agents to guess field names for downstream operations and wastes tokens on trial-and-error.
No pagination metadata returned. search_messages accepts limit (default 50) but does not document whether results are truncated, provide a next_cursor, or return total_count. Large result sets risk context window exhaustion.
Parameter descriptions lack actionable format constraints. 'start_date' and 'end_date' state 'YYYY-MM-DD format' but do not specify validation behavior (e.g., what happens if format is wrong? Are times included?). No min/max for limit parameter (could be 0 or 999999).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
No error handling guidance. If conversation_id is invalid, database is locked, or Full Disk Access is denied, what error does the LLM receive? Code shows permission checks but tool descriptions do not mention prerequisites or recovery steps.
No idempotency or read-only hints. Tools are read-only (safe to retry) but lack toolAnnotations (readOnlyHint) to signal this to the agent. Agents may unnecessarily avoid retrying on transient failures.