EOS MCP について
EOS MCPは、eAPI経由でArista EOSデバイスを操作するMCPサーバーです。ネットワーク運用担当者やAIアシスタント向けに、デバイス情報、コマンド実行、設定管理、技術サポート情報の収集を提供し、設定セッションとデフォルトのドライランで書き込みを制御します。
主な機能
- 01デバイス情報と実行中の設定の取得
- 02単一または複数デバイスでのコマンド実行
- 03ロールバックチェックポイントとの設定差分比較
- 04設定セッションの準備、確定、中止
- 05技術サポート情報の収集と日次サマリー
活用シーン
- 01タグ付きデバイス群のバージョンと状態の確認
- 02設定適用前の差分レビュー
- 03技術サポート出力によるデバイス障害の調査
MCP 対応
MCP対応クライアントにArista EOSデバイス操作ツールを提供し、eAPI経由で設定済みデバイスに接続します。設定セッションのツールはドライランとタイマー付きコミットに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| config_path | string | いいえ |
詳細
eos-mcp
English | 日本語
eAPI 経由で Arista EOS デバイスを操作する MCP サーバーです。
EOS の show コマンド、running-config の取得、設定のプッシュ (コミットタイマー付きの configure session 経由)、および tech-support の収集機能を、 MCP 互換の AI アシスタントに公開します。
ドキュメント:https://shigechika.github.io/eos-mcp/
インストール
pip install eos-mcp
設定
config.ini.example を ~/.config/eos-mcp/config.ini にコピーし、認証情報を入力します。
[DEFAULT]
username = admin
password = yourpassword
transport = https
verify = false
[switch1.example.com]
tags = main,dc1
[switch2.example.com]
tags = main,dc1
設定ファイルの検索順:
EOS_MCP_CONFIG環境変数./config.ini(カレントディレクトリ)~/.config/eos-mcp/config.ini
(個々の MCP ツール呼び出しでは、config_path
パラメーターを使ってパスを上書きすることもできます。)
書き込み操作
3 つのツールが、保護された手順を通じてデバイスの状態を変更します。
| ツール | API 呼び出し | 制御条件 |
|---|---|---|
push_config | configure session <name> を開始し、config_lines をステージングします。その後、dry_run=True(デフォルト)の場合は show session-config diffs + abort を実行し、dry_run=False の場合は commit timer HH:MM:SS を実行します — eAPI JSON-RPC Command API | eAPI アカウント自体に設定された EOS 権限レベルです。configure session モードに入れる権限が必要です(実質的には privilege 15 / enable アクセス)。デフォルトで dry_run=True のため、明示的に dry_run=False を指定せずに誤って呼び出しても、差分を表示して中断するだけです。 |
confirm_config_session | configure session <name> commit — push_config で開始した保留中のコミットタイマー付きセッションを確定します | push_config と同じ EOS アカウント権限が必要です。 |
abort_config_session | configure session <name> abort — 保留中のセッションを破棄します | push_config と同じ EOS アカウント権限が必要です。 |
デバイスの config.ini アカウントに低権限の表示専用ロールを付与すると、
これら 3 つのツールは書き込みを行わず、EOS API によって失敗します。そのデバイスの
すべての読み取り専用ツールは引き続き動作します。
run_command、run_commands、run_command_batch、および
run_commands_batch は、show ... コマンドに制限されていません。コマンド実行ツールとして
文書化され、分類されていますが、サーバーはコマンドテキストを検証せず、許可リストとの照合も
行いません。eAPI Command
API にそのまま渡されるため、設定済みの任意のデバイス(単一ホスト、または _batch バリアントの
tags を使ったフリート全体)で、configure terminal ... や reload を含む任意の enable モード EOS
コマンドを実行できます。これは push_config と同じ EOS アカウント権限によって制御されますが、
push_config の dry_run / コミットタイマーによる安全策はありません。デバイスの config.ini
アカウントにどの程度の権限を付与するかを決める際には、実質的に 2 つ目の書き込み経路として
留意してください。
使い方
Claude Code(プラグイン)
このリポジトリは単一プラグインのマーケットプレイスも兼ねているため、Claude Code から サーバーをインストールできます。
/plugin marketplace add shigechika/eos-mcp
/plugin install eos-mcp@eos-mcp
このプラグインは uvx eos-mcp を起動し、設定 で説明したものと同じ
EOS_MCP_CONFIG を読み込みます。設定しない場合、サーバーは通常の検索順(./config.ini、
続いて ~/.config/eos-mcp/config.ini)を使用します。/plugin install が設定するのは
サーバープロセスのみです。config.ini ファイルや、そこに保持されるデバイスごとの
eAPI 認証情報は作成できません。このファイルは、health_check 以外のツールが成功する前に、
プラグインを実行するマシン上にすでに存在している必要があります。
uvx が Claude Code を実行するプロセスの PATH に含まれている必要があります。通常はログイン
シェルに含まれていますが、GUI から起動したアプリには含まれていない場合があります。プラグインの
起動に失敗する場合は、uv をシステム全体にインストールしてください。
Claude Code(手動)
.mcp.json 内:
{
"mcpServers": {
"eos-mcp": {
"type": "stdio",
"command": "eos-mcp"
}
}
}
config.ini が上記のデフォルト検索場所にない場合に限り、"env": { "EOS_MCP_CONFIG": "..." } を
追加してください。
Claude Desktop
同じエントリーを claude_desktop_config.json に追加してください。
Codex
codex mcp add eos-mcp -- eos-mcp
config.ini が上記のデフォルト検索場所にない場合に限り、--env EOS_MCP_CONFIG=... を -- の前に
追加してください。
stdio サーバーを起動するその他の MCP クライアントも同様です。コマンドとして
eos-mcp を指定してください。
シェルから
# Verify config and list devices
eos-mcp --check
# Test connectivity to a specific host
eos-mcp --check --check-host switch1.example.com
# Start MCP server (stdio transport)
eos-mcp
ツール
| ツール | 説明 |
|---|---|
health_check | サーバーのバージョンと設定状態を報告します(軽量です。デバイスには接続しません) |
get_router_list | 登録済みデバイスを一覧表示します(任意でタグによる絞り込みが可能です) |
get_device_facts | 1 台のデバイスの構造化された情報(モデル、シリアル番号、EOS バージョン、稼働時間、メモリ)を返します |
get_device_facts_batch | 複数のデバイスの情報を並列で返します |
get_version | EOS バージョン文字列を返します(簡易接続チェック) |
run_command | 1 台のデバイスで単一のイネーブルモードコマンドを実行します |
run_commands | 1 台のデバイスで複数のイネーブルモードコマンドを実行します |
run_command_batch | 複数のデバイスでイネーブルモードコマンドを並列で実行します |
run_commands_batch | 複数のデバイスで複数のイネーブルモードコマンドを並列で実行します |
get_config | running-config を取得します |
get_config_diff | ロールバックチェックポイントとの差分を表示します |
list_config_sessions | configure セッションとその状態を一覧表示します |
push_config | configure セッション経由で設定をプッシュします(デフォルトは dry_run=True) |
confirm_config_session | 保留中のコミットタイマーセッションを確定します |
abort_config_session | 保留中のセッションを中止します |
collect_tech_support | show tech-support の出力を収集します |
daily_brief | 複数のデバイスについて、ヘルスチェック(環境、errdisabled、稼働時間、MLAG、最近の syslog アラート)を実行します |
開発
ライブスモークテスト
ユニットテストではフィクスチャに対するロジックを確認できますが、ツールが実データを返さなくなったことは検出できません。scripts/smoke_test.py は設定済みのデバイスに対して登録済みのすべてのツールを実行し、空の応答、不正な形式の応答、エラー応答があると失敗します。
# uses the same inventory file as the server (EOS_MCP_CONFIG)
uv run python scripts/smoke_test.py
uv run python scripts/smoke_test.py --only facts --traceback
- 読み取り専用です。
push_config、confirm_config_session、abort_config_sessionは名前によってスキップされ、そのことをテストで保証します。collect_tech_supportもスキップされます。何も変更しませんが、アサーションで読み取らない応答のためにデバイスの CPU を数分間使用するためです。コマンド実行ツールはshow versionを使ってテストします。これらは一般にイネーブルモードコマンドを受け付けますが、重要なコマンドを実行するのがスモークテストであってはなりません。 - レポートにペイロードは含まれません。 ツール名とステータスのみを記載します。エラー文も同様に秘匿されます。ここでのエラーにはすべて発生元のデバイスが付記され、ペイロードは設定情報だからです。
- 仕様に環境固有の情報を含めません。 ホスト単位のツールが必要とするデバイスは、実行時に設定済みインベントリから検出され、インベントリが空の場合はスキップされます。2 つのテストでこの方針を維持しています。1 つはそれらのパラメーターをリテラルとして指定することを拒否し、もう 1 つはこのリポジトリが公開されているため、ファイル内のあらゆる箇所でアドレス形式の文字列を禁止します。
- すべてのプローブは、例外を発生させる代わりにこれらのツールが返す
Error (<host>): ...の行をエラーとして扱います。そうしないと、到達不能なデバイスへの呼び出しが成功と判断されてしまいます。 - CI では、低コストで実行できる部分を確認します。プローブ仕様のないツールが登録されると、ビルドが失敗します(
tests/test_smoke_probes.py)。そのため、ツールを追加する際に「正常に動作していることをどう確認するか」という問いが必ず生じます。 scripts/smoke_harness.pyは実行エンジンであり、EOS 固有の知識は持ちません。このファイルを共有するサーバー間で同一に保っているため、エンジンのバグは一度修正し、このコピーにパッチを当てるのではなくファイルを同期してください。
要件
- Python >= 3.10
- eAPI が有効な Arista EOS(
management api http-commands) - 対象デバイスのポート 443(HTTPS)へのネットワークアクセス
ライセンス
Apache-2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。