Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
MCP server for NetBox DCIM/IPAM with read-only and dry-run modes
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
NETBOX_URL, NETBOX_TOKEN, NETBOX_VERIFY_SSL, NETBOX_TIMEOUT, NETBOX_BRANCHING_ENABLED, NETBOX_BRANCH, NETBOX_PLUGIN_DISCOVERY, READ_ONLY_MODE, DRY_RUN_MODE, DISABLED_TAGS, LOG_LEVEL, RESPONSE_MAX_SIZE, RATE_LIMIT_ENABLED, RATE_LIMIT_MAX_REQUESTS, RATE_LIMIT_WINDOW_MINUTES, TOOL_SEARCH_ENABLED, TOOL_SEARCH_STRATEGY, TOOL_SEARCH_MAX_RESULTSValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"netbox": {
"command": "uvx",
"args": [
"netbox-mcp"
],
"env": {
"NETBOX_URL": "your-value",
"NETBOX_TOKEN": "your-value",
"NETBOX_VERIFY_SSL": "your-value",
"NETBOX_TIMEOUT": "your-value",
"NETBOX_BRANCHING_ENABLED": "your-value",
"NETBOX_BRANCH": "your-value",
"NETBOX_PLUGIN_DISCOVERY": "your-value",
"READ_ONLY_MODE": "your-value",
"DRY_RUN_MODE": "your-value",
"DISABLED_TAGS": "your-value",
"LOG_LEVEL": "your-value",
"RESPONSE_MAX_SIZE": "your-value",
"RATE_LIMIT_ENABLED": "your-value",
"RATE_LIMIT_MAX_REQUESTS": "your-value",
"RATE_LIMIT_WINDOW_MINUTES": "your-value",
"TOOL_SEARCH_ENABLED": "your-value",
"TOOL_SEARCH_STRATEGY": "your-value",
"TOOL_SEARCH_MAX_RESULTS": "your-value"
}
}
}
}Run this in your terminal
claude mcp add netbox --env NETBOX_URL=your-value --env NETBOX_TOKEN=your-value --env NETBOX_VERIFY_SSL=your-value --env NETBOX_TIMEOUT=your-value --env NETBOX_BRANCHING_ENABLED=your-value --env NETBOX_BRANCH=your-value --env NETBOX_PLUGIN_DISCOVERY=your-value --env READ_ONLY_MODE=your-value --env DRY_RUN_MODE=your-value --env DISABLED_TAGS=your-value --env LOG_LEVEL=your-value --env RESPONSE_MAX_SIZE=your-value --env RATE_LIMIT_ENABLED=your-value --env RATE_LIMIT_MAX_REQUESTS=your-value --env RATE_LIMIT_WINDOW_MINUTES=your-value --env TOOL_SEARCH_ENABLED=your-value --env TOOL_SEARCH_STRATEGY=your-value --env TOOL_SEARCH_MAX_RESULTS=your-value -- uvx netbox-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"netbox": {
"command": "uvx",
"args": [
"netbox-mcp"
],
"env": {
"NETBOX_URL": "your-value",
"NETBOX_TOKEN": "your-value",
"NETBOX_VERIFY_SSL": "your-value",
"NETBOX_TIMEOUT": "your-value",
"NETBOX_BRANCHING_ENABLED": "your-value",
"NETBOX_BRANCH": "your-value",
"NETBOX_PLUGIN_DISCOVERY": "your-value",
"READ_ONLY_MODE": "your-value",
"DRY_RUN_MODE": "your-value",
"DISABLED_TAGS": "your-value",
"LOG_LEVEL": "your-value",
"RESPONSE_MAX_SIZE": "your-value",
"RATE_LIMIT_ENABLED": "your-value",
"RATE_LIMIT_MAX_REQUESTS": "your-value",
"RATE_LIMIT_WINDOW_MINUTES": "your-value",
"TOOL_SEARCH_ENABLED": "your-value",
"TOOL_SEARCH_STRATEGY": "your-value",
"TOOL_SEARCH_MAX_RESULTS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"netbox": {
"type": "stdio",
"command": "uvx",
"args": [
"netbox-mcp"
],
"env": {
"NETBOX_URL": "your-value",
"NETBOX_TOKEN": "your-value",
"NETBOX_VERIFY_SSL": "your-value",
"NETBOX_TIMEOUT": "your-value",
"NETBOX_BRANCHING_ENABLED": "your-value",
"NETBOX_BRANCH": "your-value",
"NETBOX_PLUGIN_DISCOVERY": "your-value",
"READ_ONLY_MODE": "your-value",
"DRY_RUN_MODE": "your-value",
"DISABLED_TAGS": "your-value",
"LOG_LEVEL": "your-value",
"RESPONSE_MAX_SIZE": "your-value",
"RATE_LIMIT_ENABLED": "your-value",
"RATE_LIMIT_MAX_REQUESTS": "your-value",
"RATE_LIMIT_WINDOW_MINUTES": "your-value",
"TOOL_SEARCH_ENABLED": "your-value",
"TOOL_SEARCH_STRATEGY": "your-value",
"TOOL_SEARCH_MAX_RESULTS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
NETBOX_VERIFY_SSL envNETBOX_TIMEOUT envNETBOX_BRANCHING_ENABLED envNETBOX_BRANCH envNETBOX_PLUGIN_DISCOVERY envREAD_ONLY_MODE envDRY_RUN_MODE envDISABLED_TAGS envLOG_LEVEL envRESPONSE_MAX_SIZE envRATE_LIMIT_ENABLED envRATE_LIMIT_MAX_REQUESTS envRATE_LIMIT_WINDOW_MINUTES envTOOL_SEARCH_ENABLED envTOOL_SEARCH_STRATEGY envTOOL_SEARCH_MAX_RESULTS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account mhajder, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: NETBOX_URL, NETBOX_TOKEN
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.3.0) reached the registry today.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv), Docker on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Signoff
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Five gates that make an agent's 'done' provable: run them, read the verdict, audit the record.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Give AI agents structured access to NetBox, your network source of truth
Installation · Tools · Configuration · Security
NetBox MCP Server is a Python-based Model Context Protocol (MCP) server that gives AI assistants structured access to NetBox - the source of truth for network infrastructure (DCIM and IPAM). A small set of generic tools covers all 139 core object types of NetBox 4.7 (and plugin types, if enabled), plus specialised tools for search, change logs, GraphQL, free IP/prefix/VLAN allocation, prefix utilization, free rack space, cable tracing and connecting, config rendering, custom scripts and (optionally) netbox-branching. Writes can be hidden entirely (read-only mode) or simulated (dry-run mode).
fields, omit and brief - the tools steer the model to use themcommit is set)Bearer nbt_...) and legacy v1 (Token ...) API tokensnetbox_dns.zone)__in, multi-hop lookups)omit, v2 tokens, /api/authentication-check/) are used when the server detects themThe easiest way to get started is to install from PyPI:
# Using UV (recommended)
uvx netbox-mcp
pip install netbox-mcp
Remember to configure the environment variables for your NetBox instance before running the server:
# Create environment configuration
export NETBOX_URL=https://netbox.example.com export NETBOX_TOKEN=nbt_your-key.your-token
git clone https://github.com/mhajder/netbox-mcp.git
cd netbox-mcp
# Using UV (recommended)
uv sync
pip install -e .
cp .env.example .env
# Using UV (recommended)
uv run netbox-mcp
netbox-mcp
A Docker image is available on GitHub Packages for easy deployment.
docker pull ghcr.io/mhajder/netbox-mcp:latest
For development with additional tools:
# Clone and install with development dependencies
git clone https://github.com/mhajder/netbox-mcp.git cd netbox-mcp uv sync --group dev
uv run pytest
uv run pytest --cov=src/
uv run ruff check . uv run ruff format .
uv run ty check .
uv run prek install
# NetBox MCP Server Environment Configuration
NETBOX_URL=https://netbox.example.com
NETBOX_TOKEN=nbt_your-key.your-token
NETBOX_VERIFY_SSL=true
NETBOX_TIMEOUT=30
NETBOX_BRANCHING_ENABLED=false
NETBOX_BRANCH=
NETBOX_PLUGIN_DISCOVERY=false
READ_ONLY_MODE=false
DRY_RUN_MODE=false
DISABLED_TAGS=
LOG_LEVEL=INFO
RESPONSE_MAX_SIZE=
RATE_LIMIT_ENABLED=false RATE_LIMIT_MAX_REQUESTS=60 RATE_LIMIT_WINDOW_MINUTES=1
TOOL_SEARCH_ENABLED=false
TOOL_SEARCH_STRATEGY=bm25
TOOL_SEARCH_MAX_RESULTS=5
Object types are named app.model, as NetBox itself names them (dcim.device, ipam.prefix, virtualization.virtualmachine). API paths such as dcim/devices are accepted too. With branching enabled, every tool that reads or writes objects also takes an optional branch argument.
| Tool | Description |
|---|---|
netbox_list_object_types | List supported object types and their endpoints (core and discovered plugin types) |
netbox_get_objects | List objects of a type with filters, fields, omit, brief, ordering, limit, offset |
netbox_get_object | Get one object by ID |
netbox_search_objects | Free-text search (q) across several object types at once |
netbox_describe_object_type | Writable fields of a type: data type, required, choices |
netbox_get_changelogs | Change log entries, newest first |
| Tool | Description |
|---|---|
netbox_get_status | NetBox version, plugins, workers, authenticated user and this server's modes |
netbox_graphql_query | Read-only GraphQL query (mutations are rejected) |
netbox_get_available | Free IPs / prefixes in a prefix or IP range, VLANs in a VLAN group, ASNs in an ASN range |
netbox_trace_cable | Full cable path from an interface, front/rear/console/power port or circuit termination |
netbox_render_config | Render a device's or VM's configuration from its config template |
netbox_get_prefix_utilization | Utilization of up to 25 prefixes, computed as NetBox's UI does (child prefixes for containers, IPs and utilized ranges otherwise) |
netbox_find_rack_space | Racks in a site, location or list with room for a device of a given height (counts both faces for full-depth devices, and reservations) |
netbox_list_branches | List netbox-branching branches (only with NETBOX_BRANCHING_ENABLED=true) |
| Tool | Description |
|---|---|
netbox_create_object | Create one object |
netbox_update_object | Partially update one object (PATCH) |
netbox_bulk_create_objects | Create up to 500 objects in one transaction |
netbox_bulk_update_objects | Update up to 500 objects in one transaction |
netbox_allocate_available | Allocate the next free IP, prefix, VLAN or ASN |
netbox_connect_cable | Cable ports together, given by ID or by device and port name; refuses ports that are already cabled |
netbox_run_script | Run a custom script and wait for its log and output; commit defaults to false (destructiveHint) |
netbox_create_branch | Create a netbox-branching branch (only with NETBOX_BRANCHING_ENABLED=true) |
netbox_delete_object | Delete one object (destructiveHint) |
netbox_bulk_delete_objects | Delete up to 500 objects in one transaction (destructiveHint) |
Every tool is tagged netbox plus a group tag, which `DI
Only the beginning is shown; read the rest in the repo