Gmail MCP Assistant
Allows reading unread emails from Gmail inbox and creating draft replies via the Gmail API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gmail MCP AssistantWhat are my unread emails?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gmail MCP Assistant
A Model Context Protocol (MCP) server that enables Anthropic's Claude to read unread emails and create draft responses using the Gmail API.
Prerequisites
Python 3.10+
uv (Python package manager)
Claude Desktop app installed
A Google Cloud Project with the Gmail API enabled
Related MCP server: Gmail MCP Local Server
Setup
1. Google Cloud Configuration
Go to the Google Cloud Console and create a new project
Enable the Gmail API
Configure the OAuth Consent Screen and add your email as a Test User
Create OAuth 2.0 Credentials for a Desktop Application
Download the JSON file, rename it to
client_secret.json, and place it in this project's root directory
2. Installation
# Install dependencies
uv sync3. Authentication
On first run, Claude Desktop will start the server and open a browser window for OAuth authentication. After authorizing, a token.json file will be created for future use.
4. Claude Desktop Configuration
Add this server to your Claude Desktop MCP configuration file. Edit claude_desktop_config.json and add:
{
"mcpServers": {
"gmail-assistant": {
"command": "C:\\Users\\Satyam\\.local\\bin\\uv.exe",
"args": [
"--directory",
"C:\\Users\\Satyam\\Downloads\\mlx_application",
"run",
"server.py"
]
}
}
}Update the paths to match your system:
command: Path to youruv.exeexecutable (you can get this by runninguv where)--directory: Path to this project directory
After saving the configuration, restart Claude Desktop to load the server.
Usage
Once configured, you can use the tools in Claude Desktop. Simply start a chat and ask something like 'What emails do I need to respond to?'. Claude will use the following tools:
get_unread_emails: Retrieve unread emails from your inboxcreate_draft_reply: Create a draft reply for a specific email thread
Available Tools
2 toolscreate_draft_replyC
Creates a draft reply for a specific thread.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | ||
| reply_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It implies the result is a draft rather than a sent message (useful), but says nothing about required permissions, whether it appends to or overwrites an existing draft, which folder it lands in, or what happens on an invalid thread_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb and scope front-loaded and no filler. It is well sized for what it attempts, though brevity here comes partly from omission rather than precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write/create tool with no annotations, no output schema, and 0% parameter coverage, the description should disclose far more. It gives no auth requirements, no draft-lifecycle behavior, and no return information, so an agent cannot call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate and does not. It never explains thread_id (format/lookup source) or reply_text (plain text vs markdown, length limits), leaving both required parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a draft reply') and a scope ('for a specific thread'), so the agent knows exactly what the tool produces. It does not explicitly contrast with the sibling get_unread_emails, but the read/write distinction is clear from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as sending a reply directly versus drafting one. The agent is left to infer that this is the compose-not-send path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_emailsC
Fetches a list of unread emails from the user's inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and mostly does not: it never states that this is a read-only operation, what happens with pagination or truncation, whether results are capped, or what the returned list contains. Only the 'unread' and 'inbox' scope is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the resource and scope front-loaded; nothing is wasted, though it is arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema the description is minimally viable, but it omits the behavior of max_results and any notion of result ordering or limits, which an agent would want before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter max_results has 0% schema description coverage, so the description is the only possible place to explain it, yet it says nothing about the parameter. Its default of 5, valid range, and unit of measurement are all left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetches) and resource (unread emails) scoped to the user's inbox, so the operation is unambiguous. It does not explicitly differentiate from the sibling create_draft_reply, though the sibling's purpose is obviously distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, nor is any prerequisite (e.g., authentication, mailbox state) mentioned. The agent must infer that this is the right call whenever unread mail is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
create_draft_reply - First observed
get_unread_emails
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one retrieves unread emails, the other creates a draft reply. There is no overlap or ambiguity between them.
Both tool names follow a consistent verb_noun pattern in snake_case (get_unread_emails, create_draft_reply). The naming is predictable and readable.
With only two tools, the set is quite thin for a Gmail assistant, which typically involves many operations. It is borderline but not an extreme mismatch.
Major gaps exist: no tools for sending emails, reading individual message content, searching, marking as read, or deleting. An agent cannot complete common email workflows with these two tools alone.
Maintenance
Related MCP Connectors
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organiz…
Multiple Google accounts (Gmail, Calendar, Drive, Contacts, Tasks) in one Claude connector.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables reading, sending, searching, and managing Gmail through Claude using the official Google Gmail API.87 npm3MIT
- FlicenseNot gradedqualityDmaintenanceProvides Claude with Gmail capabilities including sending emails, managing drafts, and searching messages.-
- FlicenseNot gradedqualityCmaintenanceEnables reading unread emails and creating draft replies in Gmail via Claude Desktop.-
- FlicenseNot gradedqualityDmaintenanceEnables Claude to read unread emails and create draft replies in Gmail with proper threading.-