Skip to main content
Glama

Netdisco MCP

Die vollständige Netdisco REST API, übersetzt in einen agenten-nativen MCP-Server

Python 3.11+ CI FastMCP MCP Docker License: MIT

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

get_guidance ist absichtlich das erste Tool, und Middleware leitet Agenten um, die es überspringen.

Fähigkeitserkennung

find_capability durchsucht Namen, Routen, Tags, Methoden und Beschreibungen.

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, no-new-privileges und keinen Host-Port.

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 --> API

Start-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 ready

Ein 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 --> Report
  1. Rufen Sie get_guidance einmal zu Beginn der Arbeitssitzung auf.

  2. Verwenden Sie find_capability, wenn das richtige Tool nicht offensichtlich ist.

  3. Bevorzugen Sie Such- und Objekt-Tools vor breiten Berichten.

  4. Überprüfen Sie den aktuellen Zustand vor jeder Mutation.

  5. Ü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 /logout bereit, 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 Sie get_logout als destruktiv.

Agentenunterstützungs-Tools

Tool

Zweck

get_guidance

Gibt den gebündelten Netdisco-Betriebsleitfaden zurück und kann einen themenspezifischen Abschnitt hervorheben.

find_capability

Durchsucht den vollständig generierten Katalog nach Aufgabe, Route, Tag, HTTP-Methode oder Beschreibung.

Methode

Werkzeug

Netdisco-Route

Zweck

DELETE

delete_device_jobs

/api/v1/object/device/{ip}/jobs

Aufträge löschen und die Skiplist für ein Gerät leeren, optional gefiltert nach Feldern.

GET

get_device

/api/v1/object/device/{ip}

Eine Zeile aus der Gerätetabelle zurückgeben.

GET

get_device_device_ips

/api/v1/object/device/{ip}/device_ips

device_ips-Zeilen für ein Gerät zurückgeben.

GET

get_device_modules

/api/v1/object/device/{ip}/modules

Modulzeilen für ein Gerät zurückgeben.

GET

get_device_neighbors

/api/v1/object/device/{ip}/neighbors

Layer-2-Nachbarbeziehungen für ein Gerät zurückgeben.

GET

get_device_nodes

/api/v1/object/device/{ip}/nodes

Auf einem Gerät gefundene Knoten zurückgeben.

GET

get_device_port

/api/v1/object/device/{ip}/port/{port}

Eine Zeile aus der device_port-Tabelle zurückgeben.

GET

get_device_port_active_nodes

/api/v1/object/device/{ip}/port/{port}/active_nodes

Aktive-Knoten-Zeilen für einen Port zurückgeben.

GET

get_device_port_active_nodes_with_age

/api/v1/object/device/{ip}/port/{port}/active_nodes_with_age

Aktive-Knoten-Zeilen mit Altersdaten für einen Port zurückgeben.

GET

get_device_port_agg_master

/api/v1/object/device/{ip}/port/{port}/agg_master

Den Aggregations-Master-Eintrag für einen Port zurückgeben.

GET

get_device_port_last_node

/api/v1/object/device/{ip}/port/{port}/last_node

Den Letzten-Knoten-Eintrag für einen Port zurückgeben.

GET

get_device_port_logs

/api/v1/object/device/{ip}/port/{port}/logs

Protokollzeilen für einen Port zurückgeben.

GET

get_device_port_neighbor

/api/v1/object/device/{ip}/port/{port}/neighbor

Den Nachbareintrag für einen Port zurückgeben.

GET

get_device_port_nodes

/api/v1/object/device/{ip}/port/{port}/nodes

Knotenzeilen für einen Port zurückgeben.

GET

get_device_port_nodes_with_age

/api/v1/object/device/{ip}/port/{port}/nodes_with_age

Knotenzeilen mit Altersdaten für einen Port zurückgeben.

GET

get_device_port_port_vlans

/api/v1/object/device/{ip}/port/{port}/port_vlans

port_vlans-Zeilen für einen Port zurückgeben.

GET

get_device_port_power

/api/v1/object/device/{ip}/port/{port}/power

Den Stromversorgungseintrag für einen Port zurückgeben.

GET

get_device_port_properties

/api/v1/object/device/{ip}/port/{port}/properties

Den Eigenschafteneintrag für einen Port zurückgeben.

GET

get_device_port_ssid

/api/v1/object/device/{ip}/port/{port}/ssid

Den SSID-Eintrag für einen Port zurückgeben.

GET

get_device_port_vlans

/api/v1/object/device/{ip}/port/{port}/vlans

VLAN-Zeilen für einen Port zurückgeben.

GET

get_device_port_wireless

/api/v1/object/device/{ip}/port/{port}/wireless

Den drahtlosen Eintrag für einen Port zurückgeben.

GET

get_device_port_vlans_cd8cf56

/api/v1/object/device/{ip}/port_vlans

port_vlans-Zeilen für ein Gerät zurückgeben.

GET

get_device_ports

/api/v1/object/device/{ip}/ports

Portzeilen für ein Gerät zurückgeben.

GET

get_device_power_modules

/api/v1/object/device/{ip}/power_modules

PoE-Modulstatus und aggregierte Portstatistiken zurückgeben.

GET

get_device_powered_ports

/api/v1/object/device/{ip}/powered_ports

Stromversorgte-Port-Zeilen für ein Gerät zurückgeben.

GET

get_device_ssids

/api/v1/object/device/{ip}/ssids

SSID-Zeilen für ein Gerät zurückgeben.

GET

get_device_vlans

/api/v1/object/device/{ip}/vlans

VLAN-Zeilen für ein Gerät zurückgeben.

GET

get_device_wireless_ports

/api/v1/object/device/{ip}/wireless_ports

Drahtlose-Port-Zeilen für ein Gerät zurückgeben.

GET

get_vlan_nodes

/api/v1/object/vlan/{vlan}/nodes

In einem VLAN gefundene Knoten zurückgeben.

PUT

update_device_arps

/api/v1/object/device/{ip}/arps

Einen Auftrag zum Speichern von auf einem Gerät gefundenen ARP-Einträgen in die Warteschlange stellen.

PUT

update_device_nodes

/api/v1/object/device/{ip}/nodes

Einen Auftrag zum Speichern von auf einem Gerät gefundenen Knoten in die Warteschlange stellen.

Methode

Werkzeug

Netdisco-Route

Bericht

GET

get_report_device_deviceaddrnodns

/api/v1/report/device/deviceaddrnodns

IP-Adressen ohne DNS-Einträge.

GET

get_report_device_devicebylocation

/api/v1/report/device/devicebylocation

Bestand nach Standort gruppiert.

GET

get_report_device_devicednsmismatch

/api/v1/report/device/devicednsmismatch

Abweichungen zwischen Gerätename und DNS.

GET

get_report_device_deviceinventory

/api/v1/report/device/deviceinventory

Gerätebestand.

GET

get_report_device_devicemultipleaddresses

/api/v1/report/device/devicemultipleaddresses

Geräte mit mehreren Adressen.

GET

get_report_device_devicepoestatus

/api/v1/report/device/devicepoestatus

Power-over-Ethernet-Status.

GET

get_report_device_devicesharedaddresses

/api/v1/report/device/devicesharedaddresses

IP-Adressen, die auf mehreren Geräten gefunden wurden.

GET

get_report_device_devicesmissingmodeloros

/api/v1/report/device/devicesmissingmodeloros

Geräte ohne Modell- oder Betriebssystemdaten.

GET

get_report_device_portutilization

/api/v1/report/device/portutilization

Portauslastung.

GET

get_report_device_recentlyaddeddevices

/api/v1/report/device/recentlyaddeddevices

Kürzlich hinzugefügte Geräte.

GET

get_report_ip_duplicateprivatenetworks

/api/v1/report/ip/duplicateprivatenetworks

Doppelte private Netzwerke.

GET

get_report_ip_ipinventory

/api/v1/report/ip/ipinventory

IP-Bestand.

GET

get_report_ip_subnets

/api/v1/report/ip/subnets

Subnetzauslastung.

GET

get_report_node_nodemultiips

/api/v1/report/node/nodemultiips

Knoten mit mehreren aktiven IP-Adressen.

GET

get_report_node_nodesdiscovered

/api/v1/report/node/nodesdiscovered

Über LLDP oder CDP entdeckte Knoten.

GET

get_report_port_duplexmismatch

/api/v1/report/port/duplexmismatch

Nicht übereinstimmende Duplexeinstellungen.

GET

get_report_port_halfduplex

/api/v1/report/port/halfduplex

Im Halbduplex-Modus betriebene Ports.

GET

get_report_port_portadmindown

/api/v1/report/port/portadmindown

Administrativ deaktivierte Ports.

GET

get_report_port_portblocking

/api/v1/report/port/portblocking

Durch Spanning Tree blockierte Ports.

GET

get_report_port_portmultinodes

/api/v1/report/port/portmultinodes

Ports mit mehreren angeschlossenen Knoten.

GET

get_report_port_portserrordisabled

/api/v1/report/port/portserrordisabled

Fehlerdeaktivierte Ports.

GET

get_report_port_portssid

/api/v1/report/port/portssid

SSID-Bestand der Ports.

GET

get_report_port_portswithmostvlans

/api/v1/report/port/portswithmostvlans

Ports mit den meisten VLANs.

GET

get_report_port_portvlanmismatch

/api/v1/report/port/portvlanmismatch

Nicht übereinstimmende VLAN-Konfigurationen.

GET

get_report_vlan_devicevlancount

/api/v1/report/vlan/devicevlancount

VLAN-Anzahl pro Gerät.

GET

get_report_vlan_vlaninventory

/api/v1/report/vlan/vlaninventory

VLAN-Bestand.

GET

get_report_vlan_vlanmultiplenames

/api/v1/report/vlan/vlanmultiplenames

VLANs mit mehreren Namen.

GET

get_report_vlan_vlansneverconfigured

/api/v1/report/vlan/vlansneverconfigured

Bekannte, aber nie konfigurierte VLANs.

GET

get_report_vlan_vlansonlyuplinks

/api/v1/report/vlan/vlansonlyuplinks

Nur auf Uplinks gefundene VLANs.

GET

get_report_vlan_vlansunused

/api/v1/report/vlan/vlansunused

Nicht mehr verwendete VLANs.

GET

get_report_wireless_apchanneldist

/api/v1/report/wireless/apchanneldist

Kanalverteilung der Access Points.

GET

get_report_wireless_apclients

/api/v1/report/wireless/apclients

Client-Anzahl der Access Points.

GET

get_report_wireless_apradiochannelpower

/api/v1/report/wireless/apradiochannelpower

Funkkanal und -leistung der Access Points.

GET

get_report_wireless_ssidinventory

/api/v1/report/wireless/ssidinventory

SSID-Bestand.

Methode

Werkzeug

Netdisco-Route

Zweck

GET

get_queue_backends

/api/v1/queue/backends

Aktive Netdisco-Backend-Namen auflisten.

GET

get_queue_jobs

/api/v1/queue/jobs

Warteschlangenaufträge mit optionalen Filtern zurückgeben.

GET

get_queue_status

/api/v1/queue/status

Nach Status gruppierte Auftragszahlen zurückgeben.

POST

create_queue_jobs

/api/v1/queue/jobs

Aufträge an die Netdisco-Warteschlange übermitteln.

DELETE

delete_queue_jobs

/api/v1/queue/jobs

Warteschlangenaufträge und Skiplist-Einträge mit optionalen Filtern löschen.

Methode

Werkzeug

Netdisco-Route

Zweck

GET

search_device

/api/v1/search/device

Suche nach Geräten anhand von Identität, Adresse, Standort, Modell, Betriebssystem, Hersteller und anderen Attributen.

GET

search_node

/api/v1/search/node

Suche nach Knoten, einschließlich aktiver und archivierter Beobachtungen.

GET

search_port

/api/v1/search/port

Suche nach Switch-Ports anhand von Beschreibung und Port-Eigenschaften.

GET

search_vlan

/api/v1/search/vlan

Suche nach VLANs.

Methode

Werkzeug

Netdisco-Route

Zweck

GET

get_users

/api/v1/users

Benutzer mit Rollen und Token-Status auflisten.

POST

create_user

/api/v1/user

Ein tokenbasiertes Dienstkonto bereitstellen und dessen API-Token ausstellen oder widerrufen.

Methode

Werkzeug

Netdisco-Route

Zweck

GET

get_statistics

/api/v1/statistics

Die neueste Netdisco-Statistikzeile zurückgeben.

GET

get_logout

/logout

Den aktuellen API-Schlüssel und das Session-Cookie zerstören; dies hat einen destruktiven Nebeneffekt.

POST

create_login

/login

Einen Netdisco-API-Schlüssel erhalten.

Schnellstart

Voraussetzungen

  • Python 3.11 oder neuer

  • Eine erreichbare Netdisco-Instanz mit swagger.json

  • Ein 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 .env

Setzen Sie die erforderlichen Werte in .env:

NETDISCO_URL=https://netdisco.example.net
NETDISCO_API_TOKEN=replace-with-a-permanent-netdisco-token

Installieren, die Live-Spezifikation validieren und ausführen:

uv sync --extra dev
uv run netdisco-mcp --check
uv run netdisco-mcp

Der 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 -d

Ein Reverse-Proxy auf mcp-edge kann den Dienst unter folgender Adresse erreichen:

http://netdisco-mcp:8000/mcp

Konfigurationsreferenz

Einstellung

Standard

Zweck

NETDISCO_URL

erforderlich

Basis-URL der Netdisco-Instanz.

NETDISCO_SPEC_URL

$NETDISCO_URL/swagger.json

Überschreibt die Live-Swagger/OpenAPI-URL.

NETDISCO_API_TOKEN

nicht gesetzt

Netdisco-API-Anmeldedaten, die an die vorgelagerte API gesendet werden.

NETDISCO_AUTH_SCHEME

Bearer

Autorisierungsschema; verwenden Sie raw für ein Token ohne Präfix.

NETDISCO_USERNAME

nicht gesetzt

Optionaler Netdisco-Basic-Auth-Benutzername.

NETDISCO_PASSWORD

nicht gesetzt

Optionales Netdisco-Basic-Auth-Passwort.

NETDISCO_TLS_VERIFY

1

Überprüft das Netdisco-TLS-Zertifikat.

NETDISCO_TIMEOUT

30

Timeout für vorgelagerte Anfragen in Sekunden.

NETDISCO_READ_ONLY

0

Entfernt POST-, PUT-, PATCH- und DELETE-Tools, wenn auf 1 gesetzt.

NETDISCO_GUIDANCE_GATE

1

Erfordert eine Anleitung vor der normalen Tool-Nutzung.

NETDISCO_GUIDANCE_TTL

1800

Zeitfenster für die Anleitungsaktivität in Sekunden.

NETDISCO_MAX_RESPONSE_CHARS

50000

Maximale Tool-Antwortgröße vor der Kürzung.

NETDISCO_MCP_TRANSPORT

stdio

stdio oder streamable-http; stdin und http sind akzeptierte Aliase.

NETDISCO_MCP_HTTP_HOST

127.0.0.1

Bindungsadresse für Streamable HTTP.

NETDISCO_MCP_HTTP_PORT

8000

Lauschport innerhalb des Prozesses oder Containers.

NETDISCO_MCP_BEARER_TOKEN

nicht gesetzt

Statisches Bearer-Token, das vom HTTP-Transport benötigt wird, wenn konfiguriert.

[!WARNING] NETDISCO_API_TOKEN authentifiziert den Server gegenüber Netdisco. NETDISCO_MCP_BEARER_TOKEN authentifiziert 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-mcp

Codex

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" --> Netdisco

Vom 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=1 fü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:

  1. Schreibt Swagger-Referenzen in OpenAPI-components-Referenzen um.

  2. Konvertiert Body- und Formularparameter in OpenAPI-Anforderungskörper.

  3. Verschiebt Parametertypinformationen in Schemata.

  4. Repariert Netdisco-Eigenschafts-required-Flags.

  5. Normalisiert boolesche, ganzzahlige und Array-Standardwerte.

  6. Konvertiert Antwortschemata in Medientyp-Inhaltseinträge.

  7. Weist deterministische, menschenlesbare Operations-IDs zu.

  8. Fügt die ursprüngliche HTTP-Methode und Route zu jeder Tool-Beschreibung hinzu.

  9. 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.toml

Entwicklung 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 --check

Die 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

  1. Forken Sie das Repository und erstellen Sie einen fokussierten Branch.

  2. Fügen Sie Tests für Verhaltensänderungen hinzu.

  3. Führen Sie die vollständige Testsuite gegen eine repräsentative Swagger-Fixtur aus.

  4. Führen Sie netdisco-mcp --check gegen eine autorisierte Netdisco-Instanz aus.

  5. 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.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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