Azure Service Bus MCP Server
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.
| Flag | Tools it unlocks | Risk |
|---|---|---|
| (none, the default) | list_namespaces, list_queues, list_topics, list_subscriptions, peek_messages, search_messages |
Read-only. Peek does not lock, consume, or increment delivery count. |
--allow-send |
send_message, resubmit_dead_letter |
Adds messages your consumers will process. |
--allow-destructive |
delete_messages, dead_letter_messages, purge_entity |
Removes messages permanently. Not recoverable. |
Additional guards
- Peek is genuinely non-destructive. No lock, no consumption, no delivery-count increment.
- Purging requires confirmation. The
confirmargument 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.
| Role | Needed for |
|---|---|
| Azure Service Bus Data Receiver | Peeking and searching messages |
| Reader (on the namespace) | Listing namespaces, queues and topics with message counts |
| Azure Service Bus Data Sender | Only 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.