Skip to main content

MCP server for Google Contacts integration

Project description

MseeP.ai Security Assessment Badge

📇 MCP Google Contacts Server

A Machine Conversation Protocol (MCP) server that provides Google Contacts functionality, allowing AI assistants to manage contacts, search your organization's directory, and interact with Google Workspace. Much updated from its original by Gemini AI in Gemini CLI.

✨ Features

  • List and search Google Contacts
  • Create, update, and delete contacts
  • Search Google Workspace directory
  • View "Other Contacts" (people you've interacted with but haven't added)
  • Access Google Workspace users in your organization

🚀 Installation

📋 Prerequisites

  • Python 3.12 or higher
  • Google account with contacts access
  • Google Cloud project with People API enabled
  • OAuth 2.0 credentials for Google API access

📦 Installation from Source

To install the mcp-google-contacts-server as a Python package:

  1. Clone the repository:

    git clone https://github.com/rayanzaki/mcp-google-contacts-server.git
    cd mcp-google-contacts-server
    
  2. Rename the source directory: The package expects the source code to be in a directory named mcp_google_contacts_server.

    mv src mcp_google_contacts_server
    
  3. Install the package: This will install the package and its dependencies, making the mcp-google-contacts command available in your PATH.

    pip install .
    

    Note: If you encounter import errors after installation, ensure that relative imports within the source files (main.py, tools.py, google_contacts_service.py, formatters.py, config.py) are updated to use absolute imports (e.g., from mcp_google_contacts_server.module_name import ...). This is typically handled automatically by pip install . but can sometimes require manual adjustment if the package structure is unusual.

🔑 Authentication Setup

The server requires Google API credentials to access your contacts. You have several options:

🔐 Option 1: Using a credentials.json file

  1. Create a Google Cloud project and enable the People API
  2. Create OAuth 2.0 credentials (Desktop application type)
  3. Download the credentials.json file
  4. Place it in one of these locations:
    • The root directory of this project
    • Your home directory (~/google-contacts-credentials.json)
    • Specify its location with the --credentials-file argument

🔐 Option 2: Using environment variables

Set the following environment variables:

  • GOOGLE_CLIENT_ID: Your Google OAuth client ID
  • GOOGLE_CLIENT_SECRET: Your Google OAuth client secret
  • GOOGLE_REFRESH_TOKEN: A valid refresh token for your account

Note: If your existing environment variables for Google OAuth client ID and client secret have different names (e.g., GOOGLE_OAUTH_CLIENT_ID), you can alias them in your .env file (e.g., GOOGLE_CLIENT_ID=$GOOGLE_OAUTH_CLIENT_ID) to ensure the server picks them up correctly. Use e.g. export GOOGLE_CLIENT_ID=$GOOGLE_OAUTH_CLIENT_ID && export GOOGLE_CLIENT_SECRET=$GOOGLE_OAUTH_CLIENT_SECRET in command line before: mcp-google-contacts :

env | grep GOOGLE
export GOOGLE_CLIENT_ID=$GOOGLE_OAUTH_CLIENT_ID && export GOOGLE_CLIENT_SECRET=$GOOGLE_OAUTH_CLIENT_SECRET
env | grep GOOGLE
mcp-google-contacts

{authentication evocation should happen here)

🚀 Initial Authorization (Recommended)

For the initial authorization flow to obtain your GOOGLE_REFRESH_TOKEN, it is recommended to run the mcp-google-contacts command directly in your terminal (outside of any MCP client that might obscure the interactive browser prompts).

Example:

mcp-google-contacts

Follow the instructions in your terminal and browser to complete the authentication. Once the GOOGLE_REFRESH_TOKEN is displayed, you can set it as an environment variable for non-interactive use.

🛠️ Usage

🏃‍♂️ Basic Startup

python src/main.py
# or
uv run src/main.py

This starts the server with the default stdio transport.

⚙️ Command Line Arguments

Argument Description Default Value
--transport Transport protocol to use (stdio or http) stdio
--host Host for HTTP transport localhost
--port Port for HTTP transport 8000
--client-id Google OAuth client ID (overrides environment variable) -
--client-secret Google OAuth client secret (overrides environment variable) -
--refresh-token Google OAuth refresh token (overrides environment variable) -
--credentials-file Path to Google OAuth credentials.json file -

📝 Examples

Start with HTTP transport:

python src/main.py --transport http --port 8080

Use specific credentials file:

python src/main.py --credentials-file /path/to/your/credentials.json

Provide credentials directly:

python src/main.py --client-id YOUR_CLIENT_ID --client-secret YOUR CLIENT_SECRET --refresh-token YOUR_REFRESH_TOKEN

🔌 Integration with MCP Clients

To use this server with MCP clients (like Anthropic's Claude with Cline), add it to your MCP configuration:

{
  "mcpServers": {
    "google-contacts-server": {
      "command": "uv",
      "args": [
         "--directory",
         "/path/to/mcp-google-contacts-server",
         "run",
        "main.py"
      ],
      "disabled": false,
      "autoApprove": []
    }
  }
}

🧰 Available Tools

This MCP server provides the following tools:

Tool Description
list_contacts List all contacts or filter by name
get_contact Get a contact by resource name or email
create_contact Create a new contact
update_contact Update an existing contact
delete_contact Delete a contact by resource name
search_contacts Search contacts by name, email, or phone number
list_workspace_users List Google Workspace users in your organization's directory
search_directory Search for people in the Google Workspace directory
get_other_contacts Retrieve contacts from the 'Other contacts' section

🔍 Detailed Tool Descriptions

📋 list_contacts

Lists all your Google contacts or filters them by name.

Parameters:

  • name_filter (optional): String to filter contacts by name
  • max_results (optional): Maximum number of contacts to return (default: 100)

Example:

list_contacts(name_filter="John", max_results=10)

👤 get_contact

Retrieves detailed information about a specific contact.

Parameters:

  • identifier: Resource name (people/*) or email address of the contact

Example:

get_contact("john.doe@example.com")
# or
get_contact("people/c12345678901234567")

create_contact

Creates a new contact in your Google Contacts.

Parameters:

  • given_name: First name of the contact
  • family_name (optional): Last name of the contact
  • email (optional): Email address of the contact
  • phone (optional): Phone number of the contact

Example:

create_contact(given_name="Jane", family_name="Smith", email="jane.smith@example.com", phone="+1-555-123-4567")

✏️ update_contact

Updates an existing contact with new information.

Parameters:

  • resource_name: Contact resource name (people/*)
  • given_name (optional): Updated first name
  • family_name (optional): Updated last name
  • email (optional): Updated email address
  • phone (optional): Updated phone number

Example:

update_contact(resource_name="people/c12345678901234567", email="new.email@example.com")

🗑️ delete_contact

Deletes a contact from your Google Contacts.

Parameters:

  • resource_name: Contact resource name (people/*) to delete

Example:

delete_contact(resource_name="people/c12345678901234567")

🔍 search_contacts

Searches your contacts by name, email, or phone number.

Parameters:

  • query: Search term to find in contacts
  • max_results (optional): Maximum number of results to return (default: 10)

Example:

search_contacts(query="john", max_results=5)

🏢 list_workspace_users

Lists Google Workspace users in your organization's directory.

Parameters:

  • query (optional): Search term to find specific users
  • max_results (optional): Maximum number of results to return (default: 50)

Example:

list_workspace_users(query="engineering", max_results=25)

🔭 search_directory

Performs a targeted search of your organization's Google Workspace directory.

Parameters:

  • query: Search term to find specific directory members
  • max_results (optional): Maximum number of results to return (default: 20)

Example:

search_directory(query="product manager", max_results=10)

👥 get_other_contacts

Retrieves contacts from the 'Other contacts' section - people you've interacted with but haven't added to your contacts.

Parameters:

  • max_results (optional): Maximum number of results to return (default: 50)

Example:

get_other_contacts(max_results=30)

🔒 Permissions

When first running the server, you'll need to authenticate with Google and grant the necessary permissions to access your contacts. The authentication flow will guide you through this process.

❓ Troubleshooting

  • 🔐 Authentication Issues: Ensure your credentials are valid and have the necessary scopes
  • ⚠️ API Limits: Be aware of Google People API quota limits
  • 📝 Logs: Check the console output for error messages and debugging information

👥 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_mcp_mcp_google_contacts_server-0.1.1.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file iflow_mcp_mcp_google_contacts_server-0.1.1.tar.gz.

File metadata

File hashes

Hashes for iflow_mcp_mcp_google_contacts_server-0.1.1.tar.gz
Algorithm Hash digest
SHA256 01add2bddc07bf058b31cdb6ec55226143f5b48844884349f3f396bd6be3f014
MD5 da07b7ac3bf23937af16baba9dc22078
BLAKE2b-256 4ec001609f8fba6751796e7ac5adf796020e72cfde0a4c1fde12d0d98baa0d3a

See more details on using hashes here.

File details

Details for the file iflow_mcp_mcp_google_contacts_server-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for iflow_mcp_mcp_google_contacts_server-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 218d5203d9ba408d69b90a1e8ae20d2441b5ce938315639c55876c16f67e7eec
MD5 b20d8318e85e1525d971c543350dea4e
BLAKE2b-256 4ac21625374d410620d0869a38a0fd7fa1757d2f22e13567ac0605216db7f564

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page