mcpField
E
EOS MCP

EOS MCP

ローカル
github.com/shigechikaクラウド・インフラ0今日更新

EOS MCP について

EOS MCPは、eAPI経由でArista EOSデバイスを操作するMCPサーバーです。ネットワーク運用担当者やAIアシスタント向けに、デバイス情報、コマンド実行、設定管理、技術サポート情報の収集を提供し、設定セッションとデフォルトのドライランで書き込みを制御します。

主な機能

  1. 01デバイス情報と実行中の設定の取得
  2. 02単一または複数デバイスでのコマンド実行
  3. 03ロールバックチェックポイントとの設定差分比較
  4. 04設定セッションの準備、確定、中止
  5. 05技術サポート情報の収集と日次サマリー

活用シーン

  1. 01タグ付きデバイス群のバージョンと状態の確認
  2. 02設定適用前の差分レビュー
  3. 03技術サポート出力によるデバイス障害の調査

MCP 対応

MCP対応クライアントにArista EOSデバイス操作ツールを提供し、eAPI経由で設定済みデバイスに接続します。設定セッションのツールはドライランとタイマー付きコミットに対応します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"shigechika-eos": {
"command": "uvx",
"args": [
"eos-mcp"
]
}
}
}
起動コマンドuvx eos-mcp

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

パッケージ
pypieos-mcp1.4.0

ツール

17

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

パラメーター型必須説明
config_pathstringいいえ

詳細

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

設定ファイルの検索順:

  1. EOS_MCP_CONFIG 環境変数
  2. ./config.ini(カレントディレクトリ)
  3. ~/.config/eos-mcp/config.ini

(個々の MCP ツール呼び出しでは、config_path パラメーターを使ってパスを上書きすることもできます。)

書き込み操作

3 つのツールが、保護された手順を通じてデバイスの状態を変更します。

ツールAPI 呼び出し制御条件
push_configconfigure session <name> を開始し、config_lines をステージングします。その後、dry_run=True(デフォルト)の場合は show session-config diffs + abort を実行し、dry_run=False の場合は commit timer HH:MM:SS を実行します — eAPI JSON-RPC Command APIeAPI アカウント自体に設定された EOS 権限レベルです。configure session モードに入れる権限が必要です(実質的には privilege 15 / enable アクセス)。デフォルトで dry_run=True のため、明示的に dry_run=False を指定せずに誤って呼び出しても、差分を表示して中断するだけです。
confirm_config_sessionconfigure session <name> commit — push_config で開始した保留中のコミットタイマー付きセッションを確定しますpush_config と同じ EOS アカウント権限が必要です。
abort_config_sessionconfigure 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_facts1 台のデバイスの構造化された情報(モデル、シリアル番号、EOS バージョン、稼働時間、メモリ)を返します
get_device_facts_batch複数のデバイスの情報を並列で返します
get_versionEOS バージョン文字列を返します(簡易接続チェック)
run_command1 台のデバイスで単一のイネーブルモードコマンドを実行します
run_commands1 台のデバイスで複数のイネーブルモードコマンドを実行します
run_command_batch複数のデバイスでイネーブルモードコマンドを並列で実行します
run_commands_batch複数のデバイスで複数のイネーブルモードコマンドを並列で実行します
get_configrunning-config を取得します
get_config_diffロールバックチェックポイントとの差分を表示します
list_config_sessionsconfigure セッションとその状態を一覧表示します
push_configconfigure セッション経由で設定をプッシュします(デフォルトは dry_run=True)
confirm_config_session保留中のコミットタイマーセッションを確定します
abort_config_session保留中のセッションを中止します
collect_tech_supportshow 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

コメント

MCP は初めてですか?

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

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