Skip to main content
Glama

Netdisco MCP

Полный REST API Netdisco, преобразованный в агентно-ориентированный MCP-сервер

Python 3.11+ CI FastMCP MCP Docker License: MIT

81 инструмент · динамическое обнаружение Swagger · stdio + Streamable HTTP · UX с приоритетом подсказок для агента · аутентификация Bearer


Netdisco MCP превращает живой документ swagger.json Netdisco в полную, доступную для поиска поверхность инструментов MCP. Он не поддерживает хрупкий вручную написанный поднабор конечных точек. При запуске он определяет версию подключенного Netdisco, обновляет Swagger 2.0 до OpenAPI 3, исправляет несовместимости схем, назначает стабильные имена инструментов и публикует каждую поддерживаемую операцию через FastMCP.

Результатом является MCP-сервер, который может отвечать на операционные вопросы, проверять устройства и порты коммутаторов, искать узлы и VLAN, запускать инвентаризационные отчёты и — если это явно разрешено — отправлять или удалять задания Netdisco.

[!IMPORTANT] Живой API является источником истины. Количество инструментов может увеличиваться, когда Netdisco добавляет конечные точки. Каталог в этом README — проверенный снимок Netdisco 2.103000.

Содержание

Зачем существует этот проект

Возможность

Что это означает

Полное покрытие API

Каждая операция, объявленная подключенным экземпляром Netdisco, становится инструментом MCP.

Осведомлённость об обновлениях

Перезапуск контейнера перезагружает живую спецификацию и обнаруживает новые конечные точки.

Подсказки для агента

get_guidance намеренно является первым инструментом, а промежуточное ПО перенаправляет агентов, которые его пропускают.

Обнаружение возможностей

find_capability ищет по именам, маршрутам, тегам, методам и описаниям.

Безопасное исследование

Режим только для чтения удаляет операции POST, PUT, PATCH и DELETE перед генерацией инструментов.

Защита контекста

Слишком большие ответы обрезаются с чёткой подсказкой сузить запрос.

Гибкий транспорт

Запуск локально через stdio или удалённо через MCP Streamable HTTP.

Удалённая аутентификация

Streamable HTTP может требовать токен Bearer, специфичный для развёртывания.

Укреплённый контейнер

Предоставленный сервис Compose использует файловую систему только для чтения, no-new-privileges и без порта хоста.

Архитектура

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

Продуктивный рабочий процесс агента

Сервер намеренно придерживается определённого мнения о том, как ИИ-агент должен подходить к задаче управления сетью.

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. Вызовите get_guidance один раз в начале рабочей сессии.

  2. Используйте find_capability, когда правильный инструмент не очевиден.

  3. Предпочитайте инструменты поиска и объектов перед широкими отчётами.

  4. Проверяйте текущее состояние перед любыми изменениями.

  5. Проверяйте полученное состояние вместо того, чтобы интерпретировать тайм-аут как сбой.

Полный каталог инструментов

Проверенная поверхность Netdisco 2.103000 содержит:

Категория

Инструменты

Помощь агенту

2

Объекты

31

Отчёты

34

Очередь

5

Поиск

4

Пользователь

2

Общие

3

Всего

81

Семь сгенерированных инструментов API используют POST, PUT или DELETE и считаются изменениями. Установите NETDISCO_READ_ONLY=1, чтобы удалить эти семь инструментов.

[!CAUTION] Netdisco предоставляет GET /logout, который уничтожает текущий ключ API и сессию, несмотря на использование HTTP GET. Фильтрация только по методу не может классифицировать эту конечную точку как изменение. Относитесь к get_logout как к деструктивному.

Инструменты помощи агенту

Инструмент

Назначение

get_guidance

Возвращает встроенное руководство по эксплуатации Netdisco и может выделить раздел по теме.

find_capability

Ищет по всему сгенерированному каталогу по задаче, маршруту, тегу, HTTP-методу или описанию.

Метод

Инструмент

Маршрут Netdisco

Назначение

DELETE

delete_device_jobs

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

Удалить задания и очистить список пропусков для устройства, опционально отфильтрованный по полям.

GET

get_device

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

Вернуть строку из таблицы устройств.

GET

get_device_device_ips

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

Вернуть строки device_ips для устройства.

GET

get_device_modules

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

Вернуть строки модулей для устройства.

GET

get_device_neighbors

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

Вернуть отношения соседей второго уровня для устройства.

GET

get_device_nodes

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

Вернуть узлы, найденные на устройстве.

GET

get_device_port

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

Вернуть строку из таблицы device_port.

GET

get_device_port_active_nodes

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

Вернуть строки активных узлов для порта.

GET

get_device_port_active_nodes_with_age

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

Вернуть строки активных узлов с данными о возрасте для порта.

GET

get_device_port_agg_master

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

Вернуть запись агрегации-мастера для порта.

GET

get_device_port_last_node

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

Вернуть запись последнего узла для порта.

GET

get_device_port_logs

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

Вернуть строки журнала для порта.

GET

get_device_port_neighbor

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

Вернуть запись соседа для порта.

GET

get_device_port_nodes

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

Вернуть строки узлов для порта.

GET

get_device_port_nodes_with_age

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

Вернуть строки узлов с данными о возрасте для порта.

GET

get_device_port_port_vlans

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

Вернуть строки port_vlans для порта.

GET

get_device_port_power

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

Вернуть запись питания для порта.

GET

get_device_port_properties

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

Вернуть запись свойств для порта.

GET

get_device_port_ssid

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

Вернуть запись SSID для порта.

GET

get_device_port_vlans

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

Вернуть строки VLAN для порта.

GET

get_device_port_wireless

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

Вернуть запись беспроводной сети для порта.

GET

get_device_port_vlans_cd8cf56

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

Вернуть строки port_vlans для устройства.

GET

get_device_ports

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

Вернуть строки портов для устройства.

GET

get_device_power_modules

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

Вернуть статус модуля PoE и агрегированную статистику портов.

GET

get_device_powered_ports

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

Вернуть строки портов с питанием для устройства.

GET

get_device_ssids

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

Вернуть строки SSID для устройства.

GET

get_device_vlans

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

Вернуть строки VLAN для устройства.

GET

get_device_wireless_ports

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

Вернуть строки беспроводных портов для устройства.

GET

get_vlan_nodes

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

Вернуть узлы, найденные в VLAN.

PUT

update_device_arps

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

Поставить в очередь задание на сохранение записей ARP, найденных на устройстве.

PUT

update_device_nodes

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

Поставить в очередь задание на сохранение узлов, найденных на устройстве.

Метод

Инструмент

Маршрут Netdisco

Описание

GET

get_report_device_deviceaddrnodns

/api/v1/report/device/deviceaddrnodns

IP-адреса без DNS-записей.

GET

get_report_device_devicebylocation

/api/v1/report/device/devicebylocation

Инвентаризация, сгруппированная по расположению.

GET

get_report_device_devicednsmismatch

/api/v1/report/device/devicednsmismatch

Несоответствия имени устройства и DNS.

GET

get_report_device_deviceinventory

/api/v1/report/device/deviceinventory

Инвентаризация устройств.

GET

get_report_device_devicemultipleaddresses

/api/v1/report/device/devicemultipleaddresses

Устройства с несколькими адресами.

GET

get_report_device_devicepoestatus

/api/v1/report/device/devicepoestatus

Статус Power over Ethernet.

GET

get_report_device_devicesharedaddresses

/api/v1/report/device/devicesharedaddresses

IP-адреса, обнаруженные на нескольких устройствах.

GET

get_report_device_devicesmissingmodeloros

/api/v1/report/device/devicesmissingmodeloros

Устройства без модели или данных об ОС.

GET

get_report_device_portutilization

/api/v1/report/device/portutilization

Использование портов.

GET

get_report_device_recentlyaddeddevices

/api/v1/report/device/recentlyaddeddevices

Недавно добавленные устройства.

GET

get_report_ip_duplicateprivatenetworks

/api/v1/report/ip/duplicateprivatenetworks

Дублирующиеся частные сети.

GET

get_report_ip_ipinventory

/api/v1/report/ip/ipinventory

Инвентаризация IP.

GET

get_report_ip_subnets

/api/v1/report/ip/subnets

Использование подсетей.

GET

get_report_node_nodemultiips

/api/v1/report/node/nodemultiips

Узлы с несколькими активными IP-адресами.

GET

get_report_node_nodesdiscovered

/api/v1/report/node/nodesdiscovered

Узлы, обнаруженные через LLDP или CDP.

GET

get_report_port_duplexmismatch

/api/v1/report/port/duplexmismatch

Несоответствующие настройки дуплекса.

GET

get_report_port_halfduplex

/api/v1/report/port/halfduplex

Порты, работающие в полудуплексном режиме.

GET

get_report_port_portadmindown

/api/v1/report/port/portadmindown

Административно отключенные порты.

GET

get_report_port_portblocking

/api/v1/report/port/portblocking

Порты, заблокированные протоколом spanning tree.

GET

get_report_port_portmultinodes

/api/v1/report/port/portmultinodes

Порты с несколькими подключенными узлами.

GET

get_report_port_portserrordisabled

/api/v1/report/port/portserrordisabled

Порты, отключенные из-за ошибок.

GET

get_report_port_portssid

/api/v1/report/port/portssid

Инвентаризация SSID портов.

GET

get_report_port_portswithmostvlans

/api/v1/report/port/portswithmostvlans

Порты с наибольшим количеством VLAN.

GET

get_report_port_portvlanmismatch

/api/v1/report/port/portvlanmismatch

Несоответствующие конфигурации VLAN.

GET

get_report_vlan_devicevlancount

/api/v1/report/vlan/devicevlancount

Количество VLAN на устройство.

GET

get_report_vlan_vlaninventory

/api/v1/report/vlan/vlaninventory

Инвентаризация VLAN.

GET

get_report_vlan_vlanmultiplenames

/api/v1/report/vlan/vlanmultiplenames

VLAN с несколькими именами.

GET

get_report_vlan_vlansneverconfigured

/api/v1/report/vlan/vlansneverconfigured

Известные, но никогда не настроенные VLAN.

GET

get_report_vlan_vlansonlyuplinks

/api/v1/report/vlan/vlansonlyuplinks

VLAN, обнаруженные только на аплинках.

GET

get_report_vlan_vlansunused

/api/v1/report/vlan/vlansunused

VLAN, которые больше не используются.

GET

get_report_wireless_apchanneldist

/api/v1/report/wireless/apchanneldist

Распределение каналов точек доступа.

GET

get_report_wireless_apclients

/api/v1/report/wireless/apclients

Количество клиентов точек доступа.

GET

get_report_wireless_apradiochannelpower

/api/v1/report/wireless/apradiochannelpower

Радиоканал и мощность точек доступа.

GET

get_report_wireless_ssidinventory

/api/v1/report/wireless/ssidinventory

Инвентаризация SSID.

Метод

Инструмент

Маршрут Netdisco

Назначение

GET

get_queue_backends

/api/v1/queue/backends

Список активных бэкендов Netdisco.

GET

get_queue_jobs

/api/v1/queue/jobs

Возврат заданий в очереди с необязательными фильтрами.

GET

get_queue_status

/api/v1/queue/status

Возврат количества заданий, сгруппированных по статусу.

POST

create_queue_jobs

/api/v1/queue/jobs

Отправка заданий в очередь Netdisco.

DELETE

delete_queue_jobs

/api/v1/queue/jobs

Удаление заданий из очереди и записей списка пропуска с необязательными фильтрами.

Метод

Инструмент

Маршрут Netdisco

Назначение

GET

search_device

/api/v1/search/device

Поиск устройств по идентификатору, адресу, расположению, модели, ОС, вендору и другим атрибутам.

GET

search_node

/api/v1/search/node

Поиск узлов, включая активные и архивные наблюдения.

GET

search_port

/api/v1/search/port

Поиск портов коммутатора по описанию и характеристикам порта.

GET

search_vlan

/api/v1/search/vlan

Поиск VLAN.

Метод

Инструмент

Маршрут Netdisco

Назначение

GET

get_users

/api/v1/users

Список пользователей с ролями и статусом токена.

POST

create_user

/api/v1/user

Создание сервисной учетной записи только с токеном и выдача или отзыв её API-токена.

Метод

Инструмент

Маршрут Netdisco

Назначение

GET

get_statistics

/api/v1/statistics

Возврат последней строки статистики Netdisco.

GET

get_logout

/logout

Уничтожение текущего API-ключа и сессионного cookie; имеет разрушительный побочный эффект.

POST

create_login

/login

Получение API-ключа Netdisco.

Быстрый старт

Требования

  • Python 3.11 или новее

  • Доступный экземпляр Netdisco с swagger.json

  • Постоянный API-токен Netdisco или поддерживаемые учетные данные (имя пользователя/пароль)

  • 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

Установите, проверьте live-спецификацию и запустите:

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

Обратный прокси на mcp-edge может получить доступ к сервису по адресу:

http://netdisco-mcp:8000/mcp

Справочник по конфигурации

Настройка

По умолчанию

Назначение

NETDISCO_URL

обязательно

Базовый URL экземпляра Netdisco.

NETDISCO_SPEC_URL

$NETDISCO_URL/swagger.json

Переопределить URL живого Swagger/OpenAPI.

NETDISCO_API_TOKEN

не задан

Учетные данные API Netdisco, отправляемые вышестоящему API.

NETDISCO_AUTH_SCHEME

Bearer

Схема авторизации; используйте raw для токена без префикса.

NETDISCO_USERNAME

не задан

Необязательное имя пользователя для базовой аутентификации Netdisco.

NETDISCO_PASSWORD

не задан

Необязательный пароль для базовой аутентификации Netdisco.

NETDISCO_TLS_VERIFY

1

Проверять TLS-сертификат Netdisco.

NETDISCO_TIMEOUT

30

Тайм-аут запроса к вышестоящему серверу в секундах.

NETDISCO_READ_ONLY

0

Удалить инструменты POST, PUT, PATCH и DELETE при установке в 1.

NETDISCO_GUIDANCE_GATE

1

Требовать руководство перед обычным использованием инструментов.

NETDISCO_GUIDANCE_TTL

1800

Окно активности руководства в секундах.

NETDISCO_MAX_RESPONSE_CHARS

50000

Максимальный размер ответа инструмента до усечения.

NETDISCO_MCP_TRANSPORT

stdio

stdio или streamable-http; stdin и http принимаются как псевдонимы.

NETDISCO_MCP_HTTP_HOST

127.0.0.1

Адрес привязки для Streamable HTTP.

NETDISCO_MCP_HTTP_PORT

8000

Порт прослушивания внутри процесса или контейнера.

NETDISCO_MCP_BEARER_TOKEN

не задан

Статический bearer-токен, требуемый HTTP-транспортом при настройке.

[!ПРЕДУПРЕЖДЕНИЕ] 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-mcp

Codex

Сохраните MCP bearer-токен в 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"

См. официальную документацию по настройке MCP для Codex для дополнительных параметров тайм-аута, белого списка и утверждения.

Claude Desktop

Claude Desktop может использовать включенный аутентифицированный stdio-прокси. Прокси не передает удаленный bearer-токен в сообщениях протокола MCP, отправляемых Desktop, и добавляет его только при подключении к вышестоящему серверу.

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 bearer-токена за постоянное время.

  • Раздельные учетные данные для MCP-клиента и вышестоящего сервера Netdisco.

  • Необязательная фильтрация инструментов только для чтения на основе метода.

  • Промежуточное ПО для руководства перед использованием операционных инструментов.

  • Ограничение размера ответа для защиты контекста модели.

  • Проверка TLS для Netdisco по умолчанию.

  • Отсутствие порта хоста в предоставленном файле Compose.

  • Файловая система контейнера только для чтения и no-new-privileges.

Рекомендуемые элементы управления для производства:

  • Завершайте доверенный TLS на обратном прокси.

  • Храните оба набора учетных данных в менеджере секретов или в среде секретов Portainer.

  • Меняйте учетные данные по установленному графику и после случайного раскрытия.

  • Ограничьте учетные данные Netdisco минимально необходимой ролью.

  • Оставляйте запросы на утверждение включенными для инструментов изменения данных.

  • Просматривайте журналы доступа обратного прокси и историю заданий Netdisco.

  • Используйте NETDISCO_READ_ONLY=1 для развертываний, предназначенных только для обнаружения.

Как работает генерация инструментов

Netdisco 2.103000 публикует Swagger 2.0, в то время как FastMCP использует OpenAPI 3. Адаптер выполняет следующие преобразования без удаления поддерживаемых операций:

  1. Переписывает ссылки Swagger в ссылки компонентов OpenAPI.

  2. Преобразует параметры тела и формы в тела запросов OpenAPI.

  3. Переносит информацию о типах параметров в схемы.

  4. Исправляет флаги required на уровне свойств Netdisco.

  5. Нормализует значения по умолчанию для булевых, целочисленных и массивов.

  6. Преобразует схемы ответов в записи содержимого типа media-type.

  7. Назначает детерминированные, читаемые человеком идентификаторы операций.

  8. Добавляет исходный HTTP-метод и маршрут в описание каждого инструмента.

  9. Удаляет методы записи, когда включен режим только для чтения.

Если два маршрута получат одно и то же понятное имя, добавляется детерминированный семизначный дайджест. Это объясняет такие имена, как 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 инструментов и тегах. Тесты охватывают псевдонимы транспорта, проверку bearer-токена, преобразование Swagger в OpenAPI, стабильные имена, тела запросов, исправление схем, фильтрацию только для чтения и обнаружение возможностей.

Участие в разработке

  1. Сделайте форк репозитория и создайте тематическую ветку.

  2. Добавьте тесты для поведенческих изменений.

  3. Запустите полный набор тестов с репрезентативным фикстурой Swagger.

  4. Запустите netdisco-mcp --check для авторизованного экземпляра Netdisco.

  5. Откройте pull request с описанием видимого пользователю поведения и проверки.

Пожалуйста, не фиксируйте учетные данные Netdisco, MCP bearer-токены, внутренние URL или захваченные данные инфраструктуры.

Лицензия

Выпущено под лицензией 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