ISE MCP サーバー (FastMCP を使用)
概要
ISE MCPサーバは、Python fastmcpライブラリを使用して構築されたモデルコンテキストプロトコル(MCP)サーバです。Cisco Identity Services Engine(ISE)APIエンドポイントを、構造化された検出可能なMCPツールとして動的に公開します。このサーバにより、クライアントは標準化された方法でCisco ISE REST APIとやり取りすることができ、動的なツール生成やAPIレスポンスのフィルタリングなどの機能を提供します。
Related MCP server: Salesforce MCP Integration
特徴
動的ツール生成: MCP ツールは
src/ise_mcp_server/urls.json構成ファイルのエントリに基づいて自動的に作成されます。**FastMCP 統合:**スキーマ生成やリクエスト処理を含む堅牢な MCP サーバー実装のために
fastmcpライブラリを活用します。非同期 API 呼び出し: Cisco ISE との非ブロッキング通信に
httpx.AsyncClientを使用します。**API フィルタリング:**各ツールの
filter_expressionおよびquery_params引数を通じて Cisco ISE API 結果のフィルタリングをサポートします。環境主導型構成: Cisco ISE 接続の詳細 (ベース URL、ユーザー名、パスワード) と SSL 検証設定 (
ISE_VERIFY_SSL) は、.envファイルを介して構成されます。**詳細なドキュメント文字列:**動的に生成されたツールには、その目的、対象となる ISE API エンドポイント、フィルタリング パラメータの使用方法を説明する包括的なドキュメント文字列が含まれています。
**標準化されたインタラクション:**モデル コンテキスト プロトコルに準拠し、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.txtまたは、
uvを使用する場合:uv pip install -r requirements.txt主な依存関係には、
fastmcp、httpx、pydantic、python-dotenvが含まれます。(requirements.txt、requestsではなくhttpxが反映されていることを確認してください)。
構成
環境変数: Cisco ISE API 認証情報とベース URL を使用して、プロジェクト ルート ディレクトリ (
/Users/username/mcp_servers/ISE_MCP/.env) に.envファイルを作成します。ISE_BASE="https://your-ise-instance.example.com" USERNAME="your-ise-api-username" PASSWORD="your-ise-api-password" # Optional: Controls SSL certificate verification for ISE API calls. # Default is true. Set to "false" to disable (insecure). # Or provide a path to a CA bundle file, e.g., "/path/to/your/ca.pem". ISE_VERIFY_SSL="true"URL設定(
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になります)。FilterableFields: このエンドポイントのfilter_expressionで使用できる既知のフィールドをリストした文字列の配列。このリストはユーザーが管理し、効果的なフィルタリングに不可欠です。
Claude Desktop 用の Docker でサーバーを実行する
このサーバーは、特に STDIO を介して対話する Claude Desktop などのクライアントで使用する場合に、Docker コンテナーとして実行されるように設計されています。
前提条件
Docker がインストールされている: Docker Desktop がインストールされ、実行されていることを確認します。
.env.envファイル (構成で説明) は、プロジェクト ルート (/Users/username/mcp_servers/ISE_MCP/.env) に存在する必要があります。**STDIO用に構成されたDockerfile:**このプロジェクトの
Dockerfile(Dockerfile)は、stdioトランスポートを使用するように構成する必要があります。ENTRYPOINTENTRYPOINT次のようになります。ENTRYPOINT ["python", "-m", "ise_mcp_server", "--transport", "stdio"].envファイルがコピーされないようにしてください。
Dockerイメージをビルドする
Dockerfile を含むディレクトリ ( /Users/username/mcp_servers/ISE_MCP/ ) に移動し、Docker イメージをビルドします。
あるいは、プロジェクト ルートからビルドする場合は次のようにします。
Claudeデスクトップの設定
次のように、「ISE_MCP」サーバーの Claude Desktop MCP サーバー構成 ( claude_desktop_config.jsonまたはcline_mcp_settings.json ) を更新します。
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ファイルから環境変数を読み込みます。
この方法は直接テストに適していますが、Claude Desktop の統合には上記のdocker run構成が推奨されます。
ローカルでサーバーを実行する(Dockerなし)
開発の場合や Docker が好まれない場合は、Python を使用してサーバーを直接実行できます。
前提条件
Python 環境: Python 3.9 以上がインストールされており、
requirements.txtから依存関係がインストールされていることを確認します。.env.envファイルはプロジェクト ルート (/Users/username/mcp_servers/ISE_MCP/.env) に存在する必要があります。
実行
プロジェクトのルート ディレクトリに移動して、次を実行します。
デフォルトでは、 src/ise_mcp_server/server.py 、通常http://127.0.0.1:8000/mcpで利用可能なstreamable-httpトランスポートを使用してサーバーを起動するように設定されていますserver.py変更することで、特定のクライアントに合わせてトランスポート(例: stdio )やその他のサーバーパラメータを変更できます。
MCP Inspector を使用した開発とテスト (ローカル Python)
MCP Inspector を使用したローカル開発の場合:
このコマンドを実行すると、MCP Inspector が起動します。
Inspector を使用した STDIO テストの場合:
インスペクターでトランスポート タイプとして「STDIO」を選択します。
サーバーを実行するコマンドを
python src/ise_mcp_server/server.pyとして設定します。サーバーに接続します。
Inspector を使用した HTTP テストの場合:
別のターミナルで
python src/ise_mcp_server/server.pyを実行してサーバーを起動します (デフォルトではstreamable-httpが使用されます)。MCP インスペクターで、「HTTP」を選択します。
URL を
http://127.0.0.1:8000/mcp(または構成したエンドポイント) に設定します。サーバーに接続します。
uvとfastmcp runを使用してローカルで実行する (STDIO の代替)
uvとfastmcpグローバルまたは環境にインストールされている場合は、 fastmcp runコマンドを使用してサーバーを実行することもできます。これは、STDIO ベースのクライアントに役立つことがよくあります。
前提条件:
uvがインストールされ、PATH に追加されます。uvが使用する環境に(またはグローバルに)インストールされたfastmcp。プロジェクト ルートに
.envファイルがあります。
実行:
このコマンドは、指定されたプロジェクトディレクトリ内でfastmcp run src/ise_mcp_server/server.py --transport stdioを実行するようuv指示します。-- --transport stdioフラグは、STDIO を期待するクライアントにとって重要です。
Claude Desktop の Claude Desktop でこの方式を使用する場合は、次のように構成できます。
サーバー名を「ISE_LOCAL_UV」にするか、キーを適宜変更すると、Claude Desktop がこの設定を認識できるようになります。fastmcp fastmcp run 、現在の作業ディレクトリ(この場合は/Users/username/mcp_servers/ISE_MCP )から.envファイルを自動的に読み込みます。
サーバーとのやり取り
実行後は、MCP 互換クライアント (MCP Inspector など) を使用して ISE MCP サーバーにアクセスできるようになります。
ツールの発見
クライアントは利用可能なツールを検出できます。各ツールはurls.json内のエントリに対応しています。ツール名はNameフィールドから派生します(例:「Identity Groups」はidentity_groupsになります)。
ツールの呼び出し
ツールは、Pydantic モデル ( FilterableToolInputまたはNonFilterableToolInput ) のインスタンスである単一のオプション引数paramsで呼び出されます。
**例: フィルターなしでendpointsツールを呼び出す:**ツールの入力モデルがdefault_factory使用する場合、MCP クライアントは通常、明示的な引数なしでツールを呼び出すことを許可します。
**例: フィルター付きendpointsツールの呼び出し:**引数はPydanticモデルに従って構造化されます。FilterableFields FilterableFields持つエンドポイントから生成されたツールの場合:
filter_expression(文字列、オプション):fieldName.OPERATION.valueの形式でフィルターを指定します(例:mac.EQUALS.AA:BB:CC:DD:EE:FF)。利用可能なFilterableFieldsとサポートされている ISE 演算(例:CONTAINS、EQUALS、STARTSWITH)については、ツールのドキュメントを参照してください。query_params(dict, オプション): 任意のクエリパラメータ(例:{"size": 100, "page": 2})を指定できます。これらのパラメータはISE APIに直接渡されます。
urls.json内のエンドポイントに空のFilterableFields配列がある場合、対応するツールはquery_paramsのみを受け入れます。
エンドポイントと利用可能なフィルタリング可能なフィールドの詳細については、各ツールの動的に生成された docstring を参照してください。
ログ記録
サーバーはfastmcpによって設定された標準の Python loggingモジュールを使用します。サーバーの操作と API のやり取りに関連するログメッセージがコンソールに出力されます。
ライセンス
Apache 2.0 ライセンス