Bussin Mcp

io.github.sgebbPublished by GitHub account sgebbv0.2.0Updated Nov 1, 2026

MCP server for Azure Service Bus. Peek, search and replay dead-letter messages from any MCP client.

VerifiedSTDIODesktop onlyCloud & InfrastructureDeveloper Tools

Overview

AI-generated overview

MCP server for Azure Service Bus that lets an assistant list namespaces, queues, topics and subscriptions, and peek or search messages, including dead-letter…

What you can do
  • List namespaces, queues, topics and subscriptions with active, dead-letter and scheduled message counts
  • Peek messages from a queue, topic subscription or dead-letter queue without locking or consuming them
  • Search a queue or subscription for a body substring, message id or subject and get sequence numbers
  • Optionally, when enabled by the operator, send messages and resubmit dead-lettered messages
  • Optionally, when enabled, delete messages, dead-letter active messages or purge an entity
When to use it
Useful when you need to inspect an Azure Service Bus broker from a chat client: finding queues with a backlog, reading dead-lettered messages to diagnose failures, or locating specific messages by content before deciding what to do with them.
Requirements
Runs locally via npx or a global npm install (Node.js). Entra ID sign-in is the default path, using DefaultAzureCredential (for example az login, managed identity, or a service principal via AZURE_TENANT_ID, AZURE_CLIENT_ID and AZURE_CLIENT_SECRET). Role assignments on the namespace: Data Receiver for peek and search, Reader for listing entities, Data Sender only if sending is enabled. A SAS connection string can be passed instead, but entity discovery still needs Entra ID. A demo mode runs…
Before you install
Read-only by default; send, resubmit, delete, dead-letter and purge tools are only registered when the operator enables them with flags. Purge requires a confirm argument matching the entity name, and resubmit copies messages back while leaving the originals unless destructive tools are enabled. A connection string is a secret credential; prefer Entra ID. Message bodies are truncated at 4000 characters, and scans are bounded by a timeout.

Installation

In SourceWeft

  1. Open Bussin Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

bussin-mcp

Azure Service Bus tools for Claude, ChatGPT, Cursor, and any other MCP-aware client.

A Model Context Protocol server that lets an AI assistant inspect your Azure Service Bus queues, topics, subscriptions and dead-letter queues. Peek messages, search payloads and replay failures, using the same AMQP client that powers the Bussin web explorer.

Read-only by default. Nothing writes to your broker unless you say so.

bash
npx -y bussin-mcp --demo

Install

bash
npm install -g bussin-mcp

Or run it straight from npx, which is what the client config below does.

Quick start

Try it with no Azure account at all. --demo runs against an in-process simulator with seeded queues:

bash
npx -y bussin-mcp --demo

Claude Code

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

Claude Desktop / Cursor

Add to your MCP config (claude_desktop_config.json, or .cursor/mcp.json):

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

Authentication

Entra ID is the default and the recommended path. The server uses Azure's DefaultAzureCredential, so it picks up whatever you already have:

bash
az login

That also works with managed identity, or a service principal via AZURE_TENANT_ID, AZURE_CLIENT_ID and AZURE_CLIENT_SECRET.

You need two role assignments on the namespace (or its resource group):

RoleWhy
Azure Service Bus Data Receiverpeek and search messages
Azure Service Bus Data Senderonly if you enable --allow-send
Readerlist namespaces, queues and topics with their message counts

A SAS connection string is supported for namespaces your signed-in identity cannot see:

bash
npx -y bussin-mcp --connection-string "Endpoint=sb://...;SharedAccessKeyName=...;SharedAccessKey=..."

Connection strings authenticate the data plane only. Entity discovery (list_queues and friends) goes through Azure Resource Manager and needs Entra ID.

Safety model

The caller is a language model, so anything 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.

FlagUnlocks
(none)list_namespaces, list_queues, list_topics, list_subscriptions, peek_messages, search_messages
--allow-sendsend_message, resubmit_dead_letter
--allow-destructivedelete_messages, dead_letter_messages, purge_entity

Additional guards:

  • Peek is genuinely non-destructive: no lock, no consumption, no delivery-count bump.
  • purge_entity requires confirmation: the confirm argument must exactly equal the entity name being purged.
  • resubmit_dead_letter is additive by default: it copies messages back to the source queue and leaves the dead-lettered originals in place. Removing them additionally requires --allow-destructive.
  • Scans are bounded: searches and purges stop at --search-timeout-ms (default 30s) rather than hanging the call.
  • Message bodies are truncated at 4000 characters per message, so a fat payload cannot blow out the model's context.

Options

OptionEnvironment variableDescription
--namespace <name>BUSSIN_NAMESPACEDefault namespace for tool calls
--demoBUSSIN_DEMORun against the built-in simulator; no Azure, no sign-in
--allow-sendBUSSIN_ALLOW_SENDEnable send and resubmit
--allow-destructiveBUSSIN_ALLOW_DESTRUCTIVEEnable delete, dead-letter and purge
--connection-string <cs>BUSSIN_CONNECTION_STRINGSAS connection string instead of Entra ID
--tenant <id>AZURE_TENANT_IDEntra tenant to authenticate against
--search-timeout-ms <n>BUSSIN_SEARCH_TIMEOUT_MSBound on a single scan or purge (default 30000)

Tools

Always available

  • list_namespaces: every Service Bus namespace the identity can see, across subscriptions
  • list_queues: queues with active, dead-letter and scheduled counts
  • list_topics: topics with message counts
  • list_subscriptions: subscriptions under a topic, with counts
  • peek_messages: read messages from a queue, subscription, or dead-letter queue
  • search_messages: scan for a body substring, message id, or subject

With --allow-send

  • send_message: send to a queue or topic
  • resubmit_dead_letter: replay dead-lettered messages back to their source queue

With --allow-destructive

  • delete_messages: permanently delete specific messages by sequence number
  • dead_letter_messages: move active messages to the dead-letter queue

Service Bus only receives deferred messages by sequence number, so both tools lock messages from the head of the queue up to the requested ones, settle those and release the rest. Their result lists what was settled and, under notFound, any sequence numbers that weren't.

  • purge_entity: delete every message from a queue, subscription, or DLQ

Example prompts

Which queues in my-namespace have dead-lettered messages?

Show me the last 5 dead-lettered messages on the orders queue and tell me what they have in common.

Search the payments subscription for anything mentioning "timeout" in the last batch.

These three DLQ messages failed on a bug we've now fixed, so resubmit them.

Related

Development

bash
npm installnpm run build     # builds the Node bundle of bussin-client-js, then bundles with esbuildnpm test          # drives the server over stdio against the simulatornpm run typecheck # tsc --noEmit

bussin-client-js lives in this repo and is inlined at build time, so the published package is self-contained and has no file: dependency.

Releasing

Publishing is driven by a tag, so it is always deliberate:

  1. Bump version in package.json
  2. Add the release to the changelog
  3. Tag and push:
bash
git tag mcp-v0.1.0 && git push origin mcp-v0.1.0

The workflow refuses to publish if the tag and package.json versions disagree, or if that version is already on npm. It publishes with --provenance, which links the tarball to the workflow run and commit that produced it.

One-time setup: create an npm automation token with publish rights, add it as the NPM_TOKEN secret under a repository environment named npm-publish.

To validate without publishing, run the workflow manually with dry_run enabled.

License

Business Source License 1.1 (BUSL-1.1) — see LICENSE.

Free for personal, educational, and internal business use. Commercial redistribution, rebranding, or hosting this software as a service by third parties is prohibited. Converts to Apache 2.0 on 2029-01-01.

Source: mcp-server/README.md at commit 1fe23e9

Tools

6

list_namespaces

List Service Bus namespaces

List the Azure Service Bus namespaces the signed-in identity can see, across all enabled subscriptions. Large tenants can hold dozens, so pass nameFilter whenever you already know roughly what you are looking for. Requires Entra ID sign-in (not available with a connection string).

ParametersnameFiltersubscriptionId

list_queues

List queues

List queues in a namespace with active, dead-letter and scheduled message counts. Use this before peeking so you know which queues have a backlog.

Parametersnamespace

list_topics

List topics

List topics in a namespace with their message counts. Messages sit on a topic's subscriptions rather than the topic itself, so follow up with list_subscriptions to find where a backlog actually is.

Parametersnamespace

list_subscriptions

List topic subscriptions

List the subscriptions under a topic, with active and dead-letter counts. Use this to pick the subscription to pass to peek_messages or search_messages.

Parameterstopicrequirednamespace

peek_messages

Peek messages

Peek messages from a queue, or from a topic subscription when topic and subscription are given. Peek is non-destructive: it does not lock, consume, or increment delivery count. Set fromDeadLetter to read the dead-letter queue instead of the main entity. This reads from the head of the entity outwards, so it is the right tool for "what is in this queue"; to find particular messages in a backlog, use search_messages instead of paging through peek. Needs the Azure Service Bus Data Receiver role (or Data Owner).

ParameterscountqueuetopicnamespacefromSequencesubscriptionfromDeadLetter

search_messages

Search messages

Scan a queue or subscription for messages matching a body substring, message id, or subject. Non-destructive. Scanning is bounded by maxMessages and by a server-side timeout, so on a deep backlog prefer a narrow filter. Returns matching messages with their sequence numbers. Prefer this over repeated peek_messages calls whenever you know something about the messages you want. The sequence numbers it returns are what delete_messages, resubmit_dead_letter and dead_letter_messages take as input. Needs the Data Receiver role (or Data Owner).

ParametersqueuetopicnamespacebodyFiltermaxMatchesmaxMessagessubscriptionsubjectFilterfromDeadLettermessageIdFilter

Version history

2
  1. v0.2.0LatestOct 31, 2026
  2. v0.1.2Sep 16, 2026

Score

80% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.