بنقرة واحدة
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