Netdisco MCP
Netdisco MCP
Die vollständige Netdisco REST API, übersetzt in einen agenten-nativen MCP-Server
81 Tools · dynamische Swagger-Erkennung · stdio + Streamable HTTP · guidance-first Agenten-UI · Bearer-Authentifizierung
Netdisco MCP verwandelt ein Live-Netdisco swagger.json-Dokument in eine vollständige, durchsuchbare MCP-Tool-Oberfläche. Es pflegt keine fragwürdige handgeschriebene Teilmenge von Endpunkten. Beim Start erkennt es die verbundene Netdisco-Version, aktualisiert Swagger 2.0 auf OpenAPI 3, repariert Schema-Inkompatibilitäten, weist stabile Tool-Namen zu und veröffentlicht jeden unterstützten Vorgang über FastMCP.
Das Ergebnis ist ein MCP-Server, der betriebliche Fragen beantworten, Geräte und Switch-Ports inspizieren, Knoten und VLANs durchsuchen, Bestandsberichte ausführen und – wenn explizit aktiviert – Netdisco-Jobs einreichen oder entfernen kann.
[!IMPORTANT] Die Live-API ist die Quelle der Wahrheit. Die Tool-Anzahl kann steigen, wenn Netdisco Endpunkte hinzufügt. Der Katalog in dieser README ist eine verifizierte Momentaufnahme von Netdisco
2.103000.
Inhaltsverzeichnis
Warum dieses Projekt existiert
Fähigkeit | Bedeutung |
Vollständige API-Abdeckung | Jeder von der verbundenen Netdisco-Instanz angekündigte Vorgang wird zu einem MCP-Tool. |
Upgrade-bewusst | Ein Neustart des Containers lädt die Live-Spezifikation neu und entdeckt neue Endpunkte. |
Agenten-zentrierte Führung |
|
Fähigkeitserkennung |
|
Sicherere Erkundung | Der Nur-Lese-Modus entfernt POST-, PUT-, PATCH- und DELETE-Operationen vor der Tool-Generierung. |
Kontextschutz | Überdimensionierte Antworten werden mit einem klaren Hinweis zur Eingrenzung der Anfrage abgeschnitten. |
Flexibler Transport | Lokal über stdio oder remote über MCP Streamable HTTP ausführen. |
Remote-Authentifizierung | Streamable HTTP kann einen bereitstellungsspezifischen Bearer-Token erfordern. |
Container gehärtet | Der bereitgestellte Compose-Dienst verwendet ein schreibgeschütztes Dateisystem, |
Architektur
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 --> APIStart-Pipeline
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 readyEin produktiver Agenten-Workflow
Der Server ist bewusst voreingenommen, wie ein KI-Agent eine Netzwerkverwaltungsaufgabe angehen sollte.
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 --> ReportRufen Sie
get_guidanceeinmal zu Beginn der Arbeitssitzung auf.Verwenden Sie
find_capability, wenn das richtige Tool nicht offensichtlich ist.Bevorzugen Sie Such- und Objekt-Tools vor breiten Berichten.
Überprüfen Sie den aktuellen Zustand vor jeder Mutation.
Überprüfen Sie den resultierenden Zustand, anstatt ein Timeout als Fehlschlag zu interpretieren.
Vollständiger Tool-Katalog
Die verifizierte Netdisco 2.103000-Oberfläche enthält:
Kategorie | Tools |
Agentenunterstützung | 2 |
Objekte | 31 |
Berichte | 34 |
Warteschlange | 5 |
Suche | 4 |
Benutzer | 2 |
Allgemein | 3 |
Gesamt | 81 |
Sieben generierte API-Tools verwenden POST, PUT oder DELETE und werden als Mutationen behandelt. Setzen Sie NETDISCO_READ_ONLY=1, um diese sieben Tools zu entfernen.
[!CAUTION] Netdisco stellt
GET /logoutbereit, das den aktuellen API-Schlüssel und die Sitzung zerstört, obwohl HTTP GET verwendet wird. Die methodenbasierte Nur-Lese-Filterung kann diesen Endpunkt nicht als Mutation klassifizieren. Behandeln Sieget_logoutals destruktiv.
Agentenunterstützungs-Tools
Tool | Zweck |
| Gibt den gebündelten Netdisco-Betriebsleitfaden zurück und kann einen themenspezifischen Abschnitt hervorheben. |
| Durchsucht den vollständig generierten Katalog nach Aufgabe, Route, Tag, HTTP-Methode oder Beschreibung. |
Methode | Werkzeug | Netdisco-Route | Zweck |
DELETE |
|
| Aufträge löschen und die Skiplist für ein Gerät leeren, optional gefiltert nach Feldern. |
GET |
|
| Eine Zeile aus der Gerätetabelle zurückgeben. |
GET |
|
|
|
GET |
|
| Modulzeilen für ein Gerät zurückgeben. |
GET |
|
| Layer-2-Nachbarbeziehungen für ein Gerät zurückgeben. |
GET |
|
| Auf einem Gerät gefundene Knoten zurückgeben. |
GET |
|
| Eine Zeile aus der |
GET |
|
| Aktive-Knoten-Zeilen für einen Port zurückgeben. |
GET |
|
| Aktive-Knoten-Zeilen mit Altersdaten für einen Port zurückgeben. |
GET |
|
| Den Aggregations-Master-Eintrag für einen Port zurückgeben. |
GET |
|
| Den Letzten-Knoten-Eintrag für einen Port zurückgeben. |
GET |
|
| Protokollzeilen für einen Port zurückgeben. |
GET |
|
| Den Nachbareintrag für einen Port zurückgeben. |
GET |
|
| Knotenzeilen für einen Port zurückgeben. |
GET |
|
| Knotenzeilen mit Altersdaten für einen Port zurückgeben. |
GET |
|
|
|
GET |
|
| Den Stromversorgungseintrag für einen Port zurückgeben. |
GET |
|
| Den Eigenschafteneintrag für einen Port zurückgeben. |
GET |
|
| Den SSID-Eintrag für einen Port zurückgeben. |
GET |
|
| VLAN-Zeilen für einen Port zurückgeben. |
GET |
|
| Den drahtlosen Eintrag für einen Port zurückgeben. |
GET |
|
|
|
GET |
|
| Portzeilen für ein Gerät zurückgeben. |
GET |
|
| PoE-Modulstatus und aggregierte Portstatistiken zurückgeben. |
GET |
|
| Stromversorgte-Port-Zeilen für ein Gerät zurückgeben. |
GET |
|
| SSID-Zeilen für ein Gerät zurückgeben. |
GET |
|
| VLAN-Zeilen für ein Gerät zurückgeben. |
GET |
|
| Drahtlose-Port-Zeilen für ein Gerät zurückgeben. |
GET |
|
| In einem VLAN gefundene Knoten zurückgeben. |
PUT |
|
| Einen Auftrag zum Speichern von auf einem Gerät gefundenen ARP-Einträgen in die Warteschlange stellen. |
PUT |
|
| Einen Auftrag zum Speichern von auf einem Gerät gefundenen Knoten in die Warteschlange stellen. |
Methode | Werkzeug | Netdisco-Route | Bericht |
GET |
|
| IP-Adressen ohne DNS-Einträge. |
GET |
|
| Bestand nach Standort gruppiert. |
GET |
|
| Abweichungen zwischen Gerätename und DNS. |
GET |
|
| Gerätebestand. |
GET |
|
| Geräte mit mehreren Adressen. |
GET |
|
| Power-over-Ethernet-Status. |
GET |
|
| IP-Adressen, die auf mehreren Geräten gefunden wurden. |
GET |
|
| Geräte ohne Modell- oder Betriebssystemdaten. |
GET |
|
| Portauslastung. |
GET |
|
| Kürzlich hinzugefügte Geräte. |
GET |
|
| Doppelte private Netzwerke. |
GET |
|
| IP-Bestand. |
GET |
|
| Subnetzauslastung. |
GET |
|
| Knoten mit mehreren aktiven IP-Adressen. |
GET |
|
| Über LLDP oder CDP entdeckte Knoten. |
GET |
|
| Nicht übereinstimmende Duplexeinstellungen. |
GET |
|
| Im Halbduplex-Modus betriebene Ports. |
GET |
|
| Administrativ deaktivierte Ports. |
GET |
|
| Durch Spanning Tree blockierte Ports. |
GET |
|
| Ports mit mehreren angeschlossenen Knoten. |
GET |
|
| Fehlerdeaktivierte Ports. |
GET |
|
| SSID-Bestand der Ports. |
GET |
|
| Ports mit den meisten VLANs. |
GET |
|
| Nicht übereinstimmende VLAN-Konfigurationen. |
GET |
|
| VLAN-Anzahl pro Gerät. |
GET |
|
| VLAN-Bestand. |
GET |
|
| VLANs mit mehreren Namen. |
GET |
|
| Bekannte, aber nie konfigurierte VLANs. |
GET |
|
| Nur auf Uplinks gefundene VLANs. |
GET |
|
| Nicht mehr verwendete VLANs. |
GET |
|
| Kanalverteilung der Access Points. |
GET |
|
| Client-Anzahl der Access Points. |
GET |
|
| Funkkanal und -leistung der Access Points. |
GET |
|
| SSID-Bestand. |
Methode | Werkzeug | Netdisco-Route | Zweck |
GET |
|
| Aktive Netdisco-Backend-Namen auflisten. |
GET |
|
| Warteschlangenaufträge mit optionalen Filtern zurückgeben. |
GET |
|
| Nach Status gruppierte Auftragszahlen zurückgeben. |
POST |
|
| Aufträge an die Netdisco-Warteschlange übermitteln. |
DELETE |
|
| Warteschlangenaufträge und Skiplist-Einträge mit optionalen Filtern löschen. |
Methode | Werkzeug | Netdisco-Route | Zweck |
GET |
|
| Suche nach Geräten anhand von Identität, Adresse, Standort, Modell, Betriebssystem, Hersteller und anderen Attributen. |
GET |
|
| Suche nach Knoten, einschließlich aktiver und archivierter Beobachtungen. |
GET |
|
| Suche nach Switch-Ports anhand von Beschreibung und Port-Eigenschaften. |
GET |
|
| Suche nach VLANs. |
Methode | Werkzeug | Netdisco-Route | Zweck |
GET |
|
| Benutzer mit Rollen und Token-Status auflisten. |
POST |
|
| Ein tokenbasiertes Dienstkonto bereitstellen und dessen API-Token ausstellen oder widerrufen. |
Methode | Werkzeug | Netdisco-Route | Zweck |
GET |
|
| Die neueste Netdisco-Statistikzeile zurückgeben. |
GET |
|
| Den aktuellen API-Schlüssel und das Session-Cookie zerstören; dies hat einen destruktiven Nebeneffekt. |
POST |
|
| Einen Netdisco-API-Schlüssel erhalten. |
Schnellstart
Voraussetzungen
Python 3.11 oder neuer
Eine erreichbare Netdisco-Instanz mit
swagger.jsonEin permanenter Netdisco-API-Token oder unterstützte Benutzername-/Passwort-Anmeldedaten
Docker und Docker Compose für die Container-Bereitstellung
Lokale Entwicklung
git clone https://github.com/omichelbraga/netdisco-mcp.git
cd netdisco-mcp
cp .env.example .envSetzen Sie die erforderlichen Werte in .env:
NETDISCO_URL=https://netdisco.example.net
NETDISCO_API_TOKEN=replace-with-a-permanent-netdisco-tokenInstallieren, die Live-Spezifikation validieren und ausführen:
uv sync --extra dev
uv run netdisco-mcp --check
uv run netdisco-mcpDer Standardtransport ist stdio.
Docker Compose
Die mitgelieferte Compose-Datei erwartet das gemeinsam genutzte externe Netzwerk mcp-edge und veröffentlicht keinen Host-Port.
docker network create mcp-edge
docker compose up --build -dEin Reverse-Proxy auf mcp-edge kann den Dienst unter folgender Adresse erreichen:
http://netdisco-mcp:8000/mcpKonfigurationsreferenz
Einstellung | Standard | Zweck |
| erforderlich | Basis-URL der Netdisco-Instanz. |
|
| Überschreibt die Live-Swagger/OpenAPI-URL. |
| nicht gesetzt | Netdisco-API-Anmeldedaten, die an die vorgelagerte API gesendet werden. |
|
| Autorisierungsschema; verwenden Sie |
| nicht gesetzt | Optionaler Netdisco-Basic-Auth-Benutzername. |
| nicht gesetzt | Optionales Netdisco-Basic-Auth-Passwort. |
|
| Überprüft das Netdisco-TLS-Zertifikat. |
|
| Timeout für vorgelagerte Anfragen in Sekunden. |
|
| Entfernt POST-, PUT-, PATCH- und DELETE-Tools, wenn auf |
|
| Erfordert eine Anleitung vor der normalen Tool-Nutzung. |
|
| Zeitfenster für die Anleitungsaktivität in Sekunden. |
|
| Maximale Tool-Antwortgröße vor der Kürzung. |
|
|
|
|
| Bindungsadresse für Streamable HTTP. |
|
| Lauschport innerhalb des Prozesses oder Containers. |
| nicht gesetzt | Statisches Bearer-Token, das vom HTTP-Transport benötigt wird, wenn konfiguriert. |
[!WARNING]
NETDISCO_API_TOKENauthentifiziert den Server gegenüber Netdisco.NETDISCO_MCP_BEARER_TOKENauthentifiziert MCP-Clients gegenüber diesem Server. Sie schützen unterschiedliche Vertrauensgrenzen und sollten niemals denselben Wert teilen.
MCP-Clients verbinden
Claude Code
claude mcp add --transport http --scope user \
netdisco-mcp https://netdisco-mcp.example.net/mcp \
--header "Authorization: Bearer <mcp-bearer-token>"Überprüfen Sie die Verbindung:
claude mcp get netdisco-mcpCodex
Speichern Sie das MCP-Bearer-Token in NETDISCO_MCP_BEARER_TOKEN und fügen Sie diesen Eintrag
zu ~/.codex/config.toml hinzu:
[mcp_servers."netdisco-mcp"]
url = "https://netdisco-mcp.example.net/mcp"
bearer_token_env_var = "NETDISCO_MCP_BEARER_TOKEN"
default_tools_approval_mode = "prompt"Siehe die offizielle Codex MCP-Konfiguration für zusätzliche Timeout-, Whitelist- und Genehmigungssteuerungen.
Claude Desktop
Claude Desktop kann den mitgelieferten authentifizierten stdio-Proxy verwenden. Der Proxy hält das entfernte Bearer-Token aus den von Desktop gesendeten MCP-Protokollnachrichten heraus und fügt es nur beim Verbinden mit dem vorgelagerten Dienst hinzu.
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>Starten Sie Claude Desktop nach der Installation neu.
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)Das Feld authorization folgt dem offiziellen
Remote-MCP-Tool-Vertrag.
Es ist angemessen, require_approval auf always zu setzen, da der Live-Katalog dieses Servers
Mutationstools enthalten kann.
Generischer MCP-Client
{
"mcpServers": {
"netdisco-mcp": {
"type": "http",
"url": "https://netdisco-mcp.example.net/mcp",
"headers": {
"Authorization": "Bearer <mcp-bearer-token>"
}
}
}
}Sicherheitsmodell
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" --> NetdiscoVom Projekt bereitgestellte Sicherheitskontrollen:
Konstantzeitvergleich für das konfigurierte MCP-Bearer-Token.
Getrennte Anmeldedaten für MCP-Client und Netdisco-Upstream.
Optionale methodenbasierte Filterung auf Nur-Lesen-Tools.
Anleitungs-Middleware vor der Nutzung operativer Tools.
Begrenzung der Antwortgröße zum Schutz des Modellkontexts.
TLS-Überprüfung für Netdisco standardmäßig.
Kein Host-Port in der bereitgestellten Compose-Datei.
Schreibgeschütztes Container-Dateisystem und
no-new-privileges.
Empfohlene Produktionskontrollen:
Beenden Sie vertrauenswürdiges TLS am Reverse-Proxy.
Speichern Sie beide Anmeldedaten in einem Secret-Manager oder Portainer-Secret-Environment.
Rotieren Sie Anmeldedaten nach einem definierten Zeitplan und nach versehentlicher Offenlegung.
Beschränken Sie die Netdisco-Anmeldedaten auf die minimal erforderliche Rolle.
Behalten Sie Genehmigungsaufforderungen für Mutationstools aktiviert.
Überprüfen Sie Reverse-Proxy-Zugriffsprotokolle und den Netdisco-Jobverlauf.
Verwenden Sie
NETDISCO_READ_ONLY=1für reine Erkennungsbereitstellungen.
Wie die Tool-Generierung funktioniert
Netdisco 2.103000 veröffentlicht Swagger 2.0, während FastMCP OpenAPI 3 konsumiert.
Der Adapter führt die folgenden Transformationen durch, ohne unterstützte Operationen zu entfernen:
Schreibt Swagger-Referenzen in OpenAPI-
components-Referenzen um.Konvertiert Body- und Formularparameter in OpenAPI-Anforderungskörper.
Verschiebt Parametertypinformationen in Schemata.
Repariert Netdisco-Eigenschafts-
required-Flags.Normalisiert boolesche, ganzzahlige und Array-Standardwerte.
Konvertiert Antwortschemata in Medientyp-Inhaltseinträge.
Weist deterministische, menschenlesbare Operations-IDs zu.
Fügt die ursprüngliche HTTP-Methode und Route zu jeder Tool-Beschreibung hinzu.
Entfernt Schreibmethoden, wenn der Nur-Lesen-Modus aktiviert ist.
Wenn zwei Routen denselben freundlichen Namen erhalten würden, wird ein deterministischer
siebenstelliger Digest angehängt. Dies erklärt Namen wie
get_device_port_vlans_cd8cf56 und hält die gesamte API-Oberfläche kollisionsfrei.
Repository-Struktur
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.tomlEntwicklung und Tests
Führen Sie die Testsuite aus:
uv run pytestÜberprüfen Sie die verbundene Live-API, ohne einen Transport zu starten:
NETDISCO_URL=https://netdisco.example.net \
NETDISCO_API_TOKEN=<netdisco-api-token> \
uv run netdisco-mcp --checkDie Prüfung meldet die API-Versionsabdeckung, Lese-/Schreiboperationsanzahlen, gesamte MCP-Tools und Tags. Tests decken Transport-Aliase, Bearer-Überprüfung, Swagger-zu-OpenAPI-Konvertierung, stabile Namen, Anforderungskörper, Schema-Reparatur, Nur-Lesen-Filterung und Fähigkeitserkennung ab.
Mitwirken
Forken Sie das Repository und erstellen Sie einen fokussierten Branch.
Fügen Sie Tests für Verhaltensänderungen hinzu.
Führen Sie die vollständige Testsuite gegen eine repräsentative Swagger-Fixtur aus.
Führen Sie
netdisco-mcp --checkgegen eine autorisierte Netdisco-Instanz aus.Eröffnen Sie einen Pull-Request, der das für den Benutzer sichtbare Verhalten und die Überprüfung beschreibt.
Bitte committen Sie keine Netdisco-Anmeldedaten, MCP-Bearer-Tokens, internen URLs oder erfasste Infrastrukturdaten.
Lizenz
Veröffentlicht unter der MIT-Lizenz.
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