rustmistmcp について
rustmistmcp は、スコープ制御と監査に対応したツールを通じて HPE Juniper Mist クラウドをネットワーク運用者やMCPクライアントに公開する、非同期Rust製MCPサーバーです。読み取り操作に加え、計画・承認・適用の手順を経る一部のWANエッジ変更に対応しますが、パッケージ全体の受け入れ確認は未完了です。
主な機能
- 01Mistの組織・サイト・デバイスへのアクセス
- 02スコープ付きBearer Token認可
- 03ツール呼び出しの監査と秘匿化
- 04二者承認による変更ライフサイクル
- 05WANエッジのネットワークとポリシー変更
活用シーン
- 01Mistテナントとサイトのデータ確認
- 02ネットワーク状態とデバイス情報の確認
- 03対応するWANエッジ変更の承認と適用
MCP 対応
組織、サイト、アクセスポイント、スイッチ、ゲートウェイ、WLAN、クライアント、SLE、MarvisなどのMistクラウド操作をMCPクライアントに公開します。6つのツールを備え、対応する変更には計画、ダイジェスト、承認、適用の手順が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/mechubsec/rustmistmcp:0.4.0ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/mechubsec/rustmistmcp:0.4.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rustmistmcp
HPE Juniper Mist クラウド向けの非同期 Rust Model Context Protocol サーバー
mechub プロジェクト — 主権を確保したネットワークセキュリティの自動化
非公式のコミュニティプロジェクトです。 独立したコミュニティプロジェクトであり、Hewlett Packard Enterprise または Juniper Networks との提携や、両社からの承認を主張するものではありません。製品名および商標は、 ソフトウェアが相互運用するシステムを識別する目的でのみ使用しています。
rustmistmcp は、Juniper Mist クラウド(組織、サイト、AP、スイッチ、
ゲートウェイ、WLAN、クライアント、SLE、Marvis)を、範囲を限定した監査可能なツール群として
MCP クライアントに公開します。
rustjunosmcp が個々の SRX デバイスと
NETCONF で通信し、
rustpanosmcp が個々の PAN-OS ファイアウォールと
XML-API で通信するのに対し、このサーバーはマルチテナントのクラウドコントロール
プレーンと通信します。組織単位の 1 回の呼び出しで、環境内のすべてのサイトとすべての
アクセスポイントにアクセスできるため、スコープ設定、応答の制限、変更管理は飾りではなく、
設計の根幹です。
機能面での目標は、
nowireless4u/hpe-networking-mcp
の Mist 部分(サイトのヘルスと SLE、デバイスインベントリと統計情報、WLAN/SSID 管理、クライアントの
接続性、イベントとアラーム、監査ログ、RRM と不正デバイス検出、ファームウェア、
NAC/ポリシー、ゲストアクセス、Webhook、フロアプラン、Marvis)を、Python の仕様駆動型レジストリではなく、
mecmcp 基盤上で Rust により再実装することです。このプロジェクトでは、生成されたツールを
約 1,000 個登録していますが、こちらでは意図的にそのようなことはしません。再び実装する目的は、
厳選され、スコープが限定され、個別に文書化されたツール群そのものです。
mecmcp との関係
mecmcp は、mechub の MCP サーバーファミリーで共有される
ベンダー中立の Rust 基盤です。このリポジトリはその基盤の利用側であり、フォークではありません。
| 項目 | 所在 |
|---|---|
トークンの発行・ダイジェスト化・検証、tokens.json、スコープ、権限付与、呼び出し元コンテキスト | mecmcp-auth |
| 帰属情報、監査イベント、秘匿化、出力先 | mecmcp-audit |
| Streamable-HTTP トランスポート、ホスト/Origin チェック、レート制限と同時実行数の制限 | mecmcp-transport |
| CLI の骨格、TLS の初期化、シグナル、グレースフルシャットダウン | mecmcp-runtime |
| 変更管理の計画 → ダイジェスト化 → 承認 → 適用 → 検証 | mecmcp-changeset |
| 組織/サイト/テナントのレジストリ | mecmcp-inventory |
| Mist REST クライアント、API トークン認証、応答モデル、ツール群 | このリポジトリ |
Mist API 固有でないものはすべて上流に置かれます。ここで汎用の認証コードやトランスポートコードを
書いていることに気づいたら、それは mecmcp に置くべきです。現在、一時的な例外はありません。
docs/UPSTREAM_COMPATIBILITY.md の台帳に記録されていた唯一の例外
(Mist 型のトークンライフサイクルアダプター)は、削除条件が満たされたため削除されました。今後新たな例外を設ける場合は、
客観的な削除条件とともに、そこへ記録する必要があります。
API
Mist は、リージョンごとのクラウドエンドポイントから提供される、バージョン管理された REST API を /api/v1 で公開しています。組織のホームリージョンによってホストが決まります。
| リージョン | エンドポイント |
|---|---|
| Global 01 | api.mist.com |
| EU 01 | api.eu.mist.com |
| GovCloud | api.gc1.mist.com |
ほかにもリージョン別のクラウドが存在します。正確な一覧は Juniper の API Endpoints and Global Regions テーブルを参照してください。リージョンは推測せず、オペレーターが設定する必要があります。
Mist ベンダー API は API トークンと外部 OAuth 2.0 に対応しています。API トークンは Authorization: Token <token> として送信し、ユーザー単位または組織単位で発行でき、作成したアカウントの権限を継承します。rustmistmcp v1 が実装する認証方式は意図的に API トークンのみであり、OAuth の認証情報は受け付けません。Juniper Mist のログイン認証情報を使った HTTP Basic 認証は2026年9月をもって非推奨となるため、ここでは実装しません。
主な参考資料:
具体的なエンドポイントマップ、ページネーション、レート制限の仕様は、クライアントコードを追加する前に、稼働中の API リファレンスと照合して検証中です。この README では、検証が済んでいない仕様を記載しません。
ステータス
基盤の構築済み。読み取り専用の実テナント受け入れテストに合格しました。 ワークスペースには、監査済みの操作カタログ、厳格なプロファイルメタデータ、認可モデル、Mist の操作入力を検証し、不透明なカーソルを設定済みのオリジンに関連付ける、カタログに準拠した MistClient コントラクトがあります。mecmcp#90 はクローズ済みです。そのため、本番経路では MistHandler::from_config によって mecmcp-http 上の具体的な HTTPS 実装である HttpMistClient が構築されます。
ラボ環境のデプロイは実際の Mist 組織に接続できました。2026-08-10 に、ループバックにバインドされたエンドポイントと許可範囲を限定したベアラートークンを使い、get_mist_self(getSelf)、get_mist_org(getOrg)、list_mist_sites(listOrgSites)はそれぞれ、92~325 ms で result: ok とともにテナントデータを返しました。これは Issue #11 のゲートであり、現在はクローズ済みです。
未完了であり、完了したと説明してはならない事項:
- この実行は、パッケージ全体の受け入れテストではありません。 TLS なし、単一組織、単一トークン、3 つの読み取りツールのみのループバック環境で実施しました。
docs/PACKAGING_ACCEPTANCE.mdのチェックリスト(TLS ホスト名と証明書チェーン、匿名アクセスと不正なベアラーの拒否、Host/Origin の厳密な適用)は未完了です。 - 起動時の
/api/v1/selfによる ID プローブはありません。get_mist_selfツールは実テナントで動作しますが、起動時に/selfをプローブする処理はなく、LIVE_MIST_BLOCKERは引き続きその不足を示しています。 - 変更操作はバッチ 1 の WAN エッジオブジェクトに限られます。 バッチ 1 では、ネットワーク、サービス、サービスポリシー、ゲートウェイテンプレート、デバイスプロファイルの作成と更新に対応しています。実行するには、plan → digest → approve → apply のライフサイクルを経る必要があります。削除操作、および
mist_configuredデバイスプロファイルの割り当て・割り当て解除には未対応です。実テナントに対する apply はまだ実施していません。
認証情報なしで構築されたハンドラーは、I/O を実行しない BlockedMistClient を使用します。拒否時に返されるメッセージが LIVE_MIST_BLOCKER です。
サイトの検出
サイトを対象とするツールは、ハンドラーがすでに認識しているサイト以外では動作しません(「API」を参照)。起動時、サーバーは許可リストに登録されたすべての組織に対して listOrgSites を呼び出し、サービスの提供を開始する前にサイトのマップを作成します。--site-refresh-interval-secs(デフォルトは 300)は、一定間隔でこの処理を繰り返すバックグラウンドタスクの間隔を制御します。これにより、Mist 側で追加または削除されたサイトが、再起動せずに反映されます。0 に設定すると、バックグラウンドタスクは無効になり、起動時に一度だけ検出します。
この更新は、オペレーターが設定した Mist の接続先に対するアイドル時のポーリングです。ツールのトラフィックとは無関係に、site-refresh-interval-secs ごとに listOrgSites をリクエストし、ほかの読み取り処理と同じ、カタログで検証済みの MistClient を使用します。クライアントが開始した呼び出しではなく、内部サーバー状態を更新する読み取り処理であるため、ツールごとの監査履歴には記録されません。更新中に組織のリクエストが失敗した場合、または追跡対象サイト数の上限に達した場合、その組織については既知のサイトを削除せずに維持します。他の組織のサイトには影響しません。
共有の TokenSecret、キャンセル、変更セットのプリミティブは再利用し、新たに構築することはありません。Mist のヘッダー名、カタログポリシー、リクエスト/レスポンスのスキーマ、終端状態、リトライの分類、デプロイは、このリポジトリに引き続き保持されます。
プレリリースのパッケージ化とデプロイの境界
チェックイン済みの Docker、アーカイブ、systemd、LXC アセットは、プレリリースのパッケージ化のみを目的としています。これらを使って構築したラボ用 LXC は、テナントの読み取り専用トラフィックを実際に処理しました(issue #11)。ただし、これはパッケージ化の受け入れ確認と同じではありません。この実行では TLS もループバック以外へのバインドも使用していないため、docs/PACKAGING_ACCEPTANCE.md の TLS、Host/Origin、無効な bearer の項目は未検証のままです。/api/v1/self の起動プローブは未実装で、変更は change-set のライフサイクルを経由する batch-1 WAN エッジオブジェクトに限られます。実際のテナントに対する適用は行われていません。このチェックリストが完了するまで、v1 リリースラベルを付けてはなりません。
OCI イメージは、ダイジェストで固定した Rust ビルダーと、ダイジェストで固定した distroless Debian 13 ランタイムを使用するマルチステージビルドです。UID/GID 65532 で /usr/local/bin/rustmistmcp のみを実行します。ランタイムイメージにはシェル、パッケージマネージャー、ランタイムフェッチャーがありません。CA データは distroless ベースから取得されます。変更されないイメージダイジェストを使用し、変更可能なタグは決して使用しないでください。付属の compose の例は読み取り専用で、すべてのケーパビリティを削除し、no-new-privileges を使用し、PID 数と /tmp の使用を制限し、/etc/rustmistmcp を読み取り専用でマウントし、/var/lib/rustmistmcp を読み書き可能でマウントします。Mist のシークレットや bearer シークレットをイメージレイヤー、compose の環境変数、コマンド引数に含めないでください。
チェックイン済みのサービスと OCI コマンドは、共有 CLI のループバック HTTP 契約をそのまま使用します。すなわち、/etc/rustmistmcp/mist.json、bearer ストア、ポート 30030、HMAC による秘匿化付きの JSON 監査ログ、および systemd での journald への直接配信です。OCI の監査ログは JSON 形式で stderr に出力され、ホストの journal ソケットはマウントされません。変更状態フラグや実際の Mist の準備状況チェックはありません。mecmcp#159 がクローズされたため、--version でこのバイナリの名前とバージョンが報告されます。したがって、リリースの識別情報は --version、--help、BUILD-INFO、および成果物/デプロイ済みアーティファクトの SHA-256 値で検証します。
compose の例は Linux 専用です。ホストネットワークを使用することで、コンテナの 127.0.0.1:30030 リスナーは、外部インターフェースに公開せずに同じホストから到達可能になります。起動する前に、バインドマウントする状態ファイルとシークレットファイルを数値 UID/GID 65532 からアクセスできるようにしてください。
install -d -m 0750 packaging/container/runtime
install -d -m 0700 packaging/container/state
cp examples/mist.example.json packaging/container/runtime/mist.json
printf '%s\n' '{"version":1,"tokens":[]}' > packaging/container/state/tokens.json
install -m 0600 /dev/null packaging/container/runtime/mist-api-token
# Populate this before starting Compose; it is mounted at the path referenced
# by mist.json and must never be put in an environment variable or command.
read -sp 'Mist API token: ' token && printf '%s' "$token" > packaging/container/runtime/mist-api-token && unset token
# Mint the bearer token into the state mount before starting Compose. The
# secret is printed once; store it in the client that will call this server.
rustmistmcp token add --tokens-file packaging/container/state/tokens.json \
--name my-client --devices '*' --tools '*' \
-f packaging/container/runtime/mist.json
# Set modes before ownership so the files remain 0600 after chown.
chmod 0600 packaging/container/runtime/mist-api-token packaging/container/state/tokens.json
sudo chmod 0640 packaging/container/runtime/mist.json
sudo chown root:65532 packaging/container/runtime/mist.json
sudo chown 65532:65532 packaging/container/runtime/mist-api-token \
packaging/container/state/tokens.json
sudo chown -R 65532:65532 packaging/container/state
sudo chown root:65532 packaging/container/runtime
RUSTMISTMCP_IMAGE='ghcr.io/mechubsec/rustmistmcp@sha256:<verified-64-hex-digest>' \
docker compose -f packaging/container/compose.example.yaml up
Mist API トークンは、所有権を UID/GID 65532 に移す前、かつ up の前に設定してください。所有権を移すと、非特権オペレーターは書き込めなくなり、認証情報ローダーは起動時に空のトークンを拒否します。値を環境変数、コマンド引数、イメージレイヤー、Compose ファイルに含めずに設定してください。
付与権限を伴う MCP bearer トークンの追加/一覧表示/失効/ローテーションには、共有の token_cmd::run_with_grant を使用します。以前これを仲介していた、Mist 型に固有のプライベートアダプターは削除されています。token add で作成される新しいトークンには引き続き権限が付与されません。共有コマンドは、既存の検証済み MistGrant 値を保持します。この bearer トークンストアは、アウトバウンドクライアントが使用する Mist API トークンとは別のものです。
Docker コンテナガイド
監査設定の要件と、二者承認モードとラボモードのセットアップを含む、Docker で rustmistmcp を実行する手順については、docs/HOW-TO-SETUP-DOCKER.md を参照してください。
LXC オペレーターの前提条件
手順を追ったビルドガイドについては、docs/HOW-TO-SETUP-LXC.md を参照してください。
セキュリティレビュー文書
docs/THREAT_MODEL.md— 信頼境界、セキュリティプリンシパル、実際の Mist 組織に対してトークンやエージェントが侵害された場合の影響範囲、および実施済みと計画中の緩和策。docs/TOKEN_ROLE_GUIDANCE.md— アウトバウンド Mist API トークンには、個人用トークンやスーパー管理者トークンではなく、専用の最小権限の組織トークンを使用すべき理由。nesting=1が設定された専用の Debian 13 非特権 LXC でのみデプロイしてください。 対象の systemd バージョンでマウントが正常と報告されるには、nesting=1が必要です。 ゲストからホスト側の非特権設定とネスティング設定を証明することはできません。権限のあるホストインベントリで確認したうえで、RUSTMISTMCP_LXC_HOST_PROOF=unprivileged=1,nesting=1をインストーラーに明示的に証明してください。Debian 13 以外および LXC 以外のホストも拒否されます。 パッケージの構築時に Proxmox や Mist テナントに接続しないでください。別途承認された場合のラボ受け入れゲートでは、まず VMID 613 とそのアドレスが未使用であることを証明し、新たにプロビジョニングされた 613 LXC のみを対象にしてください。VMID 612 を操作したり、無関係なゲストのスナップショットを作成したりしないでください。
アーカイブインストーラーは、変更を加える前にチェックサムとアーカイブ全体の構成を検証し、稼働中の設定、シークレット、状態、またはカスタマイズされたユニットを上書きしません(RUSTMISTMCP_FORCE_UNIT=1 が設定されている場合を除く)。また、サービスを有効化しません。
変更を加えない事前チェックには、root 権限なしで packaging/lxc/install.sh --validate-only ARCHIVE ARCHIVE.sha256 を使用してください。
稼働用ではないサンプルを /etc/rustmistmcp/mist.example.json および /etc/rustmistmcp/tokens.example.json にインストールします。稼働用ファイルは手動で設定してください。
| パス | 必要な所有者/モード | 用途 |
|---|---|---|
/usr/local/bin/rustmistmcp | root:root、0755 | リリースバイナリ |
/etc/rustmistmcp/mist.json | root:rustmistmcp、0640 | サービスから読み取り可能な Mist プロファイル |
/etc/rustmistmcp/mist-api-token | rustmistmcp:rustmistmcp、0600 | v1 アウトバウンド Mist API 認証情報 |
/var/lib/rustmistmcp/tokens.json | rustmistmcp:rustmistmcp、0600 | ベアラートークンストア |
/etc/rustmistmcp/audit-hmac.key | rustmistmcp:rustmistmcp、0600 | 監査 HMAC キー |
/var/lib/rustmistmcp/changeset-state.json | サービスユーザーの状態、親ディレクトリは 0700 | 永続状態のパス |
永続 journald の容量は 512 MiB に制限されています。実トラフィックを流す前に、リモートジャーナル/SIEM への転送を設定してください。
ファイル監査の起動時動作はフェイルクローズです(mecmcp#158)。--audit-log-file を開けない場合、サイレントに機能を縮退させるのではなく起動に失敗し、journald が引き続きログ配信の基準となります。正常な HTTP シャットダウン(mecmcp#156)は組み込まれています。SIGTERM と SIGINT によりリスナーが停止し、処理中のリクエストを最大 10 秒間待ちます。ただし、これは設定された動作であり、負荷時のドレインを検証したものではありません。外部へのバインドには、TLS と、許可する Host および Origin の厳密な設定が必要です。デフォルトのデプロイ設定はループバックのみです。
各リリース候補について、クリーンなツリーから scripts/build-release.sh でビルドしてください。決定的な rustmistmcp-v<VERSION>-<TARGET_TRIPLE>.tar.gz、付随する SHA-256、BUILD-INFO が生成されます。デプロイ前に、生成されたバイナリの glibc 下限バージョンを測定してください。
objdump -T bin/rustmistmcp | grep -oE 'GLIBC_[0-9]+\.[0-9]+' | sort -Vu | tail -1
リリース CI では、チェックサム、SBOM、来歴情報、linux/amd64 OCI イメージ、不変のダイジェスト記録が生成されます。RC の時点で上流の参照/仕様を一度更新し、カタログを再生成して差分を確認し、別途デプロイを受け入れる前にパリティの不足がゼロであることを必須としてください。
次の作業を順番に行ってください。
/api/v1/self起動時 ID プローブを実装します。これに必要なアウトバウンドのHttpMistClientはmecmcp#90で既に導入されており、get_mist_selfツールにより、稼働中の組織に対する呼び出し自体が機能することも確認できます。docs/PACKAGING_ACCEPTANCE.mdの残りを完了します。TLS、ループバック以外での Host/Origin 強制、匿名アクセスおよび不正なベアラートークンの拒否が含まれます。いずれも issue #11 のループバック読み取り専用実行では検証されていません。- 変更操作は
mecmcp-changesetの背後にのみ追加し、直接書き込みは決して行わないでください。issue #14 で設計され、executeの分割はexecute_class.rsとして導入されました。
設計上の方針
- 自動生成ではなく、厳選します。 ツールは手作業で選定し、ドキュメント化します。自動登録されたエンドポイントが千個あっても、それはモデルに検索の問題を押しつけるだけであり、能力とは言えません。
- 書き込みの前に読み取ります。 変更を加えるすべてのツールは、plan → digest → approve → apply のライフサイクルを経由しなければ利用できません。単一の未検証の呼び出しで組織に書き込むツールはありません。
- スコープを設定したトークンを使用します。 ベアラートークンにはツール、組織、サイトの明示的なスコープを設定します。スコープのないトークンは利便性のためのものではなく、構成エラーです。
- I/O に上限を設けます。 リクエストとレスポンスのサイズに上限を設定します。クラウドのコントロールプレーンは、資産全体に相当するサイズのペイロードを平然と返しますが、このサーバーはそうしません。
- 設計上、監査可能です。 呼び出し元を特定しつつ、認証情報をログに漏らさないよう、
mecmcp-auditで帰属情報の記録と秘匿化を行います。 - リポジトリにシークレットを置きません。 Mist API トークンは、バージョン管理の対象外にある、運用担当者が管理するファイルに保管します。v1 では OAuth クライアントシークレットを受け付けません。
- デバイスのシークレットは、モデルが見る前に秘匿化します。 WLAN PSK、RADIUS/SNMP の共有シークレット、および Mist が返す API キー/トークンは、モデルに提示するすべての読み取り、変更セットのプレビュー、プランの応答で、
mecmcp-redactにより削除されます。これは、既知の認証情報に該当するフィールドに対する拒否リスト照合です。暗号学的な保証ではありません。拒否リストがまだ対象としていない形式に対する最善努力であり、自由形式のフィールドにシークレットを保存しても安全ということではありません。
WAN エッジツール
このサーバーは、組織、サイト、デバイス、WLAN、クライアント、SLE、イベント、診断を対象とする厳選された読み取り機能を提供します。以下に示す WAN エッジのサブセットは、SRX/SSR ゲートウェイとそのオーバーレイ接続を対象としています。ツールレジストリ全体については、crates/rustmistmcp/src/server/mod.rs の KNOWN_TOOLS を参照してください。
| ツール | 説明 |
|---|---|
apply_mist_change_set | 承認済みの変更セットを Mist に適用します。承認を検証し、ドリフトを確認して変更を実行し、結果を検証します。 |
approve_mist_change_set | 計画済みの変更セットに対し、2人目の担当者による承認を付与します。承認者はオーナーとは別の人物である必要があります。 |
get_mist_change_set | ステージ済みの変更セットを確認し、状態、オーナー、変更前後の値、承認状況を返します。before/after のシークレットを含むフィールド(PSK、共有シークレット、API キー/トークン)は秘匿されます。構造フィールドとシークレット以外のメタデータは保持されます。 |
get_mist_sle_impact | 1つのサイト SLE メトリックの影響を受けるゲートウェイ、アプリケーション、または概要を取得します。 |
get_mist_wan_config | ID を指定して WAN エッジ構成オブジェクトを1つ取得します。シークレットを含むフィールド(ゲートウェイテンプレートのトンネル PSK、共有シークレット、API キー/トークン)は秘匿されます。構造フィールドとシークレット以外のメタデータは保持されます。 |
get_mist_wan_edge_stats | サイトの WAN エッジゲートウェイメトリック、または1つのゲートウェイのインサイトメトリックを取得します。 |
list_mist_applications | サイトで確認されたアプリケーションを一覧表示するか、その数を数えるか、ゲートウェイアプリケーションカタログを一覧表示します。 |
list_mist_wan_config | ネットワーク、サービス、サービスポリシー、ゲートウェイテンプレート、デバイスプロファイルなどの WAN エッジ構成オブジェクトを一覧表示します。シークレットを含むフィールド(ゲートウェイテンプレートのトンネル PSK、共有シークレット、API キー/トークン)は秘匿されます。構造フィールドとシークレット以外のメタデータは保持されます。 |
list_mist_wan_edges | 組織またはサイト内の WAN エッジゲートウェイ(SRX/SSR)を一覧表示します。 |
plan_mist_change | WAN エッジ構成オブジェクト(ネットワーク、サービス、サービスポリシー、ゲートウェイテンプレート、デバイスプロファイル)の変更セットをステージします。承認可能な、ダイジェストに紐づく計画を返します。配列は全体が置き換えられ、null はフィールドを削除します。返される before/after のシークレットを含むフィールドは秘匿されます(計画/適用のライフサイクル自体では、秘匿されていない値が使用されます)。 |
search_mist_bgp_peers | 組織またはサイト内の WAN エッジ BGP ピア統計を検索するか、その数を数えます。 |
search_mist_peer_paths | SD-WAN オーバーレイのピアパス統計を検索するか、個別のフィールドごとに数を数えます。 |
search_mist_service_path_events | サイトの WAN エッジサービスパスイベントを検索するか、その数を数えます。 |
search_mist_tunnels | WAN エッジ IPsec トンネル統計を検索するか、個別のフィールドごとに数を数えます。 |
イベントストアへの監査転送
監査証跡はこのホストに残りません。このサーバーは、ファミリー標準である AUDIT-FORWARDING-STANDARD.md に準拠しています。
生成元のマシンにしか存在しない監査記録は監査証跡ではありません。その記録の対象となる当事者が運用するマシン上のログファイルにすぎません。
出力(現在有効)
--audit-format json \
--audit-log-file /var/lib/rustmistmcp/audit.jsonl
JSON は必須です。text 形式はターミナルでの閲覧用であり、解析対象ではありません。このファイルはオペレーター向けの成果物であり、ローテーションする必要があります。サーバーがファイルを切り詰めることはありません。
トランスポート(仕様策定済み、未実装)
SSDF の統合済みエビデンス契約に従い、レコードは SSDF の ssdf.audit にハッシュチェーン形式の行として直接書き込まれます。これにより、行の削除や編集を検出できます。mecmcp#292 で追跡されています。
より低コストな syslog 経路も設計されましたが、採用されませんでした。機能はしますが、レコードがチェーン化されません。このほかのリンクはすべて、構造上、改ざんを検知できます。プランダイジェストは承認に結び付き、承認には個別のプリンシパルが記録され、token_verified_fields は保証された来歴と申告された来歴を分離します。最後の段階がチェーン化されていないと、監査人が最も必要とする箇所で、その保証が失われてしまいます。その理由は標準に記録されています。
結果の読み取り方
token_verified_fields には、トークンが来歴を保証したフィールドが記載されます。残りのグループである client_name、model_id、session_id はクライアントが申告したものであり、何によっても認証されていません。これらを同等のものとして扱わないでください。
request_id は、トランスポートイベント、ハンドラーイベント、および(Junos の場合)デバイスのコミットコメントを相互に関連付けます。
ライセンス
MIT のライセンスに基づいています。
--lab-mode
--lab-mode は、2 人による統制が統制ではなく形式だけのものとなる、単独オペレーターのラボ環境で、2 人目のプリンシパルを不要にします。デフォルトでは無効であり、重要な環境では無効のままにしてください。
変更される点と、変更されない点は次のとおりです。
- 変更セットの作成時に免除が自動的に適用されます。免除用ツールはなく、フローは本番環境と同じ prepare → apply のままです。
- プランニング、プランダイジェスト、ドリフト検出、適用時の再検証はすべて引き続き実行されます。ラボモードで省略されるのは2 人目のレビュー担当者であり、変更記録ではありません。
- 承認者が捏造されることはありません。 免除された変更セットでは、承認記録に
approver: nullとwaived: { reason: "lab-mode" }が記録されます。これは正当な 2 人承認と暗号学的に区別でき、後から別のものとして表示することもできません。後日、どの変更で実際に職務分掌が行われていたかを証明する必要が生じた場合に重要です。 - 有効にすると、サーバーは起動時に明確な警告を表示します。
統制を免除せずに単独で書き込みテストをしたい場合は、名前の異なるトークンを 2 つ発行し、一方で準備し、もう一方で承認してください。プリンシパルはトークン名であり、自己承認は拒否されます。これなら、統制を維持したまま 1 人でライフサイクル全体を実行できるため、形式に何らかの価値がある環境ではこちらを推奨します。
有効にする
サービスユニットにフラグを追加します。パッケージをインストールした場合は、提供されたユニットを編集せずにドロップインを使用してください。そうすれば、アップグレードによって設定が気付かないうちに削除されることはありません。
sudo systemctl edit rustmistmcp
ExecStart を置き換える場合は、コマンド全体を記述し直す必要があります。そのため、短いコマンドを書き直すのではなく、提供されたコマンドをコピーしてフラグを追加してください。
[Service]
# Clear the shipped ExecStart before replacing it; systemd appends otherwise.
ExecStart=
ExecStart=/usr/local/bin/rustmistmcp \
--device-mapping /path/to/mist-profile.json \
--transport streamable-http \
--host 127.0.0.1 \
--port 30030 \
--tokens-file /path/to/tokens.json \
--lab-mode
sudo systemctl daemon-reload && sudo systemctl restart rustmistmcp
監査ログで起動時の警告を確認し、設定が反映されたことを確認します。
sudo journalctl -u rustmistmcp --since "1 minute ago" | grep -i "lab mode"
次のメッセージが表示されます:lab mode enabled: change sets are approved on creation with no second principal. Records carry approval_waiver=lab-mode. Do not run this against production devices.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。