Netdisco MCP
Netdisco MCP
La API REST completa de Netdisco, transformada en un servidor MCP nativo para agentes
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 |
|
Descubrimiento de capacidades |
|
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, |
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 --> APIPipeline 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 readyUn 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 --> ReportLlame a
get_guidanceuna vez al inicio de la sesión de trabajo.Use
find_capabilitycuando la herramienta correcta no sea obvia.Prefiera las herramientas de búsqueda y de objetos antes que los informes amplios.
Inspeccione el estado actual antes de cualquier mutación.
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. Trateget_logoutcomo destructivo.
Herramientas de asistencia al agente
Herramienta | Propósito |
| Devuelve la guía operativa de Netdisco incluida y puede resaltar una sección específica de un tema. |
| 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 |
|
| Eliminar trabajos y limpiar la lista de omisión para un dispositivo, opcionalmente filtrado por campos. |
GET |
|
| Devolver una fila de la tabla de dispositivos. |
GET |
|
| Devolver filas de |
GET |
|
| Devolver filas de módulos para un dispositivo. |
GET |
|
| Devolver relaciones de vecinos de capa 2 para un dispositivo. |
GET |
|
| Devolver nodos encontrados en un dispositivo. |
GET |
|
| Devolver una fila de la tabla |
GET |
|
| Devolver filas de nodos activos para un puerto. |
GET |
|
| Devolver filas de nodos activos con datos de antigüedad para un puerto. |
GET |
|
| Devolver la entrada de agregación maestra para un puerto. |
GET |
|
| Devolver la entrada del último nodo para un puerto. |
GET |
|
| Devolver filas de registro para un puerto. |
GET |
|
| Devolver la entrada de vecino para un puerto. |
GET |
|
| Devolver filas de nodos para un puerto. |
GET |
|
| Devolver filas de nodos con datos de antigüedad para un puerto. |
GET |
|
| Devolver filas de |
GET |
|
| Devolver la entrada de energía para un puerto. |
GET |
|
| Devolver la entrada de propiedades para un puerto. |
GET |
|
| Devolver la entrada de SSID para un puerto. |
GET |
|
| Devolver filas de VLAN para un puerto. |
GET |
|
| Devolver la entrada inalámbrica para un puerto. |
GET |
|
| Devolver filas de |
GET |
|
| Devolver filas de puertos para un dispositivo. |
GET |
|
| Devolver el estado del módulo PoE y estadísticas agregadas de puertos. |
GET |
|
| Devolver filas de puertos alimentados para un dispositivo. |
GET |
|
| Devolver filas de SSID para un dispositivo. |
GET |
|
| Devolver filas de VLAN para un dispositivo. |
GET |
|
| Devolver filas de puertos inalámbricos para un dispositivo. |
GET |
|
| Devolver nodos encontrados en una VLAN. |
PUT |
|
| Poner en cola un trabajo para almacenar entradas ARP encontradas en un dispositivo. |
PUT |
|
| Poner en cola un trabajo para almacenar nodos encontrados en un dispositivo. |
Método | Herramienta | Ruta de Netdisco | Informe |
GET |
|
| Direcciones IP sin entradas DNS. |
GET |
|
| Inventario agrupado por ubicación. |
GET |
|
| Discrepancias entre nombre de dispositivo y DNS. |
GET |
|
| Inventario de dispositivos. |
GET |
|
| Dispositivos con múltiples direcciones. |
GET |
|
| Estado de Power over Ethernet. |
GET |
|
| Direcciones IP encontradas en múltiples dispositivos. |
GET |
|
| Dispositivos sin datos de modelo o sistema operativo. |
GET |
|
| Utilización de puertos. |
GET |
|
| Dispositivos añadidos recientemente. |
GET |
|
| Redes privadas duplicadas. |
GET |
|
| Inventario de IP. |
GET |
|
| Utilización de subredes. |
GET |
|
| Nodos con múltiples direcciones IP activas. |
GET |
|
| Nodos descubiertos mediante LLDP o CDP. |
GET |
|
| Configuraciones de dúplex no coincidentes. |
GET |
|
| Puertos operando en modo semidúplex. |
GET |
|
| Puertos deshabilitados administrativamente. |
GET |
|
| Puertos bloqueados por spanning tree. |
GET |
|
| Puertos con múltiples nodos conectados. |
GET |
|
| Puertos deshabilitados por error. |
GET |
|
| Inventario de SSID de puertos. |
GET |
|
| Puertos que transportan más VLANs. |
GET |
|
| Configuraciones de VLAN no coincidentes. |
GET |
|
| Conteo de VLAN por dispositivo. |
GET |
|
| Inventario de VLAN. |
GET |
|
| VLANs con múltiples nombres. |
GET |
|
| VLANs conocidas pero nunca configuradas. |
GET |
|
| VLANs encontradas solo en enlaces ascendentes. |
GET |
|
| VLANs ya no en uso. |
GET |
|
| Distribución de canales de puntos de acceso. |
GET |
|
| Conteo de clientes por punto de acceso. |
GET |
|
| Canal y potencia de radio del punto de acceso. |
GET |
|
| Inventario de SSID. |
Método | Herramienta | Ruta de Netdisco | Propósito |
GET |
|
| Listar nombres de backends Netdisco activos. |
GET |
|
| Devolver trabajos en cola con filtros opcionales. |
GET |
|
| Devolver conteos de trabajos agrupados por estado. |
POST |
|
| Enviar trabajos a la cola de Netdisco. |
DELETE |
|
| Eliminar trabajos de la cola y entradas de skiplist con filtros opcionales. |
Método | Herramienta | Ruta de Netdisco | Propósito |
GET |
|
| Buscar dispositivos por identidad, dirección, ubicación, modelo, SO, proveedor y otros atributos. |
GET |
|
| Buscar nodos, incluyendo observaciones activas y archivadas. |
GET |
|
| Buscar puertos de switch por descripción y características del puerto. |
GET |
|
| Buscar VLANs. |
Método | Herramienta | Ruta de Netdisco | Propósito |
GET |
|
| Listar usuarios con roles y estado del token. |
POST |
|
| 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 |
|
| Devolver la fila de estadísticas más reciente de Netdisco. |
GET |
|
| Destruir la clave de API actual y la cookie de sesión; esto tiene un efecto secundario destructivo. |
POST |
|
| 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.jsonUn 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 .envEstablece los valores requeridos en .env:
NETDISCO_URL=https://netdisco.example.net
NETDISCO_API_TOKEN=replace-with-a-permanent-netdisco-tokenInstala, valida la especificación en vivo y ejecuta:
uv sync --extra dev
uv run netdisco-mcp --check
uv run netdisco-mcpEl 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 -dUn proxy inverso en mcp-edge puede alcanzar el servicio en:
http://netdisco-mcp:8000/mcpReferencia de configuración
Configuración | Por defecto | Propósito |
| requerido | URL base de la instancia de Netdisco. |
|
| Sobrescribe la URL Swagger/OpenAPI en vivo. |
| sin definir | Credencial de la API de Netdisco enviada a la API upstream. |
|
| Esquema de autorización; usa |
| sin definir | Nombre de usuario opcional para autenticación básica de Netdisco. |
| sin definir | Contraseña opcional para autenticación básica de Netdisco. |
|
| Valida el certificado TLS de Netdisco. |
|
| Tiempo de espera de la solicitud upstream en segundos. |
|
| Elimina las herramientas POST, PUT, PATCH y DELETE cuando se establece en |
|
| Requiere orientación antes del uso normal de herramientas. |
|
| Ventana de actividad de orientación en segundos. |
|
| Tamaño máximo de respuesta de la herramienta antes de truncar. |
|
|
|
|
| Dirección de enlace para Streamable HTTP. |
|
| Puerto de escucha dentro del proceso o contenedor. |
| sin definir | Token de portador estático requerido por el transporte HTTP cuando está configurado. |
[!AVISO]
NETDISCO_API_TOKENautentica el servidor ante Netdisco.NETDISCO_MCP_BEARER_TOKENautentica 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-mcpCodex
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" --> NetdiscoControles 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=1para 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:
Reescribe las referencias de Swagger en referencias de
componentsde OpenAPI.Convierte los parámetros de cuerpo y formulario en cuerpos de solicitud de OpenAPI.
Mueve la información de tipo de parámetro a los esquemas.
Repara las banderas
requireda nivel de propiedad de Netdisco.Normaliza los valores predeterminados booleanos, enteros y de arreglos.
Convierte los esquemas de respuesta en entradas de contenido de tipo de medio.
Asigna IDs de operación deterministas y legibles por humanos.
Agrega el método HTTP original y la ruta a cada descripción de herramienta.
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.tomlDesarrollo y pruebas
Ejecute el conjunto de pruebas:
uv run pytestValide 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 --checkLa 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
Haga un fork del repositorio y cree una rama enfocada.
Agregue pruebas para cambios de comportamiento.
Ejecute el conjunto completo de pruebas contra un fixture de Swagger representativo.
Ejecute
netdisco-mcp --checkcontra una instancia de Netdisco autorizada.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.
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