コンテンツにスキップ

MCP サーバー

Yagra はオプトインで MCP のツール群を公開でき、 AI クライアント — Claude Code、Claude Desktop、その他 MCP 対応のアシスタント — から稼働中の 監視状態を自然言語で問い合わせられます。例: 「落ちているノードは?」「アクティブなアラートを 要約して」「edge-router-1 の直近 1 時間の CPU を見せて」「アノマリー検知を実行して 異常を教えて」

サーバーが公開するのは 34 個のツール(読み取り 31 個、書き込み 3 個)です。読み取りツールが 見るのは WebUI と同じデータで、トラブルシュートの 3 種は WebUI が 実行するのと同じオンデマンド分析を実行します — いずれも保存済みの履歴を読んで分析結果を返すだけ です。3 つの書き込みツールが作用するのは監視システムであって、ネットワークそのものでは ありません。ネットワーク機器を設定・変更するツールは、設計上存在しません

指針となる規約は読み取り同等です。WebUI で見られるものは MCP クライアントからも見られます。 新しい読み取りエンドポイントは、対応するツールと一緒に出荷されるか、ツールを持たない理由を書いた うえで出荷されます。この規約は書き込みには適用しません — 書き込みができるのは下の 3 つで固定です。

ツール 何をするか 必要な最小ロール
get_fleet_summary フリートの健全性サマリ: 状態ごとのノード数、アクティブアラート数 Viewer
list_nodes ロールアップした状態付きのノード一覧(検索可能) Viewer
get_node_status 1 ノードの完全なステータス: サマリ、アクティブアラート、インターフェース Viewer
list_node_groups フォルダツリー(地図座標付き。フォルダごとの健全性集計も任意で取得可能) Viewer
get_active_alerts アクティブアラート(新しい順。ノードと重大度で絞り込み可能) Viewer
get_alert_history 直近のアラート発報とクリア(ページング付き) Viewer
alert_trends アラートの時間的傾向: 常習犯ノード、直近の状態遷移、曜日×時刻のヒートマップ Viewer
list_suppressions メンテナンスウィンドウとミュート — 今アラートを黙らせているもの Viewer
query_metrics ノードのメトリクス時系列 — 最新値、範囲、またはレート Viewer
get_interface_series 1 インターフェースのトラフィックとエラーの履歴(共通の時間軸に整列) Viewer
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
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 直近の分析ジョブ、または定期実行スケジュールの一覧 Viewer
search_analysis_findings 全実行にまたがるトラブルシュート分析結果の検索(ノード・フォルダ・重大度・期間) Viewer
get_system_health section= で Yagra 自身の状態: ポーラー一覧、ポーリングループの計数、どのポーラーがどのノードを持つか、直近のコア⇄ポーラー断、ストア別の到達性、ホストリソース、転送の配送状況、保管中の認証情報が今も復号できるか、稼働バージョン、有効な任意ティア Viewer¹
get_report_runs 直近のレポート実行とその結果 Viewer
get_audit 誰が何を変更・確認したか View-audit
get_config kind= で Yagra 自身の設定を 28 種類の読み取りとして: しきい値、イベントルールとイベントソース、通知チャネルとルーティングルール、プロファイルと収集テンプレート、ノードの収集メトリクス、分類ルール、MIB カタログ、ノードの URL/DNS チェック、ディスカバリ候補とスキャン、Meraki の組織/ネットワーク/ポーリング、転送先、レポート定義とスケジュール、そして保持 / 隣接探索 / 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_configkind ごとに同じ仕組みです — それぞれ対応する REST エンドポイントと同じ権限を要求するので、同じツールから Viewer にはロール行列が返り、しきい値のルールセットは拒否されます: OIDC と LDAP は manage-users、14 種類は manage-config、残りは view です。保管中のシークレットは返しません — ノードの URL チェックは認証情報が紐づいているかhas_credential)だけを報告し、どれかは返しません。

既定は無効です。コアに YAGRA_ENABLE_MCP=true を設定して(docker-compose.yml のコメントを 外すか、deploy 用 compose なら .env に追記)再起動します。するとエンドポイントは API ポート 上の次の場所で提供されます。

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 の他のすべてと同じやり方で見えます。

WebUI に管理者でサインインし → 設定 ▸ API トークン ▸ API トークンを作成 → ロールを選び → 一度だけ 表示される 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 addlocal スコープに入り、CLI では見えても VS Code 拡張は local スコープのサーバーを読み込みません(拡張が読むのは user スコープと プロジェクトの .mcp.json だけです)。そのため拡張の /mcp には出てきません。また MCP サーバーは セッション開始時に読み込まれるので、追加後はウィンドウをリロード/新しいセッションを開始して ください。その後 /mcpyagra が connected として並ぶはずです。ノード一覧やアラートの要約を 頼んでみてください。

Claude Desktop — Desktop は mcp-remote ヘルパー経由でリモートの HTTP サーバーへ橋渡しします。 claude_desktop_config.jsonSettings ▸ 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_alertopen_maintenancepoll_now はいずれも、 その操作を行ったトークンに紐づけて監査エントリを記録します — WebUI 自身の操作が残すのと同じ 証跡です。