ワンクリックで
query-messages
Use the imessage-analysis MCP server to answer questions about the user's iMessage history.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Use the imessage-analysis MCP server to answer questions about the user's iMessage history.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Compare your messaging activity between two time periods — volume, contacts, and trends side by side.
Analyse your group chat activity — most active groups, top talkers per group, and activity over time.
Check whether imessage-analysis is installed and the MCP server is registered, and fix anything that's missing.
Show the current status of the iMessage analysis dataset — last sync time, total messages, and whether it's up to date.
Summarise your most recent message exchanges — who you've been talking to, what topics came up, and the overall tone of recent activity.
Sync your iMessage history — builds the dataset on first run, updates incrementally after that. Use this to make sure your data is current before analysing.
| name | query-messages |
| description | Use the imessage-analysis MCP server to answer questions about the user's iMessage history. |
Use the imessage-analysis MCP tools to answer questions about the user's messages.
When the user asks anything about their message history:
Always call status before analysing. If synced is false or last_sync is stale (more than a day old), call sync first.
status → { synced: true, total_messages: 374804, last_sync: "2026-05-29T..." }
When the user mentions a person, use search_contacts to find the exact name string before filtering by it. Never guess.
search_contacts({ query: "alice" })
→ [{ name: "Alice Smith", contact_info: "+14155550001", message_count: 4821 }]
Use the name value exactly as returned in subsequent tool calls.
| Question | Tool |
|---|---|
| Who do I text most? | top_contacts |
| How often do I text someone? | time_series with contact |
| How have my messaging habits changed? | time_series |
| What reactions do I use/receive? | reactions |
| What message effects have I sent? | effects |
| What links have I shared? | links |
| Messages by day of week / time of year | seasonality |
| Stats for a specific person | contact_stats with contact |
| Anything else | query with SQL |
Use sent: true or received: true when the question is directional.
Use year to scope to a calendar year.
Use direct_only: true to exclude group chats.
status — check if data is currentsync — update the datasetsearch_contacts — find exact contact namestop_contacts — most-messaged peopletime_series — daily message counts over timereactions — reaction type breakdowneffects — message effect breakdownlinks — top shared domainsseasonality — patterns by day-of-week or monthcontact_stats — per-contact totals, dates, frequencyquery — arbitrary SQL for anything elseUse body_text for message-body analysis, search, topic summaries, and NLP. text is the raw SQLite message.text value, inferred_text is the decoded attributedBody fallback, and text_combined is kept as a legacy compatibility alias.
-- Messages per year
SELECT year, COUNT(*) AS n FROM messages GROUP BY year ORDER BY year
-- Search message body text
SELECT timestamp, name, is_from_me, body_text
FROM messages
WHERE body_text ILIKE '%dinner%'
ORDER BY timestamp DESC
LIMIT 20
-- Most active months
SELECT year, month, COUNT(*) AS n FROM messages
GROUP BY year, month ORDER BY n DESC LIMIT 10
-- Group chats only
SELECT name, COUNT(*) AS n FROM messages
WHERE chat_size > 1 AND name IS NOT NULL
GROUP BY name ORDER BY n DESC LIMIT 10
-- First message with someone
SELECT name, MIN(CAST(date AS VARCHAR)) AS first_message
FROM messages WHERE name IS NOT NULL
GROUP BY name ORDER BY first_message LIMIT 20