read_emails
Fetch full content from multiple Gmail messages in one request, bundling API calls into batches and saving large results to a file with a compact summary.
Instructions
CHOICE HINT: When the user asks to "read", "show", or "fetch" content from
multiple emails (e.g. "read these 5 emails", "show me the latest 3 emails"),
ALWAYS prefer this tool over making N calls to read_email(). It bundles all
Gmail API calls into bounded HTTP batches.
Fetch full content of multiple emails in a single MCP request.
Uses googleapiclient.http.BatchHttpRequest — calls are bundled
into batches of up to 100 per HTTP round-trip.
Handles up to 100 messages per call automatically.
Optional:
save_to_file (bool, default=False) — force save all results to a
.md file regardless of size. Useful for large fetches.
max_chars (int, default=30000) — if estimated output exceeds this,
auto-saves to .md and returns a compact summary with the file path.
Returns on success (small):
{"ok": true, "data": {
"requested": N, "succeeded": N, "failed": 0,
"results": [{"id": "...", "ok": true, "data": {...}}, ...]
}}
Returns on success (large / save_to_file):
{"ok": true, "data": {
"saved": true,
"path": "C:\Users\...\gmail-mcp\emails\2026-05-11-piraeus-49.md",
"count": 49,
"size_bytes": 184523,
"summary_table": "## Summary
| # | Date | From | Subject | ...|", "requested": 49, "succeeded": 49, "failed": 0, "results": [{"id": "...", "ok": true, "data": {"date": "...", "from": "...", "subject": "...", "snippet": "...", "labels": [...]}} ...] }}
Workflow note: Use this instead of N calls to read_email() to bundle
all fetches into a single MCP request. Each result has the same
shape as a read_email() response.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| max_chars | No | ||
| message_ids | Yes | ||
| save_to_file | No |