by baryhuang
Provides Gmail read and send capabilities via MCP without requiring local credential files, supporting headless and containerized operation.
Provides a headless, remote‑operable MCP server that lets clients read recent Gmail messages, fetch full email bodies in chunks, send emails, and refresh OAuth tokens—all without storing credentials or tokens on the server itself.
npx @peakmojo/mcp-server-headless-gmail
docker build -t mcp-headless-gmail .
or pull the published image buryhuang/mcp-headless-gmail:latest
.mcp-server-headless-gmail # runs the MCP server
google_access_token
, google_refresh_token
, google_client_id
, and google_client_secret
in tool calls.gmail_refresh_token
tool to obtain a fresh access token when needed.offset
offset
parameter.google-api-python-client
library.buryhuang/mcp-headless-gmail
.gmail_refresh_token
tool with either a full credential set or just the refresh token, client ID, and client secret. The server will also automatically use the refresh token when an access token expires.A MCP (Model Context Protocol) server that provides get, send Gmails without local credential or token setup.
# Clone the repository
git clone https://github.com/baryhuang/mcp-headless-gmail.git
cd mcp-headless-gmail
# Install dependencies
pip install -e .
# Build the Docker image
docker build -t mcp-headless-gmail .
You can configure Claude Desktop to use the Docker image by adding the following to your Claude configuration:
docker
{
"mcpServers": {
"gmail": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"buryhuang/mcp-headless-gmail:latest"
]
}
}
}
npm version
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": [
"@peakmojo/mcp-server-headless-gmail"
]
}
}
}
Note: With this configuration, you'll need to provide your Google API credentials in the tool calls as shown in the Using the Tools section. Gmail credentials are not passed as environment variables to maintain separation between credential storage and server implementation.
To publish the Docker image for multiple platforms, you can use the docker buildx
command. Follow these steps:
Create a new builder instance (if you haven't already):
docker buildx create --use
Build and push the image for multiple platforms:
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t buryhuang/mcp-headless-gmail:latest --push .
Verify the image is available for the specified platforms:
docker buildx imagetools inspect buryhuang/mcp-headless-gmail:latest
The server provides Gmail functionality through MCP tools. Authentication handling is simplified with a dedicated token refresh tool.
mcp-server-headless-gmail
When using an MCP client like Claude, you have two main ways to handle authentication:
If you have both access and refresh tokens:
{
"google_access_token": "your_access_token",
"google_refresh_token": "your_refresh_token",
"google_client_id": "your_client_id",
"google_client_secret": "your_client_secret"
}
If your access token has expired, you can refresh with just the refresh token:
{
"google_refresh_token": "your_refresh_token",
"google_client_id": "your_client_id",
"google_client_secret": "your_client_secret"
}
This will return a new access token and its expiration time, which you can use for subsequent calls.
Retrieves recent emails with the first 1k characters of each email body:
{
"google_access_token": "your_access_token",
"max_results": 5,
"unread_only": false
}
Response includes:
body_size_bytes
: Total size of the email body in bytescontains_full_body
: Boolean indicating if the entire body is included (true) or truncated (false)For emails with bodies larger than 1k characters, you can retrieve the full content in chunks:
{
"google_access_token": "your_access_token",
"message_id": "message_id_from_get_recent_emails",
"offset": 0
}
You can also get email content by thread ID:
{
"google_access_token": "your_access_token",
"thread_id": "thread_id_from_get_recent_emails",
"offset": 1000
}
The response includes:
body_size_bytes
: Total size of the email bodychunk_size
: Size of the returned chunkcontains_full_body
: Boolean indicating if the chunk contains the remainder of the bodyTo retrieve the entire email body of a long message, make sequential calls increasing the offset by 1000 each time until contains_full_body
is true.
{
"google_access_token": "your_access_token",
"to": "recipient@example.com",
"subject": "Hello from MCP Gmail",
"body": "This is a test email sent via MCP Gmail server",
"html_body": "<p>This is a <strong>test email</strong> sent via MCP Gmail server</p>"
}
gmail_refresh_token
tool with either:
gmail_refresh_token
tool again to get a new token.This approach simplifies most API calls by not requiring client credentials for every operation, while still enabling token refresh when needed.
To obtain the required Google API credentials, follow these steps:
https://www.googleapis.com/auth/gmail.readonly
(for reading emails)https://www.googleapis.com/auth/gmail.send
(for sending emails)This server implements automatic token refreshing. When your access token expires, the Google API client will use the refresh token, client ID, and client secret to obtain a new access token without requiring user intervention.
This server requires direct access to your Google API credentials. Always keep your tokens and credentials secure and never share them with untrusted parties.
See the LICENSE file for details.
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "gmail": { "command": "npx", "args": [ "-y", "@peakmojo/mcp-server-headless-gmail" ], "env": {} } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.