Netdisco MCP
Netdisco MCP
完全なNetdisco REST APIをエージェントネイティブなMCPサーバーに変換
81ツール · 動的Swaggerディスカバリ · stdio + Streamable HTTP · ガイダンス優先のエージェントUX · Bearer認証
Netdisco MCPは、稼働中のNetdiscoの swagger.json ドキュメントを完全で検索可能なMCPツールサーフェスに変換します。脆弱な手書きのエンドポイントサブセットは維持しません。起動時に接続されたNetdiscoのバージョンを検出し、Swagger 2.0をOpenAPI 3にアップグレードし、スキーマの非互換性を修復し、安定したツール名を割り当て、サポートされているすべての操作をFastMCPを通じて公開します。
その結果、運用上の質問に答え、デバイスやスイッチポートを検査し、ノードやVLANを検索し、インベントリレポートを実行し、明示的に有効化した場合にはNetdiscoジョブを送信または削除できるMCPサーバーが得られます。
[!IMPORTANT] ライブAPIが真実の情報源です。Netdiscoがエンドポイントを追加すると、ツール数が増加することがあります。このREADMEのカタログは、Netdisco
2.103000の確認済みスナップショットです。
目次
このプロジェクトが存在する理由
機能 | 意味 |
完全なAPIカバレッジ | 接続されたNetdiscoインスタンスが提供するすべての操作がMCPツールになります。 |
アップグレード対応 | コンテナを再起動すると、ライブ仕様が再読み込みされ、新しいエンドポイントが検出されます。 |
エージェント優先のガイダンス |
|
機能発見 |
|
より安全な探索 | 読み取り専用モードでは、ツール生成前にPOST、PUT、PATCH、DELETE操作を削除します。 |
コンテキスト保護 | 巨大なレスポンスは、リクエストを絞り込む明確なヒントとともに切り詰められます。 |
柔軟なトランスポート | stdio経由でローカル実行、またはMCP Streamable HTTP経由でリモート実行できます。 |
リモート認証 | Streamable HTTPは、デプロイメント固有のBearerトークンを要求できます。 |
コンテナ強化 | 提供されるComposeサービスは、読み取り専用ファイルシステム、 |
アーキテクチャ
flowchart LR
subgraph Clients["MCP clients"]
ChatGPT["ChatGPT / OpenAI"]
Codex["Codex"]
ClaudeCode["Claude Code"]
ClaudeDesktop["Claude Desktop"]
end
Proxy["TLS reverse proxy"]
subgraph Server["Netdisco MCP"]
Auth["Bearer authentication"]
Guide["Guidance gate"]
Catalog["FastMCP tool catalog"]
Limit["Response limiter"]
Adapter["Swagger 2 → OpenAPI 3 adapter"]
end
Spec["Netdisco swagger.json"]
API["Netdisco REST API"]
ChatGPT --> Proxy
Codex --> Proxy
ClaudeCode --> Proxy
ClaudeDesktop --> Proxy
Proxy --> Auth
Auth --> Guide --> Catalog --> Limit
Adapter --> Catalog
Spec --> Adapter
Catalog --> API起動パイプライン
sequenceDiagram
participant S as Netdisco MCP
participant N as Netdisco
participant A as Swagger adapter
participant F as FastMCP
S->>N: GET /swagger.json
N-->>S: Swagger 2.0 document
S->>A: Normalize schemas and references
A->>A: Assign stable operation IDs
A->>A: Remove mutations when read-only
A-->>S: OpenAPI 3.0.3 document
S->>F: Generate and mount tools
F-->>S: MCP server ready生産的なエージェントワークフロー
このサーバーは、AIエージェントがネットワーク管理タスクにどのように取り組むべきかについて、意図的に意見を持っています。
flowchart TD
Start["Start a Netdisco task"] --> Guidance["Call get_guidance"]
Guidance --> Known{"Know the exact tool?"}
Known -- No --> Find["Call find_capability"]
Known -- Yes --> Read["Use search or object GET"]
Find --> Read
Read --> Evidence["Inspect current state"]
Evidence --> Change{"Is a change required?"}
Change -- No --> Report["Return evidence"]
Change -- Yes --> Confirm["Confirm target and scope"]
Confirm --> Mutate["Call mutation tool"]
Mutate --> Verify["Read current state again"]
Verify --> Report作業セッションの開始時に
get_guidanceを一度呼び出します。正しいツールが明らかでない場合は
find_capabilityを使用します。広範なレポートよりも、検索ツールとオブジェクトツールを優先します。
変更を行う前に現在の状態を検査します。
タイムアウトを失敗と解釈するのではなく、結果の状態を確認します。
完全なツールカタログ
確認済みのNetdisco 2.103000 サーフェスには以下が含まれます:
カテゴリ | ツール数 |
エージェント支援 | 2 |
オブジェクト | 31 |
レポート | 34 |
キュー | 5 |
検索 | 4 |
ユーザー | 2 |
一般 | 3 |
合計 | 81 |
生成されたAPIツールのうち7つはPOST、PUT、DELETEを使用しており、ミューテーションとして扱われます。NETDISCO_READ_ONLY=1 を設定すると、これら7つのツールが削除されます。
[!CAUTION] Netdiscoは
GET /logoutを公開しており、HTTP GETを使用しているにもかかわらず、現在のAPIキーとセッションを破棄します。メソッドベースの読み取り専用フィルタリングでは、そのエンドポイントをミューテーションとして分類できません。get_logoutは破壊的なものとして扱ってください。
エージェント支援ツール
ツール | 目的 |
| バンドルされたNetdisco操作ガイドを返し、トピック固有のセクションを強調表示できます。 |
| 生成された完全なカタログを、タスク、ルート、タグ、HTTPメソッド、または説明で検索します。 |
メソッド | ツール | Netdisco ルート | 目的 |
DELETE |
|
| デバイスのジョブを削除し、スキップリストをクリアします。フィールドでフィルタリング可能です。 |
GET |
|
| デバイステーブルから行を返します。 |
GET |
|
| デバイスの |
GET |
|
| デバイスのモジュール行を返します。 |
GET |
|
| デバイスのレイヤー2隣接関係を返します。 |
GET |
|
| デバイス上で見つかったノードを返します。 |
GET |
|
|
|
GET |
|
| ポートのアクティブノード行を返します。 |
GET |
|
| ポートのアクティブノード行を経過時間データ付きで返します。 |
GET |
|
| ポートの集約マスターエントリを返します。 |
GET |
|
| ポートの最終ノードエントリを返します。 |
GET |
|
| ポートのログ行を返します。 |
GET |
|
| ポートの隣接エントリを返します。 |
GET |
|
| ポートのノード行を返します。 |
GET |
|
| ポートのノード行を経過時間データ付きで返します。 |
GET |
|
| ポートの |
GET |
|
| ポートの電力エントリを返します。 |
GET |
|
| ポートのプロパティエントリを返します。 |
GET |
|
| ポートの SSID エントリを返します。 |
GET |
|
| ポートの VLAN 行を返します。 |
GET |
|
| ポートのワイヤレスエントリを返します。 |
GET |
|
| デバイスの |
GET |
|
| デバイスのポート行を返します。 |
GET |
|
| PoE モジュールのステータスと集約ポート統計を返します。 |
GET |
|
| デバイスの給電ポート行を返します。 |
GET |
|
| デバイスの SSID 行を返します。 |
GET |
|
| デバイスの VLAN 行を返します。 |
GET |
|
| デバイスのワイヤレスポート行を返します。 |
GET |
|
| VLAN 内で見つかったノードを返します。 |
PUT |
|
| デバイス上で見つかった ARP エントリを保存するジョブをキューに入れます。 |
PUT |
|
| デバイス上で見つかったノードを保存するジョブをキューに入れます。 |
メソッド | ツール | Netdisco ルート | レポート |
GET |
|
| DNS エントリのない IP アドレス。 |
GET |
|
| ロケーションごとにグループ化されたインベントリ。 |
GET |
|
| デバイス名と DNS の不一致。 |
GET |
|
| デバイスインベントリ。 |
GET |
|
| 複数のアドレスを持つデバイス。 |
GET |
|
| Power over Ethernet ステータス。 |
GET |
|
| 複数のデバイスで見つかった IP アドレス。 |
GET |
|
| モデルまたは OS データが欠落しているデバイス。 |
GET |
|
| ポート使用率。 |
GET |
|
| 最近追加されたデバイス。 |
GET |
|
| 重複したプライベートネットワーク。 |
GET |
|
| IP インベントリ。 |
GET |
|
| サブネット使用率。 |
GET |
|
| 複数のアクティブ IP アドレスを持つノード。 |
GET |
|
| LLDP または CDP によって発見されたノード。 |
GET |
|
| 不一致のデュプレックス設定。 |
GET |
|
| 半二重モードで動作しているポート。 |
GET |
|
| 管理上無効にされたポート。 |
GET |
|
| スパニングツリーによってブロックされたポート。 |
GET |
|
| 複数のノードが接続されたポート。 |
GET |
|
| エラー無効ポート。 |
GET |
|
| ポート SSID インベントリ。 |
GET |
|
| 最も多くの VLAN を運ぶポート。 |
GET |
|
| VLAN 設定の不一致。 |
GET |
|
| デバイスごとの VLAN 数。 |
GET |
|
| VLAN インベントリ。 |
GET |
|
| 複数の名前を持つ VLAN。 |
GET |
|
| 認識されているが設定されたことのない VLAN。 |
GET |
|
| アップリンクにのみ見つかった VLAN。 |
GET |
|
| 使用されていない VLAN。 |
GET |
|
| アクセスポイントチャネル分布。 |
GET |
|
| アクセスポイントクライアント数。 |
GET |
|
| アクセスポイント無線チャネルと電力。 |
GET |
|
| SSID インベントリ。 |
メソッド | ツール | Netdisco ルート | 目的 |
GET |
|
| アクティブな Netdisco バックエンド名を一覧表示。 |
GET |
|
| オプションのフィルター付きでキュー内のジョブを返す。 |
GET |
|
| ステータスごとにグループ化されたジョブ数を返す。 |
POST |
|
| Netdisco キューにジョブを送信。 |
DELETE |
|
| オプションのフィルターでキュー内のジョブとスキップリストエントリを削除。 |
メソッド | ツール | Netdisco ルート | 目的 |
GET |
|
| デバイスを ID、アドレス、ロケーション、モデル、OS、ベンダー、その他の属性で検索。 |
GET |
|
| アクティブおよびアーカイブされた観測を含むノードを検索。 |
GET |
|
| 説明とポート特性でスイッチポートを検索。 |
GET |
|
| VLAN を検索。 |
メソッド | ツール | Netdisco ルート | 目的 |
GET |
|
| ロールとトークンステータスを持つユーザーを一覧表示。 |
POST |
|
| トークンのみのサービスアカウントをプロビジョニングし、API トークンを発行または無効化。 |
メソッド | ツール | Netdisco ルート | 目的 |
GET |
|
| 最新の Netdisco 統計行を返す。 |
GET |
|
| 現在の API キーとセッションクッキーを破棄します。これには破壊的な副作用があります。 |
POST |
|
| Netdisco API キーを取得。 |
クイックスタート
必要条件
Python 3.11 以降
到達可能な
swagger.jsonを持つ Netdisco インスタンス永続的な Netdisco API トークン、またはサポートされているユーザー名/パスワード資格情報
コンテナデプロイメント用の Docker および Docker Compose
ローカル開発
git clone https://github.com/omichelbraga/netdisco-mcp.git
cd netdisco-mcp
cp .env.example .env.env に必要な値を設定:
NETDISCO_URL=https://netdisco.example.net
NETDISCO_API_TOKEN=replace-with-a-permanent-netdisco-tokenライブ仕様をインストール、検証、実行:
uv sync --extra dev
uv run netdisco-mcp --check
uv run netdisco-mcpデフォルトのトランスポートは stdio です。
Docker Compose
提供されている Compose ファイルは、共有外部ネットワーク mcp-edge を想定しており、ホストポートを公開しません。
docker network create mcp-edge
docker compose up --build -dmcp-edge 上のリバースプロキシは、次の場所でサービスに到達できます:
http://netdisco-mcp:8000/mcp設定リファレンス
設定項目 | デフォルト値 | 目的 |
| 必須 | NetdiscoインスタンスのベースURL。 |
|
| ライブのSwagger/OpenAPI URLを上書きします。 |
| 未設定 | 上流APIに送信されるNetdisco API認証情報。 |
|
| 認証スキーム。プレフィックスなしのトークンには |
| 未設定 | オプションのNetdisco Basic認証ユーザー名。 |
| 未設定 | オプションのNetdisco Basic認証パスワード。 |
|
| Netdisco TLS証明書を検証します。 |
|
| 上流リクエストのタイムアウト(秒)。 |
|
|
|
|
| 通常のツール使用前にガイダンスを要求します。 |
|
| ガイダンスアクティビティウィンドウ(秒)。 |
|
| 切り捨て前の最大ツール応答サイズ。 |
|
|
|
|
| Streamable HTTPのバインドアドレス。 |
|
| プロセスまたはコンテナ内のリスニングポート。 |
| 未設定 | 設定時にHTTPトランスポートが必要とする静的ベアラートークン。 |
[!WARNING]
NETDISCO_API_TOKENはサーバーをNetdiscoに対して認証します。NETDISCO_MCP_BEARER_TOKENはMCPクライアントをこのサーバーに対して認証します。これらは 異なる信頼境界を保護するため、同じ値を共有してはなりません。
MCPクライアントの接続
Claude Code
claude mcp add --transport http --scope user \
netdisco-mcp https://netdisco-mcp.example.net/mcp \
--header "Authorization: Bearer <mcp-bearer-token>"接続を確認します:
claude mcp get netdisco-mcpCodex
MCPベアラートークンをNETDISCO_MCP_BEARER_TOKENに保存し、次のエントリを追加します
~/.codex/config.tomlへ:
[mcp_servers."netdisco-mcp"]
url = "https://netdisco-mcp.example.net/mcp"
bearer_token_env_var = "NETDISCO_MCP_BEARER_TOKEN"
default_tools_approval_mode = "prompt"公式のCodex MCP設定を参照してください 追加のタイムアウト、許可リスト、承認制御について。
Claude Desktop
Claude Desktopは含まれている認証済みstdioプロキシを使用できます。このプロキシは リモートベアラートークンをDesktopが送信するMCPプロトコルメッセージから分離し、 上流に接続するときのみ追加します。
fastmcp install claude-desktop \
src/netdisco_mcp/desktop_proxy.py:mcp \
--name netdisco-mcp \
--with-editable . \
--env NETDISCO_MCP_URL=https://netdisco-mcp.example.net/mcp \
--env NETDISCO_MCP_BEARER_TOKEN=<mcp-bearer-token>インストール後にClaude Desktopを再起動します。
OpenAI Responses API
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.6",
input="Call get_guidance, then summarize the Netdisco device inventory.",
tools=[
{
"type": "mcp",
"server_label": "netdisco",
"server_url": "https://netdisco-mcp.example.net/mcp",
"authorization": os.environ["NETDISCO_MCP_BEARER_TOKEN"],
"require_approval": "always",
}
],
)
print(response.output_text)authorizationフィールドは公式の
リモートMCPツール契約に従います。require_approvalをalwaysに設定しておくことはこのサーバーに適切です。
なぜなら、そのライブカタログには変更ツールが含まれる可能性があるからです。
汎用MCPクライアント
{
"mcpServers": {
"netdisco-mcp": {
"type": "http",
"url": "https://netdisco-mcp.example.net/mcp",
"headers": {
"Authorization": "Bearer <mcp-bearer-token>"
}
}
}
}セキュリティモデル
flowchart LR
Client["Authenticated MCP client"]
Edge["TLS reverse proxy"]
MCP["Netdisco MCP bearer verifier"]
Credential["Internal Netdisco credential"]
Netdisco["Netdisco authorization"]
Client -- "MCP bearer token" --> Edge
Edge -- "preserved Authorization header" --> MCP
MCP -- "approved tool call" --> Credential
Credential -- "separate API token" --> Netdiscoプロジェクトが提供するセキュリティ制御:
設定されたMCPベアラートークンの定数時間比較。
別個のMCPクライアントとNetdisco上流認証情報。
オプションのメソッドベース読み取り専用ツールフィルタリング。
操作ツール使用前のガイダンスミドルウェア。
モデルコンテキストを保護するための応答サイズ制限。
デフォルトでNetdiscoのTLS検証。
提供されたComposeファイルにホストポートなし。
読み取り専用コンテナファイルシステムと
no-new-privileges。
推奨される本番環境制御:
リバースプロキシで信頼できるTLSを終端する。
両方の認証情報をシークレットマネージャーまたはPortainerシークレット環境に保存する。
定義されたスケジュールおよび偶発的な開示後に認証情報をローテーションする。
Netdisco認証情報を最小限必要なロールに制限する。
変更ツールに対して承認プロンプトを有効にしておく。
リバースプロキシアクセスログとNetdiscoジョブ履歴を確認する。
検出専用デプロイメントには
NETDISCO_READ_ONLY=1を使用する。
ツール生成の仕組み
Netdisco 2.103000はSwagger 2.0を公開し、FastMCPはOpenAPI 3を消費します。
アダプターは、サポートされている操作を削除せずに以下の変換を実行します:
Swagger参照をOpenAPI
components参照に書き換えます。ボディパラメータとフォームパラメータをOpenAPIリクエストボディに変換します。
パラメータタイプ情報をスキーマに移動します。
Netdiscoプロパティレベルの
requiredフラグを修復します。ブール値、整数、配列のデフォルト値を正規化します。
レスポンススキーマをメディアタイプコンテンツエントリに変換します。
決定論的で人間が読める操作IDを割り当てます。
元のHTTPメソッドとルートをすべてのツール説明に追加します。
読み取り専用モードが有効な場合、書き込みメソッドを削除します。
2つのルートが同じフレンドリ名を受け取る場合、決定論的な7文字の
ダイジェストが追加されます。これにより、get_device_port_vlans_cd8cf56のような名前が説明され、
完全なAPIサーフェスが衝突なく保たれます。
リポジトリレイアウト
netdisco-mcp/
├── src/netdisco_mcp/
│ ├── __main__.py # CLI and transport startup
│ ├── auth.py # MCP bearer-token verification
│ ├── config.py # Environment-driven settings
│ ├── desktop_proxy.py # Authenticated Claude Desktop proxy
│ ├── guidance.py # Guidance loading and enforcement
│ ├── server.py # FastMCP assembly and tool mounting
│ ├── spec.py # Swagger normalization and tool catalog
│ └── data/GUIDANCE.md # Operating instructions for AI agents
├── tests/ # Configuration, auth, and spec tests
├── compose.yaml # Internal-network container deployment
├── Dockerfile
└── pyproject.toml開発とテスト
テストスイートを実行します:
uv run pytestトランスポートを開始せずに接続されたライブAPIを検証します:
NETDISCO_URL=https://netdisco.example.net \
NETDISCO_API_TOKEN=<netdisco-api-token> \
uv run netdisco-mcp --checkチェックはAPIバージョンカバレッジ、読み取り/書き込み操作数、総MCP ツール数、タグを報告します。テストはトランスポートエイリアス、ベアラー検証、Swagger- to-OpenAPI変換、安定した名前、リクエストボディ、スキーマ修復、読み取り専用 フィルタリング、機能発見をカバーします。
貢献
リポジトリをフォークし、焦点を絞ったブランチを作成します。
動作変更に対するテストを追加します。
代表的なSwaggerフィクスチャに対して完全なテストスイートを実行します。
認可されたNetdiscoインスタンスに対して
netdisco-mcp --checkを実行します。ユーザーから見える動作と検証を説明するプルリクエストを開きます。
Netdisco認証情報、MCPベアラートークン、内部URL、または キャプチャされたインフラストラクチャデータをコミットしないでください。
ライセンス
MITライセンスの下で公開されています。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
SaaS intelligence for AI agents. 5 unified tools cover 1,000+ services with 91-96% token savings.
Universal AI API Orchestrator — 1,554 tools, 96 services. One install.
Domain & company intel for AI agents: RDAP, DNS, email deliverability, tech stack. No API keys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/omichelbraga/netdisco-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server