**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.
## Overview
The Google People MCP Server provides full Google Contacts management capabilities:
- Create, read, update, delete, and search personal contacts
- Manage contact groups — list, create, update, or delete them
- Access and promote "Other Contacts" auto-saved by Google services
Perfect for:
- Looking up contact details and email addresses via AI assistants
- Automating contact list maintenance and group organization
- Copying frequently-interacted contacts from "Other Contacts" into your main list
## Tools
get_person — Get a person from Google Contacts
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:**
```json
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Doe" }],
"emailAddresses": [{ "value": "jane@example.com" }]
}
```
list_connections — List connections from Google Contacts
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 pagination
```
**Output:**
```json
{
"connections": [{ "resourceName": "people/c12345", "names": [...] }],
"nextPageToken": "...",
"totalItems": 42
}
```
create_contact — Create a contact in Google Contacts
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:**
```json
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Doe" }]
}
```
update_contact — Update a contact in Google Contacts
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 data
```
**Output:**
```json
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Smith" }]
}
```
delete_contact — Delete a contact from Google Contacts
Permanently deletes a contact by resource name.
**Inputs:**
```
- `resource_name` (string, required) — Resource name of the contact to delete (e.g. "people/c12345")
```
**Output:**
```json
{}
```
search_contacts — Search for contacts in Google Contacts
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:**
```json
{
"results": [
{ "person": { "resourceName": "people/c12345", "names": [...] } }
]
}
```
list_contact_groups — List contact groups in Google Contacts
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 pagination
```
**Output:**
```json
{
"contactGroups": [{ "resourceName": "contactGroups/myContacts", "name": "myContacts" }],
"nextPageToken": "..."
}
```
get_contact_group — Get a contact group from Google Contacts
Fetches a single contact group by resource name.
**Inputs:**
```
- `resource_name` (string, required) — Resource name of the contact group (e.g. "contactGroups/abc123")
```
**Output:**
```json
{
"resourceName": "contactGroups/abc123",
"name": "Coworkers",
"memberCount": 5
}
```
create_contact_group — Create a contact group in Google Contacts
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:**
```json
{
"resourceName": "contactGroups/abc123",
"name": "Team"
}
```
update_contact_group — Update a contact group in Google Contacts
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 data
```
**Output:**
```json
{
"resourceName": "contactGroups/abc123",
"name": "Updated Team"
}
```
delete_contact_group — Delete a contact group from Google Contacts
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:**
```json
{}
```
batch_get_contact_groups — Get multiple contact groups at once
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:**
```json
{
"responses": [
{ "contactGroup": { "resourceName": "contactGroups/abc", "name": "Team" } }
]
}
```
list_other_contacts — List other contacts in Google Contacts
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 pagination
```
**Output:**
```json
{
"otherContacts": [{ "resourceName": "otherContacts/c99999", "names": [...] }],
"nextPageToken": "..."
}
```
search_other_contacts — Search other contacts in Google Contacts
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 results
```
**Output:**
```json
{
"results": [
{ "person": { "resourceName": "otherContacts/c99999", "names": [...] } }
]
}
```
copy_other_contact_to_my_contacts_group — Copy an other contact to My Contacts
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:**
```json
{
"resourceName": "people/c12345",
"names": [{ "displayName": "Jane Doe" }]
}
```
## API Parameters Reference
Common Parameters
- `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 contact
- `page_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.
Field Mask Formats
**person_fields / read_mask** — comma-separated, no spaces:
```
names,emailAddresses,phoneNumbers,addresses,organizations,birthdays,photos
```
**update_person_fields** — must list every field you are changing:
```
names,emailAddresses
```
**copy_mask** — fields to carry over when promoting an other contact:
```
names,emailAddresses,phoneNumbers
```
**Person JSON structure example:**
```json
{
"names": [{ "givenName": "Jane", "familyName": "Doe" }],
"emailAddresses": [{ "value": "jane@example.com" }],
"phoneNumbers": [{ "value": "+1-555-0100" }]
}
```
## Troubleshooting
Missing or Invalid Headers
- **Cause:** OAuth token not provided in request headers or incorrect format
- **Solution:**
1. Verify `Authorization: Bearer YOUR_API_KEY` and `X-Mewcp-Credential-Id: CREDENTIAL-ID` headers are present
2. Check your credential is active in your MewCP account
Insufficient Credits
- **Cause:** API calls have exceeded your request limits
- **Solution:**
1. Check credit usage in your Curious Layer dashboard
2. Upgrade to a paid plan or add credits for higher limits
3. Contact support for credit adjustments
Credential Not Connected
- **Cause:** No Google account linked to your MewCP credential
- **Solution:**
1. Go to **Credentials** in your MewCP dashboard
2. Connect your Google account via OAuth
3. Retry the request with the correct `X-Mewcp-Credential-Id` header
Malformed Request Payload
- **Cause:** JSON payload is invalid or missing required fields
- **Solution:**
1. Validate JSON syntax before sending (especially `person` and `contact_group` parameters)
2. Ensure all required tool parameters are included
3. Check parameter types match expected values
Server Not Found
- **Cause:** Incorrect server name in the API endpoint
- **Solution:**
1. Verify endpoint format: `{server-name}/mcp/{tool-name}`
2. Use correct server name from documentation
3. Check available servers in your Curious Layer account
Google People API Error
- **Cause:** Upstream Google People API returned an error
- **Solution:**
1. Check Google Workspace service status at [Google Status Dashboard](https://www.google.com/appsstatus)
2. Verify your Google account has the required Contacts permissions (scope: `contacts`, `contacts.readonly`)
3. Review the error message for specific details
---
Resources
- **[Google People API Documentation](https://developers.google.com/people/api/rest)** — Official API reference
- **[Google People API Reference](https://developers.google.com/people/api/rest/v1/people)** — Complete endpoint reference
- **[FastMCP Docs](https://gofastmcp.com/v2/getting-started/welcome)** — FastMCP specification
- **[FastMCP Credentials](https://pypi.org/project/fastmcp-credentials/)** — FastMCP Credentials package for credential handling