rabbit-mcp について
rabbit-mcpは、型付きメッセージコントラクトを扱うチーム向けのRabbitMQ MCPサーバーです。コントラクトから検証付きツールを生成し、メッセージの確認や復旧、制御されたリクエストと応答を行えます。
主な機能
- 01コントラクト由来の型付きツール
- 02送信前のメッセージ検証
- 03キューとメッセージの確認
- 04失敗メッセージの復旧・退避
- 05リクエスト/レスポンスと応答モード
- 06ロールベースのアクセスと監査ログ
活用シーン
- 01コントラクト検証済みイベントの公開
- 02キューやメッセージ障害の調査
- 03失敗メッセージの再送・修正
- 04エージェントによるサービス要求への回答
MCP 対応
RabbitMQのコントラクト、キュー、メッセージ、送信、復旧、応答操作をMCPツール、プロンプト、リソースとして提供します。stdioと認証付きHTTPトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rabbit-mcp
英語 · ქართული
メッセージコントラクト(.NET 10)を基盤とする RabbitMQ 用 MCP サーバーです。各コントラクトは、コントラクト自体を入力スキーマとする型付きツールになります。メッセージには MassTransit ワイヤーフォーマットを使用するため、MassTransit サービスではそのまま受信でき、MassTransit を使用しないサービスにはプレーンな JSON が渡されます。サーバー自体は MassTransit に依存しません。
- 送信:
publish_<contract>とrequest_<contract>を使います。送信前にコントラクトに照らして検証します。 - 確認: キュー、メッセージ(障害の詳細を含む)、各コントラクトのコンシューマーを確認できます。
- 復旧:
_errorキューからメッセージを戻して修正後に再送信したり、処理不能なメッセージを退避させたりできます。メッセージが削除されることはありません。 - 応答: レスポンダーモードでは、モデルがサービスから送信されたリクエストに応答します。
- 保護:
contracts diffでワイヤー形式を破壊する変更を CI で検出できます。チーム向けにロール、レート制限、監査機能も備えています。
インストール
| 方法 | 手順 |
|---|---|
| バイナリ | リリース:Linux、Windows、macOS 向けの自己完結型バイナリです。macOS:xattr -d com.apple.quarantine rabbit-mcp |
| .NET ツール | dotnet tool install -g RabbitMcp.Server。インストールせずに使う場合:dnx RabbitMcp.Server --yes(最初のリリースから利用可能) |
| Docker | ghcr.io/lazogio/rabbit-mcp — HTTP モードです。チーム向けをご覧ください |
| ソース | dotnet publish src/RabbitMcp.Server -c Release -o out(dotnet run は使用しないでください。標準出力に書き込みます) |
claude mcp add rabbit-mcp \
-e RabbitMcp__Uri=amqp://guest:guest@localhost:5672/ \
-e RabbitMcp__EnablePublish=true \
-- /full/path/to/rabbit-mcp
Claude Desktop:claude_desktop_config.json の "command" と "env" に同じ内容を設定してください。ローカルの RabbitMQ を起動するには、docker compose up -d を実行します。
お試しください: samples/Shop では、1 つのコマンドで RabbitMQ、PostgreSQL、MassTransit を使ったショップ、rabbit-mcp を起動し、注文、エラー復旧、承認の流れを確認できます。
ツール
| ツール | 機能 | 有効化条件 |
|---|---|---|
list_contracts、validate_message | コントラクトとその詳細を確認します。送信せずに JSON を検証できます | 常に |
queue_stats、peek_messages | キューの件数を確認します。メッセージを削除せずに内容(ペイロード、コントラクト検査、障害、x-death)を確認できます | 常に |
find_message | ID またはテキストでメッセージを検索し、格納されているキューを通知します | 常に |
read_stream | RabbitMQ ストリームを first、last、オフセット、または時刻(10m)から読み取ります | 常に |
list_queues、contract_consumers | キューを確認します。コントラクトが届くキューと、そのコンシューマーを確認できます | ManagementUri |
recent_activity | 監査:「昨日、誰が再パブリッシュしたか?」 | AuditLogPath |
publish_<contract>、request_<contract> | イベントをパブリッシュするか、リクエストを送信して応答を返します | EnablePublish |
republish_from_error | エラーキューまたはデッドレターキューからメッセージを戻します。まずプレビューし、その後 confirm=true を指定します。インシデント向けのフィルター(exceptionType、contract、since …)も使用できます | EnableRepublish |
dead_letter_from_error | 成功する見込みのないメッセージを、理由とともに <queue>_dead に退避させます | EnableRepublish |
resend_corrected | 失敗したメッセージを修正したコピーを送信し、元のメッセージを退避させます | EnableRepublish + EnablePublish |
pending_requests、reply_<response>、reject_request | サービスからの応答待ちリクエストを扱います | RespondTo |
結果は構造化されます(outputSchema)。エラーには次に行う操作が示されます。プロンプト diagnose_errors、investigate_message、review_approvals、contract_health は一般的なタスクを案内します。また、各コントラクトは contract://<Name> というリソースです。
コントラクト
// Event → publish_payment_captured
[MessageContract("Payment was captured by the PSP.", Version = 1)]
public sealed record PaymentCaptured
{
[Description("Order the payment belongs to.")]
public required Guid OrderId { get; init; }
[Range(typeof(decimal), "0.01", "1000000")]
public required decimal Amount { get; init; }
}
// Request → request_get_order_status
[MessageContract("Asks for the current status of an order.",
Responses = new[] { typeof(OrderStatus), typeof(OrderNotFound) })]
public sealed record GetOrderStatus
{
public required Guid OrderId { get; init; }
}
required、null 許容性、[Description]、DataAnnotations はスキーマに反映され、適用されます。- 名前は MassTransit に従います(
urn:message:Namespace:Type、exchange はNamespace:Type)。UrnとExchangeで上書きできます。 - 独自のコントラクトを使用する場合は、
RabbitMcp.Contractsパッケージを参照するクラスライブラリを作成し、RabbitMcp__ContractAssemblies=/path/Billing.Contracts.dllで読み込みます。
MassTransit を使用しないサービス — Format = MessageFormat.Raw:本文はプレーンな JSON で、メタデータは AMQP プロパティに格納されます。Exchange および/または RoutingKey を設定します。リクエストには RabbitMQ RPC(reply_to + correlation_id、返信タイプは AMQP の type)を使用します。
[MessageContract("Asks the shipping desk for a quote.", Format = MessageFormat.Raw, RoutingKey = "shipping-quotes",
Responses = new[] { typeof(ShippingQuote), typeof(ShippingUnavailable) })]
public sealed record GetShippingQuote { … }
C# を使用しない場合(AsyncAPI) — RabbitMcp__ContractFiles=warehouse.yaml:AsyncAPI 3.0 または 2.x のファイル内の各メッセージが、そのファイルの JSON Schema を持つツールになります。ルーティングは AMQP バインディングから取得されます。MassTransit サービスでは x-rabbit-mcp: { format: masstransit } を指定します。例:samples/asyncapi/warehouse.yaml。rabbit-mcp contracts asyncapi Billing.Contracts.dll は C# コントラクトをエクスポートします。
互換性チェック — CI で 2 つのビルド(または 2 つの AsyncAPI ファイル)を比較します。破壊的変更がある場合は終了コード 1 を返します。
rabbit-mcp contracts diff old/Billing.Contracts.dll new/Billing.Contracts.dll
# BREAKING OrderPlaced customer: Type changed from string to number.
# WARNING OrderPlaced: Breaking change without a version bump (still v1).
リクエスト/レスポンス
request_<contract> は返信を待ち(タイムアウトは 1~120 秒)、コントラクトに照らして検証された返信とともに、responded、faulted、または timeout を返します。
応答側: RabbitMcp__RespondTo=ApproveLargeOrder を設定すると、サービスからモデルに問い合わせて回答を得られます。リクエストは pending_requests に表示され、モデルは reply_<response> または reject_request で回答します(リクエスト元には RequestFaultException が返されます)。リクエストはメモリ内に保持されます。各 ClientName につき、1 つのインスタンスが回答し、ほかのインスタンスは待機します。
チーム向け(HTTP)
RabbitMcp__Transport=http は /mcp(および /healthz)を提供します。認証なしでは起動できません。
- API キー:
RabbitMcp__ApiKeys="alice:KEY1;ci:KEY2"(32 文字以上)。クライアントはX-Api-Keyを送信します。 - JWT / OIDC:
RabbitMcp__JwtAuthority+RabbitMcp__JwtAudience。
docker run -d -p 5080:5080 \
-e RabbitMcp__Uri=amqp://user:pass@rabbit:5672/ \
-e RabbitMcp__ApiKeys="team:$(openssl rand -base64 32)" \
-e RabbitMcp__ContractAssemblies=/contracts/Billing.Contracts.dll -v ./contracts:/contracts:ro \
ghcr.io/lazogio/rabbit-mcp:1.0
ロール(HTTP のみ。ロールを設定しない場合、すべての呼び出し元が有効なすべてのツールを使用できます):
RabbitMcp__Roles__viewer="read"
RabbitMcp__Roles__operator="read;publish:Order*;request;republish:*_error"
RabbitMcp__UserRoles="alice=operator;ci=viewer"
RabbitMcp__DefaultRoles="viewer"
権限:read、publish、request、republish、respond、*。パターンを指定すると、権限をコントラクトまたはキューに制限できます。ユーザーは API キー名、トークンのユーザー、または JWT の roles クレームで照合されます。呼び出し元には使用を許可されたツールのみが表示され、各呼び出し時にも権限が再確認されます。
設定
環境変数 RabbitMcp__<Option> または appsettings.json を使用します。リストは ; 区切りで、* はワイルドカードです。
| オプション | 既定値 | 説明 |
|---|---|---|
Uri | amqp://guest:guest@localhost:5672/ | AMQP URI。末尾に vhost を指定します |
ContractAssemblies / ContractFiles | — | コントラクト DLL / AsyncAPI ファイル。空の場合は組み込みサンプルを使用します |
ManagementUri | — | 管理 API。例:http://localhost:15672 |
EnablePublish / EnableRepublish | false | メッセージの送信 / 移動を許可します |
PublishAllow / PublishDeny | — | 送信可能 / 送信不可のコントラクト |
DeadLetterQueue | {queue}_dead | 処理不能なメッセージの保管先 |
RespondTo / MaxPendingRequests | — / 100 | 応答するコントラクト / 待機リクエストの上限 |
HumanConfirmation / ConfirmTools | auto / 3 つの復旧ツール | クライアントのダイアログでユーザーが変更を確認します(確認できない場合、required は拒否し、off は confirm を信頼します) |
AuditLogPath / AuditIncludePayload | — / false | 監査ファイル(JSON Lines)/ メッセージ本文を含めるかどうか |
MaxMessagesPerCall / MaxBulkMessages / MaxPayloadChars | 50 / 1000 / 16000 | 上限 |
RateLimits | — | 呼び出し元ごとの変更回数。例:publish:100/h;*:1000/d |
Transport / HttpUrls / HttpPath | stdio / http://localhost:5080 / /mcp | トランスポート |
ApiKeys、JwtAuthority、JwtAudience、JwtScopes | — | HTTP 認証 |
Roles__<role>、UserRoles、DefaultRoles | — | ロール |
ClientName、HttpPublicUrl、HttpAllowedOrigins、HttpAllowAnonymous、ExchangeCacheSeconds、JwtRolesClaim | 通常は不要です |
OpenTelemetry を使用するには、OTEL_EXPORTER_OTLP_ENDPOINT を設定します。トレースは MassTransit コンシューマーのトレースに結合されます。
保証
- サイレントロスなし: 無効なメッセージは送信されません。パブリッシャー確認と
mandatoryにより、配信できないメッセージはエラーになります。 - 安全な移動: ブローカーが新しいコピーを確認した後にのみ、メッセージはエラーキューから取り出されます。本文は変更されません。
- 削除なし: 処理不能なメッセージはすべてのヘッダーとともに保管され、復元できます。
- ユーザーが確認: MCP エリシテーションに対応するクライアント(Claude Code など)では、メッセージを移動する前にダイアログが表示されます。ステートレス HTTP では
confirm=trueにフォールバックします。 - 監査記録: 拒否されたものも含め、すべての送信、移動、応答をユーザーとともに記録します。
- 信頼できないコンテンツ: メッセージヘッダーによってメッセージの転送先が変更されることはありません。パスワードがログやエラーに表示されることもありません。
ライセンス
MIT。開発、テスト、リリースについては、CONTRIBUTING.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。