webroot-mcp
webroot-mcp
Webroot(OpenText エンドポイントセキュリティ / SecureAnywhere、 Global Site Manager(GSM)コンソールで管理)用のMCPサーバー。Webroot Unity API のGSMコンソールサイト、エンドポイント、グループ、ポリシー、脅威 履歴、リアルタイムエージェントステータス、DNS Protection(DNSP)メソッドを MCPツールとして公開します。
概要
ステートレスなHTTPサービス。認証情報は一切永続化されません。各リクエストが ヘッダー経由で独自の認証情報を提供し、そのリクエストの有効期間中のみ使用されます。
同時リクエストをサポート。リクエストごとの認証情報の分離はPythonの
contextvarsによって行われ、グローバル/共有クライアントインスタンスは使用しません。エントリーポイント:
POST /mcp(MCPプロトコル)およびGET /health(ヘルスチェック)。デフォルトポート:
8080(MCP_HTTP_PORTで設定可能)。
Related MCP server: mcp-connectwise-psa
認証
Webroot Unity APIは標準のOAuth2を実装しており、パスワード グラントを使用します:
POST https://unityapi.webrootcloudav.com/auth/token
grant_type=password&username=...&password=...&client_id=...&client_secret=...
&scope=Console.GSM SkyStatus.GSM
-> {"access_token": "...", "expires_in": 299, "refresh_token": "...", ...}アクセストークンの有効期間はわずか約5分であるため、このサーバーは
MCPリクエストのたびに毎回新しく認証を行い、キャッシュはしません。
つまり、認証情報は一切永続化もキャッシュもされません。実際のAPI呼び出しはすべて
Authorization: Bearer <access_token> ヘッダーを送信します。
ヘッダー認証パラメータ
ヘッダー | 型 | 必須 | デフォルト | 列挙値 | フィールド説明 | 例 |
| string | はい | なし | なし | GSM コンソールアカウントのメールアドレス |
|
| string | はい | なし | なし | 対応するパスワード |
|
| string | はい | なし | なし | Unity API クライアントID(Webroot への申請が必要) |
|
| string | はい | なし | なし | Unity API クライアントシークレット |
|
| string | はい | なし | なし | GSM コンソールのペアレントキーコード |
|
ヘッダーが1つでも欠けていると 401 が返ります:
{
"error": "Missing credentials",
"message": "This server requires the X-Webroot-Username, X-Webroot-Password, X-Webroot-Client-Id, X-Webroot-Client-Secret, X-Webroot-Parent-Keycode headers",
"required_headers": ["X-Webroot-Username", "X-Webroot-Password", "X-Webroot-Client-Id", "X-Webroot-Client-Secret", "X-Webroot-Parent-Keycode"],
"optional_headers": []
}認証情報が無効な場合、内部のログイン手順中に構造化されたツールレベルのエラーとして 表面化します(後述の「エラー処理」を参照)。HTTPレベルのエラーではありません。
環境変数
変数 | 型 | 必須 | デフォルト | 説明 |
| int | いいえ |
| HTTP リッスンポート |
| string | いいえ |
| HTTP リッスンアドレス |
| string | いいえ |
| Webroot Unity API ベース URL |
MCP エンドポイント
POST /mcp— MCP プロトコル(ストリーミング可能な HTTP トランスポート)GET /health— ヘルスチェック。{"status": "ok"}を返します(Webroot API に依存しない純粋なローカルプローブ)
ツール一覧
10個のツールはすべて読み取り専用です(readOnlyHint=True)。このサービスには
書き込み/削除ツールはありません。
ツール | 機能 | パラメータ |
| この GSM コンソール配下のすべてのサイト(顧客アカウント)を一覧表示 | なし |
| 指定したサイト配下の保護されたエンドポイントを一覧表示 |
|
| 指定したサイト配下のエンドポイントグループを一覧表示 |
|
| この GSM コンソール配下のすべてのセキュリティポリシーを一覧表示 | なし |
| 指定したサイトの指定日付範囲内の脅威検出履歴を取得(範囲は3か月以内に制限) |
|
| 指定したサイトの DNS Protection ブロック済みトラフィック記録を取得(DNSP が有効なコンソールのみ) |
|
| DNS Protection コンテンツフィルタリングカテゴリを一覧表示(DNSP が有効なコンソールのみ) | なし |
| DNS Protection ブロック理由コードを一覧表示(DNSP が有効なコンソールのみ) | なし |
| DNS Protection トラフィック集計統計を取得(DNSP が有効なコンソールのみ) |
|
| 指定したサイトのリアルタイムエージェントステータスを取得 |
|
page_size/batch_size の上限について: ベンダーの公開 API リファレンスには
上記のいずれのエンドポイントにも最大値の記載がないため、このサーバーは
独自のデフォルト値(50)とハードキャップ(200)を適用し、無制限の値をそのまま
通過させることはありません。
レスポンスはベンダーの JSON をそのまま、整形なしで(ensure_ascii=False で)
シリアライズし、20,000 文字に切り詰めます。リストが大きすぎる場合は、
truncated/original_count マーカーで切り詰めを示し、無制限のブロブを
返すことはありません。
エラー処理
エラーはインバンドの JSON エンベロープとして返されます(MCP プロトコルエラーではなく、 通常のツール結果の文字列です):
{"error": {"code": "not_found", "message": "...", "retryable": false}}code は次の固定語彙のいずれかです: not_configured、unauthorized、
not_found、invalid_argument、rate_limited、upstream_error。
retryable は、同じ呼び出しを再試行すれば成功する可能性があるかどうかを
呼び出し元に伝えます(rate_limited/upstream_error の場合は true、それ以外は false)。
結果が空のセット(例: エンドポイントのないサイト)は通常の成功結果であり、
not_found エラーではありません。
Webroot API への送信呼び出しは、接続タイムアウト 5 秒 / 読み取りタイムアウト 30 秒を使用し、
429/5xx レスポンスはバックオフ付きで最大 3 回再試行します(Retry-After を尊重し、
最大 20 秒で打ち切り)。プロセス全体で単一のプールされた HTTP クライアントを再利用します。
テスト例
# Health check
curl -s http://localhost:8080/health
# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp \
-H "X-Webroot-Username: admin@example.com" \
-H "X-Webroot-Password: <your-password>" \
-H "X-Webroot-Client-Id: <your-client-id>" \
-H "X-Webroot-Client-Secret: <your-client-secret>" \
-H "X-Webroot-Parent-Keycode: <your-parent-keycode>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: <session-id-from-initialize>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "webroot_get_sites",
"arguments": {}
}
}'ライブ検証済み(2026-07-30)実際の GSM コンソールに対して、10 個すべてのツールを
実際の認証情報でこのサーバーを通じてエンドツーエンドで呼び出しました:
webroot_get_sites は 92 個の実際のサイトを返しました(例: "Pinnacle Technologies"、
"Hohimer Wealth Management"); webroot_get_policies は 11 個の実際の
ポリシーを返しました; webroot_get_agent_status は実際のデバイスごとのステータス
データを返しました; webroot_get_endpoints と webroot_get_groups(実際のサイト
ID を使用)は両方とも実際のデータを返しました(エンドポイント 6 件、デバイス 46 台のグループ 1 件);
webroot_get_threat_history は実際の 2 か月の範囲に対して有効な(空の)結果を返しました。
4 つの DNS Protection ツール
(webroot_get_dnsp_categories/_block_reasons/_traffic_summary/
_blocked_traffic)はすべて API に正しく到達し、ベンダー自身の
dnsp_not_enabled エラーを返しました — これはリクエスト/認証パイプラインが
正しいことを証明しています。DNS Protection は、この特定のテスト
アカウントの GSM コンソールでは単に有効になっていないだけです(既知のギャップを参照)。
API リファレンス
公開、ログイン不要: https://unityapi.webrootcloudav.com/Docs/en/APIDoc (ガイドは OAuth2 認証を完全にカバー。API リファレンスはすべての メソッドのパラメータとレスポンス形式をカバー)
既知のギャップ
スコープは MSPbots が設定した 10 エンドポイントのみであり、ベンダーの 全 API サーフェスではない — Unity API は ECom(ライセンス 注文/管理)、通知、エージェントコマンド発行、サイト 作成/編集、OpenText Secure Cloud プラットフォーム API もカバーしていますが、 それらはここではスコープ外です。
4 つの DNS Protection(DNSP)ツールは実データで検証できなかった — DNS Protection はアドオン製品であり、テストアカウントの GSM コンソールでは 有効になっていません(
dnsp_not_enabledエラー、ライブで確認済み)。 他の 6 つのツールは、まったく同じアクセストークンを使用して実データで成功しており、 これは実装バグではなくアカウントの機能ギャップであることを確認しています。webroot_get_endpoints/webroot_get_groups/webroot_get_threat_historyには、認証された GSM ユーザーが実際にアクセス権を持つsite_idが必要 — Webroot GSM のアクセスはサイト単位です。ユーザーにアクセス権が付与されていない サイトに対してこれらの呼び出しを行うと、クリーンな"User does not have access to this console"エラーが返ります(テスト中に 92 サイトのうち 1 つでライブで確認済み)。これはこのサーバーのバグではありません。webroot_get_threat_historyは 3 か月を超える日付範囲を拒否する (Invalid data entered - Date Range Over 3 Months、ライブで確認済み)— このサーバーは範囲を強制または自動分割しません。start_date/end_dateを そのまま渡します。
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
A paid remote MCP for Unity-MCP, built to return verdicts, receipts, usage logs, and audit-ready JSO
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for Kaseya VSA — endpoints, patches, procedures, alarms, and tickets. Enables AI assistants to manage and monitor devices via the Kaseya VSA RMM platform.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for ConnectWise PSA (Manage) enabling ticket management, time entry, and read-only lookups of companies, contacts, and configurations with role-based access control and bring-your-own-API-keys support.65 npm6MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that exposes Acronis Cyber Protect Cloud APIs as 14 read-only tools for managing alerts, tasks, agents, resources, policies, and tenants.-
- FlicenseNot gradedqualityCmaintenanceMCP server for Check Point Harmony Endpoint that exposes policy, asset, vulnerability, quarantine, and remediation API methods as MCP tools, with per-request credential isolation and automatic two-step authentication.-