update_contact
Modify existing Google Contacts by updating names, email addresses, or phone numbers to keep contact information current and accurate.
Instructions
Update an existing contact.
Args:
resource_name: Contact resource name (people/*)
given_name: Updated first name
family_name: Updated last name
email: Updated email address
phone: Updated phone number
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| resource_name | Yes | ||
| given_name | No | ||
| family_name | No | ||
| No | |||
| phone | No |
Implementation Reference
- The primary MCP tool handler for the 'update_contact' tool. This async function is decorated with @mcp.tool(), which registers it with the MCP server. It initializes the GoogleContactsService, calls the service's update_contact method, formats the result using format_contact, and returns a success or error message.@mcp.tool() async def update_contact(resource_name: str, given_name: Optional[str] = None, family_name: Optional[str] = None, email: Optional[str] = None, phone: Optional[str] = None) -> str: """Update an existing contact. Args: resource_name: Contact resource name (people/*) given_name: Updated first name family_name: Updated last name email: Updated email address phone: Updated phone number """ service = init_service() if not service: return "Error: Google Contacts service is not available. Please check your credentials." try: contact = service.update_contact( resource_name, given_name, family_name, email, phone ) return f"Contact updated successfully!\n\n{format_contact(contact)}" except Exception as e: return f"Error: Failed to update contact - {str(e)}"
- Supporting helper method in the GoogleContactsService class that performs the actual API interaction to update a contact. It fetches the current contact, prepares the update body and fields mask, and calls the Google People API's updateContact method.def update_contact(self, resource_name: str, given_name: Optional[str] = None, family_name: Optional[str] = None, email: Optional[str] = None, phone: Optional[str] = None) -> Dict: """Update an existing contact.""" try: # Get the etag for the contact first person = self.service.people().get( resourceName=resource_name, personFields='names,emailAddresses,phoneNumbers' ).execute() etag = person.get('etag') # Prepare update masks and body update_person = {'etag': etag, 'resourceName': resource_name} update_fields = [] # Update name if provided if given_name or family_name: current_name = person.get('names', [{}])[0] update_person['names'] = [{ 'givenName': given_name if given_name is not None else current_name.get('givenName', ''), 'familyName': family_name if family_name is not None else current_name.get('familyName', '') }] update_fields.append('names') # Update email if provided if email: update_person['emailAddresses'] = [{'value': email}] update_fields.append('emailAddresses') # Update phone if provided if phone: update_person['phoneNumbers'] = [{'value': phone}] update_fields.append('phoneNumbers') # Execute update if update_fields: updated_person = self.service.people().updateContact( resourceName=resource_name, updatePersonFields=','.join(update_fields), body=update_person ).execute() return self._format_contact(updated_person) else: return self._format_contact(person) except HttpError as error: raise GoogleContactsError(f"Error updating contact: {error}")
- mcp_google_contacts_server/main.py:83-84 (registration)The call to register_tools(mcp) in the main server setup, which defines and registers all tools including update_contact via @mcp.tool() decorators inside the register_tools function.# Register all tools register_tools(mcp)
- The docstring providing the input schema/parameter descriptions for the update_contact tool, used by MCP for tool schema generation."""Update an existing contact. Args: resource_name: Contact resource name (people/*) given_name: Updated first name family_name: Updated last name email: Updated email address phone: Updated phone number """