🚀 Cisco Modeling Labs (CML) 用 Model Context Protocol (MCP) サーバー

mcp-name: io.github.xorrkaz/cml-mcp
この cml-mcp は、Cisco Modeling Labs (CML) 向けに設計された Model Context Protocol (MCP) のサーバー実装です。FastMCP 2.0 を使用して構築されており、Claude Desktop、Claude Code、Cursor などの LLM アプリが CML とやり取りするための一連のツールを提供します。
✨ 主な機能
- ラボトポロジーの作成:新しいラボを作成し、ネットワークトポロジーを定義するツールです。
- ステータスの照会:ラボ、ノード、および CML サーバー自体のステータス情報を取得するツールです。
- ラボとノードの制御:必要に応じて、ラボまたは個々のノードを起動および停止するツールです。
- CML ユーザーとグループの管理:ローカルのユーザーとグループを一覧表示、作成、および削除するツールです。
- デバイスでのコマンド実行:PyATS を使用して、MCP クライアントは CML ラボ内の仮想デバイスでコマンドを実行できます。
📦 インストール
必要要件
- Python 3.12 以上
- Cisco Modeling Labs (CML) 2.9 以降
- PyATS(オプション;デバイス CLI コマンド実行に使用)
- uv Python パッケージ/プロジェクトマネージャー
Windows の必要要件
CML で実行されているデバイスで CLI コマンドを実行しない場合は、基本の cml-mcp パッケージをインストールする以外に何もする必要はありません。ただし、完全なサポートが必要な場合は、Windows ユーザーは、Python と uv がインストールされた Windows Subsystem for Linux (WSL) または Windows マシン上で実行される Docker 環境が必要です。
🚀 クイックスタート
ニーズとプラットフォームに応じて、このサーバーを実行するためのいくつかのオプションがあります。
オプション 1: 標準入出力 (stdio) トランスポート
これはサーバーを実行する従来の方法で、標準入出力ストリームを介して MCP クライアントと直接通信します。
uvx を使用する場合(最も簡単 - CLI サポートなし)
最も簡単な方法は uvx を使用することです。これはサーバーを PyPi からダウンロードし、スタンドアロン環境で実行します。これは Linux、Mac、および Windows ユーザーに対応していますが、CLI コマンドのサポートは提供しません。クライアントの設定を編集し、以下のような内容を追加します。この例は Claude Desktop 用です。
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "uvx",
"args": [
"cml-mcp"
],
"env": {
"CML_URL": "<URL_OF_CML_SERVER>",
"CML_USERNAME": "<USERNAME_ON_CML_SERVER>",
"CML_PASSWORD": "<PASSWORD_ON_CML_SERVER>",
"CML_VERIFY_SSL": "false",
"DEBUG": "false"
}
}
}
}
CML 内で実行されているデバイスで CLI コマンドを実行するには、Linux および Mac ユーザーは "args" を cml-mcp[pyats] に変更する必要があります。例えば:
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "uvx",
"args": [
"cml-mcp[pyats]"
],
"env": {
"CML_URL": "<URL_OF_CML_SERVER>",
"CML_USERNAME": "<USERNAME_ON_CML_SERVER>",
"CML_PASSWORD": "<PASSWORD_ON_CML_SERVER>",
"CML_VERIFY_SSL": "false",
"PYATS_USERNAME": "<DEVICE_USERNAME>",
"PYATS_PASSWORD": "<DEVICE_PASSWORD>",
"PYATS_AUTH_PASS": "<DEVICE_ENABLE_PASSWORD>",
"DEBUG": "false"
}
}
}
}
追加の PYATS 環境変数は、MCP サーバーが実行中のデバイスにログインする方法を知るために必要です。
CLI コマンドのサポートが必要で、Windows Subsystem for Linux (WSL) を使用している Windows ユーザーは、以下のように設定する必要があります。
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "wsl",
"args": [
"uvx",
"cml-mcp[pyats]"
],
"env": {
"CML_URL": "<URL_OF_CML_SERVER>",
"CML_USERNAME": "<USERNAME_ON_CML_SERVER>",
"CML_PASSWORD": "<PASSWORD_ON_CML_SERVER>",
"PYATS_USERNAME": "<DEVICE_USERNAME>",
"PYATS_PASSWORD": "<DEVICE_PASSWORD>",
"PYATS_AUTH_PASS": "<DEVICE_ENABLE_PASSWORD>",
"CML_VERIFY_SSL": "false",
"DEBUG": "false",
"WSLENV": "CML_URL/u:CML_USERNAME/u:CML_PASSWORD/u:CML_VERIFY_SSL/u:PYATS_USERNAME/u:PYATS_PASSWORD/u:PYATS_AUTH_PASS/u:DEBUG/u"
}
}
}
}
CLI コマンドのサポートが必要で、Docker を使用している Windows(実際には Mac と Linux ユーザーも)ユーザーは、以下のように設定する必要があります。
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--pull",
"always",
"-e",
"CML_URL",
"-e",
"CML_USERNAME",
"-e",
"CML_PASSWORD",
"-e",
"PYATS_USERNAME",
"-e",
"PYATS_PASSWORD",
"-e",
"PYATS_AUTH_PASS",
"-e",
"CML_VERIFY_SSL",
"-e",
"DEBUG",
"xorrkaz/cml-mcp:latest"
],
"env": {
"CML_URL": "<URL_OF_CML_SERVER>",
"CML_USERNAME": "<USERNAME_ON_CML_SERVER>",
"CML_PASSWORD": "<PASSWORD_ON_CML_SERVER>",
"CML_VERIFY_SSL": "false",
"PYATS_USERNAME": "<DEVICE_USERNAME>",
"PYATS_PASSWORD": "<DEVICE_PASSWORD>",
"PYATS_AUTH_PASS": "<DEVICE_ENABLE_PASSWORD>",
"DEBUG": "false"
}
}
}
}
FastMCP CLI を使用する場合
別の方法は、FastMCP CLI を使用してサーバーをお気に入りのクライアントにインストールすることです。FastMCP CLI は Claude Desktop、Claude Code、Cursor、および手動の JSON 生成をサポートしています。FastMCP を使用するには、以下の手順を実行します。
- このリポジトリをクローンします。
git clone https://github.com/xorrkaz/cml-mcp.git
- クローンしたリポジトリのディレクトリに移動します。
uv sync を実行して、FastMCP 2.0 を含むすべての正しい依存関係をインストールします。注:Linux と Mac では、CLI コマンドのサポートを得るには uv sync --all-extras を実行します。
- 以下の変数が設定された
.env ファイルを作成します。
CML_URL=<URL_OF_CML_SERVER>
CML_USERNAME=<USERNAME_ON_CML_SERVER>
CML_PASSWORD=<PASSWORD_ON_CML_SERVER>
CML_VERIFY_SSL=false
DEBUG=false
PYATS_USERNAME=<DEVICE_USERNAME>
PYATS_PASSWORD=<DEVICE_PASSWORD>
PYATS_AUTH_PASS=<DEVICE_ENABLE_PASSWORD>
- FastMCP CLI コマンドを実行してサーバーをインストールします。例えば:
fastmcp install claude-desktop src/cml_mcp/server.py:server_mcp --project `realpath .` --env-file .env
オプション 2: HTTP トランスポート (ストリーミング)
サーバーは現在、HTTP ストリーミング トランスポートをサポートしています。これは、MCP サーバーを複数のクライアントからアクセスできるスタンドアロン サービスとして実行する場合、またはコンテナ化された環境やリモート環境で実行する場合に便利です。このモードでは、リアルタイム通信に HTTP Server-Sent Events (SSE) を使用します。
HTTP サーバーの実行
サーバーを HTTP モードで実行するには、CML_MCP_TRANSPORT 環境変数を http に設定します。バインドアドレスとポートも構成できます。
まず、パッケージをインストールします。
uv venv
source .venv/bin/activate
uv pip install cml-mcp
または開発用に、リポジトリをクローンして依存関係を同期します。
git clone https://github.com/xorrkaz/cml-mcp.git
cd cml-mcp
uv sync
次に、uvicorn を使用してサーバーを実行します。
export CML_URL=<URL_OF_CML_SERVER>
export CML_MCP_TRANSPORT=http
export CML_MCP_BIND=0.0.0.0
export CML_MCP_PORT=9000
uvicorn cml_mcp.server:app --host 0.0.0.0 --port 9000
または、これらの設定を含む .env ファイルを作成します。
CML_URL=<URL_OF_CML_SERVER>
CML_MCP_TRANSPORT=http
CML_MCP_BIND=0.0.0.0
CML_MCP_PORT=9000
CML_VERIFY_SSL=false
DEBUG=false
CML_ALLOWED_URLS=https://cml1.example.com,https://cml2.example.com
CML_URL_PATTERN=^https://cml\.example\.com
次に、実行します。
cml-mcp
サーバーが起動し、http://0.0.0.0:9000 で HTTP 接続を待ち受けます。
HTTP モードでの認証
HTTP トランスポートを使用する場合、認証は stdio モードとは異なる方法で処理されます。
- CML 資格情報:環境変数を介して設定する代わりに、CML 資格情報は
X-Authorization HTTP ヘッダーを使用して Basic 認証形式で提供されます。
- PyATS 資格情報:CLI コマンドの実行には、PyATS 資格情報は
X-PyATS-Authorization ヘッダー(Basic 認証)を介して提供でき、有効化パスワードは X-PyATS-Enable ヘッダーを介して提供できます。
- 複数の CML ホスト:HTTP モードで実行する場合、クライアントは
X-CML-URL ヘッダーを提供することで、異なる CML サーバーに接続できます。セキュリティ上の理由から、CML_ALLOWED_URLS 環境変数(カンマ区切りのリスト)または CML_URL_PATTERN(正規表現パターン)を介して許可された URL を構成する必要があります。
例のヘッダー:
X-Authorization: Basic <base64_encoded_cml_username:cml_password>
X-PyATS-Authorization: Basic <base64_encoded_device_username:device_password>
X-PyATS-Enable: Basic <base64_encoded_enable_password>
X-CML-URL: https://cml-server.example.com
HTTP 用に MCP クライアントを構成する
HTTP サーバーを MCP クライアントと共に使用するには、mcp-remote ツールを使用して HTTP エンドポイントに接続する必要があります。Claude Desktop などのほとんどの MCP クライアントは、HTTP ストリーミングをネイティブにサポートしていないため、mcp-remote はクライアント(stdio を期待する)と HTTP サーバーの間のブリッジとして機能します。このブリッジには、クライアント マシンに Node.js をインストールする必要があります。Node.js には、Javascript/Typescript アプリケーションを専用環境で実行することができる npx ユーティリティが含まれています。
MCP クライアントの設定(例えば、Claude Desktop の claude_desktop_config.json)に以下の設定を追加します。
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://<server_host>:9000/mcp",
"--header",
"X-Authorization: Basic <base64_encoded_cml_credentials>",
"--header",
"X-PyATS-Authorization: Basic <base64_encoded_device_credentials>"
]
}
}
}
プレースホルダーを実際の値に置き換えます。
<server_host>: HTTP サーバーが実行されているホスト名または IP アドレス
<base64_encoded_cml_credentials>: CML の Base64 エンコードされた username:password
<base64_encoded_device_credentials>: デバイスアクセス用の Base64 エンコードされた username:password
例:
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://192.168.10.210:8443/mcp",
"--header",
"X-Authorization: Basic <base64_encoded_cml_credentials>",
"--header",
"X-PyATS-Authorization: Basic <base64_encoded_device_credentials>"
]
}
}
}
注:自己署名証明書を使用する HTTPS を使用する場合、env セクションを追加して TLS 証明書の検証を無効にする必要があります。
{
"mcpServers": {
"Cisco Modeling Labs (CML)": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://192.168.10.210:8443/mcp",
"--header",
"X-Authorization: Basic <base64_encoded_cml_credentials>",
"--header",
"X-PyATS-Authorization: Basic <base64_encoded_device_credentials>"
],
"env": {
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}
資格情報を Base64 でエンコードするには:
Linux/Mac:
echo -n "username:password" | base64
echo -n "device_username:device_password" | base64
echo -n "enable_password" | base64
Windows (WSL を使用):
wsl bash -c 'echo -n "username:password" | base64'
wsl bash -c 'echo -n "device_username:device_password" | base64'
wsl bash -c 'echo -n "enable_password" | base64'
あるいは、オンラインの Base64 エンコーダーまたは PowerShell を使用することもできます。
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("username:password"))
有効化パスワードを指定する必要がある場合は、別のヘッダーを追加します。
"--header",
"X-PyATS-Enable: Basic <base64_encoded_enable_password>"
HTTP トランスポートでの Docker
Docker を使用してサーバーを HTTP モードで実行することもできます。
docker run -d \
--rm \
--name cml-mcp \
-p 9000:9000 \
-e CML_URL=<URL_OF_CML_SERVER> \
-e CML_MCP_TRANSPORT=http \
xorrkaz/cml-mcp:latest
これにより、HTTP サーバーがポート 9000 で公開され、外部の MCP クライアントが接続できるようになります。
💻 使用例
ツールは MCP クライアントに自動的に表示され、必要に応じて LLM とチャットしてツールを呼び出すことができます。例えば、以下の一連のプロンプトは、サーバーの機能をうまく示しています。
- "Joe's MCP Lab" という名前の新しい CML ラボを作成します。
- このラボに 2 つの IOL ノード、非管理型スイッチ、および外部コネクタを追加します。
- 2 つの IOL ノードを非管理型スイッチに接続し、非管理型スイッチを外部コネクタに接続します。
- ルーターを構成して、接続されているインターフェイスが 192.0.2.0/24 サブネットの IP アドレスを持つようにします。それらに OSPF を構成します。次に、ラボを起動し、OSPF が正しく動作していることを検証します。
- 2 つの IOL ノードの周りに、OSPF を使用していることを示すボックス注釈を追加します。緑色のボックスにします。
そして、Claude Desktop での動作を示す義務的なデモ GIF がこちらです。
システムプロンプト
LLM ツールがシステムプロンプトをサポートしている場合、またはより充実した初期コンテキストを提供したい場合は、Hank Preston 氏によるこの良い例を参考にしてください。
あなたは、Cisco Modeling Labs (CML) のサポートを専門とするネットワーク ラボ アシスタントです。以下のような多くの一般的なラボ活動に対して自然言語インターフェースを提供します。
- 新しいラボの作成
- ラボへのノードの追加
- ノード間のインターフェイスの作成
- ノードの構成
- 注釈の作成
あなたは、CML サーバーにアクセスするためのツールにアクセスできます。
📄 ライセンス
このプロジェクトの MCP サーバー部分は、BSD 2-Clause "Simplified" License の下でライセンスされています。ただし、CML 自体の pydantic スキーマ型付けコードを利用しており、これは Cisco の独自ライセンスの対象となります。