{"name":"io.github.mgcrea/mcp-apple-messages","slug":"mgcrea-mcp-apple-messages","title":"Apple Messages","description":"Search and read Apple Messages — chats and decoded text, sending off by default","url":"https://mcp.market/server/mgcrea-mcp-apple-messages","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":37,"stars":3,"forks":0,"downloads_week":397,"last_push_at":"2026-09-19T09:15:42.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mgcrea/cupertino","website":"https://cupertino.mgcrea.io","version":"1.23.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@mgcrea/mcp-apple-messages","version":"1.23.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Register the mutating tools. Off by default, and the gate decides whether the write tools exist at all rather than merely refusing — an agent with writes off cannot see them.","name":"APPLE_MESSAGES_ALLOW_WRITES"}]}],"tools":[{"name":"apple_messages_count_messages","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_diagnostics","description":"Report whether the Messages store could be opened, how much is in it, whether names are being resolved, and what this server cannot do. Start here when a read returns nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_find_codes","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_get_message","description":"One message in full, with its tapbacks and attachments. Reactions are reported here rather than mixed into the conversation, which is the whole reason list_messages filters them out.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_list_chats","description":"List conversations, most recently active first, with their participants and message counts. Names come from Contacts where they resolve; where they do not, the raw phone number or email is shown and `resolution` says why. Use the returned ref to read one conversation with apple_messages_list_messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_list_messages","description":"Read messages, newest first — the whole store, or one conversation, or a date window. Tapbacks are excluded by default because they are rows in the same table and would otherwise read as messages nobody typed. Every message carries `from.name` where Contacts resolves it and `from.handle` always. `from.resolution` is worth reading: `unknown` is COMMON AND NOT AN ERROR — measured on a real store, ab","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_save_attachment","description":"Save one attachment from a conversation to disk — a photo, a video, a PDF, a voice memo. Take the `id` from an attachment on apple_messages_get_message. Needs Full Disk Access, like every read here. It can only write into APPLE_MESSAGES_ATTACHMENT_DIR (default ~/Downloads) and will not overwrite an existing file unless you ask it to. Write-gated because it puts a file on the user's disk, even thou","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_search_messages","description":"Search message text across every conversation. Matches are substring and case-insensitive. This searches ALL messages, including the roughly 3% whose text lives only in an archived blob rather than in a plain column — those are invisible to any SQL query and are decoded here. `textSource` on each result says which produced it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_messages_send_message","description":"","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-19T19:31:33.317Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:31:33.297Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@mgcrea/mcp-apple-messages","version":"1.23.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-09-19T09:25:18.884Z","repositoryUrl":"git+https://github.com/mgcrea/cupertino.git","weeklyDownloads":397}],"repo":{"found":true,"owner":"mgcrea","repo":"cupertino","archived":false,"pushedAt":"2026-09-19T09:15:42Z","stars":3,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/108273?v=4","ownerCreatedAt":"2009-07-24T09:50:40Z","license":"MIT"},"icon":{"url":"https://cupertino.mgcrea.io/apple-touch-icon.png","source":"registry","width":180,"height":180},"presence":{"stars":3,"forks":0,"downloadsWeek":397,"license":"MIT","lastPushAt":"2026-09-19T09:15:42.000Z","score":37}}}},"grade_history":[],"reviews":[]}