gmail-mcp-server
Server Quality Checklist
Latest release: v0.1.0
- Disambiguation4/5
Tools are mostly distinct: read/list/search handle retrieval with clear differences in scope, create_draft/send_draft separate drafting from sending, and apply_label handles labeling. One slight overlap exists between gmail_list_recent and gmail_search (both return compact metadata + snippets), though their intended use cases differ enough to disambiguate.
Naming Consistency5/5All tools follow a consistent gmail_verb_noun pattern (gmail_read_message, gmail_list_recent, gmail_create_draft, gmail_send_draft, gmail_apply_label, gmail_search). Naming is uniform, clear, and predictable throughout.
Tool Count5/5Six tools are well-scoped for a Gmail integration server. Each tool covers a distinct core Gmail operation (read, list, draft, send, label, search) without bloat or overlap, falling comfortably within the ideal 3-15 range.
Completeness3/5Core read, list, search, draft, send, and label workflows are covered, but there are notable gaps: no update/modify message tools (trash, archive, mark read/unread), no delete draft tool, and no task to list or manage threads as a whole. The label tool explicitly rejects system labels, meaning agents cannot archive or trash messages at all, which is a significant dead end for common email workflows.
Average 4.1/5 across 6 of 6 tools scored. Lowest: 3.4/5.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 1 commit in the last 12 weeks
- No stable releases found
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI status not available
Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.
If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.
MCP servers without a LICENSE cannot be installed.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read operation with no side effects. The description adds the behavior of returning the full message with plain-text body, which is useful context beyond annotations. It doesn't mention HTML body handling, attachments, or headers, which would be richer context, but with openWorldHint the agent is told not to assume completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with zero waste. It front-loads the verb and resource immediately. Every word earns its place, though it could arguably have added brief parameter detail without hurting structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness3/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema present, so return values don't need description coverage. However, with 0% schema description coverage on 2 parameters, the description leaves message_id semantics and account handling entirely to the agent's inference. For a straightforward read tool, this is adequate but not rich. openWorldHint partially mitigates completeness concerns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter-load. However, the description adds no parameter-specific explanation — it doesn't describe what message_id format is expected or what the account parameter does. With 2 params and 0% schema coverage, the description should compensate more but doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch one message in full, including its plain-text body' — a specific verb (fetch) targeting a specific resource (one message) with the scope of full content including body. It doesn't explicitly differentiate from siblings like gmail_search or gmail_list_recent, but the singular-message fetch is distinct enough from those list/act tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for retrieving a specific single message by ID ('one message in full'). It doesn't explicitly state when to use vs alternatives, but the sibling tools (list, search, draft/send/label) are clearly different action types, so the use case is reasonably implied. No exclusions or when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful context: it intentionally omits bodies, returns metadata+snippet only, and explicitly states it doesn't decide urgency. That adds value beyond annotations, though it doesn't detail return format specifics despite an output schema being present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs with clear front-loading: the first sentence states the purpose, and the second paragraph clarifies scope and philosophy. No wasted words. Could trim the philosophical note about not deciding urgency, but it does convey the tool's division of responsibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, open-world list tool with 3 optional parameters and an existing output schema, the description is reasonably complete: it states what's returned (metadata+snippet, labels like IMPORTANT/STARRED/UNREAD), why it's cheap, and its intended use case. Slight gap: parameter semantics for account/max_results could be clearer, and it doesn't mention pagination, but for this tool class the coverage is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the 3 parameters have no descriptions. However, the description mentions query-relevant concepts ('in:inbox newer_than:2d' default is in the schema, labels like IMPORTANT/STARRED/UNREAD are mentioned), giving the agent signal about what the query/max_results parameters control. It adds modest value but doesn't fully document each parameter's semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('fetch') + resource ('recent inbox messages') with a clear qualifier ('Fast, compact... for periodic triage'). It clearly distinguishes from sibling gmail_search by emphasizing 'recent inbox for triage' and noting it returns metadata+snippet only, differentiating it from gmail_read_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this is for 'periodic triage' and periodic scheduled calls, implying the use case. It establishes the when-to-use context (cheap scheduled fetch) but doesn't explicitly name alternatives or say when NOT to use it, though the distinction from read_message/search is implied by the metadata-only framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly lists exact return fields and explicitly states no message bodies are returned, which is strong behavioral disclosure. readOnlyHint=true and openWorldHint=true align with the read/search nature described, no contradiction. It could add pagination or max_results semantics but annotations already establish the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, well-structured sentences. First defines the core function and syntax; second enumerates return fields and directs to the sibling tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has an output schema which reduces burden on description for return values. Tool is conceptually simple (search + metadata list). The description covers purpose, syntax, return fields, and alternative tool. Slight gap: no guidance on pagination/cap on results, but for a simple search tool this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides only names and types. The description explains the 'query' parameter (Gmail search syntax examples) well and names the returned fields. However, it doesn't clarify the meaning or format of 'account' or how max_results behaves beyond its default. The query param is well-explained with an example, but not fully compensating for the schema's complete lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (search) + resource (messages) + clear indication of syntax type. Explicitly distinguishes from siblings by noting it returns metadata only and listing gmail_read_message as the full-body alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
States it returns compact metadata with no bodies and explicitly points to gmail_read_message for full body, giving clear context for when to use this vs the read sibling. However, no guidance on when search is preferred over gmail_list_recent or gmail_apply_label, though openWorldHint suggests broad querying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, meaning the agent knows this is a non-destructive write operation (creating a draft is not destructive). The description adds the useful 'never sends anything' behavioral trait, which is valuable context beyond annotations. However, it doesn't mention persistence behavior, quota implications, or return value details beyond what the output schema provides. With annotated safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely efficient - two short paragraphs, three sentences total. The first sentence states core purpose and the critical 'never sends' caveat. The second paragraph adds the thread_id operational detail. Zero wasted words, information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (which handles return-value documentation) and moderate complexity with 5 params. The description covers the primary behavior (creating drafts), the non-sending guarantee, and the thread reply mechanism. Remaining gaps are minor - the account parameter is undocumented and there's no explicit statement about how the created draft becomes usable with gmail_send_draft, though this is implied by the sibling relationship. For a draft-creation tool, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden for parameter meaning. The description explicitly explains thread_id semantics (for replies within a thread, auto-header generation), which the schema alone wouldn't convey. The required params (to, subject, body) are self-evidently named, but the optional thread_id and account parameters benefit from the explanation. The description partially compensates for the 0% coverage, though it doesn't address the account parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Create' plus resource 'a draft email' is specific and clear. It explicitly notes 'This never sends anything', which distinguishes its scope from send operations. The sibling tool gmail_send_draft exists, and the description clearly differentiates this tool's purpose of only drafting, not sending.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it (to create drafts that never send). It even provides guidance on the optional thread_id usage for replies within existing threads, including the benefit it provides (auto In-Reply-To/References headers). While it doesn't explicitly name gmail_send_draft as the alternative, the 'never sends anything' statement clearly signals this is the drafting counterpart and distinguishes use versus the send tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly flags 'real, irreversible send,' which adds meaningful warning beyond the destructiveHint=true annotation. It clarifies the irreversibility consequence, though it could add returning message ID or delivery confirmation context, but with the destructiveHint annotation present the bar is already well met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, tightly scoped sentences. Front-loaded with the core action, immediately followed by the key warning, then necessary workflow guidance. Zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, 1 required) and has an output schema, so the burden is reduced. The description covers the core action, the irreversible consequence, and the prerequisite workflow, giving the agent everything needed to safely invoke it. Minor gap: no explicit mention of error cases (e.g., sending an already-sent draft), but this is acceptable for a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not document the draft_id parameter format or the account parameter at all. However, draft_id is self-explanatory and required; account is nullable with a default, and its semantics are intuitive given the Gmail domain. Baseline 3 applies as schema documents the parameters structurally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Send a previously created draft.' Explicitly notes irreversibility. Strongly distinguishes from siblings by explaining there is no alternative that sends arbitrary text directly, differentiating from gmail_create_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the prerequisite workflow — a draft must be created via gmail_create_draft first, and that there is no tool for sending arbitrary text. This directly addresses when to use this tool and references the sibling alternative, making selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds meaningful context: it states the tool auto-creates labels (creating it first if needed), that system labels get rejected, and that it returns the label id applied. These add behavioral detail beyond the annotations, though the rejection specifics could be seen partly implied by the idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences totaling roughly 50 words, all substantive. The first sentence declares purpose and auto-creation; the second explains exclusions and return value. Zero filler, front-loaded with the core action, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 params, output schema present, idempotent annotations provided), the description compactly covers the essential behavioral contract: what it does, what it rejects, auto-creation behavior, and return value. The output schema handles return structure, and the description covers the restrictions an agent needs to avoid misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 4 parameters. It clarifies label_name semantics (must be a user-created label, auto-created if needed) and mentions the return value. However, it doesn't explicitly address message_id format or the create_if_missing parameter behavior in detail, though the description's 'creating it first if needed' implies create_if_missing semantics. With an output schema present and this level of guidance for a moderately simple tool, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Attach a custom label to a message') with a specific verb+resource combination. It distinguishes itself from siblings by explicitly noting the scope (custom labels only, not system labels) and the auto-creation behavior, which sets it apart from other gmail tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines5/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when NOT to use this tool: system labels are rejected, so it cannot trash, spam, or archive. This is a clear exclusion criterion that prevents misuse, and it implicitly tells the agent which alternatives (sibling tools) to consider for system-label operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
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/hjerkic/gmail-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server