[BUG] Gmail connector: get_thread with messageFormat=FULL_CONTENT returns only snippet, not full message body
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
The Gmail MCP connector's get_thread tool does not honor the messageFormat: FULL_CONTENT parameter. Regardless of whether FULL_CONTENT is explicitly requested, the response contains only the message snippet (first ~200 chars) without the full body.
This is distinct from (but possibly related to) #47847, where read operations fail entirely — in my case, get_thread succeeds but silently returns a degraded payload.
Note: I am NOT using Claude Code — I am using the Gmail connector from Claude.ai (web interface). I am filing this here because related Gmail connector issues (#47847, #40225, #46206, #48277) have been filed in this repo under the area:mcp / area:integrations labels.
Environment
- Interface: Claude.ai (web)
- Connector: Gmail (native claude.ai integration)
- Model: Claude Opus 4.7
- Date first observed: 2026-04-18
What's working
search_threads— returns thread metadata correctly (id, subject, sender, date, snippet)create_draft/list_drafts/list_labels— not tested today but documented as working
What's not working
get_threadwithmessageFormat: FULL_CONTENT→ returns identical payload to the default call (onlysnippet, no body)
Expected Behavior
Per the tool schema documentation:
FULL_CONTENT — Returns all information in "MINIMAL" plus the full body content of each message.
Calling get_thread(threadId=X, messageFormat="FULL_CONTENT") should return the complete message body (plain text or HTML payload), not just the snippet.
Actual Behavior
The response contains only:
idsnippet(truncated to ~200 chars)subjectsendertoRecipientsdate
The full message body is NEVER included, even with messageFormat: FULL_CONTENT explicitly passed.
Example Tool Response (actual output)
Request:
get_thread(
threadId="19d9f2ec02ec2880",
messageFormat="FULL_CONTENT"
)
Response (unchanged with or without FULL_CONTENT):
{
"id": "19d9f2ec02ec2880",
"messages": [
{
"id": "19d9f2ec02ec2880",
"snippet": "Monitoring Report - TS2025 192.168.10.190 | Report generato: 18/04/2026 08:00 | Finestra analisi: ultime 24h RIEPILOGO GENERALE [CRIT] Alert CRITICI 0 [WARN] Warning 12 [OK] OK 11 SERVIZI CRITICI [OK]",
"subject": "[WARNING] Monitoring TS2025 - 18/04/2026 08:00",
"sender": "monitoring-ts2025@example.com",
"toRecipients": ["..."],
"date": "2026-04-18T06:02:13Z"
}
]
}
No body, payload, parts, or equivalent field is present in the response object. The actual email body (visible in Gmail UI) contains many lines of monitoring details that are NOT returned by the tool.
Impact
- Any workflow that requires reading email content beyond the first ~200 chars is blocked
- Monitoring / reporting / email-analysis use cases are severely impacted: Claude can see that an email exists but cannot process its content
- Forces users to fall back to manual copy-paste, defeating the purpose of the connector
Troubleshooting already performed
- Verified that
messageFormatparameter is accepted (no schema validation error) - Tried
FULL_CONTENTand omitting the parameter entirely — identical result - Tested across multiple emails (different senders, sizes, MIME types) — same result for all
Hypothesis
The connector backend is likely ignoring the messageFormat parameter and always falling back to a MINIMAL-equivalent response shape. The schema advertises FULL_CONTENT as supported, but the implementation appears not to expand the response payload.
Related Issues
Similar but distinct symptoms:
- #47847 — thread read fails entirely (mine succeeds with partial data)
- #40225 — generic "Tool returned error result"
- #46206 —
label_threadmissinggmail.modifyscope - #48277 —
mcp-proxy.anthropic.com502 Bad Gateway
All of these were filed in the last ~2 weeks, suggesting a broader Gmail connector reliability regression.
What Should Happen?
Calling get_thread with messageFormat: "FULL_CONTENT" should return the complete email body (plain text, HTML, or MIME parts) in addition to the metadata fields already present in the MINIMAL response.
Specifically, the response should include a field such as body, payload, or parts containing the decoded message content, so that the caller can read and process the email's full text — not just the first ~200 characters that appear in snippet.
The current behavior makes the FULL_CONTENT option effectively a no-op.
Error Messages/Logs
No error message is surfaced. The call succeeds (HTTP 200-equivalent at the MCP layer) but the response payload is silently truncated: the body/payload field is simply absent from the response, regardless of whether `messageFormat: FULL_CONTENT` is passed or omitted.
This is a "silent degradation" failure mode — there is no stack trace or log to attach.
Steps to Reproduce
- In Claude.ai (web), connect the Gmail connector via Settings → Connectors → Gmail, completing the Google OAuth flow with "View your email messages and settings" scope granted.
- Ensure there is at least one email in the inbox with body content longer than ~200 characters (any newsletter, monitoring notification, or multi-paragraph email).
- Ask Claude to list or search for that email — the
search_threadstool will return the thread metadata correctly, including athreadId. - Ask Claude to read the full content of that email. Claude will call
get_thread(threadId="<id>", messageFormat="FULL_CONTENT"). - Inspect the tool response: the
messages[].snippetfield is present (~200 chars), but there is NObody,payload, orpartsfield containing the full message content. - Repeat step 4 without the
messageFormatparameter — the response is byte-identical, confirmingFULL_CONTENTis being ignored.
Minimal reproduction: any email body longer than the Gmail API snippet length (~200 chars) will demonstrate the issue. No special MIME type, attachment, or encoding is required — I reproduced it with plain-text system monitoring emails.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
N/A (Claude.ai web — not Claude Code)
Platform
Other
Operating System
Windows
Terminal/Shell
Other
Additional Information
Note on template fit: this bug report is about the Gmail connector accessible from Claude.ai (web interface), not Claude Code CLI. The fields "Claude Code Version", "Platform", "Operating System" and "Terminal/Shell" are required by the template but not fully applicable to a web-connector server-side bug.
The bug is reproducible from any OS/browser because it is a server-side defect in the Gmail MCP connector response serialization, not a client-side issue.
Filing here (repo anthropics/claude-code) per precedent set by issues #47847, #40225, #46206, and #48277 — all of which concern the same Gmail MCP connector and use the same area:mcp / area:integrations labels.
Suggested fix direction:
Inspect the connector's get_thread handler and verify that when messageFormat == "FULL_CONTENT", the underlying Gmail API call uses format=full (not format=metadata or format=minimal), and that the decoded payload.parts[].body.data (Base64URL) is included in the MCP response schema.
Happy to provide additional tool-call/response pairs if useful for debugging.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗