{"name":"io.github.mgcrea/mcp-apple-contacts","slug":"mgcrea-mcp-apple-contacts","title":"Apple Contacts","description":"Search and read Apple Contacts — resolves numbers and emails to names, writes off by default","url":"https://mcp.market/server/mgcrea-mcp-apple-contacts","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":37,"stars":3,"forks":0,"downloads_week":383,"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-contacts","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_CONTACTS_ALLOW_WRITES"}]}],"tools":[{"name":"apple_contacts_create_contact","description":"Create a new contact in the address book. This is a real card in the user's real Contacts, and on an iCloud account it syncs to their other devices within seconds. Give at least one of firstName, lastName or organization. Contacts keeps edits in an unsaved buffer and its save command commits EVERYTHING pending, so this also saves any edit someone has half-typed in the Contacts window. That is how ","write_action":true,"price_micros":0,"input_schema":null},{"name":"apple_contacts_diagnostics","description":"Report which Contacts stores were opened, how many contacts each holds, and what this server cannot do. Start here when a lookup returns nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_contacts_get_contact","description":"One contact in full: name, organisation, job title, every phone number and every email address, each with its label.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_contacts_list_contacts","description":"List contacts across every account. This is the whole address book, so prefer apple_contacts_search_contacts when you are looking for someone specific.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_contacts_resolve_handles","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_contacts_search_contacts","description":"Search the address book by name, nickname or organisation. Returns a ref for each match, plus which account it came from — the same person can legitimately appear twice if they are in two accounts. Use apple_contacts_get_contact for phone numbers and email addresses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_contacts_update_contact","description":"Change an existing contact, or add a phone number or email address to one. Omitting a field leaves it alone; passing null clears it. Phones and emails are ADDED, never replaced — Contacts models them as separate objects, and there is no way to remove one through its scripting dictionary. Contacts keeps edits in an unsaved buffer and its save command commits EVERYTHING pending, so this also saves a","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-19T19:31:33.756Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:31:33.717Z","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-contacts","version":"1.23.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T09:24:54.118Z","repositoryUrl":"git+https://github.com/mgcrea/cupertino.git","weeklyDownloads":383}],"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":383,"license":"MIT","lastPushAt":"2026-09-19T09:15:42.000Z","score":37}}}},"grade_history":[],"reviews":[]}