AI Assistant Chat with Nmap Tool Integration について
GradioとOpenAI Agents SDKを使い、ローカルファイルへのアクセスとDocker上のNmapスキャナーをAIアシスタントに提供するチャットアプリのサンプルです。対話形式のネットワークスキャンを想定しています。
主な機能
- 01Gradioのウェブチャット画面
- 02OpenAI Agents SDKのアシスタント
- 03アプリのディレクトリに限定したファイルアクセス
- 04Nmapによるホスト・ポートスキャン
- 05Docker化されたスキャンサーバー
活用シーン
- 01チャットでホストへの疎通を確認
- 02ネットワークのポートをスキャンしてサービスを検出
- 03SMB共有を列挙
MCP 対応
アプリはファイルシステムMCPサーバーとDocker化されたNmap MCPサーバーを管理します。Nmapサーバーは、ホスト確認、ポートスキャン、サービス検出、SMB共有列挙をエージェント向けのツールとして公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Nmap ツール連携機能を備えた AI アシスタントチャット
このプロジェクトでは、Gradio を使用したウェブベースのチャットインターフェースを提供します。ユーザーは OpenAI API を利用する AI アシスタントとやり取りできます。アシスタントには、ローカルファイルシステムを操作し、コンテナ化された Nmap サーバーを使用してネットワークスキャンを実行するツールが備わっています。
概要
このアプリケーションでは、OpenAI Agents SDK フレームワークを使用しています。ユーザーのリクエストは、内容を推論し、利用可能なツールを使用するかどうかを判断できる AI エージェントによって処理されます。主な機能は次のとおりです。
- 簡単に操作できる Gradio フロントエンド。
- OpenAI モデルを利用する AI エージェントのバックエンド(API キーが必要です)。
- ファイルシステムにアクセスする Model Context Protocol(MCP)サーバー(
@modelcontextprotocol/server-filesystemを使用)。 - Nmap スキャン機能(ping、ポートスキャン、サービス検出、SMB 共有の列挙)を提供するコンテナ化された MCP サーバー[cite: 14, 16, 18, 20, 22]。
Nmap サーバーは、依存関係の管理と分離を容易にするため、Docker コンテナ内で実行されます。
機能
- 会話型 AI アシスタント。
- ファイルシステムアクセスツール(アプリケーションディレクトリ内に限定)。
- Nmap によるネットワークスキャンツール:
ping_host[cite: 14]scan_network(上位 100 ポート)[cite: 16]all_scan_network(包括的な -A スキャン)[cite: 18]all_ports_scan_network(全 65535 ポート)[cite: 20]smb_share_enum_scan(SMB 共有の列挙)[cite: 22]
- Gradio を使用したウェブベースの UI[cite: 11, 12]。
- Docker を使用したコンテナ化 Nmap ツールサーバー。
アーキテクチャ
- Gradio UI(
app.txt):ユーザー入力を処理し、会話履歴を表示します。 - メインアプリケーション(
app.txt):- Gradio インターフェースを初期化します。
- 会話状態を管理します。
- MCP サーバーを設定して管理します。
- OpenAI エージェントをインスタンス化して実行します。
- OpenAI エージェント(
agentsライブラリ):ユーザーメッセージを処理し、必要に応じてツールを呼び出して応答を生成します[cite: 1, 3]。 - MCP サーバー:
- ファイルシステムサーバー:
npxを使用して実行し、ローカルファイルへのアクセスを提供します[cite: 1]。 - Nmap ツールキットサーバー(Docker 内の
nmap-server.txt):Docker コンテナ内で実行され、MCP 経由で Nmap スキャン機能をツールとして公開します[cite: 2, 14]。app.txtは各リクエストのたびにdocker runを使用してこのサーバーを起動します。
- ファイルシステムサーバー:
前提条件
- Python:3.9 以降
- Docker:最新バージョンがインストールされ、実行中であること。
- Node.js/npm:ファイルシステム MCP サーバーを実行するために
npxが必要です。 - OpenAI API キー:環境変数
OPENAI_API_KEYとして設定してください。
インストールとセットアップ
-
リポジトリをクローンします:
git clone <your-repository-url> cd <your-repository-directory> -
OpenAI API キーを設定します: API キーを環境変数としてエクスポートします。
your_api_key_hereを実際のキーに置き換えてください。- Linux/macOS:
export OPENAI_API_KEY='your_api_key_here' - Windows(コマンドプロンプト):
set OPENAI_API_KEY=your_api_key_here - Windows(PowerShell):
$env:OPENAI_API_KEY='your_api_key_here'
- Linux/macOS:
-
Nmap の Docker イメージをビルドします:
nmap-server.pyとDockerfileがあるディレクトリに移動し、次のコマンドを実行します。docker build -t nmap-mcp-server .(特に、MCP パッケージ名が
modelcontextprotocolではない場合は、Dockerfileの内容が正しいことを確認してください。) -
Python の依存関係をインストールします: 仮想環境の使用をおすすめします。
python -m venv venv # 仮想環境を有効化します # Linux/macOS: source venv/bin/activate # Windows: .\venv\Scripts\activate # 必要なパッケージをインストールします pip install -r requirements.txt
アプリケーションの実行
OpenAI API キーが設定され、Docker が実行中であり、仮想環境を有効化した状態でプロジェクトのルートディレクトリにいることを確認してください。
python app.py
An example MCP server with a couple nmap scans as tools.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。