Nats Mcp について
mcp-nats は、NATS メッセージングシステム向けの MCP サーバーです。AI モデルやアプリケーションが標準的なインターフェースで NATS サーバーを操作できます。読み取り専用の操作を重視し、サーバーやストリームを安全に確認・監視できます。
主な機能
- 01サーバーのヘルスチェックと RTT 測定
- 02ストリームとサブジェクトの確認
- 03Object Store と KV バケットの操作
- 04複数アカウントの認証情報管理
- 05stdio、SSE、streamable-http のトランスポート対応
活用シーン
- 01アシスタントによる NATS サーバーとストリームの状態確認
- 02読み取り専用インターフェースでのメッセージングシステム監視
- 03Helm チャートによる Kubernetes への MCP サーバーのデプロイ
MCP 対応
本プロジェクトは MCP サーバーであり、NATS サーバー、ストリーム、オブジェクトストア、KV 関連のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-nats
NATS メッセージングシステムと連携するための Model Context Protocol (MCP) サーバーです。
この MCP サーバーは MCP Review の認定を受けています。
概要
このプロジェクトは、NATS 用の Model Context Protocol (MCP) サーバーを提供し、標準化されたインターフェースを通じて AI モデルやアプリケーションが NATS メッセージングシステムと連携できるようにします。NATS サーバーと連携するための包括的なツール群を公開しており、メッセージングシステムを扱う必要がある AI 搭載アプリケーションに最適です。
MCP とは?
Model Context Protocol (MCP) は、アプリケーションが大規模言語モデル(LLM)にコンテキストを提供する方法を標準化するオープンプロトコルです。このサーバーは MCP 仕様を実装し、LLM や AI アプリケーションに NATS メッセージング機能を提供することで、次の操作を可能にします。
- 標準化された方法で NATS メッセージングシステムと連携する
- NATS サーバーとストリームを安全に調査・監視する
- セキュアなインターフェースを通じて読み取り専用の操作を実行する
- MCP 対応の他のクライアントやホストと連携する
機能
- サーバー管理(読み取り専用操作)
- NATS サーバーの一覧表示と調査
- サーバーの健全性監視と ping
- サーバー情報の取得
- 往復時間(RTT)の測定
- ストリーム操作(読み取り専用操作)
- NATS ストリームの表示と調査
- ストリームの状態と情報の照会
- メッセージの表示と取得
- サブジェクトの調査
- オブジェクトストア操作
- オブジェクトストアのバケットの作成と管理
- オブジェクトストアへのファイルの保存と取得
- バケットとその内容の一覧表示
- オブジェクトとバケットの削除
- バケットの変更を監視
- 更新を防ぐためにバケットを封印
- キー・バリュー操作
- KV バケットの作成と管理
- キー・バリューペアの保存と取得
- KV の更新を監視
- キーとバケットの削除
- パブリッシュ操作
- NATS サブジェクトへのメッセージのパブリッシュ
- さまざまなメッセージ形式に対応
- 非同期メッセージのパブリッシュ
- アカウント操作
- アカウント情報とメトリクスの表示
- アカウントレポート(接続と統計)の生成
- アカウントのバックアップ作成と復元
- 接続中のサーバーの TLS チェーンを調査
- マルチアカウント対応
- 複数の NATS アカウントを同時に処理
- 認証情報を安全に管理
- MCP 連携
- MCP サーバー仕様を実装
- Claude Desktop などの MCP クライアントと互換性あり
- LLM とのやり取りに標準化されたツール定義を使用
- AI による NATS とのやり取りに安全な読み取り専用操作を提供
要件
- Go 1.25 以降
- NATS サーバー(URL 経由でアクセス可能)
- 認証用の NATS 認証情報
- MCP 対応クライアント(例:Claude Desktop、またはその他の MCP クライアント)
インストール
Go を使用する
go install github.com/sinadarbouy/mcp-nats/cmd/mcp-nats@latest
ソースからビルドする
git clone https://github.com/sinadarbouy/mcp-nats.git
cd mcp-nats
go build -o mcp-nats ./cmd/mcp-nats
Helm チャート(Kubernetes)
チャートは deploy/charts/mcp-nats にあります。OCI / GHCR やアンブレラチャートの dependencies を含むインストールガイド、値の概要、プローブ、HashiCorp Vault Agent Injector の例は、deploy/charts/mcp-nats/README.md に記載されています。
リポジトリのルートからのクイックスタート:
helm install mcp-nats ./deploy/charts/mcp-nats --namespace mcp-nats --create-namespace
公開済みのリリースは、次のように OCI からもインストールできます。
helm install mcp-nats oci://ghcr.io/sinadarbouy/charts/mcp-nats --version "0.1.4" --namespace mcp-nats --create-namespace
Chart.yaml の依存関係の記述例とレジストリへのログインについては、チャートの README を参照してください。
コンテナイメージの署名
タグ付きリリースでは ghcr.io/sinadarbouy/mcp-nats にプッシュし、鍵を使用しない GitHub OIDC を使って Sigstore Cosign でマルチアーキテクチャインデックス(および各プラットフォームのマニフェスト)に署名します。
公開済みのタグを検証します。
cosign verify ghcr.io/sinadarbouy/mcp-nats:0.1.4 \
--certificate-identity-regexp 'https://github.com/sinadarbouy/mcp-nats/.github/workflows/(release\.yml@refs/tags/v.*|sign-image\.yml@refs/heads/main)' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
署名機能の追加前に公開された過去のタグには、Actions → sign-image から署名できます(main から実行)。
Tilt 統合テスト(Docker Desktop Kubernetes)
Tilt を使って、公式 NATS とローカルの mcp-nats チャートをデプロイし、エンドツーエンドの認証テストを実施します。
前提条件:
- Tilt がインストールされていること
- Helm がインストールされていること
- Docker Desktop Kubernetes が有効になっていること
- 現在の kube コンテキストが
docker-desktopに設定されていること
統合スタックを起動します:
tilt up
次を使用します:
Tiltfiledeploy/tilt/nats-values.yamldeploy/tilt/mcp-nats-values.yaml- Helm デプロイの前に
deploy/tilt/Dockerfile.tiltでローカルイメージをビルド
停止してクリーンアップします:
tilt down
helm uninstall -n mcp-nats-tilt nats mcp-nats
kubectl delete namespace mcp-nats-tilt --ignore-not-found
簡単な検証コマンド:
kubectl get pods,svc -n mcp-nats-tilt
kubectl logs -n mcp-nats-tilt deploy/mcp-nats-mcp-nats
kubectl logs -n mcp-nats-tilt statefulset/nats
kubectl port-forward -n mcp-nats-tilt svc/mcp-nats-mcp-nats 8000:8000
認証のスモークテスト:
- NATS は
deploy/tilt/nats-values.yamlでmcpuser/mcppasswordを使用するように設定されています。 mcp-natsはdeploy/tilt/mcp-nats-values.yamlで、チャートが管理するシークレットを介して同じ認証情報を使用します。- 認証情報が一致しない場合、
mcp-natsのログに接続または認証の失敗が表示されます。
設定
環境変数
NATS_URL:NATS サーバーの URL(例:localhost:4222)NATS_<ACCOUNT>_CREDS:各アカウントの Base64 エンコードされた NATS 認証情報- 例:
NATS_SYS_CREDS、NATS_A_CREDS
- 例:
NATS_NO_AUTHENTICATION:匿名接続(認証情報不要)を有効にするには、"true" に設定しますNATS_USER:ユーザー名またはトークンによる認証に使用するユーザー名またはトークンNATS_PASSWORD:ユーザー名とパスワードによる認証に使用するパスワード
コマンドラインフラグ
--transport:トランスポートの種類(stdio、sse、または streamable-http)、デフォルト:streamable-http--address:HTTP トランスポートがリッスンするアドレス、デフォルト:0.0.0.0:8000--endpoint-path:streamable-http トランスポートのエンドポイントパス、デフォルト:/mcp--sse-address:非推奨の--addressの別名--log-level:ログレベル(debug、info、warn、error)、デフォルト:info--json-logs:ログを JSON 形式で出力するかどうか、デフォルト:false--no-authentication:認証情報なしの匿名接続を許可します--user:NATS のユーザー名またはトークン(NATS_USER 環境変数でも設定できます)--password:NATS のパスワード(NATS_PASSWORD 環境変数でも設定できます)
ヘルスエンドポイント(HTTP トランスポート)
GET /livez:プロセスの生存確認(NATS 依存関係の検証は行いません)GET /readyz:レディネス確認(NATS_URLへの TCP 接続を検証します)GET /healthz:生存確認の互換用エイリアス
これらのエンドポイントは、sse または streamable-http トランスポートで実行している場合に利用できます。
Helm チャートのプローブ
デフォルトのプローブと lifecycle.preStop については、deploy/charts/mcp-nats/README.md に記載されています。
認証方法
MCP NATS サーバーは、3 つの認証方法に対応しています。
-
認証情報ベースの認証(デフォルト):NATS 認証情報ファイルを使用します
NATS_<ACCOUNT>_CREDS環境変数を設定します- すべてのツールで
account_nameパラメーターが必要です
-
ユーザー名/パスワード認証:ユーザー名とパスワードを使用します
NATS_USERとNATS_PASSWORD環境変数を設定するか、--userと--passwordフラグを使用します
-
匿名認証:認証は不要です
NATS_NO_AUTHENTICATION=true環境変数を設定するか、--no-authenticationフラグを使用します
使用例
# Run with Streamable HTTP transport (default) and debug logging
./mcp-nats --log-level debug
# Run with custom Streamable HTTP endpoint path
./mcp-nats --transport streamable-http --address localhost:9000 --endpoint-path /mcp
# Run with JSON logging
./mcp-nats --json-logs
# Run with SSE transport
./mcp-nats --transport sse --address localhost:9000
# Run with anonymous authentication
./mcp-nats --no-authentication
# Run with user/password authentication
./mcp-nats --user myuser --password mypass
# Run with environment variables for authentication
NATS_NO_AUTHENTICATION=true ./mcp-nats
NATS_USER=myuser NATS_PASSWORD=mypass ./mcp-nats
リモート MCP サーバーで VSCode を使用する
.vscode/settings.json に以下が含まれていることを確認してください:
"mcp": {
"servers": {
"nats": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp"
}
}
}
Cursor(mcpServers):
{
"mcpServers": {
"nats": {
"env": {
"NATS_URL": "nats://localhost:4222",
"NATS_SYS_CREDS": "<base64 of SYS account creds>",
"NATS_A_CREDS": "<base64 of A account creds>"
},
"url": "http://localhost:8000/mcp"
}
}
}
匿名認証:
{
"mcpServers": {
"nats": {
"env": {
"NATS_URL": "nats://localhost:4222",
"NATS_NO_AUTHENTICATION": "true"
},
"url": "http://localhost:8000/mcp"
}
}
}
ユーザー名/パスワード認証:
{
"mcpServers": {
"nats": {
"env": {
"NATS_URL": "nats://localhost:4222",
"NATS_USER": "myuser",
"NATS_PASSWORD": "mypass"
},
"url": "http://localhost:8000/mcp"
}
}
}
バイナリを使用する場合:
{
"mcpServers": {
"nats": {
"command": "mcp-nats",
"args": [
"--transport",
"stdio"
],
"env": {
"NATS_URL": "nats://localhost:4222",
"NATS_SYS_CREDS": "<base64 of SYS account creds>",
"NATS_A_CREDS": "<base64 of A account creds>"
}
}
}
}
バイナリでの匿名認証:
{
"mcpServers": {
"nats": {
"command": "mcp-nats",
"args": [
"--transport",
"stdio",
"--no-authentication"
],
"env": {
"NATS_URL": "nats://localhost:4222"
}
}
}
}
バイナリでのユーザー名/パスワード認証:
{
"mcpServers": {
"nats": {
"command": "mcp-nats",
"args": [
"--transport",
"stdio",
"--user",
"myuser"
],
"env": {
"NATS_URL": "nats://localhost:4222",
"NATS_PASSWORD": "mypass"
}
}
}
}
Docker の設定:
{
"mcpServers": {
"nats": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"NATS_URL",
"-e",
"NATS_SYS_CREDS",
"ghcr.io/sinadarbouy/mcp-nats:0.1.4",
"--transport",
"stdio"
],
"env": {
"NATS_SYS_CREDS": "<base64 of SYS account creds>",
"NATS_URL": "<nats url>"
}
}
}
}
開発
前提条件
- Go 1.25+
- Docker(任意)
- NATS CLI
- MCP 仕様の理解
使用可能な Make コマンド
make help # Print help message
make build # Build the binary
make run # Run in stdio mode
make run-sse # Run with SSE transport
make lint # Run linters
stdio トランスポートでのテスト
stdio トランスポートを使用して MCP サーバーをテストする方法の詳細については、stdio の例ガイドを参照してください。
リソース
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。