AMQP 0.9.1 (RabbitMQ) backend binding plugin for mcpg. Publishes messages and runs request/reply (RPC) over a broker as MCP tools/resources — the message body is CEL-computed from the tool arguments, over a reused lapin connection (rustls TLS). Complements the kafka/nats backends.
Three tools with verb-based names (amqp_publish, amqp_rpc, amqp_get) and reasonable descriptions (50-100 chars each). However, critical gaps: parameter descriptions are present but minimal (10-30 chars); no output schema documentation visible; no error handling guidance; no parameter constraints (enums, ranges); descriptions lack WHEN/WHY context for LLM selection. Tool names are clear but descriptions do not explain prerequisites, side effects, or recovery paths. No evidence of idempotency markers or confirmation patterns for destructive operations (publish/rpc are WRITE operations).
Pull one message from a queue (auto-acked). Returns the message, or null when the queue is empty.
Publish a message (fire-and-forget, with a publisher confirm + mandatory routing check). Returns whether it was accepted and routed.
Request/reply (RPC): publish with reply_to + correlation_id, then await the correlated reply on a private exclusive queue, bounded by timeout.
No output schema documentation. Code shows AmqpOutcome struct with published/message/found fields, but tool definitions do not expose this schema to the LLM. LLMs cannot plan downstream calls or extract fields without documented return types.
Parameter descriptions are too brief (10-30 chars). 'Target exchange' and 'Routing key' lack context on when to use empty vs populated values, format constraints, or dependencies. LLMs cannot infer valid inputs from minimal descriptions.
No error handling guidance. Code shows multiple failure modes (channel creation, confirm_select, publish nack, unroutable message, timeout) but tool descriptions do not explain what errors mean or how to recover. LLMs receive raw error strings with no actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
No parameter constraints. 'exchange' and 'routing_key' accept free-form strings with no enum, pattern, or length limits. 'timeout' (integer) has no min/max bounds, LLMs could pass negative or absurdly large values. 'content_type' has no validation.
Destructive operations (amqp_publish, amqp_rpc) lack confirmation or dry-run patterns. Code shows mandatory routing and publisher confirms, but no tool-level confirmation step to prevent accidental message publication. Agents can fire-and-forget without user approval.