Bussin Mcp

io.github.sgebb由 GitHub 账号 sgebb 发布v0.2.0更新于 Nov 1, 2026

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

概览

AI 生成的概览

面向 Azure Service Bus 的 MCP 服务器,让助手列出命名空间、队列、主题和订阅,并查看或搜索消息(含死信队列)。

可以做什么
  • 列出命名空间、队列、主题和订阅,并显示活动、死信和计划消息数量
  • 从队列、主题订阅或死信队列查看消息,不加锁、不消费
  • 按正文子串、消息 ID 或主题搜索队列或订阅,返回匹配消息及序列号
  • 在操作者启用后,可发送消息并把死信消息重新提交回源队列
  • 在操作者启用后,可删除消息、将活动消息移入死信队列或清空实体
适用场景
适合在聊天客户端中检查 Azure Service Bus 代理:找出有积压的队列、阅读死信消息以排查失败原因,或按内容定位特定消息后再决定如何处理。
运行要求
通过 npx 或全局 npm 安装在本机运行(需要 Node.js)。默认使用 Entra ID 登录,基于 DefaultAzureCredential(如 az login、托管标识,或通过 AZURE_TENANT_ID、AZURE_CLIENT_ID 和 AZURE_CLIENT_SECRET 的服务主体)。命名空间上需有角色:查看和搜索需 Data Receiver,列出实体需 Reader,仅在启用发送时才需 Data Sender。也可改用 SAS 连接字符串,但实体发现仍需 Entra ID。演示模式使用内置模拟器,无需 Azure 账户。
安装前请注意
默认只读;发送、重新提交、删除、移入死信和清空等工具仅在操作者用参数启用后才会注册。清空操作要求 confirm 参数与实体名完全一致;重新提交默认只复制消息回源队列,原死信消息仍保留,除非启用破坏性工具。连接字符串属于机密凭据,建议优先使用 Entra ID。消息正文截断为 4000 字符,扫描受超时限制。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Bussin Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:mcp-server/README.md,提交 1fe23e9

工具

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).

输入参数nameFiltersubscriptionId

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.

输入参数namespace

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.

输入参数namespace

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.

输入参数topic必填namespace

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).

输入参数countqueuetopicnamespacefromSequencesubscriptionfromDeadLetter

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).

输入参数queuetopicnamespacebodyFiltermaxMatchesmaxMessagessubscriptionsubjectFilterfromDeadLettermessageIdFilter

版本历史

2
  1. v0.2.0最新Oct 31, 2026
  2. v0.1.2Sep 16, 2026

评分

已满足适用检查项的 80%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。