Skip to main content
Glama
puzne2000

MCP Google Contacts Server

by puzne2000
README.md
# MCP Google Contacts Server

A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that gives AI assistants access to Google Contacts. Supports listing, searching, creating, updating, and deleting contacts, as well as searching Google Workspace directories.

Forked from [RayanZaki/mcp-google-contacts-server](https://github.com/RayanZaki/mcp-google-contacts-server) with the following bug fixes:
- `search_contacts` now uses the Google People API's native `searchContacts` endpoint instead of fetching the first 100 contacts and filtering locally — searches across all contacts regardless of list size
- `list_contacts` now paginates through all results instead of stopping at the first page
- `get_contact` by email address now uses the server-side search instead of scanning a partial contact list
- Removed a stray debug print statement in `list_directory_people`

## Prerequisites

- Python 3.12 or higher
- A Google Cloud project with the [People API](https://console.cloud.google.com/apis/library/people.googleapis.com) enabled
- OAuth 2.0 credentials (Desktop app type) downloaded from Google Cloud Console

## Installation

```bash
git clone https://github.com/puzne2000/mcp-google-contacts-server.git
cd mcp-google-contacts-server
pip install .
```

This installs the `mcp-google-contacts` command into your PATH.

## Authentication

### Step 1 — Create a Google Cloud project and get credentials

If you don't already have OAuth credentials from Google, follow these steps. If you do, skip to Step 2.

1. Go to [https://console.cloud.google.com/](https://console.cloud.google.com/) and sign in.
2. Click the project dropdown (top-left) → **New Project** → give it a name → **Create**.
3. In the left menu, go to **APIs & Services → Library**, search for **People API**, click it, and click **Enable**.
4. In the left menu, go to **APIs & Services → OAuth consent screen**:
   - Choose **External** → **Create**
   - Fill in **App name**, **User support email**, and **Developer contact email** (your email for all three)
   - Click **Save and Continue** through all steps, then **Back to Dashboard**
   - The app stays in **Testing** mode, which is fine for personal use. If you want others to use it with their accounts, add them as test users on the **Test users** screen.
5. In the left menu, go to **APIs & Services → Credentials**:
   - Click **+ Create Credentials → OAuth client ID**
   - Set **Application type** to **Desktop app** → **Create**
   - Click **Download JSON** in the confirmation popup

6. Place the downloaded file at:

```bash
mkdir -p ~/.config/google
mv ~/Downloads/client_secret_*.json ~/.config/google/credentials.json
```

Alternatively, pass its path explicitly with `--credentials-file`, or use environment variables:

```
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REFRESH_TOKEN=...
```

> **"Google hasn't verified this app"**: When authorizing in the next step, you may see this warning. It is expected for personal apps in Testing mode — click **Advanced → Go to [App Name] (unsafe)** to proceed.

### Step 2 — Run the initial auth flow

Run this once in your terminal to open a browser and authorize access:

```bash
mcp-google-contacts
```

Sign in with the Google account whose contacts you want to manage. The token is saved to `~/.config/google-contacts-mcp/token.json` and auto-refreshes — you won't need to repeat this unless you revoke access.

Once you see `Running with stdio transport`, press Ctrl+C. Setup is complete.

## MCP Configuration

The `mcpServers` block below is the same across all MCP-compatible clients. Where you put it depends on your client:

| Client | Config file location |
|---|---|
| Claude Code | `.mcp.json` in your project root, or `~/.claude.json` globally |
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) |
| Cursor | Settings → MCP |
| Other clients | See your client's documentation |

```json
{
  "mcpServers": {
    "google-contacts": {
      "command": "mcp-google-contacts",
      "args": []
    }
  }
}
```

## Available Tools

| Tool | Description |
|---|---|
| `search_contacts` | Search contacts by name, email, or phone (server-side, searches all contacts) |
| `list_contacts` | List all contacts, optionally filtered by name |
| `get_contact` | Get a contact by resource name (`people/...`) or email address |
| `create_contact` | Create a new contact |
| `update_contact` | Update an existing contact |
| `delete_contact` | Delete a contact |
| `list_workspace_users` | List users in your Google Workspace directory |
| `search_directory` | Search your Google Workspace directory |
| `get_other_contacts` | List contacts from the "Other contacts" section |

## License

MIT — see [LICENSE](LICENSE).