API Validation — Nautobot Network Build (2026-05-12)


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