Skip to main content
Glama
i-Nihal

Network MCP Server

by i-Nihal

Network MCP Server

AIエージェントがSSH経由でCisco IOS-XEネットワークデバイスと対話できるようにするModel Context Protocol (MCP) サーバーです。PythonのFastMCPNetmikoを使用して構築されています。

このサーバーは7つのツール(読み取り5つ + 書き込み2つ)を公開しており、それぞれに厳格な入力検証と明確な説明があるため、LLMエージェントはそれらを自律的に発見して使用できます。

コース: Agent AI & Automation — Sheridan College 著者: Ahmed インストラクター: Sebastian


目次

  1. ラボ環境

  2. インストール

  3. サーバーの実行

  4. ツール

  5. Claude Desktopへの接続

  6. 対話例

  7. 必要な権限

  8. セキュリティ上の注意

  9. トラブルシューティング


ラボ環境

このプロジェクトは、CiscoのAlways-On IOS-XE DevNet Sandboxを対象としています。無料で公開されており、予約不要で常に稼働しています。

設定

ホスト

sandbox-iosxe-latest-1.cisco.com

ポート

22 (SSH)

ユーザー名

admin

パスワード

C1sco12345

デバイスタイプ

Cisco IOS-XE (Catalyst 8000v)

参照: Cisco DevNet — Always-On Sandboxes

マシンからのクイック接続確認:

ssh admin@sandbox-iosxe-latest-1.cisco.com
# password: C1sco12345

Router#(または同様の)プロンプトが表示されるはずです。これが機能すれば、MCPサーバーも機能します。

サンドボックスは共有されています。変更は小さく、非破壊的なもの(インターフェースの説明の編集のみなど。インターフェースのシャットダウンやIPの変更は行わないでください)に留めてください。


インストール

**Python 3.10+**が必要です。

# 1. Clone / copy the project
cd network-mcp-server

# 2. Create and activate a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate    # on Windows: .venv\Scripts\activate

# 3. Install dependencies
pip install -r requirements.txt

依存関係:

  • mcp[cli] — MCP Python SDK (FastMCPを提供)

  • netmiko — マルチベンダーSSH/CLIライブラリ

  • python-dotenv — ローカル開発用に.envを読み込む


サーバーの実行

オプションA — スタンドアロン(ローカルテスト用)

cp .env.example .env
# edit .env if your lab uses different credentials

python server.py

サーバーはstdio経由で実行されるため、stdinでMCP JSON-RPCメッセージを待機します。実際には手動で呼び出すことはなく、Claude Desktop(下記参照)またはmcp開発CLIに接続します。

オプションB — インタラクティブな開発インスペクター

mcp dev server.py

これによりブラウザでMCPインスペクターが開き、ツールを一覧表示して手動で呼び出すことができます。


ツール

読み取りツール

ツール

説明

get_device_info

ホスト名、モデル、ソフトウェアバージョン、稼働時間、シリアル番号。show versionを解析します。

get_interfaces

ステータス、IP、説明を含むすべてのインターフェース。show ip interface brief + show interfaces descriptionを解析します。

get_routes

IPv4ルーティングテーブル。show ip routeを構造化されたエントリに解析します。

get_arp_table

IPからMACへのマッピング。show ip arpを解析します。

get_running_config

完全な実行コンフィグ、または単一セクション(例: interface GigabitEthernet1)。オプションのsection引数を取ります。

書き込みツール

ツール

説明

configure_interface_description

インターフェースの説明を設定し、読み戻すことで変更が適用されたことを検証します。引数: interface, description

save_config

copy running-config startup-configを実行して、リロード後も変更を保持します。

すべてのツール出力はJSON文字列であるため、LLMは構造化データに基づいて推論できます。NetmikoのTextFSMパーサーが出力を処理できない場合、サーバーは{"raw": "..."}ラッパー内の生のCLIテキストにフォールバックします。


Claude Desktopへの接続

  1. Claude Desktopの設定ファイルの場所:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. 以下のブロックをファイルにマージします(server.pyへの完全な絶対パスを使用してください):

{
  "mcpServers": {
    "network-mcp-server": {
      "command": "python",
      "args": ["/ABSOLUTE/PATH/TO/network-mcp-server/server.py"],
      "env": {
        "DEVICE_HOST": "sandbox-iosxe-latest-1.cisco.com",
        "DEVICE_PORT": "22",
        "DEVICE_USERNAME": "admin",
        "DEVICE_PASSWORD": "C1sco12345",
        "DEVICE_TYPE": "cisco_xe"
      }
    }
  }
}

コピー可能なバージョンがclaude_desktop_config.example.jsonにあります。

  1. Claude Desktopを完全に終了して再起動します。(ウィンドウを閉じるだけでは不十分です。MCPプロセスが生き続けます。)

  2. 新しいチャットで、🛠️ / ツールアイコンをクリックします。7つのツールがリストされたnetwork-mcp-serverが表示されるはずです。


対話例

接続したら、次のプロンプトを試してください:

「どのデバイスに接続していますか?ホスト名、モデル、IOSバージョンを教えてください。」 エージェントはget_device_infoを呼び出します。

「IPアドレスが割り当てられているすべてのインターフェースをリストアップしてください。」 エージェントはget_interfacesを呼び出し、結果をフィルタリングします。

「デフォルトルートを表示してください。」 エージェントはget_routesを呼び出し、ネットワークが0.0.0.0のエントリを選択します。

「GigabitEthernet2の説明を'managed by MCP demo'に設定し、変更が適用されたことを確認してください。」 エージェントはconfigure_interface_descriptionを呼び出し、次に(オプションで)section='interface GigabitEthernet2'を指定してget_running_configを呼び出し、再確認します。

「実行コンフィグをスタートアップに保存してください。」 エージェントはsave_configを呼び出します。


必要な権限

MCPサーバーには以下が必要です:

  1. ホストマシンからデバイスのSSHポート(デフォルトはTCP/22)へのネットワークエグレス。企業ネットワークではVPNやプロキシが必要になる場合があります。

  2. 特権exec権限を持つデバイスアカウント — DevNetサンドボックスのadminアカウントはすでにenableレベルです。独自のデバイスを使用する場合、アカウントはconfig tに入り、write memoryを発行できる必要があります。

  3. .envファイルまたはClaude Desktopによって設定された同等の環境変数へのローカルな読み取りアクセス

サーバーはワークステーション上のroot/admin権限を必要としません


セキュリティ上の注意

  • 認証情報はハードコードされていません。 環境変数(DEVICE_USERNAME, DEVICE_PASSWORD)から取得されます。必要な環境変数が欠落している場合、サーバーは接続を拒否し、明確なエラーを返します。

  • .envはgit-ignoredです。 代わりに(共有しても安全なDevNetサンドボックス値を含む).env.exampleが提供されています。

  • すべてのツールで入力検証を行っています。 インターフェース名、説明、コンフィグセクションのフィルターは、デバイスCLIに到達する前にすべて正規表現で検証されます。シェルメタ文字(;, |, バッククォート、改行、nullバイト)は拒否されます。

  • 認証情報はツール引数として公開されません。 LLMはそれらを読み取ったり、ログに記録したり、流出させたりすることはできません。ツール出力のみを参照します。

  • 書き込みツールには検証が含まれています。 configure_interface_descriptionは変更適用後にコンフィグを読み戻し、applied: true/falseを報告します。

  • スコープは限定されています。 2つの書き込みツールは、インターフェースの説明の変更とコンフィグの保存のみが可能です。破壊的な操作(シャットダウン、IPアドレスの変更、VLAN削除、erase startup-config)は意図的に公開されていません。


トラブルシューティング

「Missing required environment variable(s)」 DEVICE_HOST / DEVICE_USERNAME / DEVICE_PASSWORDの設定を忘れています。.env.example.envにコピーするか、Claude Desktopのenvブロックで設定してください。

「Authentication to failed」 パスワードを再確認してください。サンドボックスを変更したか、別のデバイスを使用している場合は、SSHが有効になっており、アカウントに特権execアクセス権があることを確認してください。

「Connection to timed out」 ネットワークエグレスがブロックされています。同じマシンからssh admin@sandbox-iosxe-latest-1.cisco.comを試してください。それでもハングアップする場合は、ファイアウォール/VPNが原因です。

設定を編集してもClaude Desktopにサーバーが表示されない Claude Desktopを完全に終了(ウィンドウを閉じるだけでなく)して再起動してください。macOSの場合: Cmd+Q。Windowsの場合: トレイアイコンを右クリック → 終了。

ツール呼び出しが解析されたJSONではなく生のテキストを返す これは、NetmikoのTextFSMテンプレートがデバイスの出力(異なるIOSバージョン、異なるプラットフォーム)と一致しなかったことを意味します。サーバーは{"raw": "..."}内の生のCLIテキストにフォールバックします。エージェントはそれに基づいて推論できますが、構造化されていません。

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/i-Nihal/network-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server