Skip to main content
Glama
gmail-mcp

gmail-mcp

read_emails_full

Fetch multiple Gmail messages and save full results to a local file, avoiding inline output limits for large batches.

Instructions

Read multiple emails and always save the full results to a file.

Unlike read_emails() which returns data inline, this tool always writes
to disk and returns only a compact confirmation — making it safe to use
even for hundreds of emails without hitting MCP output limits.

Required:
  message_ids (list[str]) — Gmail message IDs to fetch.
  save_path (str) — local path to save the file. Must be inside your
    home directory (path traversal is rejected).

Optional:
  format (str, default="md") — output format. One of:
    "md"   — Markdown with summary table + full body per email
    "json" — pretty-printed JSON
    "jsonl" — one JSON object per line
    "csv"  — complete fields, text/HTML bodies, identifiers and errors

Returns on success:
  {"ok": true, "data": {
    "saved": true,
    "path": "C:\Users\...\my-emails.md",
    "count": 49,
    "format": "md",
    "total_size_bytes": 184523
  }}

Workflow note: Use this instead of read_emails() when you know the
  result will be large. Always saves — never returns data inline.

Input Schema

NameRequiredDescriptionDefault
formatNomd
save_pathYes
message_idsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that the tool never returns data inline, always writes to disk, returns only a compact confirmation to avoid MCP output limits, and enforces a home-directory path constraint with traversal rejection. It also spells out the success payload. The gap is failure behavior — it doesn't say whether an existing file at save_path is overwritten, appended to, or rejected, nor what happens with invalid message IDs.

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 critical distinguishing fact is front-loaded in sentence one, and the required/optional/returns blocks make it scannable rather than a prose wall. Slight redundancy exists — 'Always saves — never returns data inline' repeats the opening sentence and the read_emails comparison — but each section otherwise earns its place.

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 3-parameter write-to-disk tool with no annotations and no output schema, the description supplies the return shape, the format options, and the safety constraint on paths, which is nearly everything an agent needs. It stops short of error/partial-failure behavior and overwrite semantics, which matter for a tool that writes files.

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%, so the description must compensate entirely, and it does: message_ids is identified as Gmail message IDs, save_path is described with its security constraint, and format gains four enumerated values with per-value output semantics that the schema lacks entirely (no enums in schema). This is meaning genuinely added beyond the structured 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?

Opens with a specific verb and resource ('Read multiple emails') plus the defining behavioral trait ('always save the full results to a file'), and immediately contrasts with the sibling read_emails(). An agent can distinguish it from read_emails, read_email, and list_emails without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative explicitly ('Unlike read_emails() which returns data inline') and states the selecting condition twice: 'safe to use even for hundreds of emails' and the workflow note 'Use this instead of read_emails() when you know the result will be large.' When-to-use, when-to-prefer-the-sibling, and the rationale are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.