Google Contacts MCP
MCP server for the Google People API: search, create, update and delete contacts and groups.
Connector by A1-x-Tech · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/a1-x-tech-mcp-google-contacts
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 7 read · 4 write · 8 delete
- Secrets
- 3 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 19
Read from the source code; the running server may list different tools.
Read 7 · Look things up without changing anything.
batch_get_contactsget_contactget_contact_grouplist_contact_groupslist_contactslist_other_contactssearch_contacts
Write 4 · Create, change, send or run things.
batch_create_contactscopy_other_contactcreate_contactcreate_contact_group
Delete 8 · Delete, drop, revoke or wipe things.
batch_delete_contactsbatch_update_contactsdelete_contactdelete_contact_groupmodify_group_membersraw_requestupdate_contactupdate_contact_group
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
GOOGLE_CONTACTS_ACCESS_TOKENGOOGLE_CONTACTS_CLIENT_SECRETGOOGLE_CONTACTS_REFRESH_TOKEN
Other settings (environment variables or headers).
GOOGLE_CONTACTS_API_BASEGOOGLE_CONTACTS_CLIENT_IDGOOGLE_CONTACTS_MAX_RETRIESGOOGLE_CONTACTS_OAUTH_PORTGOOGLE_CONTACTS_TIMEOUT_MS
Files it touches
- Any path the agent passes to its tools
Tools (19)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
batch_create_contactsCreate many contacts at onceCreates up to 200 contacts in one call (People API people:batchCreateContacts). Each entry takes the same normalized fields as create_contact (name parts, emails[], phones[], addresses[], organization, birthday, notes, urls[]) and needs at least one. Returns createdPeople[] with each new resourceName. The call is atomic — a validation error anywhere creates nothing — but after an AMBIGUOUS failure (timeout/5xx; never auto-retried) the batch may still have committed: check via list_contacts before re-sending, or every contact gets created twice (the API has no duplicate detection). Send mutate …
batch_delete_contactsDelete many contacts at oncecan change or delete dataPermanently deletes up to 500 contacts in one call (People API people:batchDeleteContacts). There is no undo through this API — list the exact resource names first (batch_get_contacts shows what each one is) and treat the call as final. Returns an empty result on success; atomic per request. After an ambiguous failure (timeout/5xx; never auto-retried) check which contacts still exist via batch_get_contacts instead of re-sending — the deletes may have committed, and a second call then reports NOT_FOUND.
batch_get_contactsGet many contacts at onceread-onlyFetches up to 200 contacts in one call (People API people:batchGet) — far cheaper against the tight per-user quota than a get_contact loop. Returns responses[], one per requested resource name IN THE SAME ORDER, each { requestedResourceName, status, person }; a missing contact gets a NOT_FOUND status in its own entry instead of failing the whole call, so check per-entry status. person_fields works exactly like in get_contact.
batch_update_contactsUpdate many contacts at oncecan change or delete dataUpdates up to 200 contacts in one call (People API people:batchUpdateContacts). Each entry names a contact (resource_name, optional etag — missing etags are auto-fetched in ONE extra batchGet read) plus the same normalized fields as update_contact. CAUTION — the API applies ONE shared update mask to the whole batch, computed here as the union of every entry's provided field groups: a group that one entry provides and another omits is CLEARED on the omitting entry. Safest is to give every entry the same set of fields; each provided group replaces its stored group as a whole, exactly like update…
copy_other_contactCopy an Other contact into My ContactsCopies an 'Other contact' (from list_other_contacts) into the user's saved contacts — the only write that exists for Other contacts. copy_mask picks which fields carry over (names, emailAddresses, phoneNumbers; default all three). Returns the NEW saved person — use its resourceName ('people/c...') for further edits; the original otherContacts entry remains. Copying the same entry twice creates duplicate saved contacts. Requires BOTH the contacts and contacts.other.readonly OAuth scopes.
create_contactCreate a contactCreates a new contact in the account's Google Contacts and returns the created Person (resourceName, etag and the person_fields mask — use the resourceName for every later call). Provide any subset of the normalized fields: name parts, nickname, emails[], phones[], addresses[], organization, birthday, notes, urls[]; at least one is required. The API has NO duplicate detection — creating the same contact twice yields two contacts, so after an ambiguous failure (timeout/5xx; never auto-retried) check via search/list before re-sending. A just-created contact appears in list_contacts/get_contact i…
create_contact_groupCreate a contact groupCreates a new user contact group (label) and returns it (resourceName contactGroups/<id>, name, etag). Group names must be unique — creating a duplicate name fails with 409 CONFLICT rather than making a second group. Put contacts into the new group with modify_group_members.
delete_contactDelete a contactcan change or delete dataPermanently deletes one contact from the account's Google Contacts. There is no undo through this API (the Google Contacts UI keeps its own 30-day trash, but nothing here reads or restores it) — verify the resource_name with get_contact before deleting. Returns an empty result on success. After an ambiguous failure (timeout/5xx; never auto-retried) check with get_contact before re-sending: the delete may already have happened, and a second attempt then fails with 404.
delete_contact_groupDelete a contact groupcan change or delete dataPermanently deletes a user contact group (label). By default the member contacts SURVIVE — they only lose the label; delete_contacts=true also PERMANENTLY DELETES every contact in the group, so use it only when that is explicitly wanted (check the roster first via get_contact_group with max_members). System groups cannot be deleted. Returns an empty result on success; there is no undo through this API.
get_contactGet a contactread-onlyFetches one contact by resource name ("people/c...", or "people/me" for the signed-in user's own profile) with an explicit field mask. Returns a Person with resourceName, etag and the requested person_fields (default names, emailAddresses, phoneNumbers, organizations, memberships). The etag in the result is what update_contact needs to change this contact safely; memberships list the contact's groups as contactGroups/<id> resource names.
get_contact_groupGet a contact groupread-onlyFetches one contact group by resource name: name, groupType, memberCount and etag — plus, when max_members > 0, memberResourceNames[] with up to that many member contacts as people/<id> resource names (the only way the API returns a group's members; feed them to batch_get_contacts for details). The etag is what update_contact_group uses to rename safely.
list_contact_groupsList contact groupsread-onlyLists the account's contact groups (labels): contactGroups[] with resourceName (contactGroups/<id>), name, groupType and memberCount, plus nextPageToken and totalItems. Two kinds come back: USER_CONTACT_GROUP (labels the user created — the only kind that can be renamed or deleted) and SYSTEM_CONTACT_GROUP (built-ins like contactGroups/myContacts and contactGroups/starred — fixed). group_fields defaults to metadata, groupType, memberCount, name; add memberCount explicitly if you narrow it and still want sizes. page_size up to 1000; sync_token works like in list_contacts (410 = expired, re-list …
list_contactsList contactsread-onlyLists the account's saved contacts (People API people/me/connections): connections[] of Person objects with resourceName, etag and the requested person_fields (default names, emailAddresses, phoneNumbers, organizations, memberships — an absent field may be unmasked, not empty), plus nextPageToken, totalItems and (when requested) nextSyncToken. page_size up to 1000 (default 100); paginate with page_token. For incremental polling set request_sync_token=true on a full listing, store nextSyncToken, and pass it as sync_token next time to get only changed/deleted people (deleted ones carry metadata.…
list_other_contactsList or search Other contactsread-onlyLists 'Other contacts' — addresses Google auto-saved from the user's email interactions; they are NOT in the saved contact list and never appear in list_contacts/search_contacts. Give query to search them instead of listing (prefix match, max 30 results, no pagination — the warmup request is sent automatically before the session's first search); without query it lists with page_token pagination (page_size up to 1000) and optional sync tokens (request_sync_token/sync_token; expired ones fail with 410 — re-list in full). Only names, emailAddresses, phoneNumbers, photos and metadata exist here. O…
modify_group_membersAdd or remove group memberscan change or delete dataAdds and/or removes contacts in a contact group (label) in one call — at least one of add/remove is required, together up to ~1000 names. Contacts are addressed by their people/<id> resource names. The HTTP 200 response is NOT a full success receipt — read it: notFoundResourceNames lists contacts that do not exist (their changes were skipped) and canNotRemoveLastContactGroupResourceNames lists contacts that could not leave their last group. Removing a contact from a group never deletes the contact, and re-running the same call converges. Contacts cannot be removed from contactGroups/myContacts…
Show 4 more tools
raw_requestRaw Google People API callcan change or delete dataEscape hatch to call any Google People API v1 path directly, for requests the typed tools don't cover — e.g. contact photos (PATCH "v1/people/<id>:updateContactPhoto" with {"photoBytes":"<base64>"} or DELETE "v1/people/<id>:deleteContactPhoto"), "Other contacts" (GET "v1/otherContacts?readMask=..." — needs the contacts.other.readonly scope on the token), or extra query parameters like sources. The path may carry a query string; repeated parameters are written inline ("v1/people:batchGet?resourceNames=people/a&resourceNames=people/b&personFields=names"). The Bearer token is added automatically;…
search_contactsSearch contactsread-onlySearches the account's saved contacts by prefix match on names, nicknames, emails, phones and organizations (People API people:searchContacts). Returns results[] of { person } with the requested read_mask fields. Max 30 results, no pagination — this is a quick lookup, not an export; use list_contacts to enumerate everything. The search index lags writes by seconds to minutes: a contact created or updated moments ago may be missing here even though list_contacts and get_contact already see it (the documented cache-warmup request is sent automatically before the session's first search, but the l…
update_contactUpdate a contactcan change or delete dataUpdates an existing contact and returns the updated Person. Only the provided fields are touched (updatePersonFields is computed automatically), but each provided field group is REPLACED AS A WHOLE: passing emails replaces all emails ([] clears them), passing any name part rewrites the whole name, and scalar fields clear on an empty value ("" for nickname/notes/birthday, {} for organization) — fetch current values with get_contact first and send complete groups, or data is silently dropped. Updates are etag-guarded: pass the etag from get_contact to fail cleanly (HTTP 400) if someone edited th…
update_contact_groupRename a contact groupcan change or delete dataRenames a user contact group (the only mutable group attribute). Etag-guarded like contact updates: pass etag from get_contact_group to fail cleanly on a concurrent edit, or omit it and the current etag is fetched automatically (one extra read). System groups (contactGroups/myContacts, starred, ...) cannot be renamed; the new name must stay unique (409 CONFLICT otherwise). Returns the updated group.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit
- Oct 4, 2026 (25 days ago)
- Last release
- Sep 23, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.A1-x-Tech/mcp-google-contacts- Version
- 1.0.0
- Auth
- API key
- Packages
- npm mcp-google-contacts
- License
- MIT
- Repository
- github.com/A1-x-Tech/mcp-google-contacts
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from A1-x-Tech
- 0.537score
Google Sheets MCP
A1-x-Tech
MCP server for the Google Sheets API: read and write ranges, sheets, formatting, charts, sharing.
ConnectorAFreshness: ALocal★ 1↓ 45/wkClaude Code +5 - 0.535score
Google Slides MCP
A1-x-Tech
MCP server for the Google Slides API: presentations, slides, text, shapes, images and tables.
ConnectorAFreshness: ALocal★ 1↓ 37/wkClaude Code +5 - 0.535score
Google Business Profile MCP
A1-x-Tech
MCP server for Google Business Profile: locations, reviews, local posts and performance metrics.
ConnectorAFreshness: ALocal★ 4Claude Code +5 - 0.526score
Google Drive MCP
A1-x-Tech
MCP server for the Google Drive API: search, upload, download, organize and share files.
ConnectorAFreshness: ALocal↓ 38/wkClaude Code +5 - 0.526score
Google Calendar MCP
A1-x-Tech
MCP server for the Google Calendar API: events, recurrence, invitations, availability, calendars.
ConnectorAFreshness: ALocal↓ 36/wkClaude Code +5 - 0.524score
Google Docs MCP
A1-x-Tech
MCP server for the Google Docs API: read and edit documents, styles, tables, images, comments.
ConnectorAFreshness: ALocal↓ 27/wkClaude Code +5
Cite this page
Google Contacts MCP. Agent Mart. https://agentmart.dev/connectors/a1-x-tech-mcp-google-contacts (last updated 2026-10-25)