RabbitMQ MassTransit MCP Server
Provides tools for managing RabbitMQ queues, exchanges, bindings, and connections, with special support for MassTransit error queue parsing, fault analysis, and message republishing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RabbitMQ MassTransit MCP Servershow faults in the order-service error queue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RabbitMQ MassTransit MCP Server
An MCP (Model Context Protocol) server for RabbitMQ with MassTransit intelligence — error queue parsing, fault analysis, and message republishing.
Built for teams debugging async messaging issues across .NET microservices. Goes beyond basic queue management by understanding MassTransit conventions: _error/_skipped queues, the message envelope format, and fault message parsing.
Features
18 tools for complete RabbitMQ management via Claude Code
MassTransit-aware: Automatically detects and parses
_error/_skippedqueues, fault envelopes, and message type URNsParsed error output: Exception types, messages, stack traces, consumer types, retry counts, and original payloads — extracted from
MT-Fault-*message headersRepublish from error: The killer feature — fetch faulted messages and republish them for reprocessing
Safe defaults: Mutative tools disabled by default, two-step confirmation for destructive operations
Related MCP server: RabbitMQ MCP Server
Quickstart
1. Add to your Claude Code config (~/.claude.json or project .claude.json):
{
"mcpServers": {
"rabbitmq": {
"command": "npx",
"args": ["-y", "@stevepic95/rabbitmq-masstransit-mcp@latest"],
"env": {
"RABBITMQ_HOST": "your-rabbitmq-host",
"RABBITMQ_USERNAME": "your-username",
"RABBITMQ_PASSWORD": "your-password"
}
}
}
}2. Restart Claude Code to load the new MCP server.
3. Start using it. Ask Claude things like:
"Are there any error queues with messages?"
"Show me the faults in the submit-order error queue"
"What queues have no consumers?"
"How many messages are in the report queue?"
That's it. The 13 read-only tools are available immediately — no flags needed.
To enable write operations (purge, delete, publish, republish), set
"ALLOW_MUTATIVE_TOOLS": "true"in the env config.
Installation
npx @stevepic95/rabbitmq-masstransit-mcp@latestClaude Code Configuration
Add to your .claude.json under mcpServers:
{
"mcpServers": {
"rabbitmq": {
"command": "npx",
"args": ["-y", "@stevepic95/rabbitmq-masstransit-mcp@latest"],
"env": {
"RABBITMQ_HOST": "your-rabbitmq-host",
"RABBITMQ_PORT": "15672",
"RABBITMQ_USERNAME": "your-username",
"RABBITMQ_PASSWORD": "your-password",
"RABBITMQ_VHOST": "/",
"RABBITMQ_SSL": "false",
"ALLOW_MUTATIVE_TOOLS": "false"
}
}
}
}For local development:
{
"mcpServers": {
"rabbitmq": {
"command": "node",
"args": ["/path/to/rabbitmq-masstransit-mcp/dist/index.js"],
"env": {
"RABBITMQ_HOST": "localhost",
"RABBITMQ_USERNAME": "guest",
"RABBITMQ_PASSWORD": "guest"
}
}
}
}Configuration
Variable | Required | Default | Description |
| Yes | — | RabbitMQ Management API hostname |
| No |
| Management API port |
| Yes | — | Authentication username |
| Yes | — | Authentication password |
| No |
| Default virtual host |
| No |
| Use HTTPS for Management API |
| No |
| Enable mutative tools (purge, delete, publish, republish, move) |
You can also enable mutative tools via CLI flag: --allow-mutative-tools
Tools
Read-Only (13 tools) — Always available
Tool | Description |
| Cluster stats: queue totals, connection counts, message rates |
| List queues with depth, consumer count, rates. Filter by vhost, name pattern |
| Detailed queue stats: depth, rates, consumers, memory, policy |
| List exchanges. Filter by vhost, type |
| Exchange details and bindings |
| List bindings for a queue or exchange |
| Active connections with client info |
| Active consumers with queue assignments |
| Browse messages without consuming (non-destructive) |
| Find all |
| Find all |
| Browse error queue messages with parsed fault details |
| Quick health check: no consumers, growing depth, high error counts |
Mutative (5 tools) — Require ALLOW_MUTATIVE_TOOLS=true
Tool | Description |
| Purge all messages from a queue |
| Delete a queue |
| Publish a message to an exchange |
| Republish faulted messages from |
| Move messages from one queue to another |
MassTransit Intelligence
Error Queue Parsing
peek_errors doesn't just dump raw JSON — it reads MT-Fault-* headers that MassTransit attaches when moving messages to error queues, giving you everything you need to debug the failure:
Queue: submit-order_error (3 messages)
Message 1:
Faulted: 2026-02-15T14:30:05Z
Reason: fault
Message Type: MyApp.Messages.OrderSubmitted
Consumer: MyApp.Consumers.SubmitOrderConsumer
Exception: Microsoft.Data.SqlClient.SqlException - "Arithmetic overflow error converting numeric to data type numeric."
Retry Count: 5
Stack Trace:
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(...)
at MyApp.Data.OrderRepository.GetFees(Int32 orderId) in /src/OrderRepository.cs:line 35
at MyApp.Services.OrderService.Process(Int32 id) in /src/OrderService.cs:line 51
at MyApp.Consumers.SubmitOrderConsumer.Consume(ConsumeContext`1 context) in /src/SubmitOrderConsumer.cs:line 11
Original Payload: { "orderId": "abc-123", "amount": 99.99 }
Source Host: order-service-swrm-app1b-p02 / order-service (PID 1)
Assembly: order-service v1.0.3.0 (.NET 8.0.8)Republish from Error (Two-Step)
The highest-value tool for debugging. First call previews the messages:
> republish_from_error(errorQueue: "submit-order_error", count: 3)
Preview: 3 message(s) from "submit-order_error" ready to republish:
[... parsed fault details ...]
To republish these messages, call again with confirm=true and count=3.Second call with confirm: true actually consumes and republishes:
> republish_from_error(errorQueue: "submit-order_error", count: 3, confirm: true)
Republished 3/3 message(s) from "submit-order_error".Queue Health Check
Quick overview of potential issues across all queues:
> get_queue_health()
⚠ Queues with NO consumers and messages (2):
order-processing — 150 message(s)
notification-sender — 42 message(s)
✗ Error queues with messages (3 queues, 89 total):
submit-order_error — 45 message(s)
payment-process_error — 32 message(s)
email-send_error — 12 message(s)
△ High depth queues (>1000 messages, 1):
analytics-events — 15234 message(s), 2 consumer(s)Requirements
Node.js >= 18.0.0
RabbitMQ with Management Plugin enabled (port 15672)
License
MIT
Available Tools
13 toolsget_exchangeB
Get exchange details and its bindings (both source and destination).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exchange name | |
| vhost | No | Vhost (default: configured vhost) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral disclosure burden. It does not explicitly confirm the operation is read-only, mention permissions, default vhost behavior, or response characteristics. The only added behavior detail is the inclusion of both source and destination bindings, which is useful but minimal.
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 description is a single, focused sentence with no filler. It front-loads the core action and adds the binding scope efficiently, earning its place in every clause.
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?
There is no output schema, so the description should provide enough return context. It states exchange details and bindings are returned, but not what 'details' includes or how bindings are structured. It is adequate for a basic get operation but leaves some ambiguity about the exact response shape.
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?
Schema description coverage is 100%, with clear descriptions for both 'name' and 'vhost'. The tool description does not add parameter-level detail, but the baseline is satisfied because the schema already documents the parameters sufficiently.
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 description uses a specific verb ('Get') and resource ('exchange details') and adds the scope of bindings, including both source and destination. This clearly differentiates it from list_exchanges and list_bindings, though it does not explicitly name those siblings.
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?
The description provides no guidance on when to use this tool versus alternatives like list_exchanges, get_queue, or list_bindings. There is no mention of conditions, exclusions, or trade-offs, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overviewA
Get RabbitMQ cluster overview: queue totals, connection counts, message rates, and version info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does state what the response covers, and 'Get' implies a read-only operation, but it does not explicitly confirm no side effects or mention any caveats such as caching, rate limits, or auth requirements.
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?
A single sentence that front-loads the operative verb and resource, then packs the most relevant return categories into a compact list. Every word earns its place.
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 zero-parameter, low-complexity overview tool, the description adequately conveys what the call returns. It could add an explicit note about being read-only or non-destructive, but nothing essential is missing for a competent agent to invoke it correctly.
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?
The tool has zero parameters and the schema documentation coverage is effectively complete with an empty properties object. No parameter explanation is needed, so the baseline of 4 applies.
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 description identifies a specific verb and resource: 'Get RabbitMQ cluster overview' and enumerates the returned categories (queue totals, connection counts, message rates, version info). This clearly distinguishes the tool from sibling tools that target individual queues, exchanges, or connections.
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?
The phrase 'cluster overview' provides clear context that this is the high-level summary tool versus the more specific sibling list/get tools. It lacks explicit exclusions such as 'for per-queue details, use get_queue,' but the intended use case is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queueA
Get detailed stats for a specific queue: depth, rates, consumers, memory, policy, arguments.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Queue name | |
| vhost | No | Vhost (default: configured vhost) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. The verb 'Get' and listing of stats implies a read-only operation returning details, but it does not disclose potential errors, whether any configuration might be affected, or how the statistics are sourced. It is adequate but minimal.
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?
A single front-loaded sentence with zero filler: the resource and action come first, followed by a compact enumeration of the data returned. Every word earns its place.
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 simple two-parameter tool with fully documented schema parameters, the description covers the output categories sufficiently even though there is no output schema. It could add error or permission context, but nothing needed to invoke the tool correctly is missing.
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?
Schema description coverage is 100%, and both name and vhost are already documented in the input schema. The description adds no new parameter-level meaning, so the baseline of 3 is appropriate.
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 description states a specific action ('Get detailed stats'), identifies the resource ('a specific queue'), and enumerates the exact content returned (depth, rates, consumers, memory, policy, arguments). This clearly distinguishes it from list_queues, which would list queues, and get_exchange, which targets a different resource.
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?
The phrase 'specific queue' conveys that the tool is for one known queue by name, which implies a different use case from the sibling list_queues. However, it does not explicitly state when to use it over alternatives or mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queue_healthA
Quick health check: find queues with no consumers, growing depth, or high error counts. Identifies potential issues.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Filter by vhost | |
| minMessages | No | Minimum messages to flag a queue (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey that the tool scouts for problematic queues and surfaces potential issues, which suggests a read-only, non-destructive operation. However, it does not clarify whether the output is limited to unhealthy queues or includes all queues with health flags, nor does it mention default vhost behavior, pagination, or other side effects. No contradiction exists, but the behavioral picture is incomplete.
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 description is compact at two sentences and front-loads the 'quick health check' framing before listing concrete criteria. The second sentence, 'Identifies potential issues,' is slightly redundant with the first, but the overall structure is efficient and easy to parse.
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 tool with two optional parameters and no output schema, the description gives the core purpose and criteria, which is sufficient for a basic understanding. However, it leaves gaps: whether results are only problem queues or all queues with status, and what the default vhost scope is. These are minor but relevant for an agent to interpret results correctly.
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?
Schema description coverage is 100%, so the baseline applies. Both parameters (vhost and minMessages) are already described in the schema, and the tool description adds no extra meaning about how they affect the health check. The description does not need to compensate because the schema documents them adequately.
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 description clearly states the tool's function: a 'quick health check' that finds queues based on three specific criteria (no consumers, growing depth, high error counts). It identifies the resource (queues) and the condition of interest, and it is distinct from siblings like list_queues or get_queue, which simply list or retrieve without diagnostic intent.
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?
The phrase 'quick health check' implies a diagnostic, scan-style use case, but the description does not explicitly say when to prefer this tool over related siblings such as list_error_queues, list_consumers, or list_queues. There is no when-not-to-use guidance, so the usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bindingsA
List bindings for a specific queue or exchange.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Vhost (default: configured vhost) | |
| target | Yes | Queue or exchange name | |
| targetType | Yes | Whether the target is a queue or exchange |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'List', which implies a read-only operation, but it does not disclose return structure, pagination, ordering, permissions, or error behavior. The description adds little beyond the basic operation name.
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 description is a single, front-loaded sentence with no filler. Every word contributes meaning, and it is immediately clear what the tool does.
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 relatively simple 3-parameter tool, the description is minimally sufficient: it identifies the target and target type and indicates the resource being listed. However, with no output schema and no annotations, return-value context is missing, so an agent cannot fully anticipate what a successful call will produce.
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?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaningful parameter details beyond what the schema already provides; it does restate that the target is a queue or exchange, but that is also present in targetType's enum and description.
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 description uses a specific verb ('List') and resource ('bindings') and clearly scopes the operation to a particular queue or exchange. This differentiates it from sibling tools like list_queues and list_exchanges, which target different resources.
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?
The description implies the tool should be used when you need bindings for a specific queue or exchange, but it never explicitly states when to prefer this over alternatives or when not to use it. Context is present, but exclusions and alternatives are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectionsA
List active RabbitMQ connections with client info, state, and channel count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the filtering to active connections and the fields returned (client info, state, channel count), which is meaningful behavioral context. It does not mention pagination or result limits, but this is a simple read-only listing tool.
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?
One economical sentence that front-loads the purpose and adds only meaningful detail about scope and output fields. Every word earns its place, with no repetition or filler.
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 simple parameterless listing tool, the description is nearly complete: it names the resource, the filtering condition, and the returned information. It could slightly expand on the exact output shape, but given the low complexity this is a minor gap.
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?
The tool has zero parameters, so there are no parameter semantics to clarify. Baseline for a parameterless tool is 4, and the description appropriately focuses on what the tool returns rather than inputs.
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?
States a specific verb ('List'), a concrete resource ('active RabbitMQ connections'), and the contained details ('client info, state, and channel count'). This clearly distinguishes it from the sibling tools, none of which target connections.
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?
The description makes the tool's scope clear: it is for listing active RabbitMQ connections. It does not explicitly state when not to use it or name alternatives, but the sibling set has no overlapping connection-listing tool, so confusion is unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_consumersA
List active consumers with their queue assignments, prefetch, and connection info.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Filter by vhost |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does disclose that only "active" consumers are listed and that the result includes queue assignments, prefetch, and connection info, which is useful. However, it does not explain the default vhost scope, whether inactive consumers are always omitted, or any permission/visibility constraints.
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 description is a single focused sentence that front-loads the action and resource, then lists the returned fields. There is no redundancy or unnecessary detail.
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?
This is a simple tool with one optional parameter, and the description provides enough about what is returned to make the call understandable. With no annotations and no output schema, a bit more about default vhost behavior or ordering would help, but for a straightforward read-only list operation the gap is minor.
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?
The only parameter, vhost, is fully documented in the schema as "Filter by vhost" (100% schema coverage). The description adds no additional parameter semantics beyond this, so the baseline 3 is appropriate.
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 description uses the specific verb "List" and names the resource (consumers) plus the included fields (queue assignments, prefetch, connection info). This clearly distinguishes it from sibling tools like list_connections and list_queues even without opening their schemas.
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 guidance is given on when to use this tool versus alternatives, and no exclusions or prerequisites are stated. The name implies listing consumers, but the description does not say why an agent should choose it over list_connections for connection-level details or list_queues for queue-level details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_error_queuesB
Find all MassTransit _error queues with message counts. Helps identify services with unprocessed failures.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Filter by vhost | |
| nonEmpty | No | Only show queues with messages (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds that results include message counts, but its claim to find 'all' error queues conflicts with the schema's nonEmpty default of true, which means empty queues are hidden unless overridden; it also does not mention read-only status, permissions, or output shape.
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?
Two short sentences with no filler; the primary action and resource are front-loaded and the second sentence adds a distinct operational purpose.
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?
The tool is simple, has optional parameters only, and the description gives the central purpose and return value concept (message counts). However, the missing disclosure of the nonEmpty default makes the description materially incomplete for correct use when the agent wants to see empty error queues.
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?
Schema description coverage is 100%, and both vhost and nonEmpty already have explanatory schema descriptions, so the baseline applies. The tool description adds no parameter-level meaning beyond saying counts are included.
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 description states a clear verb ('Find') and a specific resource ('MassTransit _error queues') and states the output includes message counts, so an agent can tell this targets error queues rather than ordinary queues. It does not explicitly name sibling tools such as list_skipped_queues or peek_errors, so it misses the chance to sharpen differentiation.
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?
'Helps identify services with unprocessed failures' gives a reasonable use case and implies it is for failure investigation. It does not mention when to prefer list_skipped_queues, list_queues, or peek_errors, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_exchangesA
List exchanges with type and binding info. Filter by vhost, name pattern, or type.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by exchange type | |
| vhost | No | Filter by vhost | |
| namePattern | No | Filter exchange names containing this string (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does state that the tool lists exchanges with binding info and supports filters, which covers the basic operation. It does not mention pagination, result ordering, default scope, or response shape, though these gaps are less critical for a simple read-only list tool.
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 description is two short sentences with no wasted words. The primary function is stated first, and the filter options are summarized immediately after. It is efficient and easy to parse.
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 straightforward read-only list operation with fully documented optional parameters, the description provides enough to select and invoke the tool correctly. It could be more complete by describing the output structure or pagination, but the tool is low complexity and the provided information is largely sufficient.
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?
Schema description coverage is 100%, so the schema already fully documents the three optional parameters. The description merely restates the filter options ('vhost, name pattern, or type') without adding meaning beyond what the schema provides, so the baseline score of 3 applies.
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 description clearly states the action ('List'), the resource ('exchanges'), and the included information ('type and binding info'). It also names the available filters, making the tool's scope unambiguous and distinguishable from siblings like list_queues and get_exchange.
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?
The description implies when to use the tool: when you need to list exchanges and can filter them. However, it provides no explicit guidance about when not to use it or when a sibling such as list_bindings or get_exchange would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_queuesA
List queues with message depth, consumer count, and rates. Filter by vhost and name pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Filter by vhost (default: configured vhost) | |
| sortBy | No | Sort results (default: name) | |
| namePattern | No | Filter queue names containing this string (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the output scope (queues with three metric types) and available filters, but does not mention pagination, rate limiting, default vhost behavior, or whether the list is complete. This is adequate for a simple read-only list, but not richly transparent.
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?
Two short sentences pack the core purpose and filtering capability without fluff. The main resource and output fields are front-loaded, making it easy to scan.
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?
The description supplies the primary output fields and filtering options, which is sufficient for a simple list tool with fully documented optional parameters. There is no output schema and no mention of pagination or sorting behavior, but these are minor gaps for a read-only listing operation.
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?
Schema description coverage is 100%, so the parameter baseline is 3. The description's mention of filters by vhost and name pattern merely mirrors the schema's own parameter descriptions and adds no new semantic detail, and it omits the sortBy parameter entirely.
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 description states a specific verb and resource: 'List queues' with the key included attributes: message depth, consumer count, and rates. This clearly distinguishes it from sibling tools like list_exchanges, list_connections, or get_queue, and the filters are also stated.
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?
The description implies this tool is for listing queues and filtering, but it does not explicitly guide the agent toward alternatives such as get_queue for single-queue detail or peek_messages for message content. The usage context is clear but no exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skipped_queuesA
Find all MassTransit _skipped queues with message counts. Skipped messages indicate routing or serialization issues.
| Name | Required | Description | Default |
|---|---|---|---|
| vhost | No | Filter by vhost | |
| nonEmpty | No | Only show queues with messages (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does indicate that the tool returns message counts and explains why skipped queues matter, but it does not explicitly state that this is a read-only operation or mention default filtering behavior (e.g., nonEmpty defaults to true). The behavior is implied but not fully transparent.
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 description is two sentences with no filler. The core action and output are front-loaded in the first sentence, and the second sentence adds valuable diagnostic context. Every word earns its place.
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 simple list tool with two optional parameters and no output schema, the description is largely sufficient: it states what is returned (message counts) and why the tool matters. Minor gaps include not describing the return shape or explicit vhost behavior, but the schema covers the parameters and the use case is clear.
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?
Schema description coverage is 100%, so both vhost and nonEmpty are already well-documented in the schema. The description does not add any additional parameter-level meaning beyond what the schema provides, making the baseline score appropriate.
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 description uses a specific verb ('Find all') and identifies a precise resource ('MassTransit _skipped queues') while adding output detail ('with message counts'). This clearly distinguishes it from sibling tools like list_queues and list_error_queues, which target different queue categories.
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?
The second sentence ('Skipped messages indicate routing or serialization issues') gives a clear diagnostic context for when to use this tool. However, it does not explicitly name alternative tools or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peek_errorsA
Browse error queue messages with parsed MassTransit fault details: exception type, message, stack trace, original payload, and source host.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of messages to peek (default: 5, max: 50) | |
| queue | Yes | Error queue name (e.g., "submit-order_error") | |
| vhost | No | Vhost (default: configured vhost) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose that messages are parsed and what fields are returned, but it does not explicitly state that peeking is non-destructive or what happens with non-MassTransit/malformed messages. The word 'peek' implies read-only, but an explicit statement would be more transparent.
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?
A single, information-dense sentence that front-loads the core purpose and then lists the specific returned fields. There is no filler, redundancy, or unnecessary detail.
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?
The description covers the essential invocation context: what the tool does, what kind of queue it targets, and what the returned content includes. Since there is no output schema, the explicit field list is valuable. It could be slightly more complete with a note about non-destructive behavior or behavior on non-MassTransit messages, but it is sufficient for a straightforward peek tool.
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?
Schema description coverage is 100%, and the description does not add meaningful parameter-level details beyond what the schema already states. The description's mention of parsed fault details is behavioral context rather than parameter semantics, so the baseline of 3 is appropriate.
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 description uses a specific verb ('Browse') and names the exact resource ('error queue messages') with a distinctive feature set: parsed MassTransit fault details (exception type, message, stack trace, original payload, source host). This clearly distinguishes it from siblings like list_error_queues (which lists queue names) and peek_messages (which would not provide MassTransit-specific parsing).
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?
The context is implied: this is for browsing error-queue messages with MassTransit fault detail parsing. However, it does not explicitly state when to choose this tool over peek_messages or list_error_queues, nor does it mention when not to use it. A more explicit routing statement would strengthen this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peek_messagesA
Browse messages in a queue without consuming them (non-destructive). Parses MassTransit envelopes when detected.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of messages to peek (default: 5, max: 50) | |
| queue | Yes | Queue name to peek | |
| vhost | No | Vhost (default: configured vhost) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the two most important behaviors: the operation is non-destructive (no consumption), and MassTransit envelopes are parsed when detected, which tells the agent that returned message content may be transformed. It omits minor details like ordering guarantees or empty-queue behavior, but the critical traits are covered.
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?
Two sentences with zero waste. The core purpose and the non-destructive guarantee are front-loaded in the first sentence, and the MassTransit detail earns its place in the second. Every word adds information.
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?
The description is sufficient for invoking the tool: it names the action, the target resource, and the safety profile, while the schema covers parameters. However, with no output schema present, the description does not disclose what the response looks like (message bodies? headers? count?), and it does not cover failure behavior such as nonexistent queues. These are noticeable gaps given the absence of an output schema.
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?
Schema description coverage is 100%, with all three parameters (queue, count, vhost) documented in the schema including defaults and bounds. Per the rubric, this yields a baseline of 3; the description adds no parameter-specific meaning beyond the schema, so the baseline stands.
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 description uses a specific verb ('Browse') with a clear resource ('messages in a queue') and adds the key qualifier 'without consuming them (non-destructive)', which precisely scopes the operation. However, it does not explicitly differentiate from the sibling peek_errors or get_queue, so an agent must infer the boundaries from the sibling names rather than the description.
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?
The non-destructive framing implies the use case: inspect queue contents without side effects. But there is no explicit guidance on when to prefer this tool over alternatives such as peek_errors (for error queues) or get_queue (for queue statistics), and no stated exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v1.1.2- First observed
get_exchange - First observed
get_overview - First observed
get_queue - First observed
get_queue_health - First observed
list_bindings - First observed
list_connections - First observed
list_consumers - First observed
list_error_queues - First observed
list_exchanges - First observed
list_queues - First observed
list_skipped_queues - First observed
peek_errors - First observed
peek_messages
TDQS
Scored across 13 tools
Each tool targets a distinct RabbitMQ resource or action: overview, queues, exchanges, bindings, messages, connections, consumers, error/skipped queues, and health. Even the two peek tools are clearly separated by normal vs. error queues with different decoding purposes.
All tool names follow a consistent verb_noun pattern using snake_case: get_*, list_*, peek_*. There is no mixing of verb styles or casing conventions.
13 tools is well within the ideal range for a monitoring-oriented server. Each tool earns its place by covering a distinct observability or troubleshooting need without redundancy.
The observability workflow is well covered: discover queues/exchanges/bindings, inspect consumers/connections, peek messages, and surface MassTransit error/skipped queues with health findings. Minor management gaps like queue/exchange creation or purge/replay operations exist, but they appear to be outside the intended read-only monitoring scope.
Maintenance
Related MCP Connectors
Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server for RabbitMQ that exposes the RabbitMQ HTTP API as tools, enabling natural language interaction with RabbitMQ management.100177 npm1MIT
- FlicenseCqualityDmaintenanceEnables management of RabbitMQ clusters, queues, exchanges, bindings, users, and messages through natural language in chat interfaces, using the MCP protocol.201-
- AlicenseNot gradedqualityDmaintenanceMCP server for collecting and analyzing CLI/web server error logs. Enables watching log files/directories, parsing common error patterns, and querying/analyzing logs through natural language.10 npmMIT
- -licenseNot gradedqualityNot gradedmaintenanceMCP server that parses stack traces and logs to generate deduplicated issue drafts with severity, repro steps, and owner guesses.-