Skip to main content
Glama

Netdisco MCP

La API REST completa de Netdisco, transformada en un servidor MCP nativo para agentes

Python 3.11+ CI FastMCP MCP Docker License: MIT

81 herramientas · descubrimiento dinámico de Swagger · stdio + HTTP transmisible · UX guiada para agentes · autenticación mediante token bearer


Netdisco MCP convierte un documento swagger.json activo de Netdisco en una superficie de herramientas MCP completa y buscable. No mantiene un frágil subconjunto escrito a mano de endpoints. Al iniciarse, descubre la versión de Netdisco conectada, actualiza Swagger 2.0 a OpenAPI 3, repara incompatibilidades de esquema, asigna nombres de herramienta estables y publica cada operación soportada a través de FastMCP.

El resultado es un servidor MCP que puede responder preguntas operativas, inspeccionar dispositivos y puertos de conmutadores, buscar nodos y VLAN, ejecutar informes de inventario y, cuando está explícitamente habilitado, enviar o eliminar trabajos de Netdisco.

[!IMPORTANT] La API en vivo es la fuente de verdad. La cantidad de herramientas puede aumentar cuando Netdisco añade endpoints. El catálogo en este README es una instantánea verificada de Netdisco 2.103000.

Contenido

Por qué existe este proyecto

Capacidad

Qué significa

Cobertura completa de la API

Cada operación anunciada por la instancia de Netdisco conectada se convierte en una herramienta MCP.

Consciente de actualizaciones

Un reinicio del contenedor recarga la especificación en vivo y descubre nuevos endpoints.

Guía prioritaria para el agente

get_guidance es intencionadamente la primera herramienta, y el middleware redirige a los agentes que la omiten.

Descubrimiento de capacidades

find_capability busca nombres, rutas, etiquetas, métodos y descripciones.

Exploración más segura

El modo de solo lectura elimina las operaciones POST, PUT, PATCH y DELETE antes de la generación de herramientas.

Protección del contexto

Las respuestas sobredimensionadas se truncan con una pista clara para reducir la solicitud.

Transporte flexible

Ejecutar localmente a través de stdio o remotamente a través de MCP HTTP transmisible.

Autenticación remota

El HTTP transmisible puede requerir un token bearer específico del despliegue.

Contenedor reforzado

El servicio de Compose proporcionado utiliza un sistema de archivos de solo lectura, no-new-privileges, y ningún puerto de host.

Arquitectura

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

Pipeline de inicio

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

Un flujo de trabajo productivo para el agente

El servidor está deliberadamente opinado sobre cómo un agente de IA debería abordar una tarea de gestión de red.

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. Llame a get_guidance una vez al inicio de la sesión de trabajo.

  2. Use find_capability cuando la herramienta correcta no sea obvia.

  3. Prefiera las herramientas de búsqueda y de objetos antes que los informes amplios.

  4. Inspeccione el estado actual antes de cualquier mutación.

  5. Verifique el estado resultante en lugar de interpretar un tiempo de espera como fallo.

Catálogo completo de herramientas

La superficie de Netdisco 2.103000 verificada contiene:

Categoría

Herramientas

Asistencia al agente

2

Objetos

31

Informes

34

Cola

5

Búsqueda

4

Usuario

2

General

3

Total

81

Siete herramientas de API generadas usan POST, PUT o DELETE y se tratan como mutaciones. Establezca NETDISCO_READ_ONLY=1 para eliminar esas siete herramientas.

[!CAUTION] Netdisco expone GET /logout, que destruye la clave API actual y la sesión a pesar de usar HTTP GET. El filtrado de solo lectura basado en métodos no puede clasificar ese endpoint como una mutación. Trate get_logout como destructivo.

Herramientas de asistencia al agente

Herramienta

Propósito

get_guidance

Devuelve la guía operativa de Netdisco incluida y puede resaltar una sección específica de un tema.

find_capability

Busca en el catálogo completo generado por tarea, ruta, etiqueta, método HTTP o descripción.

Método

Herramienta

Ruta de Netdisco

Propósito

DELETE

delete_device_jobs

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

Eliminar trabajos y limpiar la lista de omisión para un dispositivo, opcionalmente filtrado por campos.

GET

get_device

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

Devolver una fila de la tabla de dispositivos.

GET

get_device_device_ips

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

Devolver filas de device_ips para un dispositivo.

GET

get_device_modules

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

Devolver filas de módulos para un dispositivo.

GET

get_device_neighbors

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

Devolver relaciones de vecinos de capa 2 para un dispositivo.

GET

get_device_nodes

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

Devolver nodos encontrados en un dispositivo.

GET

get_device_port

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

Devolver una fila de la tabla device_port.

GET

get_device_port_active_nodes

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

Devolver filas de nodos activos para un puerto.

GET

get_device_port_active_nodes_with_age

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

Devolver filas de nodos activos con datos de antigüedad para un puerto.

GET

get_device_port_agg_master

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

Devolver la entrada de agregación maestra para un puerto.

GET

get_device_port_last_node

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

Devolver la entrada del último nodo para un puerto.

GET

get_device_port_logs

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

Devolver filas de registro para un puerto.

GET

get_device_port_neighbor

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

Devolver la entrada de vecino para un puerto.

GET

get_device_port_nodes

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

Devolver filas de nodos para un puerto.

GET

get_device_port_nodes_with_age

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

Devolver filas de nodos con datos de antigüedad para un puerto.

GET

get_device_port_port_vlans

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

Devolver filas de port_vlans para un puerto.

GET

get_device_port_power

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

Devolver la entrada de energía para un puerto.

GET

get_device_port_properties

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

Devolver la entrada de propiedades para un puerto.

GET

get_device_port_ssid

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

Devolver la entrada de SSID para un puerto.

GET

get_device_port_vlans

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

Devolver filas de VLAN para un puerto.

GET

get_device_port_wireless

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

Devolver la entrada inalámbrica para un puerto.

GET

get_device_port_vlans_cd8cf56

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

Devolver filas de port_vlans para un dispositivo.

GET

get_device_ports

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

Devolver filas de puertos para un dispositivo.

GET

get_device_power_modules

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

Devolver el estado del módulo PoE y estadísticas agregadas de puertos.

GET

get_device_powered_ports

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

Devolver filas de puertos alimentados para un dispositivo.

GET

get_device_ssids

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

Devolver filas de SSID para un dispositivo.

GET

get_device_vlans

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

Devolver filas de VLAN para un dispositivo.

GET

get_device_wireless_ports

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

Devolver filas de puertos inalámbricos para un dispositivo.

GET

get_vlan_nodes

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

Devolver nodos encontrados en una VLAN.

PUT

update_device_arps

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

Poner en cola un trabajo para almacenar entradas ARP encontradas en un dispositivo.

PUT

update_device_nodes

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

Poner en cola un trabajo para almacenar nodos encontrados en un dispositivo.

Método

Herramienta

Ruta de Netdisco

Informe

GET

get_report_device_deviceaddrnodns

/api/v1/report/device/deviceaddrnodns

Direcciones IP sin entradas DNS.

GET

get_report_device_devicebylocation

/api/v1/report/device/devicebylocation

Inventario agrupado por ubicación.

GET

get_report_device_devicednsmismatch

/api/v1/report/device/devicednsmismatch

Discrepancias entre nombre de dispositivo y DNS.

GET

get_report_device_deviceinventory

/api/v1/report/device/deviceinventory

Inventario de dispositivos.

GET

get_report_device_devicemultipleaddresses

/api/v1/report/device/devicemultipleaddresses

Dispositivos con múltiples direcciones.

GET

get_report_device_devicepoestatus

/api/v1/report/device/devicepoestatus

Estado de Power over Ethernet.

GET

get_report_device_devicesharedaddresses

/api/v1/report/device/devicesharedaddresses

Direcciones IP encontradas en múltiples dispositivos.

GET

get_report_device_devicesmissingmodeloros

/api/v1/report/device/devicesmissingmodeloros

Dispositivos sin datos de modelo o sistema operativo.

GET

get_report_device_portutilization

/api/v1/report/device/portutilization

Utilización de puertos.

GET

get_report_device_recentlyaddeddevices

/api/v1/report/device/recentlyaddeddevices

Dispositivos añadidos recientemente.

GET

get_report_ip_duplicateprivatenetworks

/api/v1/report/ip/duplicateprivatenetworks

Redes privadas duplicadas.

GET

get_report_ip_ipinventory

/api/v1/report/ip/ipinventory

Inventario de IP.

GET

get_report_ip_subnets

/api/v1/report/ip/subnets

Utilización de subredes.

GET

get_report_node_nodemultiips

/api/v1/report/node/nodemultiips

Nodos con múltiples direcciones IP activas.

GET

get_report_node_nodesdiscovered

/api/v1/report/node/nodesdiscovered

Nodos descubiertos mediante LLDP o CDP.

GET

get_report_port_duplexmismatch

/api/v1/report/port/duplexmismatch

Configuraciones de dúplex no coincidentes.

GET

get_report_port_halfduplex

/api/v1/report/port/halfduplex

Puertos operando en modo semidúplex.

GET

get_report_port_portadmindown

/api/v1/report/port/portadmindown

Puertos deshabilitados administrativamente.

GET

get_report_port_portblocking

/api/v1/report/port/portblocking

Puertos bloqueados por spanning tree.

GET

get_report_port_portmultinodes

/api/v1/report/port/portmultinodes

Puertos con múltiples nodos conectados.

GET

get_report_port_portserrordisabled

/api/v1/report/port/portserrordisabled

Puertos deshabilitados por error.

GET

get_report_port_portssid

/api/v1/report/port/portssid

Inventario de SSID de puertos.

GET

get_report_port_portswithmostvlans

/api/v1/report/port/portswithmostvlans

Puertos que transportan más VLANs.

GET

get_report_port_portvlanmismatch

/api/v1/report/port/portvlanmismatch

Configuraciones de VLAN no coincidentes.

GET

get_report_vlan_devicevlancount

/api/v1/report/vlan/devicevlancount

Conteo de VLAN por dispositivo.

GET

get_report_vlan_vlaninventory

/api/v1/report/vlan/vlaninventory

Inventario de VLAN.

GET

get_report_vlan_vlanmultiplenames

/api/v1/report/vlan/vlanmultiplenames

VLANs con múltiples nombres.

GET

get_report_vlan_vlansneverconfigured

/api/v1/report/vlan/vlansneverconfigured

VLANs conocidas pero nunca configuradas.

GET

get_report_vlan_vlansonlyuplinks

/api/v1/report/vlan/vlansonlyuplinks

VLANs encontradas solo en enlaces ascendentes.

GET

get_report_vlan_vlansunused

/api/v1/report/vlan/vlansunused

VLANs ya no en uso.

GET

get_report_wireless_apchanneldist

/api/v1/report/wireless/apchanneldist

Distribución de canales de puntos de acceso.

GET

get_report_wireless_apclients

/api/v1/report/wireless/apclients

Conteo de clientes por punto de acceso.

GET

get_report_wireless_apradiochannelpower

/api/v1/report/wireless/apradiochannelpower

Canal y potencia de radio del punto de acceso.

GET

get_report_wireless_ssidinventory

/api/v1/report/wireless/ssidinventory

Inventario de SSID.

Método

Herramienta

Ruta de Netdisco

Propósito

GET

get_queue_backends

/api/v1/queue/backends

Listar nombres de backends Netdisco activos.

GET

get_queue_jobs

/api/v1/queue/jobs

Devolver trabajos en cola con filtros opcionales.

GET

get_queue_status

/api/v1/queue/status

Devolver conteos de trabajos agrupados por estado.

POST

create_queue_jobs

/api/v1/queue/jobs

Enviar trabajos a la cola de Netdisco.

DELETE

delete_queue_jobs

/api/v1/queue/jobs

Eliminar trabajos de la cola y entradas de skiplist con filtros opcionales.

Método

Herramienta

Ruta de Netdisco

Propósito

GET

search_device

/api/v1/search/device

Buscar dispositivos por identidad, dirección, ubicación, modelo, SO, proveedor y otros atributos.

GET

search_node

/api/v1/search/node

Buscar nodos, incluyendo observaciones activas y archivadas.

GET

search_port

/api/v1/search/port

Buscar puertos de switch por descripción y características del puerto.

GET

search_vlan

/api/v1/search/vlan

Buscar VLANs.

Método

Herramienta

Ruta de Netdisco

Propósito

GET

get_users

/api/v1/users

Listar usuarios con roles y estado del token.

POST

create_user

/api/v1/user

Aprovisionar una cuenta de servicio solo con token y emitir o revocar su token de API.

Método

Herramienta

Ruta de Netdisco

Propósito

GET

get_statistics

/api/v1/statistics

Devolver la fila de estadísticas más reciente de Netdisco.

GET

get_logout

/logout

Destruir la clave de API actual y la cookie de sesión; esto tiene un efecto secundario destructivo.

POST

create_login

/login

Obtener una clave de API de Netdisco.

Inicio rápido

Requisitos

  • Python 3.11 o más reciente

  • Una instancia de Netdisco accesible con swagger.json

  • Un token de API permanente de Netdisco o una credencial de usuario/contraseña compatible

  • Docker y Docker Compose para el despliegue en contenedores

Desarrollo local

git clone https://github.com/omichelbraga/netdisco-mcp.git
cd netdisco-mcp
cp .env.example .env

Establece los valores requeridos en .env:

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

Instala, valida la especificación en vivo y ejecuta:

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

El transporte predeterminado es stdio.

Docker Compose

El archivo Compose proporcionado espera la red externa compartida mcp-edge y no publica un puerto de host.

docker network create mcp-edge
docker compose up --build -d

Un proxy inverso en mcp-edge puede alcanzar el servicio en:

http://netdisco-mcp:8000/mcp

Referencia de configuración

Configuración

Por defecto

Propósito

NETDISCO_URL

requerido

URL base de la instancia de Netdisco.

NETDISCO_SPEC_URL

$NETDISCO_URL/swagger.json

Sobrescribe la URL Swagger/OpenAPI en vivo.

NETDISCO_API_TOKEN

sin definir

Credencial de la API de Netdisco enviada a la API upstream.

NETDISCO_AUTH_SCHEME

Bearer

Esquema de autorización; usa raw para un token sin prefijo.

NETDISCO_USERNAME

sin definir

Nombre de usuario opcional para autenticación básica de Netdisco.

NETDISCO_PASSWORD

sin definir

Contraseña opcional para autenticación básica de Netdisco.

NETDISCO_TLS_VERIFY

1

Valida el certificado TLS de Netdisco.

NETDISCO_TIMEOUT

30

Tiempo de espera de la solicitud upstream en segundos.

NETDISCO_READ_ONLY

0

Elimina las herramientas POST, PUT, PATCH y DELETE cuando se establece en 1.

NETDISCO_GUIDANCE_GATE

1

Requiere orientación antes del uso normal de herramientas.

NETDISCO_GUIDANCE_TTL

1800

Ventana de actividad de orientación en segundos.

NETDISCO_MAX_RESPONSE_CHARS

50000

Tamaño máximo de respuesta de la herramienta antes de truncar.

NETDISCO_MCP_TRANSPORT

stdio

stdio o streamable-http; stdin y http son alias aceptados.

NETDISCO_MCP_HTTP_HOST

127.0.0.1

Dirección de enlace para Streamable HTTP.

NETDISCO_MCP_HTTP_PORT

8000

Puerto de escucha dentro del proceso o contenedor.

NETDISCO_MCP_BEARER_TOKEN

sin definir

Token de portador estático requerido por el transporte HTTP cuando está configurado.

[!AVISO] NETDISCO_API_TOKEN autentica el servidor ante Netdisco. NETDISCO_MCP_BEARER_TOKEN autentica los clientes MCP ante este servidor. Protegen diferentes límites de confianza y nunca deben compartir el mismo valor.

Conectar clientes MCP

Claude Code

claude mcp add --transport http --scope user \
  netdisco-mcp https://netdisco-mcp.example.net/mcp \
  --header "Authorization: Bearer <mcp-bearer-token>"

Verificar la conexión:

claude mcp get netdisco-mcp

Codex

Almacene el token de portador MCP en NETDISCO_MCP_BEARER_TOKEN, luego agregue esta entrada en ~/.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"

Consulte la configuración oficial de MCP para Codex para controles adicionales de tiempo de espera, listas de permitidos y aprobación.

Claude Desktop

Claude Desktop puede usar el proxy stdio autenticado incluido. El proxy mantiene el token de portador remoto fuera de los mensajes del protocolo MCP enviados por Desktop y lo agrega solo al conectar con el upstream.

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>

Reinicie Claude Desktop después de la instalación.

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)

El campo authorization sigue el contrato oficial de herramienta MCP remota. Mantener require_approval establecido en always es apropiado para este servidor porque su catálogo en vivo puede incluir herramientas de mutación.

Cliente MCP genérico

{
  "mcpServers": {
    "netdisco-mcp": {
      "type": "http",
      "url": "https://netdisco-mcp.example.net/mcp",
      "headers": {
        "Authorization": "Bearer <mcp-bearer-token>"
      }
    }
  }
}

Modelo de seguridad

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

Controles de seguridad proporcionados por el proyecto:

  • Comparación en tiempo constante para el token de portador MCP configurado.

  • Credenciales separadas para cliente MCP y upstream de Netdisco.

  • Filtrado opcional de herramientas de solo lectura basado en método.

  • Middleware de orientación antes del uso de herramientas operativas.

  • Límite de tamaño de respuesta para proteger el contexto del modelo.

  • Verificación TLS para Netdisco por defecto.

  • Sin puerto de host en el archivo Compose proporcionado.

  • Sistema de archivos del contenedor de solo lectura y no-new-privileges.

Controles recomendados para producción:

  • Terminar TLS de confianza en el proxy inverso.

  • Almacenar ambas credenciales en un gestor de secretos o entorno secreto de Portainer.

  • Rotar las credenciales según un cronograma definido y después de una divulgación accidental.

  • Restringir la credencial de Netdisco al rol mínimo requerido.

  • Mantener las solicitudes de aprobación habilitadas para herramientas de mutación.

  • Revisar los registros de acceso del proxy inverso y el historial de trabajos de Netdisco.

  • Usar NETDISCO_READ_ONLY=1 para implementaciones solo de descubrimiento.

Cómo funciona la generación de herramientas

Netdisco 2.103000 publica Swagger 2.0 mientras que FastMCP consume OpenAPI 3. El adaptador realiza las siguientes transformaciones sin eliminar operaciones compatibles:

  1. Reescribe las referencias de Swagger en referencias de components de OpenAPI.

  2. Convierte los parámetros de cuerpo y formulario en cuerpos de solicitud de OpenAPI.

  3. Mueve la información de tipo de parámetro a los esquemas.

  4. Repara las banderas required a nivel de propiedad de Netdisco.

  5. Normaliza los valores predeterminados booleanos, enteros y de arreglos.

  6. Convierte los esquemas de respuesta en entradas de contenido de tipo de medio.

  7. Asigna IDs de operación deterministas y legibles por humanos.

  8. Agrega el método HTTP original y la ruta a cada descripción de herramienta.

  9. Elimina los métodos de escritura cuando el modo de solo lectura está habilitado.

Si dos rutas recibieran el mismo nombre descriptivo, se agrega un resumen determinista de siete caracteres. Esto explica nombres como get_device_port_vlans_cd8cf56 y mantiene toda la superficie de la API libre de colisiones.

Estructura del repositorio

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

Desarrollo y pruebas

Ejecute el conjunto de pruebas:

uv run pytest

Valide la API en vivo conectada sin iniciar un transporte:

NETDISCO_URL=https://netdisco.example.net \
NETDISCO_API_TOKEN=<netdisco-api-token> \
uv run netdisco-mcp --check

La verificación informa la cobertura de la versión de la API, recuentos de operaciones de lectura/escritura, total de herramientas MCP y etiquetas. Las pruebas cubren alias de transporte, verificación de portador, conversión de Swagger a OpenAPI, nombres estables, cuerpos de solicitud, reparación de esquemas, filtrado de solo lectura y descubrimiento de capacidades.

Contribuir

  1. Haga un fork del repositorio y cree una rama enfocada.

  2. Agregue pruebas para cambios de comportamiento.

  3. Ejecute el conjunto completo de pruebas contra un fixture de Swagger representativo.

  4. Ejecute netdisco-mcp --check contra una instancia de Netdisco autorizada.

  5. Abra una solicitud de extracción describiendo el comportamiento visible para el usuario y la verificación.

No incluya credenciales de Netdisco, tokens de portador MCP, URL internas ni datos de infraestructura capturados.

Licencia

Publicado bajo la Licencia MIT.

-
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