Mcp Google Contacts Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Google Contacts Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
To install the mcp-google-contacts-server as a Python package:
git clone https://github.com/rayanzaki/mcp-google-contacts-server.git
cd mcp-google-contacts-serverThe package expects the source code to be in a directory named mcp_google_contacts_server.
mv src mcp_google_contacts_serverThis 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.
The server requires Google API credentials to access your contacts. You have several options:
--credentials-file argumentSet the following environment variables:
GOOGLE_CLIENT_ID: Your Google OAuth client IDGOOGLE_CLIENT_SECRET: Your Google OAuth client secretGOOGLE_REFRESH_TOKEN: A valid refresh token for your accountNote: 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)
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-contactsFollow 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.
python src/main.py
# or
uv run src/main.pyThis starts the server with the default stdio transport.
| 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 | - |
Start with HTTP transport:
python src/main.py --transport http --port 8080Use specific credentials file:
python src/main.py --credentials-file /path/to/your/credentials.jsonProvide credentials directly:
python src/main.py --client-id YOUR_CLIENT_ID --client-secret YOUR CLIENT_SECRET --refresh-token YOUR_REFRESH_TOKENTo 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": []
}
}
}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 |
#### 📋 list_contacts Lists all your Google contacts or filters them by name.
Parameters:
name_filter (optional): String to filter contacts by namemax_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 contactExample:
get_contact("[email protected]")
# or
get_contact("people/c12345678901234567")#### ➕ create_contact Creates a new contact in your Google Contacts.
Parameters:
given_name: First name of the contactfamily_name (optional): Last name of the contactemail (optional): Email address of the contactphone (optional): Phone number of the contactExample:
create_contact(given_name="Jane", family_name="Smith", email="[email protected]", 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 namefamily_name (optional): Updated last nameemail (optional): Updated email addressphone (optional): Updated phone numberExample:
update_contact(resource_name="people/c12345678901234567", email="[email protected]")#### 🗑️ delete_contact Deletes a contact from your Google Contacts.
Parameters:
resource_name: Contact resource name (people/*) to deleteExample:
delete_contact(resource_name="people/c12345678901234567")#### 🔍 search_contacts Searches your contacts by name, email, or phone number.
Parameters:
query: Search term to find in contactsmax_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 usersmax_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 membersmax_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)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.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.