Cisco Ise Mcp Server について
Cisco ISE MCP Serverは、設定したCisco ISE REST APIエンドポイントを、検出可能なMCPツールに変換します。APIへ標準化された方法でアクセスしたいクライアント向けで、ツールの動的生成と結果のフィルタリングに対応します。
主な機能
- 01urls.jsonからツールを生成
- 02Cisco ISE REST APIを非同期で呼び出し
- 03式とパラメーターで結果を絞り込み
- 04接続情報とSSL設定を管理
- 05デフォルトでstreamable HTTPを使用
活用シーン
- 01Cisco ISEのエンドポイント記録を取得
- 02デバイス項目でAPI結果を絞り込む
- 03設定済みISEエンドポイントをMCPクライアントに公開
MCP 対応
MCP サーバーとして、設定したCisco ISE REST APIエンドポイントを動的にツールとしてMCPクライアントに公開します。デフォルトのstreamable HTTPに加え、STDIOにも設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ISE MCP サーバー(FastMCP を使用)
概要
ISE MCP サーバーは、Python の fastmcp ライブラリで構築された Model Context Protocol(MCP) サーバーです。Cisco Identity Services Engine(ISE)の API エンドポイントを、構造化された検出可能な MCP ツールとして動的に公開します。このサーバーを使用すると、クライアントは標準化された方法で Cisco ISE REST API を操作でき、ツールの動的生成や API 応答のフィルタリングなどの機能を利用できます。
機能
- ツールの動的生成: MCP ツールは、
src/ise_mcp_server/urls.json構成ファイルのエントリに基づいて自動的に作成されます。 - FastMCP との統合:
fastmcpライブラリを活用し、スキーマ生成やリクエスト処理を含む堅牢な MCP サーバーを実装します。 - 非同期 API 呼び出し:
httpx.AsyncClientを使用して、Cisco ISE とノンブロッキングで通信します。 - API フィルタリング: 各ツールの
filter_expressionおよびquery_params引数を使用して、Cisco ISE API の結果をフィルタリングできます。 - 環境変数による構成: Cisco ISE の接続情報(ベース URL、ユーザー名、パスワード)と SSL 検証設定(
ISE_VERIFY_SSL)は、.envファイルで構成します。 - 詳細な docstring: 動的に生成されたツールには、その目的、対象となる ISE API エンドポイント、フィルタリングパラメーターの使用方法を説明する詳しい docstring が含まれます。
- 標準化された操作: Model Context Protocol に準拠しているため、MCP 対応クライアントであればどれからでも操作できます。
- ストリーミング可能な HTTP トランスポート: Web 経由でアクセスできるよう、デフォルトで
streamable-httpトランスポートを使用するよう構成されています。
セットアップ
サーバー
{ "mcpServers": { "ise": { "command": "python", "args": [ "ise_mcp_server.py", "--oneshot" ], "env": { "ISE_BASE": "https://devnetsandboxise.cisco.com", "USERNAME": "readonly", "PASSWORD": "ISEisC00L" } } } }
要件
- Python 3.9 以降。
- 必要な Python パッケージは、プロジェクトのルートにある
requirements.txtに記載されています。次のコマンドでインストールしてください。pip install -r requirements.txtuvを使用する場合は、次のコマンドを実行してください。
主な依存関係には、uv pip install -r requirements.txtfastmcp、httpx、pydantic、python-dotenvが含まれます。(requirements.txtにrequestsではなくhttpxが記載されていることを確認してください。)
設定
-
環境変数: プロジェクトのルートディレクトリ(
/Users/username/mcp_servers/ISE_MCP/.env)に.envファイルを作成し、Cisco ISE API の認証情報とベース URL を設定します:ISE_BASE="https://your-ise-instance.example.com" USERNAME="your-ise-api-username" PASSWORD="your-ise-api-password" # オプション:ISE API 呼び出し時の SSL 証明書検証を制御します。 # デフォルトは true です。"false" に設定すると検証が無効になります(安全ではありません)。 # または、"/path/to/your/ca.pem" のように CA バンドルファイルへのパスを指定できます。 ISE_VERIFY_SSL="true" -
URL の設定(
urls.json):src/ise_mcp_server/urls.jsonファイル(src/ise_mcp_server/server.pyと同じディレクトリにあります)が存在し、正しい形式になっていることを確認します。このファイルでは、MCP ツールとして公開する ISE API エンドポイントを定義します。[ { "URL": "/ers/config/endpoint", "Name": "Endpoints", "FilterableFields": ["mac", "name", "description", "identityGroupName"] }, { "URL": "/ers/config/identitygroup", "Name": "Identity Groups", "FilterableFields": ["name", "description"] } // ... more endpoints ]URL:Cisco ISE API エンドポイントの相対パスです。Name:MCP ツール名の生成に使用する、人が読みやすい名前です(例:「Endpoints」はツールendpointsになります)。FilterableFields:このエンドポイントのfilter_expressionで使用できる、既知のフィールドを列挙した文字列の配列です。このリストはユーザーが管理するもので、効果的なフィルタリングに不可欠です。
Claude Desktop 向けに Docker でサーバーを実行する
このサーバーは Docker コンテナとして実行するように設計されています。特に、STDIO 経由で通信する Claude Desktop などのクライアントでの使用を想定しています。
前提条件
- Docker のインストール: Docker Desktop がインストールされ、実行中であることを確認します。
.envファイル: 設定で説明した.envファイルが、プロジェクトのルート(/Users/username/mcp_servers/ISE_MCP/.env)にある必要があります。- STDIO 用に Dockerfile を設定: このプロジェクトの
Dockerfile(Dockerfile)は、stdioトランスポートを使用するように設定してください。ENTRYPOINTは次のようになります:ENTRYPOINT ["python", "-m", "ise_mcp_server", "--transport", "stdio"].envファイルがコピーされないようにしてください。
Docker イメージをビルドする
Dockerfile があるディレクトリ(/Users/username/mcp_servers/ISE_MCP/)に移動し、Docker イメージをビルドします:
docker build -t ise-mcp:latest .
または、プロジェクトのルートからビルドする場合:
docker build -t ise-mcp:latest -f src/Dockerfile .
Claude Desktop を設定する
「ISE_MCP」サーバーについて、Claude Desktop の MCP サーバー設定(claude_desktop_config.json または cline_mcp_settings.json)を次のように更新します:
{
"mcpServers": {
// ... other servers ...
"ISE_MCP": {
"command": "docker",
"args": [
"run",
"-i", // Essential for STDIO interaction
"--rm", // Automatically remove the container when it exits
"--env-file=/Users/username/mcp_servers/ISE_MCP/.env", // Mounts your .env file
"ise-mcp:latest" // The image we just built
],
"cwd": "/Users/username/mcp_servers/ISE_MCP" // Ensures paths are correct
}
// ... other servers ...
}
}
Docker 引数の説明:
run:Docker コンテナを実行します。-i:(対話モード)アタッチされていない場合でも STDIN を開いたままにします。STDIO ベースの MCP 通信に不可欠です。--rm:コンテナの終了時に自動的に削除します。--env-file:ホストマシン上の.envファイルへのパスを指定します。Docker はこれらの変数をコンテナに読み込みます。ise-mcp:latest:実行する Docker イメージの名前とタグです。cwd:コマンドの作業ディレクトリを設定します。Claude Desktop が別のデフォルトディレクトリからコマンドを実行する場合でも、相対パス(--env-fileなど)が正しく解決されるようにします。
Docker Compose で実行する(ローカルテスト向けの代替方法)
ローカルテスト用に docker-compose.yml ファイルも用意されています。イメージをビルドしてコンテナを実行し、.env ファイルから環境変数を読み込みます。
docker-compose up --build
この方法は直接テストするのに適していますが、Claude Desktop との連携には上記の docker run 設定を推奨します。
サーバーをローカルで実行する(Docker を使用しない場合)
開発時や Docker を使用しない場合は、Python でサーバーを直接実行できます。
前提条件
- Python 環境: Python 3.9 以降がインストールされていることを確認し、
requirements.txtの依存関係をインストールしてください。 .envファイル:.envファイルがプロジェクトのルート(/Users/username/mcp_servers/ISE_MCP/.env)に存在している必要があります。
実行
プロジェクトのルートディレクトリに移動して、次を実行します。
python src/ise_mcp_server/server.py
デフォルトでは、src/ise_mcp_server/server.py は streamable-http トランスポートを使用してサーバーを起動するように設定されており、通常は http://127.0.0.1:8000/mcp で利用できます。特定のクライアントに合わせて必要な場合は、server.py を変更してトランスポート(例:stdio)やその他のサーバーパラメーターを変更できます。
MCP Inspector を使用した開発とテスト(ローカル Python)
MCP Inspector を使ってローカルで開発する場合:
python -m fastmcp dev src/ise_mcp_server/server.py --with httpx --with pydantic --with python-dotenv
このコマンドを実行すると、MCP Inspector が起動します。
- Inspector を使用した STDIO テスト:
- Inspector でトランスポートの種類として「STDIO」を選択します。
- サーバーを実行するコマンドとして
python src/ise_mcp_server/server.pyを設定します。 - サーバーに接続します。
- Inspector を使用した HTTP テスト:
- 別のターミナルで
python src/ise_mcp_server/server.pyを実行してサーバーを起動します(デフォルトでstreamable-httpが使用されます)。 - MCP Inspector で「HTTP」を選択します。
- URL に
http://127.0.0.1:8000/mcp(または設定したエンドポイント)を指定します。 - サーバーに接続します。
- 別のターミナルで
uv と fastmcp run を使用したローカル実行(STDIO の代替方法)
uv と fastmcp がグローバルまたは環境にインストールされている場合は、fastmcp run コマンドを使ってサーバーを実行することもできます。STDIO ベースのクライアントで役立つことがよくあります。
前提条件:
uvがインストールされ、PATH に含まれていること。uvが使用する環境(またはグローバル)にfastmcpがインストールされていること。.envファイルがプロジェクトのルートに存在すること。
実行:
uv --directory /Users/username/mcp_servers/ISE_MCP run fastmcp run src/ise_mcp_server/server.py --transport stdio
このコマンドは、指定されたプロジェクトディレクトリ内で uv に fastmcp run src/ise_mcp_server/server.py --transport stdio を実行させます。STDIO を想定するクライアントでは、--transport stdio フラグが重要です。
uv を使用する方法での Claude Desktop の設定:
Claude Desktop でこの方法を使用する場合は、次のように設定できます。
{
"mcpServers": {
// ... other servers ...
"ISE_LOCAL_UV": { // Using a different key to distinguish
"command": "uv",
"args": [
"--directory",
"/Users/username/mcp_servers/ISE_MCP",
"run",
"fastmcp",
"run",
"src/ise_mcp_server/server.py",
"--transport",
"stdio"
],
"cwd": "/Users/username/mcp_servers/ISE_MCP", // Ensures .env is found if relative paths are used by fastmcp for .env loading
"transportType": "stdio" // Explicitly tell Claude this is an STDIO server
}
// ... other servers ...
}
}
サーバー名を「ISE_LOCAL_UV」にするか、それに応じてキーを変更すると、この設定が Claude Desktop に読み込まれます。fastmcp run は、現在の作業ディレクトリ(この例では /Users/username/mcp_servers/ISE_MCP)から .env ファイルを自動的に読み込むことに注意してください。
サーバーとのやり取り
起動すると、MCP Inspector など、MCP 互換のクライアントから ISE MCP Server にアクセスできます。
ツールの検出
クライアントは利用可能なツールを検出できます。各ツールは urls.json のエントリーに対応しています。ツール名は Name フィールドから生成されます(例:「Identity Groups」は identity_groups になります)。
ツールの呼び出し
ツールは、単一の省略可能な引数 params を使って呼び出します。この引数は、Pydantic モデル(FilterableToolInput または NonFilterableToolInput)のインスタンスです。
例:フィルターを指定せずに endpoints ツールを呼び出す場合:
ツールの入力モデルで default_factory が使われていれば、通常、MCP クライアントでは引数を明示せずにツールを呼び出せます。
例:フィルターを指定して endpoints ツールを呼び出す場合:
引数は、Pydantic モデルに従って構成します。FilterableFields を持つエンドポイントから生成されたツールの場合:
// Example arguments for a tool call (client-dependent format)
{
"params": {
"filter_expression": "name.CONTAINS.mydevice",
"query_params": {
"size": 10,
"page": 1
}
}
}
filter_expression(文字列、省略可能):fieldName.OPERATION.valueの形式でフィルターを指定します(例:mac.EQUALS.AA:BB:CC:DD:EE:FF)。利用可能なFilterableFieldsとサポートされる ISE の操作(例:CONTAINS、EQUALS、STARTSWITH)については、ツールの docstring を参照してください。query_params(辞書、省略可能):その他の任意のクエリパラメーターを指定できます(例:{"size": 100, "page": 2})。これらは ISE API に直接渡されます。
urls.json のエンドポイントに空の FilterableFields 配列が指定されている場合、対応するツールが受け付けるのは query_params のみです。
エンドポイントと利用可能なフィルターフィールドの詳細については、各ツールの動的に生成される docstring を参照してください。
ロギング
サーバーでは、fastmcp によって設定された標準の Python logging モジュールを使用します。サーバーの操作や API とのやり取りに関するログメッセージは、コンソールに出力されます。
ライセンス
Apache 2.0 ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。