API Validation — Nautobot Network Build (2026-05-12)
Note on tool/endpoint counts. Totals in these Nautobot records vary by installed plugin set, which dispatcher routes were exposed, and whether the figure counts tools or resources. They are snapshots of one configuration, not a fixed property of Nautobot. See Nautobot Endpoint Counts Explained before treating a difference as a contradiction.
Date: May 2026
FMCP Version: 0.7
Agent: python script for validation
This document contains the raw output from a validation script run against a live Nautobot instance after a multi-region spine-leaf network build completed entirely via MCP. All 81 checks passed.
The build created 37 devices, 71 interfaces, 20 cables, 51 IP addresses, and 47 IP-to-interface bindings across 4 data centers — constructed by an agent using frisian-mcp's dispatcher pattern with no direct API access.
The bottom section is the one worth reading: the token comparison between the dispatcher pattern and a flat MCP surface across the same session. At 1,227 tools, flat schema exposure would have cost 5.4 million tokens across the session. The dispatcher cost 2,535.
============================================================ VALIDATE: Locations & Location Types
[OK 200] GET /api/dcim/location-types/ (2,119b / ~605 tokens, 197ms) [PASS] Location type 'Region' exists [PASS] Location type 'Data Center' exists [OK 200] GET /api/dcim/locations/ (16,515b / ~4,719 tokens, 237ms) [PASS] Location 'DC-IAD-01' exists [PASS] Location 'DC-JFK-01' exists [PASS] Location 'DC-SJC-01' exists [PASS] Location 'DC-AMS-01' exists
============================================================ VALIDATE: Manufacturers, Platforms, Device Types
[OK 200] GET /api/dcim/manufacturers/ (1,748b / ~499 tokens, 104ms) [PASS] Manufacturer 'Cisco' exists [PASS] Manufacturer 'Arista' exists [PASS] Manufacturer 'Juniper' exists [OK 200] GET /api/dcim/platforms/ (2,460b / ~703 tokens, 120ms) [PASS] Platform 'IOS-XR' exists [PASS] Platform 'EOS' exists [PASS] Platform 'JunOS' exists [OK 200] GET /api/dcim/device-types/ (4,190b / ~1,197 tokens, 136ms) [PASS] Device type 'ASR9001' exists [PASS] Device type 'N9K-C9336C-FX2' exists [PASS] Device type 'DCS-7280R3' exists [PASS] Device type 'DCS-7050CX3-32S' exists [PASS] Device type 'SRX4600' exists
============================================================ VALIDATE: Roles
[OK 200] GET /api/extras/roles/ (10,440b / ~2,983 tokens, 123ms) [PASS] Role 'Router' exists [PASS] Role 'Spine Switch' exists [PASS] Role 'Leaf Switch' exists [PASS] Role 'Firewall' exists [PASS] Role 'Server' exists
============================================================ VALIDATE: Racks
[OK 200] GET /api/dcim/racks/ (8,084b / ~2,310 tokens, 162ms) [PASS] Rack count >= 5 — found 7 [PASS] Rack 'IAD01-NET-A01' exists [PASS] Rack 'IAD01-NET-A02' exists [PASS] Rack 'JFK01-NET-A01' exists [PASS] Rack 'SJC01-NET-A01' exists [PASS] Rack 'AMS01-NET-A01' exists
============================================================ VALIDATE: Devices
[OK 200] GET /api/dcim/devices/ (78,038b / ~22,297 tokens, 857ms) [PASS] Device count >= 24 — found 37 [PASS] Device 'iad01-core-rtr-01' exists [PASS] Device 'iad01-core-rtr-02' exists [PASS] Device 'iad01-fw-01' exists [PASS] Device 'iad01-fw-02' exists [PASS] Device 'iad01-spine-01' exists [PASS] Device 'iad01-spine-02' exists [PASS] Device 'iad01-leaf-01' exists [PASS] Device 'iad01-leaf-02' exists [PASS] Device 'iad01-leaf-03' exists [PASS] Device 'jfk01-core-rtr-01' exists [PASS] Device 'jfk01-fw-01' exists [PASS] Device 'jfk01-spine-01' exists [PASS] Device 'jfk01-leaf-01' exists [PASS] Device 'jfk01-leaf-02' exists [PASS] Device 'sjc01-core-rtr-01' exists [PASS] Device 'sjc01-fw-01' exists [PASS] Device 'sjc01-spine-01' exists [PASS] Device 'sjc01-leaf-01' exists [PASS] Device 'sjc01-leaf-02' exists [PASS] Device 'ams01-core-rtr-01' exists [PASS] Device 'ams01-fw-01' exists [PASS] Device 'ams01-spine-01' exists [PASS] Device 'ams01-leaf-01' exists [PASS] Device 'ams01-leaf-02' exists
============================================================ VALIDATE: Interfaces
[OK 200] GET /api/dcim/interfaces/ (115,331b / ~32,952 tokens, 1120ms) [PASS] Interface count >= 67 — found 71
============================================================ VALIDATE: Cables
[OK 200] GET /api/dcim/cables/ (27,680b / ~7,909 tokens, 203ms) [PASS] Cable count >= 19 — found 20
============================================================ VALIDATE: IPAM — VRFs & Prefixes
[OK 200] GET /api/ipam/vrfs/ (1,484b / ~424 tokens, 166ms) [PASS] VRF 'Global' exists [PASS] VRF 'MGMT' exists [OK 200] GET /api/ipam/prefixes/ (33,821b / ~9,663 tokens, 341ms) [PASS] Prefix count >= 21 — found 27 [PASS] Prefix 10.0.0.0/8 exists [PASS] Prefix 10.10.0.0/16 exists [PASS] Prefix 10.20.0.0/16 exists [PASS] Prefix 10.30.0.0/16 exists [PASS] Prefix 10.40.0.0/16 exists [PASS] Prefix 10.10.0.0/24 exists [PASS] Prefix 10.10.1.0/24 exists [PASS] Prefix 10.10.2.0/24 exists [PASS] Prefix 10.10.10.0/24 exists [PASS] Prefix 10.20.0.0/24 exists [PASS] Prefix 10.20.1.0/24 exists [PASS] Prefix 10.20.2.0/24 exists [PASS] Prefix 10.20.10.0/24 exists [PASS] Prefix 10.30.0.0/24 exists [PASS] Prefix 10.30.1.0/24 exists [PASS] Prefix 10.30.2.0/24 exists [PASS] Prefix 10.30.10.0/24 exists [PASS] Prefix 10.40.0.0/24 exists [PASS] Prefix 10.40.1.0/24 exists [PASS] Prefix 10.40.2.0/24 exists [PASS] Prefix 10.40.10.0/24 exists
============================================================ VALIDATE: IP Addresses
[OK 200] GET /api/ipam/ip-addresses/ (50,847b / ~14,528 tokens, 344ms) [PASS] IP address count >= 43 — found 51 [OK 200] GET /api/ipam/ip-address-to-interface/ (39,964b / ~11,418 tokens, 2768ms) [PASS] IP→Interface bindings >= 43 — found 47
============================================================ VALIDATION SUMMARY: 81/81 checks passed
============================================================ MCP: Measure dispatcher schema size
[OK 200] POST /api/mcp/ (9,564b / ~2,733 tokens, 113ms) Tools returned: 16 First tool schema: 590 bytes / ~169 tokens First tool name: dcim Full tools/list response: 9,564 bytes / ~2,733 tokens Reported dispatcher schema (per call): ~180 tokens
Total elapsed: 7.0s
======================================================================== ACTUAL TOKEN COST REPORT Estimation basis: 1 token ≈ 3.5 chars of raw JSON bytes
Phase Calls Req Tok Resp Tok Total Tok Errs
validate 14 0 112,207 112,207 0 mcp_compare 1 15 2,733 2,748 0
TOTAL 15 15 114,940 114,955 0
──────────────────────────────────────────────────────────────────────── DEVICE LIST — REPORT ESTIMATE vs ACTUAL ──────────────────────────────────────────────────────────────────────── Reported total response tokens: 13,920 Actual total response tokens: 22,297 Delta: +8,377 (+60.2%)
Raw response bytes: 78,038 Request duration: 857ms
──────────────────────────────────────────────────────────────────────── MCP DISPATCHER vs FLAT TOOL SCHEMA — overhead per call ──────────────────────────────────────────────────────────────────────── frisian-mcp dispatcher (reported): 180 tokens frisian-mcp dispatcher (measured): 169 tokens Flat 1,227-tool MCP (reported): 362,000 tokens Schema savings per call: 361,831 tokens (99.95%)
Extrapolated across 15 calls: Dispatcher schema overhead: 2,535 tokens Flat schema overhead: 5,430,000 tokens Net savings (full session): 5,427,465 tokens
──────────────────────────────────────────────────────────────────────── BUILD COST PROJECTION (based on measured per-object sizes) (Read responses used to derive per-object token size) ──────────────────────────────────────────────────────────────────────── Operation Calls Tok/obj Total Tok
Location types (2) 2 302 604 Locations — regions+DCs (7) 7 295 2,065 Manufacturers (3) 3 166 498 Platforms (3) 3 234 702 Device types (5) 5 239 1,195 Roles (5) 5 597 2,985 Racks (5) 5 330 1,650 Devices (24) 24 603 14,472 VRFs (2) 2 212 424 Prefixes (21) 21 358 7,518 Interfaces (67) 67 464 31,088 IP addresses (43) 43 285 12,255 Cables (19) 19 395 7,505 IP→Iface bindings (45) 45 243 10,935 Primary IP updates (5) 5 603 3,015
Response tokens (API payloads) 256 96,911 Request body tokens (~15%) 14,537 Dispatcher schema overhead 256 169 43,264 ────────────────────────────────────────────────────────── TOTAL (dispatcher) 154,712 TOTAL (flat MCP — impossible) 92,783,448
──────────────────────────────────────────────────────────────────────── VALIDATION COST (measured this run) ──────────────────────────────────────────────────────────────────────── Read calls: 14 Response tokens: 112,207 Dispatcher schema OH: 2,366 Total (dispatcher): 114,573 Total (flat MCP): 5,180,207 Write calls: 1 resp tokens: 2,733