Netdisco MCP
Netdisco MCP
완전한 Netdisco REST API를 에이전트 네이티브 MCP 서버로 변환했습니다
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 도구가 됩니다. |
업그레이드 인식 | 컨테이너 재시작 시 라이브 사양을 다시 로드하고 새 엔드포인트를 발견합니다. |
에이전트 우선 가이드 |
|
기능 검색 |
|
더 안전한 탐색 | 읽기 전용 모드는 도구 생성 전에 POST, PUT, PATCH 및 DELETE 작업을 제거합니다. |
컨텍스트 보호 | 과도하게 큰 응답은 요청을 좁히라는 명확한 힌트와 함께 잘립니다. |
유연한 전송 | 로컬에서는 stdio, 원격에서는 MCP Streamable HTTP를 통해 실행합니다. |
원격 인증 | Streamable HTTP는 배포별 Bearer 토큰을 요구할 수 있습니다. |
컨테이너 강화 | 제공된 Compose 서비스는 읽기 전용 파일 시스템, |
아키텍처
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작업 세션 시작 시
get_guidance를 한 번 호출합니다.올바른 도구가 명확하지 않을 때
find_capability를 사용합니다.광범위한 보고서보다 검색 및 객체 도구를 선호합니다.
변경 전에 현재 상태를 검사합니다.
타임아웃을 실패로 해석하지 않고 결과 상태를 확인합니다.
전체 도구 카탈로그
검증된 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을 파괴적인 것으로 취급하십시오.
에이전트 지원 도구
도구 | 목적 |
| 번들된 Netdisco 운영 가이드를 반환하며 주제별 섹션을 강조할 수 있습니다. |
| 작업, 경로, 태그, HTTP 메서드 또는 설명으로 완전한 생성 카탈로그를 검색합니다. |
메서드 | 도구 | Netdisco 경로 | 목적 |
DELETE |
|
| 작업을 삭제하고 장치의 스킵리스트를 지웁니다. 선택적으로 필드로 필터링할 수 있습니다. |
GET |
|
| 장치 테이블에서 행을 반환합니다. |
GET |
|
| 장치에 대한 |
GET |
|
| 장치의 모듈 행을 반환합니다. |
GET |
|
| 장치의 레이어 2 이웃 관계를 반환합니다. |
GET |
|
| 장치에서 발견된 노드를 반환합니다. |
GET |
|
|
|
GET |
|
| 포트의 활성 노드 행을 반환합니다. |
GET |
|
| 포트의 경과 시간 데이터가 포함된 활성 노드 행을 반환합니다. |
GET |
|
| 포트의 집계 마스터 항목을 반환합니다. |
GET |
|
| 포트의 마지막 노드 항목을 반환합니다. |
GET |
|
| 포트의 로그 행을 반환합니다. |
GET |
|
| 포트의 이웃 항목을 반환합니다. |
GET |
|
| 포트의 노드 행을 반환합니다. |
GET |
|
| 포트의 경과 시간 데이터가 포함된 노드 행을 반환합니다. |
GET |
|
| 포트에 대한 |
GET |
|
| 포트의 전원 항목을 반환합니다. |
GET |
|
| 포트의 속성 항목을 반환합니다. |
GET |
|
| 포트의 SSID 항목을 반환합니다. |
GET |
|
| 포트의 VLAN 행을 반환합니다. |
GET |
|
| 포트의 무선 항목을 반환합니다. |
GET |
|
| 장치에 대한 |
GET |
|
| 장치의 포트 행을 반환합니다. |
GET |
|
| PoE 모듈 상태 및 집계된 포트 통계를 반환합니다. |
GET |
|
| 장치에서 전원이 공급되는 포트 행을 반환합니다. |
GET |
|
| 장치의 SSID 행을 반환합니다. |
GET |
|
| 장치의 VLAN 행을 반환합니다. |
GET |
|
| 장치의 무선 포트 행을 반환합니다. |
GET |
|
| VLAN에서 발견된 노드를 반환합니다. |
PUT |
|
| 장치에서 발견된 ARP 항목을 저장하는 작업을 대기열에 추가합니다. |
PUT |
|
| 장치에서 발견된 노드를 저장하는 작업을 대기열에 추가합니다. |
메서드 | 도구 | Netdisco 경로 | 보고서 |
GET |
|
| DNS 항목이 없는 IP 주소. |
GET |
|
| 위치별로 그룹화된 인벤토리. |
GET |
|
| 장치 이름과 DNS 불일치. |
GET |
|
| 장치 인벤토리. |
GET |
|
| 여러 주소를 가진 장치. |
GET |
|
| Power over Ethernet 상태. |
GET |
|
| 여러 장치에서 발견된 IP 주소. |
GET |
|
| 모델 또는 운영 체제 데이터가 누락된 장치. |
GET |
|
| 포트 사용률. |
GET |
|
| 최근에 추가된 장치. |
GET |
|
| 중복된 사설 네트워크. |
GET |
|
| IP 인벤토리. |
GET |
|
| 서브넷 사용률. |
GET |
|
| 여러 활성 IP 주소를 가진 노드. |
GET |
|
| LLDP 또는 CDP를 통해 발견된 노드. |
GET |
|
| 일치하지 않는 듀플렉스 설정. |
GET |
|
| 반이중 모드로 작동 중인 포트. |
GET |
|
| 관리상 비활성화된 포트. |
GET |
|
| 스패닝 트리에 의해 차단된 포트. |
GET |
|
| 여러 노드가 연결된 포트. |
GET |
|
| 오류로 비활성화된 포트. |
GET |
|
| 포트 SSID 인벤토리. |
GET |
|
| 가장 많은 VLAN을 전송하는 포트. |
GET |
|
| 일치하지 않는 VLAN 구성. |
GET |
|
| 장치별 VLAN 수. |
GET |
|
| VLAN 인벤토리. |
GET |
|
| 여러 이름을 가진 VLAN. |
GET |
|
| 알려져 있지만 구성된 적이 없는 VLAN. |
GET |
|
| 업링크에서만 발견된 VLAN. |
GET |
|
| 더 이상 사용되지 않는 VLAN. |
GET |
|
| 액세스 포인트 채널 분포. |
GET |
|
| 액세스 포인트 클라이언트 수. |
GET |
|
| 액세스 포인트 라디오 채널 및 전력. |
GET |
|
| SSID 인벤토리. |
메서드 | 도구 | Netdisco 경로 | 목적 |
GET |
|
| 활성 Netdisco 백엔드 이름을 나열합니다. |
GET |
|
| 선택적 필터를 사용하여 대기 중인 작업을 반환합니다. |
GET |
|
| 상태별로 그룹화된 작업 수를 반환합니다. |
POST |
|
| Netdisco 대기열에 작업을 제출합니다. |
DELETE |
|
| 선택적 필터를 사용하여 대기열 작업 및 건너뛰기 목록 항목을 삭제합니다. |
메서드 | 도구 | Netdisco 경로 | 목적 |
GET |
|
| ID, 주소, 위치, 모델, OS, 공급업체 및 기타 속성으로 장치를 검색합니다. |
GET |
|
| 활성 및 보관된 관측치를 포함한 노드를 검색합니다. |
GET |
|
| 설명 및 포트 특성으로 스위치 포트를 검색합니다. |
GET |
|
| VLAN을 검색합니다. |
메서드 | 도구 | Netdisco 경로 | 목적 |
GET |
|
| 역할 및 토큰 상태와 함께 사용자를 나열합니다. |
POST |
|
| 토큰 전용 서비스 계정을 프로비저닝하고 해당 API 토큰을 발급 또는 취소합니다. |
메서드 | 도구 | Netdisco 경로 | 목적 |
GET |
|
| 최신 Netdisco 통계 행을 반환합니다. |
GET |
|
| 현재 API 키와 세션 쿠키를 삭제합니다. 이는 파괴적인 부작용이 있습니다. |
POST |
|
| 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 -dmcp-edge의 리버스 프록시는 다음 주소에서 서비스에 접근할 수 있습니다:
http://netdisco-mcp:8000/mcp구성 참조
설정 | 기본값 | 목적 |
| 필수 | Netdisco 인스턴스의 기본 URL입니다. |
|
| 라이브 Swagger/OpenAPI URL을 재정의합니다. |
| 설정 안 됨 | 업스트림 API로 전송되는 Netdisco API 자격 증명입니다. |
|
| 인증 체계입니다. 접두사 없는 토큰에는 |
| 설정 안 됨 | 선택적 Netdisco Basic-auth 사용자 이름입니다. |
| 설정 안 됨 | 선택적 Netdisco Basic-auth 비밀번호입니다. |
|
| Netdisco TLS 인증서를 검증합니다. |
|
| 업스트림 요청 시간 제한(초)입니다. |
|
|
|
|
| 일반 도구 사용 전에 안내를 요구합니다. |
|
| 안내 활동 기간(초)입니다. |
|
| 잘리기 전 최대 도구 응답 크기입니다. |
|
|
|
|
| Streamable HTTP의 바인드 주소입니다. |
|
| 프로세스 또는 컨테이너 내부의 수신 포트입니다. |
| 설정 안 됨 | 구성된 경우 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-mcpCodex
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_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 업스트림 자격 증명.
선택적 메서드 기반 읽기 전용 도구 필터링.
운영 도구 사용 전 안내 미들웨어.
모델 컨텍스트를 보호하기 위한 응답 크기 제한.
기본적으로 Netdisco에 대한 TLS 검증.
제공된 Compose 파일에 호스트 포트 없음.
읽기 전용 컨테이너 파일 시스템 및
no-new-privileges.
권장 프로덕션 제어:
신뢰할 수 있는 TLS를 리버스 프록시에서 종료합니다.
두 자격 증명을 모두 비밀 관리자 또는 Portainer 비밀 환경에 저장합니다.
정의된 일정 및 우발적 공개 후 자격 증명을 교체합니다.
Netdisco 자격 증명을 필요한 최소 역할로 제한합니다.
변경 도구에 대해 승인 프롬프트를 활성화 상태로 유지합니다.
리버스 프록시 액세스 로그 및 Netdisco 작업 기록을 검토합니다.
검색 전용 배포에는
NETDISCO_READ_ONLY=1을 사용합니다.
도구 생성 방식
Netdisco 2.103000은 Swagger 2.0을 게시하는 반면 FastMCP는 OpenAPI 3을 사용합니다.
어댑터는 지원되는 작업을 제거하지 않고 다음 변환을 수행합니다:
Swagger 참조를 OpenAPI
components참조로 다시 작성합니다.본문 및 양식 매개변수를 OpenAPI 요청 본문으로 변환합니다.
매개변수 유형 정보를 스키마로 이동합니다.
Netdisco 속성 수준
required플래그를 복구합니다.부울, 정수 및 배열 기본값을 정규화합니다.
응답 스키마를 미디어 유형 콘텐츠 항목으로 변환합니다.
결정적이고 사람이 읽을 수 있는 작업 ID를 할당합니다.
모든 도구 설명에 원래 HTTP 메서드와 경로를 추가합니다.
읽기 전용 모드가 활성화된 경우 쓰기 메서드를 제거합니다.
두 경로가 동일한 친숙한 이름을 받게 되면 결정적 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 변환, 안정적인 이름, 요청 본문, 스키마 복구, 읽기 전용 필터링 및 기능 검색을 다룹니다.
기여
저장소를 포크하고 집중된 브랜치를 만듭니다.
동작 변경에 대한 테스트를 추가합니다.
대표적인 Swagger 픽스처에 대해 전체 테스트 스위트를 실행합니다.
승인된 Netdisco 인스턴스에 대해
netdisco-mcp --check를 실행합니다.사용자에게 보이는 동작과 검증을 설명하는 풀 리퀘스트를 엽니다.
Netdisco 자격 증명, MCP Bearer 토큰, 내부 URL 또는 캡처된 인프라 데이터를 커밋하지 마십시오.
라이선스
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