コンテンツにスキップ

MCP サーバー

Yagra は、MCP のツール群を最初から公開しています。 すると AI のクライアント — Claude Code、Claude Desktop、その他 MCP に対応したアシスタント — から、 今の監視の状態を普通の言葉で尋ねられます。

たとえば「落ちているノードは?」「アクティブなアラートを要約して」「edge-router-1 の直近 1 時間の CPU を見せて」「異常検知を実行して、おかしいところを教えて」といった具合です。

サーバーが公開するのは、41 個のツールです。内訳は読み取りが 38 個、書き込みが 3 個です。

読み取りのツールが見るのは、WebUI と同じデータです。トラブルシュート の 3 種は、WebUI が実行するのと同じオンデマンド分析を実行します。どちらも、保存済みの履歴を読んで 結果を返すだけです。

3 つの書き込みツールが作用するのは、監視のシステムです。ネットワークそのものではありません。 ネットワーク機器を設定したり変更したりするツールは、設計上存在しません。

指針となる決まりは、読み取りの同等性です。WebUI で見られるものは、MCP のクライアントからも 見られます。 新しい読み取りエンドポイントは、対応するツールと一緒に出荷するか、ツールを持たない 理由を書いたうえで出荷します。

この決まりは、書き込みには当てはめません。 書き込みができるのは、下の 3 つで固定です。

ツール 何をするか 必要な最小ロール
get_fleet_summary フリートの健全性サマリ: 状態ごとのノード数、アクティブアラート数 Viewer
list_nodes ロールアップした状態付きのノード一覧(検索可能) Viewer
get_node_status 1 ノードの完全なステータス: サマリ、アクティブアラート、インターフェース、そのノードに SNMP ポーリングが設定されているか Viewer
list_node_metrics ノードが実際に持っているメトリクスと、それぞれが届いているか、どう読むか(ゲージかカウンターか、ノードごと・インターフェースごと・表の行ごとのどれか)。query_metrics の前に聞きます Viewer
list_node_groups フォルダツリー(地図座標付き。フォルダごとの健全性集計も任意で取得可能) Viewer
get_prefix_gaps フォルダの機器が持っているのに IP プレフィックスに無いサブネットと、それぞれが出る理由 Viewer
get_site_prefix_gaps 同じ比較を全サイトについて一度に。サイトごとの状態と抜け。抜けは 2,000 件までで、サイトの間で分ける Viewer
get_subnet_overlaps 複数の拠点が持っているアドレス範囲。同じ範囲が 2 拠点にあるもの、ある拠点の範囲が別の拠点の範囲に含まれるもの。それぞれに状態と手がかりが付く Viewer
get_active_alerts アクティブアラート(新しい順。ノードと重大度で絞り込み可能) Viewer
get_alert_history 直近のアラート発報とクリア(ページング付き) Viewer
alert_trends アラートの時間的傾向: 常習犯ノード、直近の状態遷移、曜日×時刻のヒートマップ Viewer
list_suppressions メンテナンスウィンドウとミュート — 今アラートを黙らせているもの Viewer
query_metrics ノードのメトリクス時系列 — 最新値、範囲、またはレート³ Viewer
get_interface_series 1 インターフェースのトラフィック・パケットレート・エラー・破棄・光レベルの履歴(共通の時間軸に整列) Viewer
get_interface_thresholds 1 インターフェースに届くしきい値ルールを 6 つのスコープ段すべてから集め、そのうちどれが効いているか Operator
top_metrics 任意のメトリクスでフリート横断にノードをランキング Viewer
top_interfaces スループット・エラー・破棄・変化量でフリート横断にインターフェースをランキング Viewer
fleet_throughput 指定期間のフリート全体のトラフィック集計 Viewer
get_neighbors ノードが何と接続されているか(CDP/LLDP)。現在の状態と変更履歴 Viewer
get_topology kind= で、根本原因の帰属付きの依存関係グラフ、導出した接続グラフ links、それに対するオペレーターの判断 overrides、比較結果 shadow Viewer
list_discovered_endpoints ルータの ARP キャッシュから得た、ネットワーク上に居るが監視していないホスト Viewer
list_wireless_aps Yagra が監視している無線コントローラ配下の AP: 状態・接続端末数・どのコントローラが報告しているか(ノードにしたかどうかに関係なく) Viewer
top_flows 1 ノードまたはフリート横断のトップフロー: トーカー、会話、ポート、プロトコル、AS Viewer
flow_fanout 送信元ごとのファンアウト — 異なる宛先とポートの数(スキャン/ワームの兆候) Viewer
search_events パッシブイベントの検索: syslog、トラップ、Webhook Viewer
event_stats パッシブイベントの切り分け用統計: 最も騒がしいノード、重大度の内訳、一致しなかったシグネチャ Viewer
run_analysis オンデマンドのトラブルシュート分析を実行し、分析結果を待ちます Operator
get_analysis_findings 分析ジョブとその分析結果を id で取得します Viewer
list_analyses 直近の分析ジョブ(WebUI の一覧と同じく、ツール・状態・開始時刻で絞れる)、または定期実行スケジュールの一覧 Viewer
search_analysis_findings 全実行にまたがるトラブルシュート分析結果の検索(ノード・フォルダ・重大度・期間) Viewer
get_system_health section= で Yagra 自身の状態: ポーラー一覧、ポーリングループの計数、どのポーラーがどのノードを持つか、直近のコア⇄ポーラー断、ストア別の到達性、ホストリソース、転送の配送状況、保管中の認証情報が今も復号できるか、稼働バージョン、有効な任意ティア Viewer¹
get_report_runs 直近のレポート実行とその結果 Viewer
get_audit 誰が何を変更・確認したか View-audit
get_notification_deliveries 通知の配信ログ。配信ごとに届いたかどうかと、失敗したならどちら側か Admin
get_config kind= で Yagra 自身の設定を、領域ごとに 1 つの読み取りとして: しきい値、イベントルールとイベントソース、通知チャネルとルーティングルール、プロファイルと収集テンプレート、ノードの収集メトリクス、分類ルール、MIB カタログ、ノードの URL/DNS チェック、ディスカバリ候補とスキャン、Meraki の組織/ネットワーク/デバイス/ポーリング、NetBox サーバー、転送先、レポート定義とスケジュール、そして保持 / 隣接探索 / LLM / ロール / OIDC / LDAP の各設定 種別による²
fleet_state_history 一定期間におけるフリートの状態構成の推移 Viewer
get_dns_chain DNS 監視の解決チェーン Viewer
run_rca LLM による 1 インシデントの解説 — WebUI の「このインシデントを説明」と同じもの Operator
ack_alert 書き込み。 アクティブアラートを確認(ACK)する、またはその確認を取り消す Operator
open_maintenance 書き込み。 1 ノードのメンテナンスウィンドウを開始する Operator
poll_now 書き込み。 1 ノードをスケジュール外で即時ポーリングする Admin

書き込みはすべて、そして起動された分析もすべて、それを行ったトークンに紐づけて監査ログに記録され ます。

¹ get_system_health は、セクションごとに必要な権限が違います。 WebUI と完全に一致します。 大半は view、転送の状況は manage-config、認証情報の健全性は manage-credentials です。

読み取り専用は、「誰でも読める」という意味ではありません。 レポートの実行と状態の推移は、 REST のエンドポイントと同じく、範囲の限られたトークンに対してフリート全体を見せることはせず、 拒否します。

² get_config も、kind ごとに同じ仕組みです。 それぞれ、対応する REST エンドポイントと同じ 権限を求めます。ですから同じツールでも、Viewer にはロールの表が返り、しきい値のルール一式は拒否 されます。

内訳は、OIDC と LDAP が manage-users、14 種類が manage-config、残りが view です。保存して あるシークレットは返しません。ノードの URL チェックは、認証情報が紐づいているか (has_credential)だけを報告し、どれかは返しません。

³ query_metrics はノード単位の問い合わせなので、ノード単位の答えがあるときだけ答えます。 インターフェース単位・部品単位に系列が分かれているメトリクスは、ゲージであればノード内の 最大値に畳みます。応答の note にその旨と、その最大値がどちら向きかを書きます。光の受信 レベルのように小さいほうが異常なメトリクスでは、最大値は最悪のポートではなく一番健全な ポートを指すからです。インターフェース単位のカウンタは断り、答えられるツールの名前を返します — 1 本のインターフェースなら get_interface_series、フリート全体なら top_interfaces です。

表の行ごとに系列が分かれているメトリクス(メモリプール、CPU、センサー)は、行ごとに読めます。 latest の応答は、rows に各行のキー・名前・最新値を並べます。そのキーを row に渡すと、どの モードでもその行だけを読めます。行を 1 つ指定すれば系列は 1 本なので、畳みません。行ごとの カウンタは、row で行を指定しない限り断ります。

既定で有効です。設定は要りません。 逆に外したい場合は、コアに YAGRA_ENABLE_MCP=false を設定して 再起動してください。/mcp は未マウントになり、リクエストは 404 を返します。

エンドポイントは API ポートの上にあります。場所は次の 2 つです。

https://<yagra-host>/mcp # WebUI の TLS エッジ経由(推奨)
http://<yagra-host>:8080/mcp # core の API ポート直(平文)

どちらも使えます。いずれも Streamable HTTP のトランスポートです。前者をおすすめします。 WebUI のコンテナが /mcp をコアへ中継するので、通信が暗号化されるからです。

まだ最初の自己署名証明書のままの環境では、それを信頼させられないクライアントは、コアの平文ポートに 逃げるしかありません。設定 ▸ TLS 証明書で正式な証明書を取り込むことが、TLS の URL をどこからでも 使えるようにする条件です。

無効にしているときは、そもそもこのパスが存在しません(404)。以前とバイト単位で同じ状態です。公開 ダッシュボードのオプションを有効にしていても、MCP は常に認証を求めます。

守りの要は認証です。ですからサーバーは、既定ではどんな Host ヘッダーも受け付けます。クライアント が使えるホスト名をさらに限りたい場合は、YAGRA_MCP_ALLOWED_HOSTS にカンマ区切りの一覧を設定して ください。

サーバー自身の動きは、コアの Prometheus メトリクスに出ます。ツールの呼び出しはツール別・結果別に 数え、認証の失敗は別に数えます。

ですから「アシスタントがエンドポイントを叩きすぎている」「失効済みのトークンがまだ試されている」 といったことが、Yagra の他のすべてと同じやり方で見えます。

手順は 4 つです。WebUI に管理者でサインインする → 設定 ▸ API トークン ▸ API トークンを作成 → ロールを選ぶ → 1 回だけ表示される yat_… の値をコピーする。これが、AI のクライアントが送る Bearer トークンです。

  • Viewer(閲覧者) — 読み取りだけのアシスタント向けです。run_analysis を除くすべての 読み取りツールが使えます。

    トラブルシュート分析の実行は Operator の操作です(アラートの確認と同じ権限です)。ですから Viewer のトークンは、過去のジョブと結果を見られますが、新しく起動することはできません。

  • Operator(オペレーター) — 上記すべてに加えて、分析の起動、アラートの確認(ack_alert)、 メンテナンスウィンドウの開始(open_maintenance)ができます。

  • Admin(管理者) — すべてです。poll_now も含みます。これは「Yagra が何をいつポーリングするか」 を変える他の操作と、同じ権限を必要とします。

トークンは、ノードグループに限定することもできます。すべてのツールがこれを守ります。一覧や 検索は絞られた結果を返し、ランキングや履歴も絞られます。範囲外のノードについて尋ねたツールは、 「存在しない ID」とまったく同じ応答を返します。

1 つだけ、絞るのではなく省く値があります。event_stats の「一致しなかったシグネチャ」の ランキングです。これはノードをまたいで集計してあり、絞るための帰属情報が残っていません。ですから 範囲の限られたトークンには、空の結果と理由の注記を返します。

ロール・権限・範囲については、ユーザーと SSOで説明しています。

REST API の普通のログインセッショントークンでも動きます。ただしそちらは期限切れに なります。API トークンは人が操作しないクライアント向けで、同じ画面から失効させられます。

Claude Code(CLI / VS Code 拡張) — すべてのプロジェクト・ディレクトリで使えるよう --scope user を付けます。

Terminal window
claude mcp add --scope user --transport http yagra http://<yagra-host>:8080/mcp \
--header "Authorization: Bearer yat_your_token"

--scope user を付けないと、claude mcp add は local のスコープに入ります。すると CLI では 見えても、VS Code 拡張には出てきません。拡張が読むのは、user スコープとプロジェクトの .mcp.json だけだからです。

また MCP のサーバーは、セッションを開始したときに読み込まれます。ですから追加したあとは、 ウィンドウをリロードするか、新しいセッションを開始してください。

そのあと /mcp に yagra が connected として並ぶはずです。ノードの一覧やアラートの要約を頼んで みてください。

Claude Desktop — Desktop は mcp-remote ヘルパー経由でリモートの HTTP サーバーへ橋渡しします。 claude_desktop_config.json(Settings ▸ Developer ▸ Edit config)に以下を追加し、Desktop を 再起動してください。

{
"mcpServers": {
"yagra": {
"command": "npx",
"args": [
"-y", "mcp-remote", "http://<yagra-host>:8080/mcp",
"--header", "Authorization: Bearer yat_your_token"
]
}
}
}

Gemini CLI — ~/.gemini/settings.json(またはプロジェクトローカルの .gemini/settings.json)にサーバーを追加します。httpUrl キーで Streamable HTTP トランスポートが 選択されます。

{
"mcpServers": {
"yagra": {
"httpUrl": "http://<yagra-host>:8080/mcp",
"headers": { "Authorization": "Bearer yat_your_token" }
}
}
}

gemini を再起動すると、/mcp に Yagra のツールが一覧されます。VS Code の Gemini Code Assist も 同じ settings.json を読みます。

claude.ai(Web)/ Team / Enterprise — Yagra をカスタムコネクタとして追加します (Settings ▸ Connectors)。

これには前提があります。/mcp が Anthropic のサーバーから届くこと、つまり公開された HTTPS の URL であることです(たとえばリバースプロキシや Cloudflare Tunnel を前に置きます)。LAN や VPN の中だけのアドレスでは、ここからは繋がりません。

Gemini の Web アプリや Vertex AI のエージェントのコネクタにも、同じ「公開 HTTPS」の条件が当てはまり ます。

任意の MCP クライアント / curl での簡易確認 — トランスポートは HTTP 上の素の JSON-RPC なので、 クライアントなしでスモークテストできます。

Terminal window
curl -sN http://<yagra-host>:8080/mcp \
-H "Authorization: Bearer yat_your_token" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

AI のクライアントは、HTTP の呼び出しをあなたのマシンから行います。モデルプロバイダのクラウド からではありません。

ですからデスクトップや CLI のアシスタントに必要なのは、同じ LAN か VPN を通じて <yagra-host>:8080 に届くことだけです。インターネットへ内向きに公開する必要はありません。

例外は、ホスト型のコネクタを使う場合です(claude.ai の Web アプリ、Gemini の Web アプリ、Vertex AI のエージェント)。これらは上に書いたとおり、公開された HTTPS で /mcp に届く必要があります。

プライバシーとセキュリティの注意点

Section titled “プライバシーとセキュリティの注意点”
  • ツールの結果は、会話の文脈になります。 AI は今の監視データを読みます。ノード名、アドレス、 アラートなどです。クラウド上のアシスタントでは、そのデータが接続先のモデルプロバイダへ送られ ます。ツールの出力は、自分の境界を出ていくデータとして扱ってください。
  • デバイスの認証情報が、ツールの結果に含まれることは決してありません。 SNMP コミュニティ、 SNMPv3 の認証情報、ポーリング先の API キーは、保存時に暗号化されたままです。どのレスポンスの 形からも除いてあります。
  • トークンは、必要最小限の権限にしてください。 質問に答えるだけのアシスタントには、Viewer の トークンが適切な既定です。アラート・メンテナンス・分析を操作させたいときにだけ、Operator を 与えてください。
  • 不要になったら失効させてください。 クライアントが必要としなくなったら、設定 ▸ API トークン からそのトークンを削除します。すぐ使えなくなります。
  • すべての書き込みは監査されます。 ack_alert、open_maintenance、poll_now はいずれも、 その操作を行ったトークンに紐づけて監査エントリを記録します — WebUI 自身の操作が残すのと同じ 証跡です。