mcpField
R
rabbit-mcp

rabbit-mcp

ローカル
github.com/lazogio開発ツール01 日前に更新

rabbit-mcp について

rabbit-mcpは、型付きメッセージコントラクトを扱うチーム向けのRabbitMQ MCPサーバーです。コントラクトから検証付きツールを生成し、メッセージの確認や復旧、制御されたリクエストと応答を行えます。

主な機能

  1. 01コントラクト由来の型付きツール
  2. 02送信前のメッセージ検証
  3. 03キューとメッセージの確認
  4. 04失敗メッセージの復旧・退避
  5. 05リクエスト/レスポンスと応答モード
  6. 06ロールベースのアクセスと監査ログ

活用シーン

  1. 01コントラクト検証済みイベントの公開
  2. 02キューやメッセージ障害の調査
  3. 03失敗メッセージの再送・修正
  4. 04エージェントによるサービス要求への回答

MCP 対応

RabbitMQのコントラクト、キュー、メッセージ、送信、復旧、応答操作をMCPツール、プロンプト、リソースとして提供します。stdioと認証付きHTTPトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetRabbitMcp.Server1.0.3
ocighcr.io/lazogio/rabbit-mcp:1.0.3

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

rabbit-mcp

CI License: MIT

英語 · ქართული

メッセージコントラクト(.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(最初のリリースから利用可能)
Dockerghcr.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_messageID またはテキストでメッセージを検索し、格納されているキューを通知します常に
read_streamRabbitMQ ストリームを 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 を使用します。リストは ; 区切りで、* はワイルドカードです。

オプション既定値説明
Uriamqp://guest:guest@localhost:5672/AMQP URI。末尾に vhost を指定します
ContractAssemblies / ContractFiles—コントラクト DLL / AsyncAPI ファイル。空の場合は組み込みサンプルを使用します
ManagementUri—管理 API。例:http://localhost:15672
EnablePublish / EnableRepublishfalseメッセージの送信 / 移動を許可します
PublishAllow / PublishDeny—送信可能 / 送信不可のコントラクト
DeadLetterQueue{queue}_dead処理不能なメッセージの保管先
RespondTo / MaxPendingRequests— / 100応答するコントラクト / 待機リクエストの上限
HumanConfirmation / ConfirmToolsauto / 3 つの復旧ツールクライアントのダイアログでユーザーが変更を確認します(確認できない場合、required は拒否し、off は confirm を信頼します)
AuditLogPath / AuditIncludePayload— / false監査ファイル(JSON Lines)/ メッセージ本文を含めるかどうか
MaxMessagesPerCall / MaxBulkMessages / MaxPayloadChars50 / 1000 / 16000上限
RateLimits—呼び出し元ごとの変更回数。例:publish:100/h;*:1000/d
Transport / HttpUrls / HttpPathstdio / 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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。