Skip to main content
Glama

Read message

get_message_content
Destructive

Read a message's full text and attachments; set allow_mark_read=true with consent to open received messages, since sent messages do not require it. Archived messages cannot be opened.

Instructions

Get a message's full text and attachments. Librus marks a received message read when it is opened, so that needs allow_mark_read=true with the user's consent; sent messages do not. Archived messages cannot be opened.

Input Schema

NameRequiredDescriptionDefault
message_refYesA message's reference from get_messages.
account_aliasYesLogin alias from list_accounts.
allow_mark_readNoConsent to mark a received message read.

Output Schema

NameRequiredDescriptionDefault
dataYes
backendYes
contextYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv2.3.1
    • changedInput schema / $defs / MessageReferenceInput / properties / account / pattern
      Previous value: -"^(?:[^\\s\\x00-\\x1f\\x7f]|[^\\s\\x00-\\x1f\\x7f](?:[^\\s\\x00-\\x1f\\x7f]| )*[^\\s\\x00-\\x1f\\x7f])$"New value: +"^[^\\s\\x00-\\x1f\\x7f](?: *[^\\s\\x00-\\x1f\\x7f])*$"
    • addedInput schema / properties / account_alias / description
      Added value: +"Login alias from list_accounts."
    • changedInput schema / properties / account_alias / pattern
      Previous value: -"^(?:[^\\s\\x00-\\x1f\\x7f]|[^\\s\\x00-\\x1f\\x7f](?:[^\\s\\x00-\\x1f\\x7f]| )*[^\\s\\x00-\\x1f\\x7f])$"New value: +"^[^\\s\\x00-\\x1f\\x7f](?: *[^\\s\\x00-\\x1f\\x7f])*$"
    • addedInput schema / properties / allow_mark_read / description
      Added value: +"Consent to mark a received message read."
    • addedInput schema / properties / message_ref / description
      Added value: +"A message's reference from get_messages."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Despite readOnlyHint=false and destructiveHint=true, the description explains exactly what the side effect is (Librus marks a received message read on open) and how to gate it behind user consent. It also discloses a hard failure mode (archived messages cannot be opened), which annotations alone could not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the consent requirement, then the failure condition. No filler and no repetition of schema content.

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?

Output schema exists so return values need not be explained, and the mutation/consent and archived constraints are covered. It leaves mild ambiguity about whether attachment bytes are included or must be fetched via download_attachment, which matters given the sibling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: allow_mark_read only matters for received messages and is a no-op for sent ones. The archived constraint also implicitly constrains the nested archived flag.

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?

States a specific verb and resource (retrieves a message's full text and attachments), clearly distinct from get_messages (listing) and download_attachment (binary fetch). An agent can immediately tell what this returns.

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

Usage Guidelines4/5

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

Gives concrete conditional guidance: allow_mark_read=true is required for received messages but not sent ones, and archived messages cannot be opened. It does not explicitly name sibling alternatives or state that a message_ref must first come from get_messages, but that prerequisite is documented in the schema.

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