Search, manage, and organize your Google Contacts with AI.
A Model Context Protocol (MCP) server that exposes Google People API for reading, creating, updating, and deleting contacts and contact groups.
The Google People MCP Server provides full Google Contacts management capabilities:
Perfect for:
Fetches a contact by resource name, returning only the fields specified.
Inputs:
- `resource_name` (string, required) — Resource name of the person (e.g. "people/me" or "people/c12345")
- `person_fields` (string, required) — Comma-separated list of fields to return (e.g. "names,emailAddresses,phoneNumbers")output:
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Doe" }],
"emailAddresses": [{ "value": "jane@example.com" }]
}Returns a paginated list of the authenticated user's contacts.
Inputs:
- `resource_name` (string, required) — Resource name of the person to list connections for (use "people/me" for the authenticated user)
- `person_fields` (string, required) — Comma-separated list of fields to return (e.g. "names,emailAddresses")
- `page_size` (integer, optional) — Maximum number of connections to return
- `page_token` (string, optional) — Page token from a previous list request for paginationoutput:
{
"connections": [{
Creates a new contact from a JSON person object.
Inputs:
- `person` (string, required) — JSON string representing the person to create (e.g. '{"names":[{"givenName":"Jane","familyName":"Doe"}],"emailAddresses":[{"value":"jane@example.com"}]}')output:
{
"resourceName": "people/c12345"
Updates specific fields of an existing contact.
Inputs:
- `resource_name` (string, required) — Resource name of the contact to update (e.g. "people/c12345")
- `update_person_fields` (string, required) — Comma-separated list of fields being updated (e.g. "names,emailAddresses")
- `person` (string, required) — JSON string with the updated person dataoutput:
{
"resourceName": "people/c12345",
"names": [{ "displayName"
Permanently deletes a contact by resource name.
Inputs:
- `resource_name` (string, required) — Resource name of the contact to delete (e.g. "people/c12345")output:
{}Searches across the user's contacts using a text query.
Inputs:
- `query` (string, required) — Text to search for (matches names, emails, phone numbers, etc.)
- `read_mask` (string, required) — Comma-separated list of fields to return in results (e.g. "names,emailAddresses")output:
{
"results": [
{ "person": { "resourceName": "people/c12345", "names": [...
Returns all contact groups belonging to the authenticated user.
Inputs:
- `page_size` (integer, optional) — Maximum number of groups to return
- `page_token` (string, optional) — Page token from a previous list request for paginationoutput:
{
"contactGroups": [{ "resourceName": "contactGroups/myContacts", "name": "myContacts" }],
"nextPageToken": "..."
}Fetches a single contact group by resource name.
Inputs:
- `resource_name` (string, required) — Resource name of the contact group (e.g. "contactGroups/abc123")output:
{
"resourceName": "contactGroups/abc123",
"name": "Coworkers",
"memberCount": 5
}Creates a new contact group from a JSON contact group object.
Inputs:
- `contact_group` (string, required) — JSON string representing the group to create (e.g. '{"contactGroup":{"name":"Team"}}')output:
{
"resourceName": "contactGroups/abc123",
"name": "Team"
}Updates the name or metadata of an existing contact group.
Inputs:
- `resource_name` (string, required) — Resource name of the group to update (e.g. "contactGroups/abc123")
- `contact_group` (string, required) — JSON string with the updated contact group dataoutput:
{
"resourceName": "contactGroups/abc123",
"name": "Updated Team"
}Permanently deletes a contact group by resource name.
Inputs:
- `resource_name` (string, required) — Resource name of the group to delete (e.g. "contactGroups/abc123")output:
{}Fetches details for multiple contact groups in a single request.
Inputs:
- `resource_names` (string, required) — Comma-separated list of contact group resource names (e.g. "contactGroups/abc,contactGroups/def")output:
{
"responses": [
{ "contactGroup": { "resourceName": "contactGroups/abc", "name": "Team" } }
]
}Returns "Other Contacts" — people automatically saved by Google from interactions (emails, calls, etc.).
Inputs:
- `read_mask` (string, required) — Comma-separated list of fields to return (e.g. "names,emailAddresses")
- `page_size` (integer, optional) — Maximum number of contacts to return
- `page_token` (string, optional) — Page token from a previous list request for paginationoutput:
{
"otherContacts": [{ "resourceName": "otherContacts/c99999", "names": [...
Searches the "Other Contacts" list using a text query.
Inputs:
- `query` (string, required) — Text to search for
- `read_mask` (string, required) — Comma-separated list of fields to return in resultsoutput:
{
"results": [
{ "person": { "resourceName": "otherContacts/c99999", "names": [...] } }
]
}Promotes a contact from "Other Contacts" into the user's main "My Contacts" group.
Inputs:
- `resource_name` (string, required) — Resource name of the other contact to copy (e.g. "otherContacts/c99999")
- `copy_mask` (string, required) — Comma-separated list of fields to copy (e.g. "names,emailAddresses,phoneNumbers")output:
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Doe"
resource_name — Identifies a specific person or group. Formats:
"people/me" — the authenticated user"people/c{id}" — a specific contact"contactGroups/{id}" — a contact group"otherContacts/c{id}" — an other contactpage_size — Caps the number of items returned per request. If omitted the API applies its own default limit.page_token — Opaque token returned in a previous response's nextPageToken field. Pass it to retrieve the next page of results.person_fields / read_mask — comma-separated, no spaces:
names,emailaddresses,phonenumbers,addresses,organizations,birthdays,photosupdate_person_fields — must list every field you are changing:
names,emailaddressescopy_mask — fields to carry over when promoting an other contact:
names,emailaddresses,phonenumbersperson JSON structure example:
Authorization: Bearer YOUR_API_KEY and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are presentX-Mewcp-Credential-Id headerperson and contact_group parameters){server-name}/mcp/{tool-name}contacts, contacts.readonly)