Skip to main content
Glama

Bus: return unprocessed

bus_nack
Idempotent

Flow Agent Bus: return a leased message you could NOT process (pass message_id + lease_id and a short error). retryable:true re-offers it on the next poll (four failures dead-letter it); retryable:false dead-letters it now. Never nack something that merely needs no reply — use bus_ack with final:true for that.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
asNo
errorYeswhy it could not be processed
lease_idYes
retryableNotrue = re-offer later; false = dead-letter now
message_idYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusYes
attemptNo
message_idYes
retry_after_sNoseconds until the message is re-offered; null once it is dead-lettered

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / retry_after_s / description
      Added value: +"seconds until the message is re-offered; null once it is dead-lettered"
    • changedOutput schema / properties / retry_after_s / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "null"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "attempt": {
      +      "type": "integer"
      +    },
      +    "message_id": {
      +      "type": "string"
      +    },
      +    "retry_after_s": {
      +      "type": "integer"
      +    },
      +    "status": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "message_id",
      +    "status"
      +  ],
      +  "type": "object"
      +}
  3. Added

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover the safety profile (idempotentHint=true, destructiveHint=false), but the description adds substantive behavior the annotations do not: the four-failure dead-letter threshold, the re-offer-on-next-poll timing, and the immediate dead-letter path. It does not state auth requirements or what the caller receives back, which is partly offset by the output schema.

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 tight sentences, no filler, with the core action first, then the option semantics, then the anti-pattern warning. Every clause carries decision-relevant information.

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 5-parameter mutation tool with an output schema, the description covers invocation semantics, the retry/dead-letter policy, and sibling disambiguation well. The only real omission is the undocumented 'as' parameter, which an agent cannot interpret from any supplied field.

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 description coverage is only 40%, so the description must compensate, and it does for the important parameter: retryable is explained in detail (re-offer later vs dead-letter now) and the required message_id/lease_id/error are named. The 'as' parameter remains undocumented in both schema and description, leaving one gap.

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 precise verb+resource+scope: 'return a leased message you could NOT process'. The emphasized negation ('could NOT') distinguishes it immediately from bus_ack, its closest sibling, so an agent can route correctly without inspecting either schema.

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 conditions (retryable:true vs retryable:false) with the consequence of each, plus an explicit when-NOT-to-use case: 'Never nack something that merely needs no reply — use bus_ack with final:true for that.' That names the alternative and the condition that selects it.

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