Skip to main content
Glama

Get email content

get_email_content
Read-onlyIdempotent

Reads up to 10 emails from local copy, returning headers, plain-text body, attachment info, optional sanitized HTML and download links. Accepts email IDs or a thread ID.

Instructions

Reads up to 10 emails already synchronized into MailFathom's local mailbox copy, in one call: for each one its normalized headers, the plain-text body, optionally a sanitized HTML body, and every attachment it carries described by file name, media type, and size. Name what to read in exactly one of two ways — storedEmailIds for particular emails, or threadId for a whole conversation, which returns its messages in the conversation's own order and names any it could not carry in unreadThreadMessages. A call naming both, or neither, is refused. Every email returned also carries the conversation it belongs to, with the other messages in it named rather than reproduced. Reads the local copy only: it never contacts a mail server, never downloads mail, and never marks mail as read. Each email is answered for separately, so one this deployment cannot serve does not discard the others. Bodies are bounded per email and by a budget shared across the whole call, and a scanned deployment bounds what it analyzes as well; each body says which of those bounds cut it in truncatedBy, and only readCharacterBudget is the one that returns more when fewer emails are named at once. No response ever carries an attachment's bytes: set includeAttachmentDownloadLinks to receive, for each file, a short-lived URL in downloadUrl that fetches it over HTTP with no credential attached, and downloadState says why one was not issued when it was not. Where the deployment scans mail for sensitive content, what a message's author wrote is scanned on every call and returned with each detection replaced by a [redacted:category] marker: the marker means material of that kind stood there and was withheld, it is never message text, and asking again returns the same marker. Nothing stored is rewritten by it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
threadIdNoThe threadId a listing, a search, or an earlier read returned, to read that whole conversation instead of naming its messages. Its messages come back in the conversation's own order, bounded to 10 per call, and unreadThreadMessages names the rest so a second call asks for them directly. Omit it entirely when naming storedEmailIds instead.
storedEmailIdsNoThe storedEmailIds a listing or a search returned, at most 10, each named at most once. Each is a UUID and does not change when the mail server renumbers or moves the message. Results come back in the order given, and the call is refused rather than truncated when it names more than 10. Omit it entirely when naming threadId instead.
includeSanitizedHtmlNoWhether to also return the sanitized HTML body of each email. Omit it unless the markup itself matters: the plain text is the representation to read from, HTML costs a sanitization pass, and it draws on the same character budget as the plain text. An email carrying no HTML part returns none either way.
includeAttachmentDownloadLinksNoWhether to mint a link for fetching each attachment, rather than only describing it. Omitted still returns every attachment's file name, media type, and size, which is what an ordinary read needs to decide whether a file is worth fetching. Each link is a bearer capability: it names one file, it expires within minutes, and anyone holding the URL can fetch that file without a credential — so ask for links only when the files are what you are after, and do not store or log what comes back. The response size is the same either way.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
emailsYesOne entry per email the call named, in the same order. An email named once appears once: the call is refused rather than served twice when an identifier is repeated. A call that named a thread is answered with that thread's messages in the thread's own order instead.
unreadThreadMessagesYesFor a call that named a thread longer than one read serves: the storedEmailIds of that thread's remaining messages, in the thread's own order. Ask for them directly in a second call. Empty for every call that named its emails itself.
Install Server

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses significant non-obvious behaviors: per-email independent success, body/budget truncation via truncatedBy, no attachment bytes in responses, short-lived bearer download URLs, redaction of sensitive content with stable [redacted:category] markers, and that 'Nothing stored is rewritten by it.'

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 description is front-loaded with the core purpose and every paragraph is information-dense, but it is a long single block of text and repeats some details already present in the input schema, such as the 10-email cap and URL expiration. It would benefit from light structuring, though no sentence is purely filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and annotations, the description fully equips an agent: it covers invocation constraints, local-only behavior, partial success, truncation, attachment-link security, redaction semantics, and the guarantee that nothing is rewritten. An agent can decide safely whether and how to call this tool.

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?

Although the schema already has 100% parameter descriptions, the tool description adds behavioral meaning: exactly one of storedEmailIds or threadId must be supplied, more than 10 storedEmailIds causes refusal rather than truncation, includeSanitizedHtml costs an extra sanitization pass on the shared character budget, and includeAttachmentDownloadLinks mints expiring credential-free URLs without changing response size.

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?

The first sentence states a specific verb+resource: it 'Reads up to 10 emails already synchronized into MailFathom's local mailbox copy' and enumerates the returned content (headers, plain-text body, optional HTML body, attachment metadata). This clearly distinguishes it from sibling tools like list_emails or search_emails, which are for finding or listing rather than reading full email content.

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?

The description gives explicit when-to-use rules: use storedEmailIds for particular emails or threadId for a whole conversation, and states that a call naming both, or neither, is refused. It also clarifies that the tool never contacts a mail server, so it should not be used when live mailbox access or marking-as-read behavior is expected.

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

Other Tools

Latest Blog Posts

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/Krzysztof318/MailFathom'

If you have feedback or need assistance with the MCP directory API, please join our Discord server