[BUG] gmail_read_message has now been removed
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?
It appears that the gmail map has now removed the gmail_read_message tool. At this point, there is no way to get data from an email for use. The get_thread tool does not retrieve much more than snippets and has broken basically all of my skills. I wanted to check if this is an issue for others
What Should Happen?
Claude should be able to read email, parse data to launch skills in next steps. Continually fails to get data stating that the gmail_read_message is no longer listed as a tool
Error Messages/Logs
WHAT CHANGED:
The Gmail connector (UUID: 1ec2656e-2aa2-4ae2-beb6-b7abf9f7f0a9) previously exposed two tools called "gmail_read_message" and "gmail_search_messages." These tools have been replaced with "get_thread" and "search_threads." The new "get_thread" tool does not return message bodies or attachment content, even when called with messageFormat: "FULL_CONTENT." It only returns metadata (date, sender, subject, snippet, recipients).
WHAT THIS BROKE:
I have a flight confirmation processor skill that monitors a Gmail label for airline booking emails, extracts flight data from the email bodies and attachments, and updates a travel spreadsheet. This skill has been running successfully across dozens of sessions since late March 2026. As of today (April 15, 2026), it no longer works because the connector cannot read email content.
EVIDENCE:
- Multiple prior sessions (visible in session history) successfully used gmail_read_message on the same connector UUID to read full email bodies and attachments from airlines including United, Delta, Southwest, Alaska, and Sabre/GDS confirmations.
- The current session's get_thread tool returns identical truncated output regardless of whether FULL_CONTENT is specified or omitted.
- The connector shows as connected and enabled in settings. Reconnecting did not resolve the issue. Multiple fresh sessions exhibit the same behavior.
IMPACT:
This is a complete blocker for any workflow that depends on reading email content, which is arguably the core purpose of a Gmail connector.
REQUEST:
Please restore the ability to read full message bodies and attachments, whether through restoring gmail_read_message or fixing get_thread to actually return full content as its documentation claims.
Steps to Reproduce
Simply ask Claude if they can access the gmail_read_message tool
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
Claude 1.2581.0 (f10398) 2026-04-14T17:16:40.000Z
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
Showing cached comments. Read the full discussion on GitHub ↗
15 Comments
Found 1 possible duplicate issue:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
The above issue is not the same issue at all other than the similarity of the MCP not working properly, but they are not the same issue
Confirming this bug from an independent use case. I filed #50298 before noticing #48713 — closing mine as duplicate and +1-ing this one.
My context is different from the flight parser but hits the same root cause: a small business IT admin workflow that monitors 9 servers via daily email health reports. Each server sends a structured report at 07:00–08:00 with
[CRIT] / [WARN] / [OK]counts in the body.search_threadscorrectly returns the thread metadata (and Claude can see that warnings increased from 8 to 12 on one server), but without the email body Claude cannot tell which warnings — making the monitoring workflow essentially blind.Reproduced today (2026-04-18) on Claude.ai (web), Opus 4.7 model, Gmail connector.
get_threadwithmessageFormat: "FULL_CONTENT"returns identical payload to the default call — onlysnippet,subject,sender,date,toRecipients. Nobody,payload, orpartsfield.Fully agree with the original request: please restore full body access, either by bringing back
gmail_read_messageor by makingget_thread'sFULL_CONTENTbehave per its documented spec.i am not a github expert, but i am bumping this because i am also facing the same problem and it broke all my workflows :(
Follow-up on my 2026-04-18 comment — ran more tests today; the bug behaves inconsistently across messages, and I wanted to share what I observed and what I could NOT verify.
Setup: same as 2026-04-18 (Claude.ai web, Opus 4.7, same Gmail connector, same account). Called
get_threadwith messageFormat: "FULL_CONTENT" on 6 recent inbox messages.Result: 2 out of 6 returned a populated
plaintextBodyfield. The other 4 returned only metadata (snippet, subject, sender, date, recipients). No error, no warning — just the field silently absent.Observed correlation (not confirmed as root cause): the two messages that succeeded were both multipart/alternative messages with a dedicated text/plain part. The four that failed all appear to be single-part text/html messages with no text/plain alternative. I could not inspect the raw MIME from the connector side to confirm this, so the correlation is based only on the typical structure of those senders.
Limits of this report:
payload/partstree from the connector, so the MIME hypothesis is inferred, not verified.Net effect is the same as in my 2026-04-18 comment: for a non-trivial share of inbox messages,
plaintextBodyis not returned at all, so any skill that needs to parse email content is blocked on those messages. The original report from @cheekyjeremy still stands.Happy to provide more data points if useful.
Gmail MCP can't read my mails with full content last week. And my skill became useless since then. I have to switch to Gemini when I need to read mails.
While it did break my workflows, allowing the chrome MCP allows cowork to go in and process my Gmail that way. Not ideal, but the timeline is more or less the same
Running into a similar issue. Here is the analysis I put together.
Gmail Connector Bug:
get_threadreturns no body content for HTML-only emailsSummary
The Gmail connector's
get_threadtool does not return body content for HTML-only emails. This is a confirmed and reproducible limitation.---
Test 1: Forwarded HTML-only Email (Works)
Subject:
Fwd: [Company]/[App] Training: Call recording and analysis is readySender:
user@company.com(forwarded fromdo-not-reply@gong.io)Request
Result
Returns 7 fields including
plaintextBodywith the full email body.Why it works: When the email was forwarded, the sender's email client created a new multipart message that included a proper plaintext MIME part. The connector can read that.
---
Test 2: Original Gong Email (Broken)
Subject:
A call with [Company] - shared by [User]Sender:
do-not-reply@gong.ioRequest
Raw Response
Result: 6 fields only — no
plaintextBody, nohtmlBody, no body content of any kind.---
Conclusion
The connector cannot read HTML-only emails. When an email has no plaintext MIME part (as is the case with direct Gong notification emails),
get_threadreturns only metadata with no body content. There is nohtmlBodyfallback field.Expected Behavior
get_threadwithmessageFormat: "FULL_CONTENT"should return body content for all emails, including HTML-only ones — either via anhtmlBodyfield or by stripping the HTML to plaintext as a fallback.Workaround
Having the email forwarded by a human creates a new multipart message with a plaintext part that the connector can read. This is not a practical solution.
Additional Context
gmail_read_messagetool reportedly returned body content for these same emailssearch_threadstool correctly returns snippets for HTML-only emails — the issue is specific toget_threadnot providing full body contentI am not an expert in this field but would like to share that I have the same issue. And this is part of what Claude explains to me.
I can confirm the issue now. The original session used a tool called gmail_read_message which accepted a messageId and returned the full email body. That tool has been replaced in the updated Gmail connector — the current get_thread tool claims to support FULL_CONTENT but doesn't actually return the body text.
Unfortunately, this is a connector limitation I can't work around with the current tools. Here's what I'd suggest:
So due to getting no update from Anthropic on a fix for this, our company had to move onto alternatives. Recently OpenAI released the ChatGPT agents which also integrate with Gmail and are a perfect drop in replacement for our workflows.
Just a tip for those waiting on an update
I hope they fix this, we had various skills and tasks running in Cowork for our business, all of them now rendered useless.
I think I am also running into this - longer gmail threads are not read fully which makes scheduled task "stay on top of things" useless.
Seeing this on an HTML-only transactional email. get_thread with messageFormat: FULL_CONTENT returns only the 6 metadata fields — no body, no htmlBody, no plaintextBody. The email renders fine in Gmail UI and search_threads returns the snippet correctly, so the connector is reaching the message; get_thread just isn't surfacing the body.
This matches the pattern described by @cheekyjeremy and the HTML-only analysis in the comment above — when there's no plaintext MIME part, the connector appears to return nothing rather than falling back to htmlBody.
Adjacent ask: expose a tool to fetch attachment bytes by attachmentId
Posting here rather than opening a new issue since this thread already covers attachment access in the Gmail connector regression.
In the current claude.ai Gmail connector, get_thread with messageFormat: FULL_CONTENT does return attachmentIds and attachment metadata (filename, mimeType) on messages. What's missing is a companion tool to actually retrieve the attachment bytes — the equivalent of Gmail API users.messages.attachments.get.
Use case. I run a recurring "triage inbox" workflow where Claude reads emails I've labeled, classifies them against an ongoing work tracker, and proposes file-system updates to a markdown-based project. Attachments (PDFs, flowcharts, scoping documents) routinely need to land in a specific project folder on disk. Today the workflow stops at "you'll need to download this manually and drop it in engagements/<slug>/" — which defeats the purpose of automating the triage.
What I'm asking for. A tool roughly shaped like:
get_message_attachment(messageId, attachmentId) -> { data: base64, mimeType, size }
Or any equivalent that lets Claude resolve the attachmentIds already surfaced in get_thread responses. Saving to a local path via the existing file tools would handle the rest.
Why not run a self-hosted Gmail MCP instead. My organization (Google Workspace) restricts personal OAuth apps and Google Cloud project creation, so registering a separate OAuth client for a community Gmail MCP server isn't viable. The claude.ai-hosted connector is the only path that works in this environment — which is why the gap is load-bearing for me rather than just inconvenient.
Precedent: a parallel ask exists for the Microsoft 365 connector in #30533. Same shape of gap, same use case.
Happy to file this as a separate feature request if that's preferable to maintainers — flagging it here first because the regression discussed in this issue already touches attachment access.
Closing for now — inactive for too long. Please open a new issue if this is still relevant.