ContactZapp
app.contactz/contactzappVersion 1.0.6Keeps your contacts in sync across Google, Microsoft, Apple and CardDAV, and cleans up duplicates.
Status
Responds176 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 13:35 UTC
- Latency
- 176 ms
- Remotes responding
- 1 of 1
- Sign-in
- API key
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://app.contactz.app/api/v1/mcpResponds176 msNo sign-in
Claude Code
claude mcp add --transport http contactzapp https://app.contactz.app/api/v1/mcp --header 'Authorization: Bearer <YOUR_TOKEN>'Replace <YOUR_TOKEN> before running.
Claude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: contactzapp
Remote MCP server URL: https://app.contactz.app/api/v1/mcp
This server expects the header Authorization.Cursor
{
"mcpServers": {
"contactzapp": {
"url": "https://app.contactz.app/api/v1/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}Replace <YOUR_TOKEN> before running.
VS Code
code --add-mcp '{"name":"contactzapp","type":"http","url":"https://app.contactz.app/api/v1/mcp","headers":{"Authorization":"Bearer <YOUR_TOKEN>"}}'Replace <YOUR_TOKEN> before running.
Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
7 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
api_key_checkReturns the user the request acts for, the user's plan, the user's sign-in email and the scopes of the API key or connected app that made it. Any live key or access token can call it, so call it to test one. | No | Yes | Not declared | Not declared |
contact_changeChanges a contact, as editing it in ContactZapp does. Only the fields you send change. A field you leave out keeps its value.
The change goes to every two-way account the contact is in, never to a read-only one. History records it as the user's change and names the API key or the connected app that made it.
A contact waiting in Review duplicates cannot be changed until the review is decided: 409, `contact_pending_review`. Send an `Idempotency-Key` header to make a retry safe. | Yes | No | Not declared | Not declared |
contact_createAdds a contact. If the user already has this person, the values may go to that contact instead:
- If the user's Auto-Merge level covers the match, the values are added to the existing contact: 200, `merged`.
- Otherwise a new contact is created: 201, `created`. If it may be a duplicate, it also waits in Review duplicates: 201, `needs_review`.
ContactZapp saves the contact in one two-way account: the first one the user linked that keeps an address book and is not paused. The next sync copies it to the user's other two-way accounts, never to a read-only one.
A create is never refused for the plan's contact limit. Over the limit, the contact is created frozen and `contact.frozen` is true. ContactZapp keeps a frozen contact but does not sync it until the user upgrades or frees a place.
Send an `Idempotency-Key` header to make a retry safe. | No | No | Not declared | Not declared |
contact_findFinds the user's contacts by email address, phone number or text. Give at most one of `email`, `phone` and `query`:
- `email` finds the contacts with that address. Case does not matter.
- `phone` finds the contacts with that number, however it is formatted.
- `query` searches the way the Contacts screen's search does.
- With none of them, every contact is listed, newest first.
Deleted and merged contacts are never returned. For the next page, send the `nextCursor` you got as `cursor`, with the same filter. The last page has no `nextCursor`. | No | Yes | Not declared | Not declared |
contact_readReturns one contact. `id` is the contact's `id` or its `publicId`, such as `CS-0042`. A deleted or merged contact is a 404, and so is another user's contact. | No | Yes | Not declared | Not declared |
event_listLists the events of one type, newest first. Zapier, Make and n8n poll this to start an automation.
Each item's `id` never changes. Poll again and the items you already have come back with the same ids, with new ones on top. Skip the ids you have seen.
- `contact.created`, `contact.updated`, `contacts.merged` and `account.needs_attention` come from History, and are kept as long as History keeps them.
- `match.needs_review` lists each contact flagged as a possible duplicate and not yet merged. Its `id` changes when the flag is raised again.
Each item carries what an automation needs, with no second call:
- the contact's fields, or null once the contact is deleted or merged
- for a merge, the ids of the contacts it absorbed
- for an account, the account and why it needs attention | No | Yes | Not declared | Not declared |
sync_startStarts a sync, the same as Sync now in ContactZapp. History shows it as a manual run. The answer is 202 with the sync's state, `queued` or `running`. If a sync is already going, you get that one back and no second one starts. | No | No | Not declared | Not declared |
Details
- Registry status
- Active
- Published
- Nov 11, 2026
- Updated
- Nov 11, 2026
- Categories (suggested)
- Search and webSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared