Google Workspace MCP Server
Provides tools for drafting, updating, sending, and retrieving emails via the Gmail API.
Provides tools for creating, reading, appending content to, and retrieving metadata of Google Docs documents.
Click on "Install 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., "@Google Workspace MCP ServerDraft an email to John about tomorrow's meeting"
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.
Google Workspace MCP Server
A generic Model Context Protocol (MCP) Server that exposes Gmail and Google Docs as standardized tools, enabling any MCP-compatible AI agent (Claude, ChatGPT, Cursor, VS Code agents, etc.) to securely interact with Google Workspace.
Features
Gmail Tools — Draft, update, send, and retrieve emails
Google Docs Tools — Create, read, append to, and inspect documents
OAuth 2.0 — Secure authentication with automatic token refresh
MCP-Compliant — Works with any MCP client out of the box
Structured Responses — Consistent JSON response envelopes for all tools
Extensible — Modular architecture for adding Google Sheets, Drive, Calendar, etc.
Related MCP server: Gmail MCP Server
Prerequisites
Python 3.11+
A Google Cloud project with Gmail API and Google Docs API enabled
OAuth 2.0 credentials (
credentials.json)
Google Cloud Setup
Go to the Google Cloud Console
Create a new project (or select an existing one)
Navigate to APIs & Services → Library
Enable Gmail API and Google Docs API
Navigate to APIs & Services → Credentials
Click Create Credentials → OAuth 2.0 Client ID
Select Desktop app as the application type
Download the credentials file and save it as
credentials.jsonin the project rootNavigate to OAuth consent screen and add your email as a test user
Installation
# Clone the repository
git clone <repository-url>
cd google-mcp-server
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows
# Install the package
pip install -e .
# Install dev dependencies (optional)
pip install -e ".[dev]"Configuration
Copy the environment template and configure:
cp .env.example .envEdit .env as needed:
GOOGLE_CREDENTIALS_PATH=./credentials.json
GOOGLE_TOKEN_PATH=./token.json
LOG_LEVEL=INFOFirst Run
On the first run, the server will open your browser for Google OAuth consent:
python -m google_mcp_server.serverA browser window will open asking you to sign in to Google
Grant the requested permissions (Gmail compose/read, Google Docs read/write)
The token is saved to
token.jsonfor future useThe server starts on stdio transport, ready for MCP client connections
Available Tools
Gmail
Tool | Description |
| Create a new email draft with To, CC, BCC, Subject, and Body |
| Update an existing draft (unchanged fields are preserved) |
| Send an email directly without creating a draft |
| Send a previously created draft |
| Retrieve a draft by ID with headers and snippet |
Google Docs
Tool | Description |
| Create a new document with optional initial content |
| Read the full text content of a document |
| Append text to the end of a document |
| Get document metadata (title, revision, URL) |
MCP Client Configuration
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"google-workspace": {
"command": "python",
"args": ["-m", "google_mcp_server.server"],
"env": {
"GOOGLE_CREDENTIALS_PATH": "/absolute/path/to/credentials.json",
"GOOGLE_TOKEN_PATH": "/absolute/path/to/token.json"
}
}
}
}Cursor
Add to your MCP settings:
{
"mcpServers": {
"google-workspace": {
"command": "python",
"args": ["-m", "google_mcp_server.server"],
"cwd": "/path/to/google-mcp-server"
}
}
}VS Code (Copilot)
Add to your VS Code settings:
{
"mcp": {
"servers": {
"google-workspace": {
"command": "python",
"args": ["-m", "google_mcp_server.server"],
"cwd": "/path/to/google-mcp-server"
}
}
}
}Vercel Deployment
This MCP server is configured for serverless deployment on Vercel using Server-Sent Events (SSE).
Push your code to a GitHub repository.
Go to the Vercel Dashboard and create a new project from your repository.
In the environment variables section, add the following variable:
Key:
GOOGLE_TOKEN_JSONValue: (Paste the exact contents of your local
token.jsonfile)
Also add:
Key:
VERCELValue:
1
Deploy the project!
Once deployed, your MCP SSE endpoint will be available at:
https://<your-vercel-domain>/sse
Clients connecting to a Vercel-deployed server must use the SSE transport configuration instead of the stdio transport.
Testing with MCP Inspector
Use the official MCP Inspector to test your server interactively:
npx -y @modelcontextprotocol/inspector python -m google_mcp_server.serverRunning Tests
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=src/google_mcp_server --cov-report=term-missing
# Lint
ruff check src/ tests/Docker
# Build
docker build -f docker/Dockerfile -t google-mcp-server .
# Run (mount your credentials)
docker run -it \
-v $(pwd)/credentials.json:/app/credentials.json \
-v $(pwd)/token.json:/app/token.json \
google-mcp-serverProject Structure
google-mcp-server/
├── pyproject.toml # Project config & dependencies
├── .env.example # Environment variable template
├── credentials.json # Google OAuth credentials (gitignored)
├── token.json # Cached OAuth token (gitignored)
├── src/
│ └── google_mcp_server/
│ ├── server.py # FastMCP server entry point
│ ├── config.py # Settings & environment loading
│ ├── auth/
│ │ └── oauth.py # OAuth 2.0 flow & token management
│ ├── gmail/
│ │ ├── service.py # Gmail API wrapper functions
│ │ └── tools.py # Gmail MCP tool definitions
│ ├── docs/
│ │ ├── service.py # Google Docs API wrapper functions
│ │ └── tools.py # Docs MCP tool definitions
│ └── utils/
│ └── errors.py # Error handling & response formatting
├── tests/ # Unit tests
└── docker/
└── Dockerfile # Docker deploymentLicense
MIT
Available Tools
9 toolsappend_to_google_docA
Append content to the end of an existing Google Document.
The content is added after the existing text without overwriting anything.
Args: document_id: The ID of the Google Document to append to. content: The text content to append to the document.
Returns: Document ID, title, number of characters appended, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| document_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that content is added without overwriting and lists return values. With no annotations, the description carries full burden; it adequately describes the mutation behavior but lacks details on auth, rate limits, or error conditions.
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?
Concise with a clear main sentence, then sections for behavior, args, and returns. No fluff, front-loaded purpose.
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?
Given no output schema, description includes return values. Covers core behavior and parameters. Could mention error scenarios or permissions, but overall adequate for a simple append tool.
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 coverage is 0%, so description compensates minimally. It explains document_id as the ID and content as text, but no additional details like format, length limits, or constraints. This is basic, not rich.
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?
Clearly states 'Append content to the end of an existing Google Document.' The verb 'append' and resource are specific, and the action is distinct from siblings like create_google_doc and read_google_doc.
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?
Implied usage: use when you want to append to an existing doc. No explicit guidance on when not to use or compare with alternatives. The sibling list provides context but no direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_google_docA
Create a new Google Document.
Args: title: The title of the new document. content: Optional initial text content to add to the document body.
Returns: Document ID, title, and URL on success, or error details on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| content | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does not disclose side effects, authentication needs, or behavior on duplicate titles. It only mentions return types, lacking depth for a mutation operation.
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?
The description is very concise with a clear Args and Returns structure. Every sentence adds value without redundancy.
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?
Given the tool's simplicity (2 params, no output schema), the description adequately explains the return value (ID, title, URL) and parameter roles. However, it lacks error handling details or usage context for edge cases.
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 coverage is 0%, but the description explains both parameters: 'title' as the document title and 'content' as optional initial text. This adds meaning beyond the schema's type and required fields.
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?
The description clearly states 'Create a new Google Document,' which is a specific verb+resource pair, and it distinguishes from sibling tools like 'read_google_doc' and 'append_to_google_doc' by focusing on creation.
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 guidance on when to use this tool vs alternatives like 'append_to_google_doc' or 'draft_email'. The description lacks context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_emailA
Create a new email draft in Gmail.
Args: to: Recipient email address (comma-separated for multiple recipients). subject: Email subject line. body: Email body content. cc: CC recipients (comma-separated, optional). bcc: BCC recipients (comma-separated, optional). body_type: Content type — "plain" for plain text or "html" for HTML content.
Returns: Draft ID, message ID, and a summary of the created draft.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| subject | Yes | ||
| body_type | No | plain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must convey behavior. It clearly states the action and return value (Draft ID, message ID, summary). Does not mention side effects, authentication, or error handling, but the tool is straightforward and non-destructive.
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?
Concise and well-structured: one-line purpose, bulleted parameter list, then return description. No fluff, every sentence adds value. Front-loaded with the most important information.
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 6-parameter tool with no output schema or annotations, the description covers all parameters and return fields. Lacks error conditions or prerequisites, but is otherwise complete for a simple draft creation tool.
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%, but the description fully compensates by explaining each parameter, including format (comma-separated for 'to'), optionality (cc, bcc, body_type), and default values. Adds significant meaning beyond schema titles and types.
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?
Starts with 'Create a new email draft in Gmail.' Clearly states verb (create), resource (email draft), and context (Gmail). Distinguishes from siblings like 'send_new_email' and 'get_email_draft' by focusing on draft creation.
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 explicit guidance on when to use versus alternatives. The purpose is implied by the tool name and description, but there is no mention of when not to use or which sibling tool to prefer for sending vs. drafting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_draftB
Retrieve an existing email draft from Gmail.
Args: draft_id: The ID of the draft to retrieve.
Returns: Draft details including headers, snippet, and IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only states the main action and return values. It omits behavioral traits such as whether the operation is read-only, if authentication is required, error behavior (e.g., missing draft_id), or any side effects. The description minimally adds value beyond the name.
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?
The description is three sentences: one for purpose, one for argument, one for returns. Every sentence is necessary and clearly structured. It is front-loaded with the core action. No wasted words.
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 retrieval tool with one parameter and no output schema, the description covers the essential purpose and parameter. However, it lacks context about error handling, prerequisites (e.g., existing draft), or more detailed return structure. It is minimally complete but could be enriched with typical usage notes.
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 input schema has 0% description coverage, so the description must compensate. It provides a basic meaning for 'draft_id' ('The ID of the draft to retrieve'), which adds value over the schema's bare property name. However, no additional context like format, source, or constraints is given. Baseline 3 is appropriate.
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?
The description clearly states the action 'Retrieve an existing email draft from Gmail', specifying the resource (email drafts) and the operation. However, it does not explicitly differentiate from sibling tools like 'draft_email' or 'update_email_draft', which reduces clarity purpose.
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?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, context, or exclusions. For example, it does not indicate that this tool should be used only after a draft has been created via 'draft_email'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_google_doc_metadataA
Get metadata for a Google Document.
Retrieves the document's title, revision ID, URL, and page size without reading the full content.
Args: document_id: The ID of the Google Document.
Returns: Document metadata including title, revision, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses it is a read-only operation that retrieves specific metadata fields. Does not mention auth or errors, but for a simple read, the behavioral traits are sufficiently clear.
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?
Concise and well-structured: short paragraph followed by Args and Returns sections. Every sentence adds value, no filler.
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 tool with one parameter and no output schema, the description covers purpose, return fields, and what it does not do. Lacks error handling or prerequisites, but overall complete enough for effective use.
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?
Only one parameter (document_id) with schema description coverage 0%. Description adds 'The ID of the Google Document' which is minimal but confirms its purpose. Lacks format or example, but baseline score of 3 is appropriate given the schema provides type and required info.
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?
Clearly states it gets metadata for a Google Doc, lists specific metadata (title, revision ID, URL, page size), and explicitly distinguishes from reading full content, differentiating it from sibling read_google_doc.
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?
Implicitly tells when to use (when only metadata needed) and when not (full content needed) by stating 'without reading the full content'. Does not explicitly list sibling alternatives but the contrast with read_google_doc is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_google_docA
Read the full content of a Google Document.
Extracts all text content from the document, preserving paragraph structure.
Args: document_id: The ID of the Google Document to read (found in the document URL).
Returns: Document ID, title, full text content, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it extracts text preserving paragraph structure, and returns doc ID, title, content, and URL. However, with no annotations, it does not cover auth requirements, rate limits, or read-only nature beyond the verb 'Read'.
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?
Straightforward three sentences: purpose, extraction detail, and Args/Returns section. Front-loaded with clear verb and resource. No redundancy.
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 read tool with one parameter and no annotations or output schema, description adequately covers usage and return values. Could mention error handling or permissions, but overall complete enough for typical use.
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?
Single parameter 'document_id' is described with a helpfultip on where to find it ('found in the document URL'), adding meaning beyond the schema which only has a title. Schema coverage is 0%, but description compensates fully.
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?
Description clearly states 'Read the full content of a Google Document,' using a specific verb and resource. It distinguishes from sibling tools like append_to_google_doc and get_google_doc_metadata by explicitly focusing on reading full content.
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?
Implied usage (use to read document content) but no explicit guidance on when to use vs alternatives like get_google_doc_metadata. Does not mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_existing_draftB
Send an existing email draft via Gmail.
Args: draft_id: The ID of the draft to send.
Returns: Sent message details or error information.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only states the action without disclosing behavior like authentication requirements, error handling if draft doesn't exist, or side effects like marking the draft as sent.
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?
The description is concise and well-structured with a brief overview and explicit Args/Returns section. It is not verbose, though it could include more detail without sacrificing conciseness.
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?
Given the tool's simplicity (one required parameter, no output schema, no annotations), the description covers the essential purpose and parameter. However, it lacks context on prerequisites, errors, or relationship to sibling tools, which would help completeness.
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 description adds meaning for the single parameter 'draft_id' by stating 'The ID of the draft to send,' which goes beyond the schema's empty description. However, it could provide more detail on how to obtain the ID.
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?
The description clearly states 'Send an existing email draft via Gmail,' which specifies the verb (send) and resource (existing draft). It distinguishes from sibling tools like draft_email (create) and send_new_email (compose and send).
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?
The description implies when to use this tool (when you have a draft ID to send) but provides no explicit guidance on when not to use it or alternatives such as send_new_email. The context is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_new_emailA
Send an email directly via Gmail.
This sends the email immediately without creating a draft first.
Args: to: Recipient email address (comma-separated for multiple recipients). subject: Email subject line. body: Email body content. cc: CC recipients (comma-separated, optional). bcc: BCC recipients (comma-separated, optional). body_type: Content type — "plain" for plain text or "html" for HTML content.
Returns: Sent message ID and thread details, or error information.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| subject | Yes | ||
| body_type | No | plain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses immediate sending behavior, return details (message ID and thread details or error). Lacks authentication or rate limit info, but sufficient for common email sending.
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?
Concise opening, followed by a behavioral note, then structured args list, ending with returns. No extraneous text. Could be slightly more compact, but well-organized.
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?
Covers purpose, parameters, and return for a 6-param tool with no output schema. Does not explain error details in depth, but 'error information' suffices. No mention of attachments or throttling, but reasonable for the complexity.
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 has 0% description coverage, so description adds significant value: explains comma-separated for multiple recipients, default values, and body_type options ('plain'/'html'). All parameters are meaningfully explained.
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?
Description clearly states 'Send an email directly via Gmail' and distinguishes from sibling tools by noting it sends immediately without creating a draft first. The verb 'send' and resource 'email' are specific.
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?
Description explicitly says 'without creating a draft first', contrasting with draft-related siblings. However, it does not provide explicit when-not-to-use guidance or list alternatives beyond the draft distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_email_draftA
Update an existing email draft in Gmail.
Only provide the fields you want to change — unchanged fields will be preserved from the original draft.
Args: draft_id: The ID of the draft to update. to: New recipient(s), or leave empty to keep existing. subject: New subject, or leave empty to keep existing. body: New body content, or leave empty to keep existing. cc: New CC recipients, or leave empty to keep existing. bcc: New BCC recipients, or leave empty to keep existing. body_type: Content type — "plain" or "html".
Returns: Updated draft details or error information.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| bcc | No | ||
| body | No | ||
| subject | No | ||
| draft_id | Yes | ||
| body_type | No | plain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description carries burden. Discloses preservation of unchanged fields, a key behavioral trait. Lacks details on permissions or concurrency, but adequate for a simple update tool.
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?
Concise with a one-line summary, usage hint, then clean parameter list. Every sentence adds value, no waste.
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?
Covers all 7 parameters with clear defaults and behavior. Mentions return value. Lacks preconditions (e.g., draft must exist) but acceptable for a simple tool with no output schema.
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 coverage is 0%, but the description provides thorough parameter explanations (e.g., 'to: New recipient(s), or leave empty to keep existing'), adding meaning well beyond the schema's titles.
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?
The description starts with a clear verb+resource ('Update an existing email draft in Gmail') and distinguishes from siblings like 'draft_email' and 'send_existing_draft' by implying it modifies an existing draft.
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?
Explicitly states 'Only provide the fields you want to change — unchanged fields will be preserved', guiding partial updates. Does not explicitly mention when not to use it, but the context with siblings makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct action and service (Docs vs. Gmail), with no overlapping purposes. Operations are clearly separated (e.g., draft_email vs. send_new_email, get_google_doc_metadata vs. read_google_doc).
All tools follow a consistent verb_noun pattern (e.g., create_google_doc, draft_email, get_email_draft). No mixing of conventions or vague verbs.
9 tools cover core operations for two distinct services (Docs and Gmail). The count is well-scoped, neither too few nor excessive for the stated purpose.
Core CRUD operations are present for Docs (create, read, append, metadata) but missing update and delete. Gmail covers drafting and sending but lacks listing drafts, deleting, or searching. Notable gaps but not severely incomplete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A MCP server for Gmail that lets you search, read, and draft emails and replies.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceA complete MCP server integrating Gmail and Google Docs, enabling email management (list, send, search, reply) and document operations (create, edit, search, share) through natural language.
- FlicenseNot gradedqualityCmaintenanceProduction-ready MCP server for Gmail, enabling AI agents to search, read, send, draft, and manage emails, labels, and attachments via the Google Gmail API.
- FlicenseBqualityCmaintenanceA generic MCP server that exposes Gmail and Google Docs capabilities as tools for AI agents. Enables sending emails and appending content to Google Docs.2
- AlicenseBqualityBmaintenanceA production-ready MCP server that bridges AI agents with Google Workspace (Gmail & Docs) to securely compose emails and edit documents via standardized tools.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/risvan1605/MCP-Server---Gmail-and-Doc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server