Skip to main content
Glama

Netdisco MCP

완전한 Netdisco REST API를 에이전트 네이티브 MCP 서버로 변환했습니다

Python 3.11+ CI FastMCP MCP Docker License: MIT

81개의 도구 · 동적 Swagger 검색 · stdio + Streamable HTTP · 가이드 우선 에이전트 UX · Bearer 인증


Netdisco MCP는 실행 중인 Netdisco의 swagger.json 문서를 완전하고 검색 가능한 MCP 도구 표면으로 변환합니다. 취약한 수동 작성 엔드포인트 하위 집합을 유지하지 않습니다. 시작 시 연결된 Netdisco 버전을 발견하고, Swagger 2.0을 OpenAPI 3으로 업그레이드하며, 스키마 비호환성을 수정하고, 안정적인 도구 이름을 할당한 다음, 모든 지원되는 작업을 FastMCP를 통해 게시합니다.

그 결과 운영 질문에 답하고, 장치 및 스위치 포트를 검사하고, 노드와 VLAN을 검색하고, 인벤토리 보고서를 실행하며, 명시적으로 활성화된 경우 Netdisco 작업을 제출하거나 제거할 수 있는 MCP 서버가 탄생합니다.

[!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

생산적인 에이전트 워크플로

이 서버는 AI 에이전트가 네트워크 관리 작업에 접근하는 방식에 대해 의도적으로 독단적입니다.

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

7개의 생성된 API 도구는 POST, PUT 또는 DELETE를 사용하며 변경 작업으로 처리됩니다. NETDISCO_READ_ONLY=1을 설정하면 해당 7개 도구가 제거됩니다.

[!CAUTION] Netdisco는 HTTP GET을 사용함에도 불구하고 현재 API 키와 세션을 파괴하는 GET /logout을 노출합니다. 메서드 기반 읽기 전용 필터링은 해당 엔드포인트를 변경 작업으로 분류할 수 없습니다. 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

장치의 레이어 2 이웃 관계를 반환합니다.

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

DNS 항목이 없는 IP 주소.

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

스패닝 트리에 의해 차단된 포트.

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

ID, 주소, 위치, 모델, OS, 공급업체 및 기타 속성으로 장치를 검색합니다.

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 키와 세션 쿠키를 삭제합니다. 이는 파괴적인 부작용이 있습니다.

POST

create_login

/login

Netdisco API 키를 획득합니다.

빠른 시작

요구 사항

  • Python 3.11 이상

  • swagger.json이 있는 접근 가능한 Netdisco 인스턴스

  • 영구 Netdisco API 토큰 또는 지원되는 사용자 이름/비밀번호 자격 증명

  • 컨테이너 배포를 위한 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

라이브 사양을 확인하고 설치한 후 실행합니다:

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

필수

Netdisco 인스턴스의 기본 URL입니다.

NETDISCO_SPEC_URL

$NETDISCO_URL/swagger.json

라이브 Swagger/OpenAPI URL을 재정의합니다.

NETDISCO_API_TOKEN

설정 안 됨

업스트림 API로 전송되는 Netdisco API 자격 증명입니다.

NETDISCO_AUTH_SCHEME

Bearer

인증 체계입니다. 접두사 없는 토큰에는 raw를 사용합니다.

NETDISCO_USERNAME

설정 안 됨

선택적 Netdisco Basic-auth 사용자 이름입니다.

NETDISCO_PASSWORD

설정 안 됨

선택적 Netdisco Basic-auth 비밀번호입니다.

NETDISCO_TLS_VERIFY

1

Netdisco TLS 인증서를 검증합니다.

NETDISCO_TIMEOUT

30

업스트림 요청 시간 제한(초)입니다.

NETDISCO_READ_ONLY

0

1로 설정하면 POST, PUT, PATCH, DELETE 도구를 제거합니다.

NETDISCO_GUIDANCE_GATE

1

일반 도구 사용 전에 안내를 요구합니다.

NETDISCO_GUIDANCE_TTL

1800

안내 활동 기간(초)입니다.

NETDISCO_MAX_RESPONSE_CHARS

50000

잘리기 전 최대 도구 응답 크기입니다.

NETDISCO_MCP_TRANSPORT

stdio

stdio 또는 streamable-http입니다. stdinhttp는 허용되는 별칭입니다.

NETDISCO_MCP_HTTP_HOST

127.0.0.1

Streamable HTTP의 바인드 주소입니다.

NETDISCO_MCP_HTTP_PORT

8000

프로세스 또는 컨테이너 내부의 수신 포트입니다.

NETDISCO_MCP_BEARER_TOKEN

설정 안 됨

구성된 경우 HTTP 전송에 필요한 정적 Bearer 토큰입니다.

[!WARNING] 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"

추가 시간 제한, 허용 목록 및 승인 제어에 대한 공식 Codex MCP 구성을 참조하세요.

Claude Desktop

Claude Desktop은 포함된 인증된 stdio 프록시를 사용할 수 있습니다. 프록시는 Desktop이 보내는 MCP 프로토콜 메시지에서 원격 Bearer 토큰을 유지하고 업스트림에 연결할 때만 추가합니다.

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_approvalalways로 유지하는 것이 적절합니다.

일반 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 업스트림 자격 증명.

  • 선택적 메서드 기반 읽기 전용 도구 필터링.

  • 운영 도구 사용 전 안내 미들웨어.

  • 모델 컨텍스트를 보호하기 위한 응답 크기 제한.

  • 기본적으로 Netdisco에 대한 TLS 검증.

  • 제공된 Compose 파일에 호스트 포트 없음.

  • 읽기 전용 컨테이너 파일 시스템 및 no-new-privileges.

권장 프로덕션 제어:

  • 신뢰할 수 있는 TLS를 리버스 프록시에서 종료합니다.

  • 두 자격 증명을 모두 비밀 관리자 또는 Portainer 비밀 환경에 저장합니다.

  • 정의된 일정 및 우발적 공개 후 자격 증명을 교체합니다.

  • Netdisco 자격 증명을 필요한 최소 역할로 제한합니다.

  • 변경 도구에 대해 승인 프롬프트를 활성화 상태로 유지합니다.

  • 리버스 프록시 액세스 로그 및 Netdisco 작업 기록을 검토합니다.

  • 검색 전용 배포에는 NETDISCO_READ_ONLY=1을 사용합니다.

도구 생성 방식

Netdisco 2.103000은 Swagger 2.0을 게시하는 반면 FastMCP는 OpenAPI 3을 사용합니다. 어댑터는 지원되는 작업을 제거하지 않고 다음 변환을 수행합니다:

  1. Swagger 참조를 OpenAPI components 참조로 다시 작성합니다.

  2. 본문 및 양식 매개변수를 OpenAPI 요청 본문으로 변환합니다.

  3. 매개변수 유형 정보를 스키마로 이동합니다.

  4. Netdisco 속성 수준 required 플래그를 복구합니다.

  5. 부울, 정수 및 배열 기본값을 정규화합니다.

  6. 응답 스키마를 미디어 유형 콘텐츠 항목으로 변환합니다.

  7. 결정적이고 사람이 읽을 수 있는 작업 ID를 할당합니다.

  8. 모든 도구 설명에 원래 HTTP 메서드와 경로를 추가합니다.

  9. 읽기 전용 모드가 활성화된 경우 쓰기 메서드를 제거합니다.

두 경로가 동일한 친숙한 이름을 받게 되면 결정적 7자리 다이제스트가 추가됩니다. 이는 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-to-OpenAPI 변환, 안정적인 이름, 요청 본문, 스키마 복구, 읽기 전용 필터링 및 기능 검색을 다룹니다.

기여

  1. 저장소를 포크하고 집중된 브랜치를 만듭니다.

  2. 동작 변경에 대한 테스트를 추가합니다.

  3. 대표적인 Swagger 픽스처에 대해 전체 테스트 스위트를 실행합니다.

  4. 승인된 Netdisco 인스턴스에 대해 netdisco-mcp --check를 실행합니다.

  5. 사용자에게 보이는 동작과 검증을 설명하는 풀 리퀘스트를 엽니다.

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