Skip to main content
Glama

Cooper Email

Update message labels

cooper_update_message
Idempotent

Use this when you need to change labels on a stored message, including marking it read. Requires auth. Works on a paused inbox, because this is triage and not a send. Inputs: inbox_id (required; inbox id, username, or email), message_id (required), add_labels (optional strings), remove_labels (optional strings). Mark read with remove_labels ["unread"]. You may also add "read". read and unread can be changed. Other system labels (inbox, sent, untrusted, auth_failed, owner, and SPF/DKIM/DMARC results) cannot be added or removed. Returns the updated message, including labels. A message in another account or workspace is 404.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
inbox_idYesInbox id (inb_…), username, or full email address owned by this key
add_labelsNoLabels to add. read and unread are allowed. System labels are not.
message_idYesMessage id (msg_…) from cooper_list_messages or cooper_search
remove_labelsNoLabels to remove. Pass ["unread"] to mark the message read.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=true, destructive=false, and the description correctly aligns with those (a label mutation, not a destructive one). It adds real value beyond the annotations: auth requirement, paused-inbox behavior, which system labels are immutable, the returned value, and 404 semantics for cross-account access.

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?

Dense but well front-loaded: purpose first, then auth/context, then per-parameter guidance, then constraints and errors. There is minor redundancy, as the immutable-system-label rule is repeated in the add_labels schema description, but every sentence contributes.

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?

With no output schema, the description supplies the return contract ('returns the updated message, including labels') plus auth, error, and label-constraint behavior. Nothing an agent needs to call this correctly appears to be missing.

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 goes further by stating the read/unread marking pattern and the constraint that other system labels (inbox, sent, untrusted, auth_failed, owner, SPF/DKIM/DMARC) cannot be added or removed — a constraint absent from the schema.

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 (change labels on a stored message) and explicitly includes the common sub-case of marking read. An agent can immediately distinguish this from neighboring tools like cooper_get_message or cooper_update_thread.

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 clear when-to-use context and notes it works on a paused inbox because triage is not a send, implicitly separating it from the send/reply tools. It stops short of naming nearby alternatives such as cooper_update_messages or cooper_get_message, so routing among label-related tools is left partly to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.