Skip to main content
Glama

Report what happened to a message

report_send
Idempotent

Report one outbox message: sent (final: the person moves to the next step; reporting sent twice is fine, a different second report is 409 already_reported), refused_cap, refused_unsigned or failed_transient (the message stays in To send and gives its cap unit back), refused_suppressed (the person is suppressed and leaves the campaign). A later bounce is not a report: use add_suppression with reason bounced. Requires the manage_campaigns scope.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "campaign_id": "<campaign_id>",
      "email_id": "<email_id>",
      "outcome": "<outcome>"
    },
    "name": "report_send"
  }
}

Input Schema

NameRequiredDescriptionDefault
reasonNoShort reason for a refusal.
outcomeYessent, refused_cap, refused_unsigned, failed_transient or refused_suppressed.
email_idYesThe email_id from get_outbox.
campaign_idYesCampaign id.
provider_idNoThe sender's own message id, when it has one.
idempotency_keyNoOptional. Repeating a call with the same key and the same arguments returns the first result instead of writing again, so retries are safe.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the idempotentHint/destructiveHint annotations, the description discloses the downstream state effect of every outcome: 'sent' advances the person, refused_cap/refused_unsigned/failed_transient keep the message in To send and refund the cap unit, refused_suppressed removes the person from the campaign. It also names the auth requirement (manage_campaigns scope) and the 409 conflict case. It stops short of describing the response payload or what happens to provider_id/idempotency_key interactions, keeping it at a 4.

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 purpose is front-loaded and every clause carries information; nothing is filler. The heavy use of parentheticals makes it denser than ideal to parse, but the compression is purposeful rather than padded.

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?

For a six-parameter mutation with no output schema, the description covers state effects, the error case, scope requirements and the alternative tool, which is nearly everything an agent needs to call it correctly. The only gap is the absence of any hint about what the call returns on success.

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 earns an extra point by attaching consequences to each enum value of the required 'outcome' parameter and by explaining the retry semantics behind idempotency_key ('reporting sent twice is fine'). It adds no information about 'reason' or 'provider_id' beyond 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?

The description opens with a specific verb and resource ('Report one outbox message') and immediately enumerates the exact outcome values it accepts, so the agent knows precisely what the tool does. It is clearly distinguishable from siblings like get_outbox (read) and add_suppression (bounce handling).

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?

It gives explicit when-to-use guidance for each outcome branch, states that repeating 'sent' is fine but a different second report returns 409 already_reported, and explicitly routes out-of-scope cases elsewhere: 'A later bounce is not a report: use add_suppression with reason bounced.' Both the condition and the named alternative are provided.

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.

Resources