Network MCP Server
Network MCP Server
AIエージェントがSSH経由でCisco IOS-XEネットワークデバイスと対話できるようにするModel Context Protocol (MCP) サーバーです。PythonのFastMCPとNetmikoを使用して構築されています。
このサーバーは7つのツール(読み取り5つ + 書き込み2つ)を公開しており、それぞれに厳格な入力検証と明確な説明があるため、LLMエージェントはそれらを自律的に発見して使用できます。
コース: Agent AI & Automation — Sheridan College 著者: Ahmed インストラクター: Sebastian
目次
ラボ環境
このプロジェクトは、CiscoのAlways-On IOS-XE DevNet Sandboxを対象としています。無料で公開されており、予約不要で常に稼働しています。
設定 | 値 |
ホスト |
|
ポート |
|
ユーザー名 |
|
パスワード |
|
デバイスタイプ | Cisco IOS-XE (Catalyst 8000v) |
参照: Cisco DevNet — Always-On Sandboxes。
マシンからのクイック接続確認:
ssh admin@sandbox-iosxe-latest-1.cisco.com
# password: C1sco12345Router#(または同様の)プロンプトが表示されるはずです。これが機能すれば、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インスペクターが開き、ツールを一覧表示して手動で呼び出すことができます。
ツール
読み取りツール
ツール | 説明 |
| ホスト名、モデル、ソフトウェアバージョン、稼働時間、シリアル番号。 |
| ステータス、IP、説明を含むすべてのインターフェース。 |
| IPv4ルーティングテーブル。 |
| IPからMACへのマッピング。 |
| 完全な実行コンフィグ、または単一セクション(例: |
書き込みツール
ツール | 説明 |
| インターフェースの説明を設定し、読み戻すことで変更が適用されたことを検証します。引数: |
|
|
すべてのツール出力はJSON文字列であるため、LLMは構造化データに基づいて推論できます。NetmikoのTextFSMパーサーが出力を処理できない場合、サーバーは{"raw": "..."}ラッパー内の生のCLIテキストにフォールバックします。
Claude Desktopへの接続
Claude Desktopの設定ファイルの場所:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
以下のブロックをファイルにマージします(
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にあります。
Claude Desktopを完全に終了して再起動します。(ウィンドウを閉じるだけでは不十分です。MCPプロセスが生き続けます。)
新しいチャットで、🛠️ / ツールアイコンをクリックします。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サーバーには以下が必要です:
ホストマシンからデバイスのSSHポート(デフォルトはTCP/22)へのネットワークエグレス。企業ネットワークではVPNやプロキシが必要になる場合があります。
特権exec権限を持つデバイスアカウント — DevNetサンドボックスの
adminアカウントはすでにenableレベルです。独自のデバイスを使用する場合、アカウントはconfig tに入り、write memoryを発行できる必要があります。.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テキストにフォールバックします。エージェントはそれに基づいて推論できますが、構造化されていません。
This server cannot be installed
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