bussin-mcp

MCP server for Azure Service Bus: peek and search message bodies across queues, topics and dead-letter queues, then resubmit, send, or purge. Read-only by default, with sending and destructive operations behind separate opt-in flags.

Documentation

Connect Claude, ChatGPT, Cursor, or any other MCP-aware assistant directly to your Azure Service Bus. Ask which queues are backing up, what the dead-lettered messages have in common, or to replay a batch of failures, instead of clicking through a UI to find out.

bussin-mcp is a free, source-available Model Context Protocol server built on the same AMQP client that powers the Bussin web explorer. It runs locally, authenticates as you, and is read-only until you decide otherwise.

Try it in one command

Demo mode runs against an in-process simulator with seeded queues. No Azure subscription, no sign-in, nothing to clean up afterwards:

npx -y bussin-mcp --demo

When you are ready to point it at a real namespace, sign in with the Azure CLI and drop the flag:

az login
npx -y bussin-mcp --namespace my-namespace

Adding it to your AI client

Claude Code

claude mcp add bussin -- npx -y bussin-mcp --namespace my-namespace

Claude Desktop, Cursor, and other MCP clients

Add the following to your MCP configuration file: claude_desktop_config.json for Claude Desktop, or .cursor/mcp.json for Cursor:

{
  "mcpServers": {
    "bussin": {
      "command": "npx",
      "args": ["-y", "bussin-mcp", "--namespace", "my-namespace"]
    }
  }
}

Restart the client and the Service Bus tools will be available in your next conversation.

What you can ask

Once connected, these are ordinary questions rather than a query language:

  • “Which queues in my namespace have dead-lettered messages?”
  • “Show me the last five dead-letters on the orders queue and tell me what they have in common.”
  • “Search the payments subscription for anything mentioning timeout.”
  • “These three DLQ messages failed on a bug we've now fixed, so resubmit them.”
  • “How deep is the backlog on each queue right now?”

Safety model

The caller is a language model, so everything irreversible is opt-in. Tools you have not enabled are not registered at all. They are invisible to the model rather than merely refused, so there is nothing to talk it into.

FlagTools it unlocksRisk
(none, the default)list_namespaces, list_queues, list_topics, list_subscriptions, peek_messages, search_messagesRead-only. Peek does not lock, consume, or increment delivery count.
--allow-sendsend_message, resubmit_dead_letterAdds messages your consumers will process.
--allow-destructivedelete_messages, dead_letter_messages, purge_entityRemoves messages permanently. Not recoverable.

Additional guards

  • Peek is genuinely non-destructive. No lock, no consumption, no delivery-count increment.
  • Purging requires confirmation. The confirm argument must exactly match the name of the entity being purged.
  • Resubmission is additive by default. Dead-lettered originals stay in place unless you also enable destructive operations, so a replay is safe to retry.
  • Scans are bounded. Searches and purges stop at a configurable timeout rather than running indefinitely.
  • Message bodies are truncated at 4000 characters, so one oversized payload cannot flood the model's context.

Authentication and permissions

Entra ID is the default. The server uses Azure's DefaultAzureCredential, so it picks up an existing az login, a managed identity, or service-principal environment variables. It is the same identity and the same role assignments you already use.

RoleNeeded for
Azure Service Bus Data ReceiverPeeking and searching messages
Reader (on the namespace)Listing namespaces, queues and topics with message counts
Azure Service Bus Data SenderOnly if you enable --allow-send

Connection strings are also supported, for namespaces your signed-in identity cannot see. They authenticate the data plane only. Listing entities goes through Azure Resource Manager and needs a real identity.

Why this is a separate program

A reasonable question: Bussin runs in your browser, so why does its MCP server not?

MCP clients connect to a server in one of two ways: by launching a local process and talking to it over standard input and output, or by calling a remote HTTP endpoint. A browser tab is neither. It cannot listen on a port, it cannot be spawned by another program, and it only exists while the tab is open.

So bussin-mcp is a small command-line program that shares Bussin's AMQP client and behaviour but runs on its own. Nothing is sent to a Bussin server in either case: the web app connects from your browser, and the MCP server connects from your machine.

Frequently Asked Questions

What is an MCP server for Azure Service Bus?

The Model Context Protocol is an open standard that lets AI assistants call external tools. An MCP server for Azure Service Bus exposes queue operations (peeking messages, searching payloads, inspecting dead-letter queues) as tools an assistant can invoke, so you can debug a messaging problem by asking a question instead of clicking through a UI.

Can Claude connect to my Azure Service Bus?

Yes. Install bussin-mcp and add it to your MCP client configuration. It runs locally on your machine, authenticates as you through Entra ID, and connects directly to Azure. Your messages and credentials are never sent to a third-party server.

Is it safe to let an AI access a production Service Bus?

It is read-only by default. Sending requires --allow-send; deleting, dead-lettering and purging require --allow-destructive. Tools you have not enabled are never registered, so the model cannot see them at all. Purging additionally requires passing the exact entity name as confirmation.

Does the MCP server need the Bussin web app?

No. It is standalone. It shares the same AMQP client as the web app but runs independently. You can use either, both, or neither.

Which Azure permissions does it need?

Azure Service Bus Data Receiver to peek and search, Reader on the namespace to list entities and their counts, and Azure Service Bus Data Sender only if you enable sending.