A Node.js/TypeScript MCP (Model Context Protocol) stdio server that lets AI assistants like OpenClaw read your Gmail via the Gmail API.
- OAuth 2.0 authorization with Gmail read-only scope
list_emails— list inbox emails with optional filtersget_email— read a single email by message IDsearch_emails— search with Gmail query syntaxlist_labels— list all Gmail labels/folders- Works with any MCP-compatible client (OpenClaw, Claude Desktop, etc.)
# Step 1: Authorize Gmail access (one-time setup)
npx @symbolstar/gmail-mcp auth
# Step 2: Done — the MCP server starts automatically when called by your client- Open Google Cloud Console
- Create a new project (or select an existing one)
- Go to APIs & Services → Library
- Search for Gmail API and click Enable
- Go to APIs & Services → OAuth consent screen
- Under Get started, fill in:
- App name: e.g.
Gmail MCP - User support email: your Gmail address
- App name: e.g.
- Under Audience, select External
- Under Data Access, add the scope:
https://www.googleapis.com/auth/gmail.readonly - Under Audience → Test users, add your Gmail address
⚠️ This step is required. Without it, you'll getError 403: access_deniedduring authorization.
- Go to APIs & Services → Credentials
- Click Create Credentials → OAuth client ID
- Application type: Desktop app
- Name it anything (e.g.
gmail-mcp-cli) - Click Create, then Download JSON
mkdir -p ~/.gmail-mcp
chmod 700 ~/.gmail-mcp
cp ~/Downloads/client_secret_*.json ~/.gmail-mcp/credentials.json
chmod 600 ~/.gmail-mcp/credentials.jsonThe file must be at:
~/.gmail-mcp/credentials.json
npx @symbolstar/gmail-mcp authThis will:
- Start a temporary local OAuth callback server
- Open your browser for Google authorization
- Save the token to
~/.gmail-mcp/token.json
If the browser doesn't open automatically, copy the URL printed in the terminal and open it manually.
Add the following to your ~/.openclaw/openclaw.json:
{
"mcp": {
"servers": {
"gmail": {
"command": "npx",
"args": ["-y", "@symbolstar/gmail-mcp"]
}
}
}
}Then restart the gateway:
openclaw gateway restartAdd to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": ["-y", "@symbolstar/gmail-mcp"]
}
}
}List inbox emails.
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResults |
number | 10 | Max emails to return (up to 50) |
query |
string | — | Gmail search query (applied within INBOX) |
Read a single email by ID.
| Parameter | Type | Description |
|---|---|---|
messageId |
string | Gmail message ID |
Returns: sender, recipients, subject, date, labels, plain text body, HTML body, attachment metadata.
Search Gmail with full query syntax.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | — | Gmail search query (required) |
maxResults |
number | 10 | Max results (up to 50) |
List all Gmail labels and folders. No parameters required.
| File | Path |
|---|---|
| OAuth credentials | ~/.gmail-mcp/credentials.json |
| OAuth token | ~/.gmail-mcp/token.json |
Make sure you downloaded the OAuth client JSON and placed it at ~/.gmail-mcp/credentials.json.
Run the authorization flow first:
npx @symbolstar/gmail-mcp authYour Gmail account is not added as a Test user. Go to Google Cloud Console → OAuth consent screen → Audience → Test users and add your Gmail address.
Token expired or revoked. Delete it and re-authorize:
rm ~/.gmail-mcp/token.json
npx @symbolstar/gmail-mcp auth- Node.js 18+
- A Google account with Gmail
MIT