Skip to main content
Glama
risvan1605

Google Workspace MCP Server

by risvan1605

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

  1. Go to the Google Cloud Console

  2. Create a new project (or select an existing one)

  3. Navigate to APIs & Services → Library

  4. Enable Gmail API and Google Docs API

  5. Navigate to APIs & Services → Credentials

  6. Click Create Credentials → OAuth 2.0 Client ID

  7. Select Desktop app as the application type

  8. Download the credentials file and save it as credentials.json in the project root

  9. Navigate 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 .env

Edit .env as needed:

GOOGLE_CREDENTIALS_PATH=./credentials.json
GOOGLE_TOKEN_PATH=./token.json
LOG_LEVEL=INFO

First Run

On the first run, the server will open your browser for Google OAuth consent:

python -m google_mcp_server.server
  1. A browser window will open asking you to sign in to Google

  2. Grant the requested permissions (Gmail compose/read, Google Docs read/write)

  3. The token is saved to token.json for future use

  4. The server starts on stdio transport, ready for MCP client connections

Available Tools

Gmail

Tool

Description

draft_email

Create a new email draft with To, CC, BCC, Subject, and Body

update_email_draft

Update an existing draft (unchanged fields are preserved)

send_new_email

Send an email directly without creating a draft

send_existing_draft

Send a previously created draft

get_email_draft

Retrieve a draft by ID with headers and snippet

Google Docs

Tool

Description

create_google_doc

Create a new document with optional initial content

read_google_doc

Read the full text content of a document

append_to_google_doc

Append text to the end of a document

get_google_doc_metadata

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).

  1. Push your code to a GitHub repository.

  2. Go to the Vercel Dashboard and create a new project from your repository.

  3. In the environment variables section, add the following variable:

    • Key: GOOGLE_TOKEN_JSON

    • Value: (Paste the exact contents of your local token.json file)

  4. Also add:

    • Key: VERCEL

    • Value: 1

  5. 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.server

Running 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-server

Project 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 deployment

License

MIT

Available Tools

9 tools
append_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
document_idYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentNo

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
subjectYes
body_typeNoplain

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
subjectYes
body_typeNoplain

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyNo
subjectNo
draft_idYes
body_typeNoplain

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A3.9/5.0
Disambiguation5/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    A 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.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Production-ready MCP server for Gmail, enabling AI agents to search, read, send, draft, and manage emails, labels, and attachments via the Google Gmail API.

Latest Blog Posts

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