Nautobot Source of Truth
MCP Server
- Repository: aiopnet/mcp-nautobot
- Transport: stdio (Python via MCP SDK) — also supports HTTP on configurable port
- Requires:
NAUTOBOT_URL, NAUTOBOT_TOKEN
- Python: 3.13+
- Read-only: All tools are read-only (requires API token with read permissions)
MCP Tools
| Tool |
Parameters |
What It Does |
get_ip_addresses |
address?, prefix?, status?, role?, tenant?, vrf?, limit?, offset? |
Retrieve IP addresses with filtering — status (active, reserved, deprecated), role (loopback, secondary, anycast), VRF, tenant |
get_prefixes |
prefix?, status?, site?, role?, tenant?, vrf?, limit?, offset? |
Retrieve network prefixes with filtering by site, role, status, VRF, tenant |
get_ip_address_by_id |
ip_id |
Retrieve a specific IP address by its Nautobot UUID |
search_ip_addresses |
query, limit? |
Full-text search across all IP address data — find IPs by any matching field |
test_connection |
none |
Verify connectivity to the Nautobot API — returns status, URL, and timestamp |
Tool Details
get_ip_addresses
The primary IPAM query tool. Supports rich filtering:
- address — specific IP to search (e.g.,
10.0.1.1)
- prefix — network prefix filter (e.g.,
10.0.0.0/24) — returns all IPs within the prefix
- status —
active, reserved, deprecated
- role —
loopback, secondary, anycast, vip, hsrp, vrrp
- tenant — filter by tenant (multi-tenancy support)
- vrf — filter by VRF (routing instance isolation)
- limit — max results (default: 100, max: 1000)
- offset — pagination offset
Returns JSON with count and IP address objects including assignment details.
get_prefixes
Network prefix (subnet) lookup with site awareness:
- prefix — specific prefix (e.g.,
10.0.0.0/24)
- site — filter by site/location name
- role — prefix role (production, development, management, etc.)
- status — active, reserved, deprecated, container
- tenant / vrf — multi-tenancy and routing isolation
Returns JSON with prefix objects including utilization data.
search_ip_addresses
Free-text search across all IP address fields. Use this when you don't know exactly what field to filter on:
- Query by partial IP, hostname, description, or any text in the IP record
- Default limit: 50 (max: 500)
Workflow: IPAM Audit
When auditing IP address allocations:
- Test connection:
test_connection — verify Nautobot API is reachable
- List prefixes:
get_prefixes by site — what subnets are allocated per site
- IP utilization:
get_ip_addresses per prefix — how many IPs are active vs reserved
- Deprecated check:
get_ip_addresses(status="deprecated") — stale allocations
- Report: IPAM utilization summary by site and prefix
Workflow: IP Address Lookup
When investigating "what device uses IP 10.1.2.3?":
- Search:
search_ip_addresses(query="10.1.2.3") — find the IP
- Details:
get_ip_address_by_id — full details including device assignment
- Prefix context:
get_prefixes(prefix="10.1.2.0/24") — what subnet is it in, which site
- Report: IP ownership, device assignment, subnet, site, VRF, tenant
Workflow: VRF Reconciliation
When validating VRF IP allocations:
- Get VRF IPs:
get_ip_addresses(vrf="PROD-VRF") — all IPs in the VRF
- Get VRF prefixes:
get_prefixes(vrf="PROD-VRF") — all subnets in the VRF
- Cross-check: verify IPs fall within expected prefix ranges
- Overlap detection: compare prefixes across VRFs for unintended overlap
- Report: VRF allocation summary with any anomalies
Workflow: Site IP Summary
When generating an IP summary for a specific site:
- Site prefixes:
get_prefixes(site="Chicago-DC") — all subnets at the site
- Per-prefix IPs:
get_ip_addresses(prefix="10.10.0.0/16") — IPs in each prefix
- Loopbacks:
get_ip_addresses(role="loopback", status="active") — router loopbacks
- Report: site IPAM dashboard with prefix utilization, loopback inventory, tenant breakdown
Integration with Other Skills
| Skill |
How They Work Together |
netbox-reconcile |
Nautobot and NetBox are alternative SoTs — use whichever the org runs; both provide IPAM data for reconciliation |
pyats-topology |
Nautobot provides intended state (IP assignments); pyATS discovers actual state from devices |
pyats-network |
Cross-reference Nautobot IPAM with live device IP configs from pyATS |
pyats-routing |
Validate routing table entries against Nautobot IPAM allocations |
radkit-remote-access |
Use Nautobot to identify device IPs, then RADKit to access those devices remotely |
aci-fabric-audit |
Nautobot IPAM vs ACI endpoint tracker for data center reconciliation |
meraki-network-ops |
Nautobot subnet allocations vs Meraki DHCP/VLAN assignments |
aws-network-ops |
Nautobot IPAM vs AWS VPC CIDR allocations for hybrid cloud reconciliation |
gait-session-tracking |
Record all Nautobot IPAM queries and reconciliation results in GAIT |
servicenow-change-workflow |
Reference Nautobot IPAM data when planning change requests |
Nautobot vs NetBox
Both are popular network source-of-truth platforms. NetClaw supports both:
| Feature |
NetBox (netbox-reconcile) |
Nautobot (nautobot-sot) |
| Origin |
DigitalOcean / NetBox Labs |
Network to Code (fork of NetBox) |
| IPAM |
Full IPAM, DCIM, circuits |
Full IPAM, DCIM, circuits + Jobs framework |
| API style |
REST + GraphQL |
REST + GraphQL + Jobs API |
| MCP tools |
Read-only via FastMCP |
Read-only via MCP SDK |
| Use when |
Org uses NetBox |
Org uses Nautobot |
If the organization runs both, use both skills for cross-platform reconciliation.
Important Rules
- Read-only — all tools are read operations; no writes to Nautobot
- API token scope — ensure the token has read permissions for IPAM endpoints
- Pagination matters — for large datasets, use
limit and offset to page through results (max 1000 per request)
- VRF isolation — IP addresses can be duplicated across VRFs; always filter by VRF when the network uses overlapping address space
- Multi-tenancy — filter by tenant for shared Nautobot instances serving multiple organizations
- Record in GAIT — log all Nautobot IPAM queries and reconciliation results
Environment Variables
NAUTOBOT_URL — Nautobot instance URL (e.g., https://nautobot.example.com)
NAUTOBOT_TOKEN — Nautobot API token with read permissions
MCP_PORT — Server port when running in HTTP mode (default: 8000, optional)
MCP_HOST — Server bind address (default: 127.0.0.1, optional)
1---
2name: nautobot-sot
3description: "Nautobot IPAM & source of truth — IP address queries, prefix lookups, VRF/tenant/site filtering, IPAM search, connection testing. Use when looking up IP addresses in Nautobot, checking subnet allocations, querying IPAM by VRF or tenant, or validating Nautobot as the network source of truth"
4version: 1.0.0
5license: Apache-2.0
6tags: [nautobot, ipam, source-of-truth, ip-addresses, prefixes, vrf, dcim]
7---
8
9# Nautobot Source of Truth
10
11## MCP Server
12
13- **Repository**: [aiopnet/mcp-nautobot](https://github.com/aiopnet/mcp-nautobot)
14- **Transport**: stdio (Python via MCP SDK) — also supports HTTP on configurable port
15- **Requires**: `NAUTOBOT_URL`, `NAUTOBOT_TOKEN`
16- **Python**: 3.13+
17- **Read-only**: All tools are read-only (requires API token with read permissions)
18
19## MCP Tools
20
21| Tool | Parameters | What It Does |
22|------|-----------|--------------|
23| `get_ip_addresses` | `address?, prefix?, status?, role?, tenant?, vrf?, limit?, offset?` | Retrieve IP addresses with filtering — status (active, reserved, deprecated), role (loopback, secondary, anycast), VRF, tenant |
24| `get_prefixes` | `prefix?, status?, site?, role?, tenant?, vrf?, limit?, offset?` | Retrieve network prefixes with filtering by site, role, status, VRF, tenant |
25| `get_ip_address_by_id` | `ip_id` | Retrieve a specific IP address by its Nautobot UUID |
26| `search_ip_addresses` | `query, limit?` | Full-text search across all IP address data — find IPs by any matching field |
27| `test_connection` | none | Verify connectivity to the Nautobot API — returns status, URL, and timestamp |
28
29### Tool Details
30
31#### get_ip_addresses
32
33The primary IPAM query tool. Supports rich filtering:
34
35- **address** — specific IP to search (e.g., `10.0.1.1`)
36- **prefix** — network prefix filter (e.g., `10.0.0.0/24`) — returns all IPs within the prefix
37- **status** — `active`, `reserved`, `deprecated`
38- **role** — `loopback`, `secondary`, `anycast`, `vip`, `hsrp`, `vrrp`
39- **tenant** — filter by tenant (multi-tenancy support)
40- **vrf** — filter by VRF (routing instance isolation)
41- **limit** — max results (default: 100, max: 1000)
42- **offset** — pagination offset
43
44Returns JSON with count and IP address objects including assignment details.
45
46#### get_prefixes
47
48Network prefix (subnet) lookup with site awareness:
49
50- **prefix** — specific prefix (e.g., `10.0.0.0/24`)
51- **site** — filter by site/location name
52- **role** — prefix role (production, development, management, etc.)
53- **status** — active, reserved, deprecated, container
54- **tenant** / **vrf** — multi-tenancy and routing isolation
55
56Returns JSON with prefix objects including utilization data.
57
58#### search_ip_addresses
59
60Free-text search across all IP address fields. Use this when you don't know exactly what field to filter on:
61
62- Query by partial IP, hostname, description, or any text in the IP record
63- Default limit: 50 (max: 500)
64
65## Workflow: IPAM Audit
66
67When auditing IP address allocations:
68
691. **Test connection**: `test_connection` — verify Nautobot API is reachable
702. **List prefixes**: `get_prefixes` by site — what subnets are allocated per site
713. **IP utilization**: `get_ip_addresses` per prefix — how many IPs are active vs reserved
724. **Deprecated check**: `get_ip_addresses(status="deprecated")` — stale allocations
735. **Report**: IPAM utilization summary by site and prefix
74
75## Workflow: IP Address Lookup
76
77When investigating "what device uses IP 10.1.2.3?":
78
791. **Search**: `search_ip_addresses(query="10.1.2.3")` — find the IP
802. **Details**: `get_ip_address_by_id` — full details including device assignment
813. **Prefix context**: `get_prefixes(prefix="10.1.2.0/24")` — what subnet is it in, which site
824. **Report**: IP ownership, device assignment, subnet, site, VRF, tenant
83
84## Workflow: VRF Reconciliation
85
86When validating VRF IP allocations:
87
881. **Get VRF IPs**: `get_ip_addresses(vrf="PROD-VRF")` — all IPs in the VRF
892. **Get VRF prefixes**: `get_prefixes(vrf="PROD-VRF")` — all subnets in the VRF
903. **Cross-check**: verify IPs fall within expected prefix ranges
914. **Overlap detection**: compare prefixes across VRFs for unintended overlap
925. **Report**: VRF allocation summary with any anomalies
93
94## Workflow: Site IP Summary
95
96When generating an IP summary for a specific site:
97
981. **Site prefixes**: `get_prefixes(site="Chicago-DC")` — all subnets at the site
992. **Per-prefix IPs**: `get_ip_addresses(prefix="10.10.0.0/16")` — IPs in each prefix
1003. **Loopbacks**: `get_ip_addresses(role="loopback", status="active")` — router loopbacks
1014. **Report**: site IPAM dashboard with prefix utilization, loopback inventory, tenant breakdown
102
103## Integration with Other Skills
104
105| Skill | How They Work Together |
106|-------|----------------------|
107| `netbox-reconcile` | Nautobot and NetBox are alternative SoTs — use whichever the org runs; both provide IPAM data for reconciliation |
108| `pyats-topology` | Nautobot provides intended state (IP assignments); pyATS discovers actual state from devices |
109| `pyats-network` | Cross-reference Nautobot IPAM with live device IP configs from pyATS |
110| `pyats-routing` | Validate routing table entries against Nautobot IPAM allocations |
111| `radkit-remote-access` | Use Nautobot to identify device IPs, then RADKit to access those devices remotely |
112| `aci-fabric-audit` | Nautobot IPAM vs ACI endpoint tracker for data center reconciliation |
113| `meraki-network-ops` | Nautobot subnet allocations vs Meraki DHCP/VLAN assignments |
114| `aws-network-ops` | Nautobot IPAM vs AWS VPC CIDR allocations for hybrid cloud reconciliation |
115| `gait-session-tracking` | Record all Nautobot IPAM queries and reconciliation results in GAIT |
116| `servicenow-change-workflow` | Reference Nautobot IPAM data when planning change requests |
117
118## Nautobot vs NetBox
119
120Both are popular network source-of-truth platforms. NetClaw supports both:
121
122| Feature | NetBox (`netbox-reconcile`) | Nautobot (`nautobot-sot`) |
123|---------|---------------------------|--------------------------|
124| Origin | DigitalOcean / NetBox Labs | Network to Code (fork of NetBox) |
125| IPAM | Full IPAM, DCIM, circuits | Full IPAM, DCIM, circuits + Jobs framework |
126| API style | REST + GraphQL | REST + GraphQL + Jobs API |
127| MCP tools | Read-only via FastMCP | Read-only via MCP SDK |
128| Use when | Org uses NetBox | Org uses Nautobot |
129
130If the organization runs **both**, use both skills for cross-platform reconciliation.
131
132## Important Rules
133
134- **Read-only** — all tools are read operations; no writes to Nautobot
135- **API token scope** — ensure the token has read permissions for IPAM endpoints
136- **Pagination matters** — for large datasets, use `limit` and `offset` to page through results (max 1000 per request)
137- **VRF isolation** — IP addresses can be duplicated across VRFs; always filter by VRF when the network uses overlapping address space
138- **Multi-tenancy** — filter by tenant for shared Nautobot instances serving multiple organizations
139- **Record in GAIT** — log all Nautobot IPAM queries and reconciliation results
140
141## Environment Variables
142
143- `NAUTOBOT_URL` — Nautobot instance URL (e.g., `https://nautobot.example.com`)
144- `NAUTOBOT_TOKEN` — Nautobot API token with read permissions
145- `MCP_PORT` — Server port when running in HTTP mode (default: 8000, optional)
146- `MCP_HOST` — Server bind address (default: 127.0.0.1, optional)