Read a message
email_get_messageOne message in full: text, HTML and attachment names. Free. Free.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
email_get_messageOne message in full: text, HTML and attachment names. Free. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Changes observed during successful MCP inspections.
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint false, so safety is covered structurally. The description's real contribution is disclosing the response shape (text, HTML, attachment names), which is useful since there is no output schema. 'Free. Free.' looks like an attempt to signal cost, but the duplication makes it ambiguous rather than informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is tight and front-loads the return content, which is good. The trailing 'Free. Free.' is a literal duplicate that adds no information and makes the definition look sloppy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-object fetch with no output schema, describing the returned fields is genuinely needed and is done, though attachment handling (names only, not content) could be clearer about how to retrieve actual files via email_save_attachments. The undefined identifier parameter and the missing relationship to thread/listing tools leave real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, message_id, and schema description coverage is 0%. The schema only constrains it to 36 characters; the description does not say whether that is a UUID, where to obtain it (email_list_messages?), or what happens on an invalid ID. With a parameter carrying no description anywhere, the description should compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb is implicit in the name but the description does specify the resource and what is returned: one message in full with text, HTML and attachment names. That is more specific than the title 'Read a message'. It does not differentiate from close siblings such as email_get_thread or email_list_messages, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No stated conditions for when to call this versus email_get_thread (thread context), email_list_messages (discovery), or the google_mail_read/m365_mail_read counterparts. The repetition of 'Free' hints at a cost consideration but never explains when that matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Add one secure layer between your agents and this server.