mcpField
T
TacticalRMM

TacticalRMM

ローカル
github.com/shin2344234クラウド・インフラ37 週間前に更新

TacticalRMM について

TacticalRMM MCPサーバーは、AIアシスタントによる管理対象デバイスの情報確認と、モードに応じた操作を可能にします。TacticalRMMのフリートを管理する運用担当者向けで、`elevate`モードでは実行ごとに人の承認が必要です。

主な機能

  1. 01エージェント・アラート・チェック情報の取得
  2. 02プロセス・サービス・イベントログの確認
  3. 03コマンド実行とデバイス操作
  4. 04実行ごとの個別承認
  5. 05リクエスト・結果・承認判断の監査記録

活用シーン

  1. 01オフライン端末と失敗したチェックを集計
  2. 02端末のメモリやサービスの問題を調査
  3. 03フリート全体のパッチとソフトウェア状況を確認
  4. 04承認後に端末を再起動、またはコマンドを実行

MCP 対応

MCPサーバーは、TacticalRMMのフリート情報を読み取るツールと、モードに応じたコマンド・端末操作ツールをクライアントに公開します。`elevate`モードでは、実行ごとにブラウザーまたはサーバーのシェルで承認が必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"shin2344234-trmm": {
"command": "uvx",
"args": [
"trmm-mcp"
],
"env": {
"TRMM_API_URL": "<TRMM_API_URL>",
"TRMM_READONLY_API_KEY": "<TRMM_READONLY_API_KEY>",
"TRMM_COMMAND_API_KEY": "<TRMM_COMMAND_API_KEY>",
"TRMM_MCP_MODE": "<TRMM_MCP_MODE>"
}
}
}
}
起動コマンドuvx trmm-mcp
設定が必要な環境変数
TRMM_API_URLBase URL of your TacticalRMM backend, e.g. https://api.example.com
TRMM_READONLY_API_KEYシークレットTacticalRMM API key bound to a read-only role. Used for all reads.
TRMM_COMMAND_API_KEYシークレットTacticalRMM API key permitted to execute. Only needed for elevate or command mode, and only used after an approval is granted.
TRMM_MCP_MODEreadonly (default, 20 read tools), elevate (adds 8 execution tools, each requiring out-of-band human approval), or command (execution with no gate).

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypitrmm-mcp1.1.0

ツール

20

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

TacticalRMM MCP サーバー

AI アシスタントが TacticalRMM のインストール環境にあるすべての情報を読み取れるようにします。また、明示的に有効にした場合は、管理対象マシンでコマンドを実行できます。

「オフラインのマシンと、その理由は?」「フロントデスクの PC でメモリを消費しているのは何?」「今週失敗したチェックをすべて表示して」と尋ねると、稼働中のフリートデータに基づいた回答が得られます。elevate モードを有効にすれば、アシスタントは問題を修正することもできますが、各操作を自分で承認した後に限られます。

開発した理由

複数のクライアントのマシンを管理しています。TacticalRMM は、それぞれのマシンについて、誰も時間を取って確認できないほど多くの情報をすでに収集しています。そのデータを実際に活用したいと考えました。ダッシュボードに表示される以上に詳しい診断を実施し、すべてのデバイスを網羅したクライアントごとのレポートを作成し、誰かから報告を受ける前に、修正する価値のある問題を見つけるためです。

請求可能な作業は増えますが、作業に実質的な価値がある限り、それでよいと考えています。SMART エラーの初期兆候が出ているディスク、ひそかに空き容量が減っているサーバー、3 か月前からパッチが適用されなくなっているのに誰も気づいていない状態――こうした問題を見つけることには、対価をいただく価値があります。単なる忙しさを生むだけの作業に請求するのは違います。私が判断基準としているのは、レポートに載るすべての項目について、説明を受けたクライアントが修正する意味を理解できるかどうかです。

利用できる機能

28 個のツール。 エージェント、チェック、アラート、サービス、プロセス、イベントログ、ソフトウェアインベントリ、パッチ、スクリプト、監査履歴を対象とした読み取り専用ツールが 20 個、コマンドやスクリプトの実行、再起動、サービスの制御、プロセスの終了、マシンの起動を行う実行ツールが 8 個あります。

あらゆる操作の完全な監査証跡。 受信したすべてのリクエスト、引数を含むすべてのツール呼び出し、すべての結果、すべての TRMM API 呼び出し、すべての承認判断、すべての拒否が、認証情報の秘匿処理とローテーションを備えた構造化 JSONL ログに記録されます。フリート全体で SYSTEM としてコマンドを実行できるブリッジでは、誰がいつ何を要求したかを正確に把握することは必須です。そのため、監査ログはデフォルトで有効になっており、気づかれないまま省略されることはありません。詳しくは監査ログをご覧ください。

モデルが操作できない承認ゲート。 elevate モードでは、ブラウザー(パスワード+TOTP)またはサーバー上のシェルから、その呼び出しを個別に承認するまで実行は拒否されます。承認は引数のフィンガープリントに紐づけられ、一度だけ使用でき、有効期限があります。権限を付与するツールは存在しません。

実効性のある読み取り専用モード。 独立した 3 つの層で制限します。実行ツールは登録されず、HTTP クライアントは読み取り以外のリクエストを拒否し、API キー自体も実行権限のない TRMM ロールに紐づけられています。

実際のフリート向けに設計。 TRMM にはページネーションがなく、テーブル全体が返されます。ここでは、エージェント詳細の呼び出し 1 回で 192 KB になったことがあります。応答は必要な項目だけに絞り、上限を設けたうえで切り詰め、明示的な通知を付けるため、1 回の呼び出しでモデルのコンテキストを使い果たすことはありません。

Bearer 認証を使用する HTTPS、IP SAN を含む自己署名証明書、強化された systemd ユニットを備えています。クライアントは検証を無効にするのではなく、その証明書を信頼します。

macOS、Windows、Linux で Claude Code、Claude Desktop、LM Studio と連携します。TRMM 1.5.1 に対してビルドし、動作を確認しています。TRMM API 自体については、docs/trmm-api.mdで別途説明しています。


3 つのモード

readonly(デフォルト)elevatecommand
公開されるツール読み取りツール 20 個28 個28 個
読み取りはいはいはい
実行絶対に不可承認したもののみ、1 回に 1 つ常に可能
読み取り用 TRMM キーmcp-readonlymcp-readonlymcp-command
実行用 TRMM キー—mcp-command、承認後のみmcp-command
用途質疑応答のみ日常的なチャット無人自動化

対話的な作業には elevate をお使いください。Claude は何でも確認できますが、何かを「実行」しようとすると、その場で停止してあなたの操作を待ちます。

セキュリティ

要点は次のとおりです。

  • 承認ゲートは帯域外です。 elevate モードでは、ブラウザー(パスワード+TOTP)またはサーバー上のシェルから、その呼び出しを個別に承認するまで実行は拒否されます。承認は引数のフィンガープリントに紐づけられ、1 回のみ使用でき、有効期限があります。権限昇格を許可するツールは存在しないため、モデルが自分自身の承認を得る手段はありません。
  • 読み取り専用は、独立した 3 つの層で維持されます。 実行ツールは登録されず、HTTP クライアントは読み取り以外のリクエストを拒否し、API キー自体も実行権限のない TRMM ロールに紐づけられています。
  • command モードでは、破壊的なパターンはクライアント側で拒否されます。rm -rf /、mkfs、dd of=/dev/*、format c: などが対象です。必要に応じてエージェントの許可リストを使い、操作対象を厳密に制限できます。
  • ベアラー認証付きの HTTPS、IP SAN を含む自己署名証明書、強化された systemd ユニットを使用しています。クライアントは検証を省略せず、その証明書を信頼します。

3 つ目の読み取り専用層について、正直に説明しておくべき注意点が 1 つあります。TRMM にはサービス、プロセス、Windows 更新プログラムの表示専用権限がありません。この点、承認ページ独自のパスワード+TOTP ゲート、そして承認チャネルとして MCP elicitation を使わない理由については、すべて docs/security.md に記載しています。

セットアップ

このマシンでは、すでに以下の設定が完了しています。

  • venv/ に mcp 2.0 と httpx を含む仮想環境
  • TRMM ロール MCP Read Only と MCP Command、ユーザー mcp-readonly と mcp-command(どちらも UI ログインをブロックされており、使用できないパスワードが設定されています)
  • API キーを .env に書き込み済み(モード 600)

再プロビジョニングまたはキーをローテーションするには:

/rmm/api/env/bin/python /opt/trmm-mcp/provision_trmm_accounts.py --rotate

サーバーの実行

ほかのマシンから接続するには、まず待ち受けるアドレスを指定します。これらはユニットファイルではなく .env に設定します。ユニットは git に含まれており、そこにアドレスを直接書き込むと、そのユニットをコピーするたびに誤ったマシンへ設定が引き継がれるためです。

cat >> /opt/trmm-mcp/.env <<'EOF'
TRMM_MCP_HTTP_HOST=10.0.0.5
TRMM_MCP_PUBLIC_URL=https://10.0.0.5:8770
EOF

独自のアドレスに置き換えてください。TRMM_MCP_PUBLIC_URL は、承認が必要なときにアシスタントが開くよう案内する URL なので、実際にブラウザーからアクセスできる URL にする必要があります。この手順を省略すると、サーバーは 127.0.0.1 にバインドされます。クライアントが同じマシンで動作する場合は、これで問題ありません。

続いて、ユニットをインストールして起動します。

sudo cp /opt/trmm-mcp/trmm-mcp.service /etc/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl enable --now trmm-mcp

起動時の行にアドレス、モード、TLS が有効かどうかが表示されます。

journalctl -u trmm-mcp -n 5 --no-pager | grep listening

デフォルトではポート 8770 で HTTPS を提供し、.env のベアラートークンを要求します。簡単にテストするため、フォアグラウンドで実行するには:

/opt/trmm-mcp/run.sh readonly http

リスナーはステートレスで動作します(TRMM_MCP_STATELESS_HTTP=true がデフォルトです)。これは重要です。ステートフルなストリーミング HTTP では、サーバーがセッション ID を発行しますが、その ID はプロセスとともに失効します。そのため、サービスを再起動すると、接続中のクライアントはサーバーが忘れたセッションを再送することになります。mcp-remote 経由では、ツール呼び出しが数分間停止した後に失敗する一方で、tools/list は応答し続け、logs/server.log に Rejected request with unknown or expired session ID が記録されます。ステートレスにすることで、この障害を回避できます。サーバー起点のリクエストは使用していないため、代償もありません。restart_test.py で両方の動作を確認できます。

このポートでの認証はベアラートークンのみです。そのため、ポートに到達できるものはすべて、このサーバーの TRMM 権限を引き継ぎます。パブリックインターフェースにバインドするのではなく、LAN 内またはトンネルの背後で使用してください。

クライアントの接続

サーバーから必要なのは、.env に記載された ベアラートークン と、 クライアントが TLS 証明書を検証できるようにする certs/cert.pem のコピーです。

Claude Code は HTTP に直接対応しているため、ブリッジは不要です。

claude mcp add --transport http trmm https://192.0.2.10:8770/mcp \
  --header "Authorization: Bearer <TRMM_MCP_AUTH_TOKEN>" --scope user

サーバー上で実行する場合は、ネットワークを介さず、stdio で実行できます。

claude mcp add trmm -- /opt/trmm-mcp/run.sh readonly

承認ゲートを有効にするには readonly を elevate に置き換え、無人実行にするには command に置き換えてください。

Claude Desktop には mcp-remote ブリッジが必要です。LM Studio はリモート HTTP に標準で対応しており、どちらもネットワーク上で待ち受けることなく SSH 経由で実行できます。macOS、Windows、Linux 向けの 3 つすべての動作する設定と、システムの信頼ストアへの証明書のインストール方法については、docs/clients.md を参照してください。

ツール

28 個のツール:読み取り専用が 20 個、実行用が 8 個です。 エージェントを指定するツールでは、ホスト名または agent_id を渡せます。ホスト名は自動的に解決され、曖昧な名前は推測せずに拒否されます。

  • まずはこちら — trmm_fleet_overview:台数に加え、オフライン、再起動が必要、チェック失敗、パッチ適用待ちの一覧。
  • フリート — ステータスとフィルター付きのエージェント、クライアントとサイト、アラート、保留中のアクション、サーバー情報、アクティブなモード。
  • 診断 — サービス、プロセス、イベントログ、設定済みチェック、インストール済みソフトウェア、パッチの状態、自動化タスク、過去のコマンドとスクリプトの実行内容(出力を含む)。
  • 監査とスクリプト — TRMM 監査ログ、サーバーデバッグログ、スクリプトライブラリ、スクリプトの完全なソース。
  • 緊急用 — trmm_api_get:任意の API パスに対する生の GET。
  • 実行(elevate と command のみ)— コマンドの実行、保存済みスクリプトの実行、再起動、サービスの開始/停止/再起動、プロセスの強制終了、Wake-on-LAN、チェックの強制実行、自動化タスクの実行。

フリート全体への一括実行、サーバー側スクリプト、すべての設定変更は意図的に公開していません。28 行の完全な表、省略した理由、MCP の安全性アノテーション、コンテキストサイズへの対応については、docs/tools.md を参照してください。

ドキュメント

セキュリティ承認ゲート、3 つの読み取り専用レイヤー、TLS、正直に記した注意事項
インストールpip とクローンの違い、ファイルの保存場所、仮想環境の再構築
クライアントの接続Claude Code、Claude Desktop、LM Studio、SSH、証明書
ツール28 個すべてのツール、公開していない機能、アノテーション、コンテキストサイズへの対応
運用監査ログ、ブラウザーのログページ、バックアップ、テスト、トラブルシューティング
設定すべての環境変数と、リポジトリ内の各ファイルの役割
TRMM APITacticalRMM API 自体に関する独立したドキュメント

変更履歴

CHANGELOG.md を参照してください。

ライセンス

AGPL-3.0-or-later(LICENSE)、ファイルごとの SPDX ヘッダー付き。コピーレフト条項により、改変したコピーをネットワークサービスとして実行する場合は、変更を公開する必要があります。実行機能を持つフォークをオープンな状態に保つため、意図的にこうしています。

コーヒーをごちそうする

よろしければ、buymeacoffee.com/sethwalker234 からご支援ください。

コメント

MCP は初めてですか?

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

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