RackArchitect MCP
RackArchitect MCP is a "rack-as-code" planning server for 19-inch, 10-inch, and 6-inch racks that lets an agent browse hardware blueprints, build and validate rack layouts, route cables, and export CAD and 3D-print deliverables.
Search and inspect the hardware catalog (switches, routers, mini-PCs, SBCs, NAS, PDUs, UPSs, patch panels, modular carriers, sub-modules) with expanded port coordinates and slot geometry.
Register custom hardware blueprints, including repeating port-group matrices, so unlisted gear can be mounted.
Initialize or reset a rack enclosure (width standard, U height, rail depth, door style, front/rear clearance) and traverse undo/redo history.
Mount devices onto rack units or into modular-carrier slots; move, rename, or remove mounted instances.
Connect or upsert cables between ports with 3D spline routing, commercial length bins, and VLAN/IP annotations; disconnect cables by ID or device.
Plan external building/room drops onto patch panels and optionally auto-patch them to a switch.
Run deterministic 5-stage validation (bounds, 3D AABB/plug/door clearance, PoE and power DAG, cable speed/connector compatibility, thermal/acoustic/center-of-gravity) returning structured diagnostics with self-correction suggestions.
Inspect current rack state and ASCII front/rear elevations read-only.
Export deliverables: elevation SVG, wiring schematic SVG, BOM markdown, 3D GLB scene, and parametric OpenSCAD/STL 3D-print carriers, as local files or hosted HTTPS download URLs.
Generates parametric OpenSCAD (.scad) carrier models and STL meshes for 3D-printed rack adapters and modular carriers.
ποΈ RackArchitect MCP (@rack-mcp/*)
The Open-Source, Agent-First "Rack-as-Code" Planning, 5-Stage Validation, Parametric 3D-Print (.scad/.stl) & Live 2D/3D CAD Platform for 19-Inch Enterprise Racks, 10-Inch Mini-Racks & 6-Inch Micro-Homelabs
β‘ Zero-Install Remote MCP (.../mcp) Β· π₯οΈ Hosted Live 3D Studio Β· π Static 3D Demo Β· Quickstart Β· Agent Skill Β· 3D-Print (.SCAD / .STL) Β· Add Blueprint Β· Handbook (DE)
β‘ Instant Zero-Install Remote MCP Endpoint (Live & Free β No Node.js or Docker Required):
Connect Claude, Claude Code, Cursor, VS Code Copilot, Windsurf, Google Antigravity, or MCP Inspector directly viahttps://mcp.rackarchitect.dev/mcp(Streamable HTTP) orhttps://mcp.rackarchitect.dev/sse(SSE) β every session automatically gets its own isolated real-time Live 3D Digital Twin URL (https://mcp.rackarchitect.dev/?session=<uuid>)!
π― Why RackArchitect MCP? (The Three Golden Laws)
Planning a compact 10-inch mini-rack (e.g., DeskPi RackMate T1/T2, Digitus SOHO) or a dense 19-inch homelab with AI agents used to fail for one reason: LLMs hallucinate physical geometry. They forget that a 55 mm Schuko plug on a rear PDU collides with a 182 mm Lenovo ThinkCentre M920q mounted in front, or that two fanless PoE switches stacked together create a thermal hotspot.
RackArchitect MCP solves this with three non-negotiable engineering laws:
LLMs Never Guess Geometry: Every spatial coordinate (
1 U = 44.45 mm), 3D Axis-Aligned Bounding Box (B_chassis+ dynamic plug clearance $\Delta Z_{\text{plug}}$), Catmull-Rom 3D cable spline, PoE budget DAG, and logarithmicdB(A)acoustic sum is computed deterministically in millimeters by@rack-mcp/core-domain.Single Source of Truth (
rack.yaml): Your entire rack state (devices, 3D-printed sub-U carrier slots, child mini-PCs, keystone couplers, cables, VLANs, and IP CIDRs) lives in a single, Git-friendly YAML file.Actionable Self-Correction Feedback: Whenever a placement or cable fails any of the 5 validation stages (26 closed
DiagnosticCodetypes), the engine returns structuredremediation_suggestionsso your AI agent fixes the collision, PoE overload, orCat5ebottleneck autonomously in the very next turn.
Related MCP server: techhand-print-fab
πΌοΈ Generated CAD Blueprints (100% Deterministic SVG Output)
1. Dual-Row Engineering Elevation & Z-Depth Side Cutaway (elevation.svg)
Includes Equipment Schedule, Front Elevation (X, Y), Horizontally Mirrored Rear Elevation (W_panel - X - width), Cable Callout Lanes, and Right-Hand Z-Depth Cutaway (Z_min to Z_max with Front Glass Door -50 mm and Rear Wall +300 mm clearance checks):
2. 5-Layer Logical Pin-to-Pin Wiring Schematic with VLAN & IP CIDR Badges (wiring-schematic.svg)
π 30-Second Quickstart
Option A: Zero-Install Hosted Remote MCP + Live 3D Studio (Recommended β 0 Setup!)
Use the live, multi-tenant Hosted Remote MCP server right away without installing Node.js, pnpm, or Docker:
{
"mcpServers": {
"rack_architect_mcp": {
"url": "https://mcp.rackarchitect.dev/mcp"
}
}
}# Or add in 1 second via Claude Code CLI:
claude mcp add --transport http rack_architect_mcp https://mcp.rackarchitect.dev/mcp
# Or explore the Hosted Live 3D/2D Studio directly in your browser:
# https://mcp.rackarchitect.dev/Option B: Local Node.js (>= 20) & pnpm
# 1. Clone & install
git clone https://github.com/itAlex240/rack-architect-mcp.git
cd rack-architect-mcp
pnpm install
# 2. Build all 6 packages & run all 52 Vitest suites
pnpm build
pnpm test
# 3. Launch the Live 3D/2D Web-Viewer & Sidecar on the 8U 10-Inch Reference Homelab
pnpm startOpen http://127.0.0.1:3100/ in your browser to inspect the 3D Digital Twin, mount devices from the Catalog Drawer, route 3D spline cables, and download .SCAD / .STL / .GLB / .SVG / BOM.md deliverables!
Option C: Self-Hosted Docker (Zero Local Node Dependencies)
# Build & run directly from GitHub in one step:
docker build -t rack-architect-mcp https://github.com/itAlex240/rack-architect-mcp.git
docker run --rm -p 3100:3100 rack-architect-mcp
# Open http://127.0.0.1:3100/Option D: CLI Validation & Headless CAD Export
# Validate any rack.yaml and print the ASCII Elevation Plan + Diagnostics
pnpm validate:demo
# Export elevation.svg, wiring-schematic.svg, BOM.md, rack-scene.glb, and all .scad + .stl 3D-print carriers
pnpm export:demoπ€ Connect Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, or Antigravity
Option 1: Zero-Install Hosted Remote MCP (Streamable HTTP & SSE β Instant 1-URL Setup)
Connect any MCP client directly over HTTPS β zero local dependencies, strict multi-session isolation, and an automatic real-time 3D browser twin for every AI session:
Live Hosted Endpoint | URL | Purpose |
Streamable HTTP MCP (Recommended) |
| Modern MCP transport ( |
Legacy HTTP+SSE MCP |
| Backwards-compatible |
Live Hosted 3D Studio & Session Twin |
| Interactive 3D/2D CAD Studio & live |
MCP Discovery & Health Probe |
| Machine-readable MCP discovery manifest & |
Standard mcp.json / Client Configuration (Streamable HTTP):
{
"mcpServers": {
"rack_architect_mcp": {
"url": "https://mcp.rackarchitect.dev/mcp"
}
}
}1-Line CLI & Inspector Commands:
# Claude Code CLI:
claude mcp add --transport http rack_architect_mcp https://mcp.rackarchitect.dev/mcp
# Test immediately in MCP Inspector:
npx @modelcontextprotocol/inspector https://mcp.rackarchitect.dev/mcpLegacy HTTP+SSE Configuration (for older SSE-only MCP clients):
{
"mcpServers": {
"rack_architect_mcp": {
"type": "sse",
"url": "https://mcp.rackarchitect.dev/sse"
}
}
}Strict Multi-Session Isolation & Zero-Disk Exports: Every connecting MCP client receives its own isolated in-memory workspace (
Mcp-Session-Id), a dedicated Live 3D Digital Twin URL (https://mcp.rackarchitect.dev/?session=<uuid>) streaming every AI tool mutation live overwss://, and direct HTTPS download URLs fromexport_deliverables(.svg,.md,.glb,.scad,.stl,.yaml).
Option 2: Local stdio + Local WebSocket Sidecar (127.0.0.1:3100)
Add rack_architect_mcp to your claude_desktop_config.json, .cursor/mcp.json, or Antigravity MCP settings:
{
"mcpServers": {
"rack_architect_mcp": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/rack-architect-mcp/packages/cli/dist/bin.js",
"--stdio",
"--port",
"3100",
"--project",
"/ABSOLUTE/PATH/TO/rack-architect-mcp/examples/10inch-homelab/rack.yaml"
]
}
}
}Whenever your AI agent starts the MCP server over stdio, it automatically launches the local WebSocket Sidecar at http://127.0.0.1:3100. Every tool call the AI executes (mount_equipment, connect_cables, modify_equipment, undo_redo) updates your 3D browser view in real time!
π§ Official Open-Source Agent Skill (skills/rack-architect/SKILL.md)
This repository includes a 100% free, MIT-licensed Agent Skill (skills/rack-architect/SKILL.md & .agents/skills/rack-architect/SKILL.md) that teaches Claude Code, Cursor, GitHub Copilot, and Google Antigravity the complete 6-Phase Autonomous Rack Engineering Runbook (sub-U modular carrier pairing, -angled plug selection, all 26 diagnostic remediation patterns, and 2-manifold .STL export):
# Install the skill into Claude Code, Cursor, Copilot, or Windsurf via skills CLI:
npx skills add itAlex240/rack-architect-mcp
# Or in Google Antigravity: automatically discovered from .agents/skills/rack-architect/SKILL.md!π¨οΈ Parametric 3D-Print Generator (.scad & .stl)
For every modular 3D-printed carrier (category: 'modular-carrier'), @rack-mcp/exporters automatically generates:
Parametric OpenSCAD (
.scad): Customizable wall thickness, EIA-310 oval rack ears (9.5 Γ 6.5 mm), sub-U device bays (+0.35 mmtolerance for Lenovo ThinkCentre M920q, Ubiquiti UCG-Max, JetKVM), Keystone snap-in clips, side support rails, and rear PSU brick cradles with Velcro slots.Ready-to-Slice Watertight ASCII
.stl: Computed directly in memory via 2D grid subdivisionβdrop straight into OrcaSlicer, Bambu Studio, or PrusaSlicer!
Pre-generated reference files in examples/10inch-homelab/:
π₯οΈ Live 3D Digital Twin & 2D CAD Web-Viewer (Hosted & Local :3100)
Interactive Catalog & Cable Patch Builder (
+ Catalog & Cable Builder):Search all 67 hardware blueprints, filter by
10inch/19inch/6inch/sub-module, selectTarget U+FRONT/REAR, and mount with 1 click.Patch 3D Catmull-Rom cables between any two ports with optional
VLAN ID(1..4094) andIP CIDR(10.10.20.0/24) annotations.
3D Engineering HUD:
Camera Presets:
Perspective,Front Ortho,Rear Ortho,Left CutawayToggles:
X-Ray Chassis(inspect internal mini-PCs & PSU bricks),Clearance Boxes($\Delta Z_{\text{plug}}$ wireframes),Cable SplinesExplode Z (0..140 mm)slider to separate front and rear assemblies
W3C WebMCP Ready: Automatically registers all 12 tools on
document.modelContextwhen opened in a WebMCP-capable browser.
π‘οΈ 5-Stage Validation Engine (All 26 Diagnostic Codes)
Stage | Diagnostic Codes | What Is Checked Deterministically? |
1. Bounds & Slots |
| Rack U height, panel width ( |
2. 3D AABB & Doors |
| Millimeter-exact 3D AABB overlap between front and rear equipment including dynamic plug clearances ( |
3. Power & PoE DAG |
| Full electrical DAG from UPS/PDU to switches, external power bricks (Lenovo 135W Slim-Tip), and PoE PSE/PD budgets ( |
4. Cables & Speed |
| Connector compatibility, |
5. Thermal & Acoustic |
| Opposing airflow ( |
π¦ Monorepo Architecture (packages/*)
Package | Description |
Pure TypeScript/Zod schemas, 3D coordinate transformer, AABB collision solver, 5-stage validator, and clamped Catmull-Rom 3D spline router (zero Node/DOM dependencies). | |
67 YAML hardware blueprints ( | |
| |
Multi-tenant Remote MCP server ( | |
React 19 + Three.js ( | |
Unified |
π€ Contributing & Adding Hardware Blueprints
Want to add your favorite 10-inch switch, mini-PC, or 3D-printed carrier? You can add a new YAML blueprint in under 2 minutesβsee CONTRIBUTING.md!
π License
Released under the MIT License.
Available Tools
12 toolsconnect_cablesConnect and Route Inter-Device CablesAIdempotent
Connect or update a batch of up to 128 power and network cables between mounted device ports in the active rack, computing 3D Catmull-Rom splines, commercial length bins, and PoE or power budgets. Each entry in 'cables[]' upserts in place by 'cable_id' while leaving all other cables and mounted equipment untouched, pushes a recoverable undo snapshot, and persists rack.yaml atomically; port, speed, PoE, or clearance violations return status 'INVALID' with remediation_suggestions instead of throwing. Within each cable, endpoint 'face' is required only on pass-through couplers such as patch panels exposing identical 'port_id' values on both faces, 'preferred_portal_u' applies only to front-to-rear transitions, and 'vlan_id' or 'ip_cidr' annotate logical network links. Use when both endpoint devices are mounted inside the rack; use disconnect_cables to remove cables, or plan_external_endpoints to terminate incoming building cable drops on a patch panel.
| Name | Required | Description | Default |
|---|---|---|---|
| cables | Yes | Batch of one or more cable connections to upsert by cable_id, route in 3D, and validate (max 128 per call). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Cable connection and 3D routing result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses upsert-by-cable_id semantics, that other cables and mounted equipment are untouched, the recoverable undo snapshot, atomic rack.yaml persistence, and that violations return status INVALID with remediation_suggestions rather than throwing. This is exactly the mutation/error-contract context an agent needs; only minor gaps remain (e.g., what happens on partial batch failure).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then behavior, then per-field caveats, then alternatives. Dense but nearly every clause carries information; the middle sentence is long enough that a reader must parse carefully, costing it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with an output schema, the description covers mutation semantics, error contract, idempotency, persistence, and sibling routing. An agent has everything needed to decide and call correctly without consulting anything else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real conditional semantics: 'face' is required only on pass-through couplers exposing identical port_id on both faces, 'preferred_portal_u' applies only to front-to-rear transitions, and vlan_id/ip_cidr are logical annotations. These sharpen the schema's per-field text rather than restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (connect/update) and resource (batch of up to 128 power and network cables between mounted device ports in the active rack), plus the derived computations (splines, length bins, PoE budgets). It is clearly distinguishable from disconnect_cables and plan_external_endpoints, which are named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the qualifying condition ('Use when both endpoint devices are mounted inside the rack') and names two alternatives with their selecting conditions (disconnect_cables for removal, plan_external_endpoints for building cable drops). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
define_custom_blueprintRegister Custom Hardware BlueprintAIdempotent
Validate and register a custom hardware blueprint into the active catalog so unlisted equipment can be mounted. Pass the entire specification inside the top-level 'blueprint' object: 'blueprint.slug' must use lowercase kebab-case, ports may combine explicit 'ports[]' with repeating 'port_groups[]' macros whose coordinates fit strictly within 'blueprint.geometry' without overlapping, and 'slots[]' applies only when 'mount_type' is 'modular-carrier' whereas 'slot_compatibility' applies to 'sub-module'. Persists YAML to the local custom-catalog folder in stdio mode or session memory on remote servers, overwrites same-slug custom entries without touching mounted rack state or undo history, and returns status 'INVALID' instead of throwing on validation errors. Use only after search_catalog confirms hardware is unlisted; use mount_equipment instead to place an already registered blueprint into the rack.
| Name | Required | Description | Default |
|---|---|---|---|
| blueprint | Yes | Complete custom hardware blueprint specification; ports may be defined via explicit ports[], repeating port_groups[] macros, or both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Custom blueprint registration payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses dual persistence (YAML file in stdio mode vs. session memory on remote servers), overwrite semantics for same-slug custom entries, that mounted rack state and undo history are untouched, and that validation failures return status 'INVALID' rather than throwing. Minor gap: it doesn't say how to read the returned validation reasons, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action and scope are front-loaded in the first clause, and every subsequent sentence carries real constraints rather than filler. It loses a point because the middle sentence packs persistence, validation, and status behavior into one long chain that is harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter but deeply nested mutation tool, the description plus a 100%-covered schema plus an output schema covers everything an agent needs: what gets written, what is overwritten, what is untouched, and how errors surface. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-field rules the schema cannot express: port_groups[] macros expanding alongside ports[], coordinates constrained inside blueprint.geometry without overlap, and slots[] vs. slot_compatibility being gated on mount_type. It doesn't restate enum values or coordinate formats, which is appropriately left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair and resource: 'Validate and register a custom hardware blueprint into the active catalog', plus the outcome 'so unlisted equipment can be mounted'. It clearly separates itself from search_catalog (discovery) and mount_equipment (placement), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition ('Use only after search_catalog confirms hardware is unlisted') and names the alternative with its condition ('use mount_equipment instead to place an already registered blueprint'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_cablesDisconnect Cables by ID or Device InstanceADestructiveIdempotent
Remove specific cables by identifier or strip all cables attached to a mounted device or modular carrier from the active rack, then re-evaluate PoE budgets and plug clearances. Supply a non-empty 'cable_ids' list, 'instance_id', or both to disconnect their union; 'instance_id' matches both 'from' and 'to' endpoints across a carrier and its child sub-modules while leaving external patch-panel drops intact, whereas omitting both or passing only an empty list returns status 'INVALID' with a PORT_NOT_FOUND issue and zero mutations. Valid calls push an undo snapshot, persist rack.yaml atomically, and return removed IDs, remaining cable count, and updated validation results, succeeding idempotently when targeted IDs are already absent. Use when rewiring ports while keeping hardware mounted; use connect_cables to add or replace cables, or modify_equipment with action 'remove' to delete a device and its cables.
| Name | Required | Description | Default |
|---|---|---|---|
| cable_ids | No | Specific cable_id values to disconnect (can be combined with instance_id; at least one of cable_ids or instance_id must be provided). | |
| instance_id | No | Mounted device or modular-carrier instance_id whose attached cables (including child sub-module cables) should all be disconnected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Cable disconnection result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, yet the description adds substantial context beyond them: an undo snapshot is pushed, rack.yaml is persisted atomically, the response includes removed IDs, remaining cable count and validation results, already-absent IDs succeed idempotently, and invalid calls produce zero mutations with a PORT_NOT_FOUND issue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scoped use case in the first clause, and every subsequent sentence carries distinct information (selection semantics, failure mode, side effects, alternatives). It is dense and slightly overloaded in the opening sentence, but no sentence is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter mutation with an output schema, the description covers preconditions, targeting semantics, persistence/undo side effects, and idempotency. An agent has everything needed to call it correctly and predict the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is already 100%, the description adds real semantic value: the non-empty requirement, that supplying both yields the union of targets, and that instance_id matches both 'from' and 'to' endpoints across a carrier and its child sub-modules while preserving external patch-panel drops. That is behavior the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove'/'disconnect') and resource ('cables') plus the two selection modes (by identifier or by device/carrier instance), and adds the side effect of re-evaluating PoE budgets and plug clearances. This clearly distinguishes it from connect_cables and modify_equipment without the agent needing to open sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('rewiring ports while keeping hardware mounted') and names the alternatives with their conditions: connect_cables for adding/replacing cables, modify_equipment with action 'remove' for deleting a device and its cables. It also states the failure precondition (neither parameter or an empty list returns INVALID).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_deliverablesExport 2D SVG, BOM, 3D GLB, and 3D-Print DeliverablesAIdempotent
Generate 2D elevation and wiring SVGs, a Markdown BOM, a binary 3D GLB scene, and parametric OpenSCAD or watertight STL 3D-print models for the active rack project. Omitting 'formats' exports all six types; 'carrier-scad' and 'carrier-stl' emit one file per mounted modular carrier, switch cradle, or printable cover panel and emit zero files when none are mounted, while 'output_dir' resolves relative paths and creates missing folders. Local stdio execution writes deterministic filenamesβelevation.svg, wiring-schematic.svg, BOM.md, rack-scene.glb, and .scad or .stlβoverwriting same-named files in place, whereas hosted remote sessions stream in-memory HTTPS download URLs; neither mode mutates rack state or undo history. Use after validate_rack confirms a valid layout; use validate_rack instead for read-only validation and ASCII elevation inspection without generating export files.
| Name | Required | Description | Default |
|---|---|---|---|
| formats | No | Deliverable formats to generate and write to disk (defaults to all 6 formats; carrier-scad and carrier-stl emit files when modular carriers are mounted). | |
| output_dir | No | Optional target filesystem directory for generated files in local stdio mode (defaults to the directory of the active rack.yaml file; ignored on hosted remote MCP servers where HTTPS download URLs are returned instead). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Deliverable export result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: it discloses deterministic filenames, in-place overwriting of same-named files (corroborating idempotentHint), zero-file emission for carrier formats when nothing is mounted, output_dir path resolution and folder creation, and the local-stdio vs hosted-remote streaming distinction. It also confirms no rack state or undo history is mutated, matching readOnlyHint=false and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the deliverable list, then scoping, then mode behavior, then routing to the sibling β a sensible order with no filler. It is a single dense block, however, and partially restates the schema default ('all six types'), which costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described; the description instead covers everything else an agent needs β preconditions, format semantics, filesystem vs HTTPS delivery, overwrite behavior, and side-effect profile. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds semantics the schema does not: the consequence of omitting 'formats' (all six), the per-carrier emission behavior of carrier-scad/carrier-stl including the zero-file case, and that output_dir resolves relative paths, creates missing directories, and is ignored on hosted servers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Generate') and enumerates the exact artifacts produced (elevation/wiring SVGs, Markdown BOM, GLB scene, OpenSCAD/STL models) for the active rack project. An agent can distinguish it from validate_rack without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the precondition ('Use after validate_rack confirms a valid layout') and names the alternative with a when-not rule ('use validate_rack instead for read-only validation and ASCII elevation inspection without generating export files'). Both the trigger and the excluded case are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_blueprintRetrieve Hardware Device Blueprint DetailsARead-onlyIdempotent
Retrieve the complete hardware specification, millimeter port coordinates, electrical and PoE ratings, and carrier slot geometry for a single catalog blueprint. The 'slug' parameter requires a case-sensitive exact match in lowercase kebab-case vendor-model-variant format against the built-in or session custom catalog; partial substrings or uppercase characters do not match. Returns the full blueprint in one unpaginated payload with repeating port_groups pre-expanded into up to 256 flat ports[] entries, or returns status 'INVALID' with a BLUEPRINT_NOT_FOUND issue and candidate slugs instead of throwing. Use when you already know the target slug and need exact port_id or slot_id values for mount_equipment or connect_cables; use search_catalog instead to discover unknown slugs by criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Exact lowercase kebab-case hardware catalog blueprint slug to retrieve (discoverable via search_catalog). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Blueprint lookup result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description still adds substantial non-obvious behavior: a single unpaginated payload, port_groups pre-expanded into up to 256 flat ports[] entries, and error behavior that returns status 'INVALID' with a BLUEPRINT_NOT_FOUND issue plus candidate slugs rather than throwing. This is exactly the contract an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the resource and contents, followed by the matching rule, return shape, and routing to the sibling β no filler. The second sentence is densely packed with multiple clauses, which slightly hurts scannability, but every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description covers the payload shape (unpaginated, pre-expanded ports), the failure mode and its fields, and the slug matching contract β leaving no meaningful gap for a single-parameter read tool with annotations already covering safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already says 'Exact lowercase kebab-case', so the description is largely reinforcing structured data. It does add genuine semantics beyond the schema: the vendor-model-variant composition, case-sensitive exact matching, that partial substrings or uppercase characters will not match, and that the slug resolves against both built-in and session custom catalogs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve the complete hardware specification... for a single catalog blueprint') and enumerates the exact content returned (port coordinates, PoE ratings, carrier slot geometry). It explicitly distinguishes itself from the sibling search_catalog, so an agent can tell the two apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('you already know the target slug and need exact port_id or slot_id values for mount_equipment or connect_cables') and names the alternative for the opposite case ('use search_catalog instead to discover unknown slugs by criteria'). Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_rackInitialize and Reset Rack EnclosureADestructiveIdempotent
Initialize a new rack project and destructively reset the active rack.yaml state to an empty enclosure with the specified width standard, U height, and rail depth. Overwrites the current enclosure and clears all mounted devices, child sub-modules, cables, and external endpoints, while pushing the previous project state onto the in-memory undo stack for recovery via undo_redo. 'project_name' sets the title used in exported schematics and BOMs, 'rail_depth_mm' plus 'rear_clearance_mm' bounds total +Z chassis and rear plug depth before wall collision, and 'front_door_clearance_mm' is enforced only when 'enclosure_type' has a closed front door. Use when starting a rack design from scratch or changing enclosure dimensions; use validate_rack to inspect the current rack, or modify_equipment to move or remove individual devices.
| Name | Required | Description | Default |
|---|---|---|---|
| standard | Yes | Mechanical rack width standard ("19inch" = 482.6mm, "10inch" = 254.0mm, "6inch" = 152.4mm). | |
| u_height | Yes | Total usable vertical rack height in Rack Units (1U = 44.45mm, 1..60U). | |
| project_name | No | Human-readable project name stored in rack.yaml. | Rack Project |
| rail_depth_mm | Yes | Front-to-rear mounting rail depth in millimeters along the Z-axis (max 2000mm). | |
| enclosure_type | No | Enclosure door style ("open-frame", "closed-glass-front", or "closed-vented-front"). | open-frame |
| rear_clearance_mm | No | Available clearance in millimeters behind the rear mounting rails (Z=rail_depth_mm) for power plugs and bending radii. | |
| front_door_clearance_mm | No | Available clearance in millimeters between front mounting rails (Z=0) and a closed front door. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Rack initialization payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint annotation by detailing exactly what is destroyed: mounted devices, child sub-modules, cables, and external endpoints. It also discloses the recovery path via the in-memory undo stack and undo_redo, which is valuable behavioral context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core destructive behavior before parameter semantics and usage guidance. It is dense but each clause carries useful information; the main cost is a single very long sentence rather than wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive initialization/reset tool with full schema coverage, annotations, and an output schema, the description covers the consequences, recovery path, parameter relationships, and appropriate usage. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already strong. The description adds useful relational semantics: project_name feeds exported schematics/BOMs, rail_depth_mm plus rear_clearance_mm bound total +Z depth before wall collision, and front_door_clearance_mm applies only with a closed front door.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: initialize a new rack project and destructively reset the active rack.yaml enclosure. It clearly distinguishes the operation from siblings by naming validate_rack for inspection and modify_equipment for individual device changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: starting a rack design from scratch or changing enclosure dimensions. It also names alternatives for different needs, including validate_rack and modify_equipment, leaving little ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_equipmentMove, Rename, or Remove Mounted EquipmentADestructive
Move, rename, or destructively remove an existing mounted device or child sub-module in the active rack, recalculate 3D cable splines, and re-run 5-stage validation. 'instance_id' resolves across top-level devices and carrier sub-modules, and required fields depend on 'action': 'move' updates 'u_position' and 'face' on rackmount gear or 'slot_id' and optional 'parent_carrier_id' across carriers for sub-modules with primary fields taking precedence over 'new_*' aliases, 'rename' updates or clears 'hostname', and 'remove' cascades to child sub-modules plus attached cables and external endpoints when 'remove_connected_cables' is true. Pushes the prior state onto the undo stack and updates rack.yaml atomically, or returns status 'INVALID' without mutating state when 'instance_id' or a target carrier is unknown. Use to update or delete a mounted instance; use mount_equipment to add new hardware, or disconnect_cables to remove cables while keeping devices mounted.
| Name | Required | Description | Default |
|---|---|---|---|
| face | No | New mounting face ("front" or "rear") when action is "move" on a rackmount device (takes precedence over new_face). | |
| action | Yes | Modification operation: "move" relocates a device, "rename" updates its hostname, and "remove" deletes the device instance. | |
| slot_id | No | Target slot_id inside parent_carrier_id when action is "move" on a child sub-module. | |
| hostname | No | New logical hostname when action is "rename" (takes precedence over new_hostname). | |
| new_face | No | Optional alias for face when action is "move". | |
| u_position | No | New 1-indexed U position when action is "move" on a direct rackmount device (takes precedence over new_u_position). | |
| instance_id | Yes | Existing mounted device or child sub-module instance_id to modify. | |
| new_hostname | No | Optional alias for hostname when action is "rename". | |
| new_u_position | No | Optional alias for u_position when action is "move". | |
| parent_carrier_id | No | Target parent carrier instance_id when action is "move" on a child sub-module. | |
| remove_connected_cables | No | When action is "remove", whether to automatically disconnect all cables and external endpoints attached to the removed device (default: true). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Equipment modification result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), but the description adds substantial context beyond them: cascade behavior to child sub-modules, cables, and external endpoints, the undo stack push, atomic rack.yaml write, and the 'INVALID' no-mutation failure path. Missing only details like error payload shape or conflict handling on occupied U positions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then conditions, then the failure mode, then sibling routing. The middle sentence is dense and comma-heavy, making the action-to-field mapping harder to scan than a short list would be, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with 11 parameters, the description covers side effects, conditional field requirements, cascading deletion, atomicity, failure semantics, and sibling routing. With an output schema present, it needn't document return values, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further by mapping required fields to each 'action' value and explaining precedence (primary fields over 'new_*' aliases) and the dual resolution of 'instance_id' across devices and sub-modules. It synthesizes the schema into actionable conditional logic rather than restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb set and resource: 'Move, rename, or destructively remove an existing mounted device or child sub-module in the active rack', plus the side effects (cable spline recalc, 5-stage validation). This clearly separates it from mount_equipment and disconnect_cables without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use to update or delete a mounted instance', and names both alternatives with the condition that selects them: mount_equipment for new hardware, disconnect_cables to remove cables while keeping devices mounted. When/when-not/alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mount_equipmentMount Equipment into Rack Unit or Carrier SlotA
Mount a new hardware device instance onto a rack unit or into a modular carrier bay in the active rack.yaml project and run 5-stage validation. 'instance_id' must be unique across both top-level devices and nested sub-modules, 'blueprint_slug' must reference an existing catalog or custom slug, and placement uses two mutually exclusive modes: 'u_position' with optional 'face' where the device's full U span fits within 1..u_height, or 'parent_carrier_id' plus a compatible 'slot_id' for sub-modules. Precondition errors such as duplicate 'instance_id', unknown 'blueprint_slug', or missing carriers return status 'INVALID' without mutating state, whereas 3D collision or PoE issues persist the mount, push an undo snapshot, and return remediation_suggestions. Use to add a new device instance; use modify_equipment to move, rename, or remove an existing instance, or plan_external_endpoints for off-rack room cable drops.
| Name | Required | Description | Default |
|---|---|---|---|
| face | No | Target rack mounting face ("front" or "rear") for direct rackmount equipment. | front |
| slot_id | No | Target bay slot_id inside parent_carrier_id when mounting a sub-module (e.g., "left-bay", "keystone-1"). | |
| hostname | No | Optional logical hostname or display label shown in elevations and schematics. | |
| u_position | No | 1-indexed lowest Rack Unit (U) when mounting directly onto the rack rails (mutually exclusive with parent_carrier_id/slot_id). | |
| instance_id | Yes | Unique project-wide instance identifier for this mounted device (e.g., "ups-u1", "sw-core-01"). | |
| blueprint_slug | Yes | Catalog or custom hardware blueprint slug to instantiate. | |
| parent_carrier_id | No | Mounted parent modular-carrier instance_id when mounting a sub-module (requires slot_id; mutually exclusive with u_position). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Equipment mounting result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (non-read-only, non-idempotent, non-destructive); the description goes well beyond with a 5-stage validation pipeline, the crucial distinction that precondition errors return INVALID without mutating state while collision/PoE issues persist the mount and push an undo snapshot, and that remediation_suggestions are returned. That is exactly the kind of failure-mode and state-mutation detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense block, but it is front-loaded with the core action and the alternative-routing guidance sits at the end where it belongs. The quoted parameter names make it scannable, though the mid-section packs a lot of constraint detail into one sentence and could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-shape explanation is unnecessary, and the annotations cover the safety profile. The description still supplies validation stages, mutation-vs-no-mutation failure semantics, and uniqueness/resolution preconditions β everything an agent needs to call this mutation correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is a 3, and the description earns above that by adding a cross-cutting rule the schema lacks: instance_id must be unique across both top-level devices and nested sub-modules, and blueprint_slug must resolve to an existing catalog or custom slug. It also restates the two mutually exclusive placement modes and the '1..u_height' span constraint, which is mostly redundant with the schema and prevents a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (mount/instantiate) and resource (hardware device instance) plus both placement targets (rack unit or modular carrier bay) in the active rack.yaml project. It explicitly distinguishes itself from modify_equipment and plan_external_endpoints, so an agent can route between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives an explicit use case ('add a new device instance') and names the alternatives with the conditions that select them: modify_equipment for move/rename/remove, plan_external_endpoints for off-rack cable drops. Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_external_endpointsTerminate External Building Cable Drops on Patch PanelADestructive
Terminate external building or room cable drops onto the rear RJ45 ports of a mounted patch panel without consuming rack U slots, and optionally auto-create labeled Cat6A front patch cables to a mounted switch. 'groups[]' batch-generates drops firstβwith 'custom_labels[]' overriding numbered 'label_prefix' entries per indexβfollowed by 'endpoints[]', allocating sequential free rear ports from 'start_port_number' and sequential free switch RJ45 ports from 'auto_connect_switch_start_port'. Setting 'clear_existing' destructively removes prior external drops on 'patch_panel_instance_id' and their front patch cables before allocation, while unmounted patch-panel or switch IDs return status 'INVALID' without mutating state. Use for off-rack building wiring entering the enclosure; never mount room endpoints via mount_equipment, and use connect_cables for purely internal rack-to-rack links.
| Name | Required | Description | Default |
|---|---|---|---|
| groups | No | Batch groups of external drops (e.g., 10x PoE cameras, 5x Wi-Fi APs, 5x room LAN outlets). | |
| endpoints | No | Individual external building/room drops to terminate on the rear of the patch panel. | |
| clear_existing | No | If true, destructively clears existing external_endpoints (and their front patch cables) on patch_panel_instance_id before planning. | |
| entry_position | No | Rear building cable conduit entry point into the rack frame. | top-rear |
| start_port_number | No | 1-indexed starting port number on the patch panel (defaults to next free rear port or 1). | |
| patch_panel_instance_id | Yes | Mounted patch panel instance_id whose rear ports receive the incoming building cable drops. | |
| auto_connect_switch_start_port | No | 1-indexed starting Ethernet port number on auto_connect_switch_instance_id (e.g., 1 for eth1). | |
| auto_connect_switch_instance_id | No | Optional switch instance_id to automatically patch from the front of the patch panel using labeled Cat6A cables. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | External endpoint planning and auto-patching payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by stating that clear_existing 'destructively removes' prior external drops and their front patch cables, and that unmounted patch-panel or switch IDs return status 'INVALID' without mutating state β a failure mode not expressed anywhere in the schema or annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and terminating constraint before the mechanics, and every sentence carries information. It is a single dense paragraph with heavy inline quoting, which is efficient but harder to scan than a short bulleted breakdown would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 8-parameter tool, the description covers allocation behavior, destructive-clear semantics, failure status, and sibling alternatives; return values are covered by the existing output schema, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already carries a detailed description, so the baseline is 3. The prose adds real interaction semantics (custom_labels overriding numbered label_prefix per index, sequential free-port allocation from start_port_number and auto_connect_switch_start_port), which is a modest lift over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Terminate external building or room cable drops onto the rear RJ45 ports of a mounted patch panel') and adds a distinguishing scope detail ('without consuming rack U slots'). It explicitly separates itself from mount_equipment and connect_cables, so an agent can select it without opening a sibling schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('off-rack building wiring entering the enclosure') plus two when-not-to-use rules with named alternatives: never mount room endpoints via mount_equipment, and use connect_cables for internal rack-to-rack links. Nothing about routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogSearch Hardware Blueprint CatalogARead-onlyIdempotent
Search and filter the local hardware catalog to discover compatible rackmount devices, modular carriers, and sub-modules before mounting. All supplied filters combine with logical AND: 'form_factor' and its alias 'mount_type' accept width shorthands '10inch', '19inch', and '6inch' that match both direct rackmount gear and modular carriers, 'accepted_slot_type' matches both carrier bays and compatible sub-modules, and 'max_depth_mm' bounds chassis depth excluding plug clearance. Returns all matches from the bounded catalog in one unpaginated response sorted in deterministic registration order, with built-in blueprints followed by custom blueprints. Call with no arguments to list the full catalog; use get_device_blueprint to inspect expanded port coordinates for a known slug, or define_custom_blueprint to register unlisted hardware.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional case-insensitive substring filter matching slug, manufacturer, or model name (omit to match all). | |
| category | No | Functional hardware category filter (e.g., "switch", "router", "ups", "pdu", "patch-panel", "modular-carrier", "mini-pc", "sbc"). | |
| mount_type | No | Optional alias for form_factor to filter by physical mounting style ("rackmount-10", "rackmount-19", "rackmount-6", "sub-module", or "shelf-standing"); combined with logical AND if both are provided. | |
| form_factor | No | Primary rack width or mounting form-factor filter (shorthands "10inch", "19inch", and "6inch" match both direct rackmount equipment and modular carriers of that width). | |
| max_depth_mm | No | Maximum allowed chassis depth in millimeters (inclusive upper bound). | |
| accepted_slot_type | No | Sub-module slot compatibility token matching either a sub-module slot_compatibility or a carrier slot accepted_slot_type (e.g., "mini-pc-1liter", "sbc-rpi5", "standard-keystone"). | |
| min_poe_budget_watts | No | Minimum required PSE PoE output power budget in watts (inclusive lower bound). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Catalog search result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: all filters combine with AND, results come from a bounded catalog in one unpaginated response, and ordering is deterministic with built-in blueprints before custom ones. Since annotations already declare read-only, idempotent, non-destructive, closed-world behavior, this is rich supplementary context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then filter semantics, return behavior, and alternatives. It is dense but appropriately sized for a seven-parameter search tool, and every sentence contributes operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven optional parameters, full schema coverage, annotations, and an output schema, the description still covers the key ambiguities: filter combination, alias behavior, slot matching, depth semantics, unpaginated deterministic returns, and alternative tools. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds value by explaining that all filters combine with AND, that mount_type is an alias for form_factor, and that max_depth excludes plug clearance; however, several alias and matching details are already present in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search and filter the local hardware catalog to discover rackmount devices, modular carriers, and sub-modules before mounting. It also distinguishes the tool from get_device_blueprint and define_custom_blueprint, so an agent can identify its role immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call with no arguments to list the full catalog, and it names alternatives: get_device_blueprint for inspecting a known slug and define_custom_blueprint for registering unlisted hardware. This gives clear when-to-use guidance and routes the agent away from the wrong sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_redoUndo or Redo Rack State MutationA
Traverse the per-project in-memory history ring buffer of up to 50 snapshots to revert the latest rack mutation or reapply a reverted mutation, updating rack.yaml atomically. Setting 'action' to 'undo' steps backward across rack-state mutationsβexcluding catalog-only define_custom_blueprint calls and read-only toolsβand pushes the displaced state onto the redo stack, whereas 'redo' is available only immediately after 'undo' because any new rack mutation flushes the redo stack. Calling either action when its target stack is empty is a safe no-op returning applied=false without throwing. Use to roll back an unintended batch change or accidental init_rack reset; use modify_equipment or disconnect_cables instead to edit specific items without reverting intermediate steps.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | History traversal direction: "undo" reverts the most recent state mutation, "redo" reapplies a reverted mutation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Undo/redo history traversal result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses key behavioral traits: a ring buffer of up to 50 snapshots, atomic rack.yaml updates, redo-stack flushing on new mutations, and safe no-op behavior with applied=false when a stack is empty. These details materially help an agent understand the operationβs consequences and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but tightly organized, with the core purpose front-loaded, followed by action semantics, edge cases, and alternatives. Every sentence contributes operational guidance for a complex history-traversal tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the toolβs complexity, single enum parameter, annotations, and existing output schema, the description is complete enough for correct invocation. It covers scope, exclusions, redo-stack constraints, no-op behavior, and when to prefer sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single action parameter with an enum and description, so baseline semantics are covered. The tool description adds useful operational meaning by explaining that undo traverses backward across rack-state mutations while redo reapplies a reverted mutation only when available.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: traversing a per-project in-memory history ring buffer to revert or reapply rack mutations. It clearly distinguishes this tool from siblings by describing undo/redo history traversal and naming alternatives like modify_equipment and disconnect_cables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions: use undo to roll back unintended batch changes or accidental init_rack resets, use redo only immediately after undo, and use modify_equipment or disconnect_cables instead for editing specific items without reverting intermediate steps. It also excludes catalog-only define_custom_blueprint calls and read-only tools from history traversal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_rackInspect and Validate Active Rack StateARead-onlyIdempotent
Inspect the active rack.yaml state and run all 5 deterministic validation stages covering mechanical bounds, 3D depth and plug clearances, PoE and power budgets, cable compatibility, and thermal limits. Takes no parameters, performs zero state or undo-stack mutations, and returns the ASCII front and rear elevation diagram, power utilization summary, and all diagnostic issues with remediation_suggestions. Sets status to 'INVALID' instead of throwing whenever any validation ERROR is present. Use to inspect currently mounted equipment or verify zero errors before exporting; use export_deliverables instead to generate SVG, BOM, GLB, or 3D-print files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Rack state inspection and validation result payload. |
| issues | Yes | Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions. |
| status | Yes | Deterministic execution outcome: "VALID" when the operation succeeded with 0 validation errors; "INVALID" when precondition or engineering validation errors are present in issues[]. |
| summary | Yes | Concise human- and agent-readable summary of the tool result and validation status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that it takes no parameters, performs zero state or undo-stack mutations, returns elevation diagrams plus power summary and diagnostic issues with remediation_suggestions, and critically that it sets status to 'INVALID' rather than throwing on validation errors. The non-throwing error semantics are exactly the kind of behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the purpose before the constraints and return details. Every sentence adds useful information, though the run-on enumeration of validation stages and return values could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only validation tool with an output schema, the description supplies the remaining context an agent needs: what happens on validation failure, that no state is mutated, and how it relates to the export workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description reinforces this with 'Takes no parameters,' which is consistent with the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('inspect the active rack.yaml state and run all 5 deterministic validation stages') and enumerates the exact validation domains covered. An agent can distinguish it from export_deliverables or mount_equipment without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names both positive triggers ('inspect currently mounted equipment or verify zero errors before exporting') and the alternative tool for the adjacent use case ('use export_deliverables instead to generate SVG, BOM, GLB, or 3D-print files'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.5.0- Changed
connect_cables10 fields changed- changed
Input schema / properties / cables / descriptionPrevious value: -"Batch of one or more cable connections to upsert by cable_id, route in 3D, and validate."New value: +"Batch of one or more cable connections to upsert by cable_id, route in 3D, and validate (max 128 per call)." - added
Input schema / properties / cables / items / properties / cable_id / maxLengthAdded value: +128 - added
Input schema / properties / cables / items / properties / from / properties / instance_id / maxLengthAdded value: +100 - added
Input schema / properties / cables / items / properties / from / properties / port_id / maxLengthAdded value: +128 - added
Input schema / properties / cables / items / properties / ip_cidr / maxLengthAdded value: +64 - added
Input schema / properties / cables / items / properties / label / maxLengthAdded value: +240 - changed
Input schema / properties / cables / items / properties / preferred_portal_u / maximumPrevious value: -9007199254740991New value: +60 - added
Input schema / properties / cables / items / properties / to / properties / instance_id / maxLengthAdded value: +100 - added
Input schema / properties / cables / items / properties / to / properties / port_id / maxLengthAdded value: +128 - added
Input schema / properties / cables / maxItemsAdded value: +128
- Changed
define_custom_blueprint82 fields changed- added
Input schema / properties / blueprint / properties / description / maxLengthAdded value: +2000 - changed
Input schema / properties / blueprint / properties / geometry / properties / depth_mm / descriptionPrevious value: -"Physical chassis depth in millimeters along the Z-axis."New value: +"Physical chassis depth in millimeters along the Z-axis (max 2000mm)." - added
Input schema / properties / blueprint / properties / geometry / properties / depth_mm / maximumAdded value: +2000 - added
Input schema / properties / blueprint / properties / geometry / properties / front_protrusion_mm / maximumAdded value: +500 - changed
Input schema / properties / blueprint / properties / geometry / properties / height_mm / descriptionPrevious value: -"Physical chassis height in millimeters."New value: +"Physical chassis height in millimeters (max 3000mm)." - added
Input schema / properties / blueprint / properties / geometry / properties / height_mm / maximumAdded value: +3000 - added
Input schema / properties / blueprint / properties / geometry / properties / rear_protrusion_mm / maximumAdded value: +500 - changed
Input schema / properties / blueprint / properties / geometry / properties / u_height / descriptionPrevious value: -"Nominal height in Rack Units (1U = 44.45mm)."New value: +"Nominal height in Rack Units (1U = 44.45mm, max 60U)." - added
Input schema / properties / blueprint / properties / geometry / properties / u_height / maximumAdded value: +60 - added
Input schema / properties / blueprint / properties / geometry / properties / weight_grams / maximumAdded value: +500000 - changed
Input schema / properties / blueprint / properties / geometry / properties / width_mm / descriptionPrevious value: -"Physical chassis body width in millimeters."New value: +"Physical chassis body width in millimeters (max 1000mm)." - added
Input schema / properties / blueprint / properties / geometry / properties / width_mm / maximumAdded value: +1000 - added
Input schema / properties / blueprint / properties / manufacturer / maxLengthAdded value: +160 - added
Input schema / properties / blueprint / properties / model / maxLengthAdded value: +160 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / capabilities / maxItemsAdded value: +32 - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / count / descriptionPrevious value: -"Total number of ports to generate in this group."New value: +"Total number of ports to generate in this group (1..128)." - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / count / maximumPrevious value: -9007199254740991New value: +128 - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / descriptionPrevious value: -"Number of horizontal port columns in the matrix."New value: +"Number of horizontal port columns in the matrix (1..64)." - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / maximumPrevious value: -9007199254740991New value: +64 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / maximumAdded value: +2000 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / minimumAdded value: +-2000 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / maximumAdded value: +3000 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / minimumAdded value: +-3000 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / maximumAdded value: +500 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / minimumAdded value: +-500 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / maximumAdded value: +500 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / minimumAdded value: +-500 - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / descriptionPrevious value: -"Number of vertical port rows in the matrix."New value: +"Number of vertical port rows in the matrix (1..16)." - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / maximumPrevious value: -9007199254740991New value: +16 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / id_prefix / maxLengthAdded value: +64 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / label_prefix / maxLengthAdded value: +96 - changed
Input schema / properties / blueprint / properties / port_groups / items / properties / start_index / maximumPrevious value: -9007199254740991New value: +10000 - added
Input schema / properties / blueprint / properties / port_groups / maxItemsAdded value: +16 - added
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / maxItemsAdded value: +32 - added
Input schema / properties / blueprint / properties / ports / items / properties / label / maxLengthAdded value: +160 - added
Input schema / properties / blueprint / properties / ports / items / properties / port_id / maxLengthAdded value: +128 - added
Input schema / properties / blueprint / properties / ports / maxItemsAdded value: +256 - changed
Input schema / properties / blueprint / properties / printable_metadata / anyOfPrevious value: -[ - { - "properties": { - "fasteners": { - "description": "Optional specification of required mounting screws and cage nuts.", - "type": "string" - }, - "filament_grams": { - "description": "Estimated filament mass in grams.", - "minimum": 0, - "type": "number" - }, - "heat_set_inserts": { - "description": "Optional specification of required brass heat-set inserts.", - "type": "string" - }, - "material_recommendation": { - "default": "PETG", - "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", - "type": "string" - }, - "printables_url": { - "description": "Optional reference URL to an upstream 3D model repository.", - "format": "uri", - "type": "string" - } - }, - "required": [ - "filament_grams" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "maxLength": 256, + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "maximum": 50000, + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "maxLength": 256, + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "maxLength": 128, + "type": "string" + }, + "printables_url": { + "description": "Optional HTTPS reference URL to an upstream 3D model repository.", + "maxLength": 512, + "pattern": "^https?:\\/\\/", + "type": "string" + } + }, + "required": [ + "filament_grams" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / blueprint / properties / slot_compatibility / maxLengthAdded value: +100 - added
Input schema / properties / blueprint / properties / slots / maxItemsAdded value: +32 - added
Input schema / properties / blueprint / properties / slug / maxLengthAdded value: +100 - added
Output schema / properties / data / properties / blueprint / properties / description / maxLengthAdded value: +2000 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / depth_mm / descriptionPrevious value: -"Physical chassis depth in millimeters along the Z-axis."New value: +"Physical chassis depth in millimeters along the Z-axis (max 2000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / depth_mm / maximumAdded value: +2000 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / front_protrusion_mm / maximumAdded value: +500 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / height_mm / descriptionPrevious value: -"Physical chassis height in millimeters."New value: +"Physical chassis height in millimeters (max 3000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / height_mm / maximumAdded value: +3000 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / rear_protrusion_mm / maximumAdded value: +500 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / u_height / descriptionPrevious value: -"Nominal height in Rack Units (1U = 44.45mm)."New value: +"Nominal height in Rack Units (1U = 44.45mm, max 60U)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / u_height / maximumAdded value: +60 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / weight_grams / maximumAdded value: +500000 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / width_mm / descriptionPrevious value: -"Physical chassis body width in millimeters."New value: +"Physical chassis body width in millimeters (max 1000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / width_mm / maximumAdded value: +1000 - added
Output schema / properties / data / properties / blueprint / properties / manufacturer / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / model / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / capabilities / maxItemsAdded value: +32 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / count / descriptionPrevious value: -"Total number of ports to generate in this group."New value: +"Total number of ports to generate in this group (1..128)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / count / maximumPrevious value: -9007199254740991New value: +128 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / descriptionPrevious value: -"Number of horizontal port columns in the matrix."New value: +"Number of horizontal port columns in the matrix (1..64)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / maximumPrevious value: -9007199254740991New value: +64 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / maximumAdded value: +2000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / minimumAdded value: +-2000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / maximumAdded value: +3000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / minimumAdded value: +-3000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / maximumAdded value: +500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / minimumAdded value: +-500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / maximumAdded value: +500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / minimumAdded value: +-500 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / descriptionPrevious value: -"Number of vertical port rows in the matrix."New value: +"Number of vertical port rows in the matrix (1..16)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / maximumPrevious value: -9007199254740991New value: +16 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / id_prefix / maxLengthAdded value: +64 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / label_prefix / maxLengthAdded value: +96 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / start_index / maximumPrevious value: -9007199254740991New value: +10000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / maxItemsAdded value: +16 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / capabilities / maxItemsAdded value: +32 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / label / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / port_id / maxLengthAdded value: +128 - added
Output schema / properties / data / properties / blueprint / properties / ports / maxItemsAdded value: +256 - changed
Output schema / properties / data / properties / blueprint / properties / printable_metadata / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "fasteners": { - "description": "Optional specification of required mounting screws and cage nuts.", - "type": "string" - }, - "filament_grams": { - "description": "Estimated filament mass in grams.", - "minimum": 0, - "type": "number" - }, - "heat_set_inserts": { - "description": "Optional specification of required brass heat-set inserts.", - "type": "string" - }, - "material_recommendation": { - "default": "PETG", - "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", - "type": "string" - }, - "printables_url": { - "description": "Optional reference URL to an upstream 3D model repository.", - "format": "uri", - "type": "string" - } - }, - "required": [ - "filament_grams", - "material_recommendation" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "maxLength": 256, + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "maximum": 50000, + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "maxLength": 256, + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "maxLength": 128, + "type": "string" + }, + "printables_url": { + "description": "Optional HTTPS reference URL to an upstream 3D model repository.", + "maxLength": 512, + "pattern": "^https?:\\/\\/", + "type": "string" + } + }, + "required": [ + "filament_grams", + "material_recommendation" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / data / properties / blueprint / properties / slot_compatibility / maxLengthAdded value: +100 - added
Output schema / properties / data / properties / blueprint / properties / slots / maxItemsAdded value: +32 - added
Output schema / properties / data / properties / blueprint / properties / slug / maxLengthAdded value: +100
- Changed
export_deliverables9 fields changed- changed
Input schema / properties / output_dir / descriptionPrevious value: -"Optional target filesystem directory for generated files (defaults to the directory of the active rack.yaml file)."New value: +"Optional target filesystem directory for generated files in local stdio mode (defaults to the directory of the active rack.yaml file; ignored on hosted remote MCP servers where HTTPS download URLs are returned instead)." - changed
Output schema / properties / data / properties / exported_files / descriptionPrevious value: -"Metadata for each deliverable file written to disk."New value: +"Metadata for each generated deliverable file or download URL." - added
Output schema / properties / data / properties / exported_files / items / properties / download_urlAdded value: +{ + "description": "Direct HTTPS download URL for this deliverable when connected to a hosted remote MCP server.", + "type": "string" +} - added
Output schema / properties / data / properties / exported_files / items / properties / filenameAdded value: +{ + "description": "Suggested local filename for saving the deliverable.", + "type": "string" +} - changed
Output schema / properties / data / properties / exported_files / items / properties / path / descriptionPrevious value: -"Absolute filesystem path of the written file."New value: +"Absolute filesystem path of the written file (or direct HTTPS download URL in hosted remote MCP mode)." - changed
Output schema / properties / data / properties / exported_files / items / properties / size_bytes / descriptionPrevious value: -"Size of the written file in bytes."New value: +"Size of the generated deliverable in bytes." - added
Output schema / properties / data / properties / live_viewer_urlAdded value: +{ + "description": "Interactive 3D/2D Web-Viewer URL bound live to this remote MCP session (present in hosted remote MCP mode).", + "type": "string" +} - changed
Output schema / properties / data / properties / output_dir / descriptionPrevious value: -"Resolved absolute directory path where deliverable files were written."New value: +"Resolved absolute directory path where deliverable files were written (or HTTPS base export endpoint when running on a hosted remote MCP server)." - added
Output schema / properties / data / properties / rack_yaml_urlAdded value: +{ + "description": "Direct HTTPS download URL for the session rack.yaml source of truth (present in hosted remote MCP mode).", + "type": "string" +}
- Changed
get_device_blueprint41 fields changed- added
Output schema / properties / data / properties / blueprint / properties / description / maxLengthAdded value: +2000 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / depth_mm / descriptionPrevious value: -"Physical chassis depth in millimeters along the Z-axis."New value: +"Physical chassis depth in millimeters along the Z-axis (max 2000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / depth_mm / maximumAdded value: +2000 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / front_protrusion_mm / maximumAdded value: +500 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / height_mm / descriptionPrevious value: -"Physical chassis height in millimeters."New value: +"Physical chassis height in millimeters (max 3000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / height_mm / maximumAdded value: +3000 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / rear_protrusion_mm / maximumAdded value: +500 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / u_height / descriptionPrevious value: -"Nominal height in Rack Units (1U = 44.45mm)."New value: +"Nominal height in Rack Units (1U = 44.45mm, max 60U)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / u_height / maximumAdded value: +60 - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / weight_grams / maximumAdded value: +500000 - changed
Output schema / properties / data / properties / blueprint / properties / geometry / properties / width_mm / descriptionPrevious value: -"Physical chassis body width in millimeters."New value: +"Physical chassis body width in millimeters (max 1000mm)." - added
Output schema / properties / data / properties / blueprint / properties / geometry / properties / width_mm / maximumAdded value: +1000 - added
Output schema / properties / data / properties / blueprint / properties / manufacturer / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / model / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / capabilities / maxItemsAdded value: +32 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / count / descriptionPrevious value: -"Total number of ports to generate in this group."New value: +"Total number of ports to generate in this group (1..128)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / count / maximumPrevious value: -9007199254740991New value: +128 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / descriptionPrevious value: -"Number of horizontal port columns in the matrix."New value: +"Number of horizontal port columns in the matrix (1..64)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / maximumPrevious value: -9007199254740991New value: +64 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / maximumAdded value: +2000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_x_mm / minimumAdded value: +-2000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / maximumAdded value: +3000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / origin_y_mm / minimumAdded value: +-3000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / maximumAdded value: +500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_x_mm / minimumAdded value: +-500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / maximumAdded value: +500 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / pitch_y_mm / minimumAdded value: +-500 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / descriptionPrevious value: -"Number of vertical port rows in the matrix."New value: +"Number of vertical port rows in the matrix (1..16)." - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / maximumPrevious value: -9007199254740991New value: +16 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / id_prefix / maxLengthAdded value: +64 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / label_prefix / maxLengthAdded value: +96 - changed
Output schema / properties / data / properties / blueprint / properties / port_groups / items / properties / start_index / maximumPrevious value: -9007199254740991New value: +10000 - added
Output schema / properties / data / properties / blueprint / properties / port_groups / maxItemsAdded value: +16 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / capabilities / maxItemsAdded value: +32 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / label / maxLengthAdded value: +160 - added
Output schema / properties / data / properties / blueprint / properties / ports / items / properties / port_id / maxLengthAdded value: +128 - added
Output schema / properties / data / properties / blueprint / properties / ports / maxItemsAdded value: +256 - changed
Output schema / properties / data / properties / blueprint / properties / printable_metadata / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "fasteners": { - "description": "Optional specification of required mounting screws and cage nuts.", - "type": "string" - }, - "filament_grams": { - "description": "Estimated filament mass in grams.", - "minimum": 0, - "type": "number" - }, - "heat_set_inserts": { - "description": "Optional specification of required brass heat-set inserts.", - "type": "string" - }, - "material_recommendation": { - "default": "PETG", - "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", - "type": "string" - }, - "printables_url": { - "description": "Optional reference URL to an upstream 3D model repository.", - "format": "uri", - "type": "string" - } - }, - "required": [ - "filament_grams", - "material_recommendation" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "maxLength": 256, + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "maximum": 50000, + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "maxLength": 256, + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "maxLength": 128, + "type": "string" + }, + "printables_url": { + "description": "Optional HTTPS reference URL to an upstream 3D model repository.", + "maxLength": 512, + "pattern": "^https?:\\/\\/", + "type": "string" + } + }, + "required": [ + "filament_grams", + "material_recommendation" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / data / properties / blueprint / properties / slot_compatibility / maxLengthAdded value: +100 - added
Output schema / properties / data / properties / blueprint / properties / slots / maxItemsAdded value: +32 - added
Output schema / properties / data / properties / blueprint / properties / slug / maxLengthAdded value: +100
- Changed
init_rack13 fields changed- added
Input schema / properties / front_door_clearance_mm / maximumAdded value: +1000 - added
Input schema / properties / project_name / maxLengthAdded value: +160 - changed
Input schema / properties / rail_depth_mm / descriptionPrevious value: -"Front-to-rear mounting rail depth in millimeters along the Z-axis."New value: +"Front-to-rear mounting rail depth in millimeters along the Z-axis (max 2000mm)." - added
Input schema / properties / rail_depth_mm / maximumAdded value: +2000 - added
Input schema / properties / rear_clearance_mm / maximumAdded value: +1000 - changed
Input schema / properties / u_height / descriptionPrevious value: -"Total usable vertical rack height in Rack Units (1U = 44.45mm)."New value: +"Total usable vertical rack height in Rack Units (1U = 44.45mm, 1..60U)." - changed
Input schema / properties / u_height / maximumPrevious value: -9007199254740991New value: +60 - added
Output schema / properties / data / properties / rack / properties / front_door_clearance_mm / maximumAdded value: +1000 - changed
Output schema / properties / data / properties / rack / properties / rail_depth_mm / descriptionPrevious value: -"Distance from front mounting rail face (Z=0) to rear mounting rail face in mm."New value: +"Distance from front mounting rail face (Z=0) to rear mounting rail face in mm (max 2000mm)." - added
Output schema / properties / data / properties / rack / properties / rail_depth_mm / maximumAdded value: +2000 - added
Output schema / properties / data / properties / rack / properties / rear_clearance_mm / maximumAdded value: +1000 - changed
Output schema / properties / data / properties / rack / properties / u_height / descriptionPrevious value: -"Total vertical rack capacity in Rack Units (U / HE)."New value: +"Total vertical rack capacity in Rack Units (U / HE, 1..60)." - changed
Output schema / properties / data / properties / rack / properties / u_height / maximumPrevious value: -9007199254740991New value: +60
- Changed
plan_external_endpoints9 fields changed- added
Input schema / properties / endpoints / maxItemsAdded value: +128 - changed
Input schema / properties / groups / items / properties / count / descriptionPrevious value: -"Number of external cable drops in this group."New value: +"Number of external cable drops in this group (1..96)." - changed
Input schema / properties / groups / items / properties / count / maximumPrevious value: -9007199254740991New value: +96 - added
Input schema / properties / groups / items / properties / custom_labels / items / maxLengthAdded value: +200 - added
Input schema / properties / groups / items / properties / custom_labels / maxItemsAdded value: +96 - added
Input schema / properties / groups / items / properties / id_prefix / maxLengthAdded value: +64 - added
Input schema / properties / groups / items / properties / label_prefix / maxLengthAdded value: +160 - added
Input schema / properties / groups / items / properties / room_or_zone / maxLengthAdded value: +160 - added
Input schema / properties / groups / maxItemsAdded value: +24
12 tool updates
v0.4.10- Changed
connect_cables2 fields changed- changed
Input schema / properties / cables / descriptionPrevious value: -"List of cable connections to route and validate."New value: +"Batch of one or more cable connections to upsert by cable_id, route in 3D, and validate." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Cable connection and 3D routing result payload.", + "properties": { + "connected_cables": { + "description": "Computed 3D spline route metrics and commercial SKU length bins for the connected cables.", + "items": { + "additionalProperties": {}, + "properties": { + "assigned_ducts": { + "description": "Cable ducts traversed along the route.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cable_id": { + "description": "Unique cable identifier.", + "type": "string" + }, + "cable_type": { + "description": "Standardized physical cable and connector assembly type.", + "enum": [ + "cat6a", + "cat6a-angled", + "cat6", + "cat6-angled", + "cat5e", + "cat5e-angled", + "sfp-plus-dac", + "sfp-plus-dac-angled", + "fiber-lc-duplex", + "fiber-lc-duplex-angled", + "rj45-serial-rollover", + "rj45-serial-rollover-angled", + "power-c13-c14", + "power-c13-c14-angled", + "power-schuko-c13", + "power-schuko-c13-angled", + "power-dc-5525", + "power-dc-5525-angled", + "power-usb-c", + "power-usb-c-angled" + ], + "type": "string" + }, + "portal_u": { + "description": "1-indexed U position of the front-to-rear cable portal if traversed.", + "type": [ + "number", + "null" + ] + }, + "raw_arc_length_mm": { + "description": "3D Catmull-Rom spline arc length in mm.", + "type": "number" + }, + "recommended_commercial_mm": { + "description": "Standard commercial patch cable length bin in mm.", + "type": "number" + }, + "required_length_mm": { + "description": "Required length including slack in mm.", + "type": "number" + }, + "route_case": { + "description": "Computed 3D spline routing topology class.", + "type": "string" + } + }, + "required": [ + "cable_id", + "cable_type", + "route_case", + "raw_arc_length_mm", + "required_length_mm", + "recommended_commercial_mm" + ], + "type": "object" + }, + "type": "array" + }, + "total_cables": { + "description": "Total number of active cables in the rack project.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report including port, speed, PoE budget, and plug clearance checks.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "connected_cables", + "total_cables", + "validation" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
define_custom_blueprint12 fields changed- changed
Input schema / properties / blueprint / descriptionPrevious value: -"Complete hardware catalog blueprint specification."New value: +"Complete custom hardware blueprint specification; ports may be defined via explicit ports[], repeating port_groups[] macros, or both." - added
Input schema / properties / blueprint / properties / is_passthrough_coupler / descriptionAdded value: +"True if the entire unit acts as a passive front-to-rear feedthrough patch panel." - added
Input schema / properties / blueprint / properties / port_groups / descriptionAdded value: +"Optional repeating port grid macros expanded into flat ports[] upon registration." - added
Input schema / properties / blueprint / properties / port_groups / items / properties / capabilities / descriptionAdded value: +"Capabilities assigned to every port generated by this group." - added
Input schema / properties / blueprint / properties / port_groups / items / properties / is_passthrough_coupler / descriptionAdded value: +"True if generated ports are passive front-to-rear couplers." - added
Input schema / properties / blueprint / properties / port_groups / items / properties / start_index / descriptionAdded value: +"Starting numeric suffix for generated port IDs (default: 1)." - added
Input schema / properties / blueprint / properties / ports / descriptionAdded value: +"Explicit physical ports with local face millimeter coordinates." - added
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / descriptionAdded value: +"Electrical, optical, or PoE capabilities supported by this port." - changed
Input schema / properties / blueprint / properties / printable_metadata / anyOfPrevious value: -[ - { - "properties": { - "fasteners": { - "type": "string" - }, - "filament_grams": { - "description": "Estimated filament mass in grams.", - "minimum": 0, - "type": "number" - }, - "heat_set_inserts": { - "type": "string" - }, - "material_recommendation": { - "default": "PETG", - "type": "string" - }, - "printables_url": { - "format": "uri", - "type": "string" - } - }, - "required": [ - "filament_grams" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "type": "string" + }, + "printables_url": { + "description": "Optional reference URL to an upstream 3D model repository.", + "format": "uri", + "type": "string" + } + }, + "required": [ + "filament_grams" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / blueprint / properties / slots / descriptionAdded value: +"Sub-module carrier bays when mount_type is \"modular-carrier\"." - added
Input schema / properties / blueprint / properties / visuals / properties / has_oled_display / descriptionAdded value: +"True if the front panel includes a status OLED screen." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Custom blueprint registration payload.", + "properties": { + "blueprint": { + "additionalProperties": false, + "description": "Registered hardware blueprint with expanded port coordinates.", + "properties": { + "category": { + "description": "Primary functional category of the hardware unit.", + "enum": [ + "switch", + "router", + "compute-node", + "mini-pc", + "sbc", + "nas", + "patch-panel", + "pdu", + "ups", + "modular-carrier", + "brush-panel", + "blanking-panel", + "blank-panel", + "shelf", + "keystone-module" + ], + "type": "string" + }, + "description": { + "description": "Human-readable explanation of what the device is, its role in the rack, and its physical mounting method (e.g. native rack ears vs. 3D-printed carrier/cradle).", + "type": "string" + }, + "geometry": { + "additionalProperties": false, + "description": "Physical 3D bounding dimensions and mass specification.", + "properties": { + "depth_mm": { + "description": "Physical chassis depth in millimeters along the Z-axis.", + "exclusiveMinimum": 0, + "type": "number" + }, + "ear_mount_style": { + "default": "flush-front", + "description": "Mounting ear geometry relative to the vertical rack rails.", + "enum": [ + "included-19inch-ears", + "included-10inch-ears", + "included-6inch-ears", + "flush-front", + "recessed-20mm", + "sub-module-clip", + "rear-rail-mount", + "none" + ], + "type": "string" + }, + "front_protrusion_mm": { + "default": 0, + "description": "Protrusion in front of Z=0 (handles, ears, knobs) in mm.", + "minimum": 0, + "type": "number" + }, + "has_cable_pass_through": { + "description": "True if cables can pass front-to-rear through this unit.", + "type": "boolean" + }, + "height_mm": { + "description": "Physical chassis height in millimeters.", + "exclusiveMinimum": 0, + "type": "number" + }, + "rear_protrusion_mm": { + "default": 0, + "description": "Protrusion behind depth_mm (fans, PSU handles) in mm.", + "minimum": 0, + "type": "number" + }, + "u_height": { + "description": "Nominal height in Rack Units (1U = 44.45mm).", + "minimum": 0, + "type": "number" + }, + "weight_grams": { + "default": 0, + "description": "Total device mass in grams for Center of Gravity calculation.", + "minimum": 0, + "type": "number" + }, + "width_mm": { + "description": "Physical chassis body width in millimeters.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "u_height", + "width_mm", + "height_mm", + "depth_mm", + "ear_mount_style", + "front_protrusion_mm", + "rear_protrusion_mm", + "weight_grams" + ], + "type": "object" + }, + "is_passthrough_coupler": { + "description": "True if the entire unit acts as a passive front-to-rear feedthrough patch panel.", + "type": "boolean" + }, + "manufacturer": { + "description": "Hardware manufacturer name.", + "minLength": 1, + "type": "string" + }, + "model": { + "description": "Hardware model name or part number.", + "minLength": 1, + "type": "string" + }, + "mount_type": { + "description": "Physical form factor and mounting mechanism.", + "enum": [ + "rackmount-19", + "rackmount-10", + "rackmount-6", + "sub-module", + "shelf-standing" + ], + "type": "string" + }, + "port_groups": { + "default": [], + "description": "Optional repeating port grid macros expanded into flat ports[] upon registration.", + "items": { + "additionalProperties": false, + "description": "Declarative port matrix macro expanded into flat PortDefinition items on load.", + "properties": { + "capabilities": { + "default": [], + "description": "Capabilities assigned to every port generated by this group.", + "items": { + "description": "Supported electrical, optical, or PoE protocol capability.", + "enum": [ + "100base-tx", + "1000base-t", + "2500base-t", + "5gbase-t", + "10gbase-t", + "10gbase-sr", + "10gbase-lr", + "10gbase-dac", + "25gbase-dac", + "poe-out", + "poe+", + "poe-out-af", + "poe-out-at", + "poe-out-bt-type3", + "poe-out-bt-type4", + "poe-in-af", + "poe-in-at", + "poe-in-bt-type3", + "poe-in-bt-type4", + "ac-mains", + "dc-power", + "usb-pd", + "usb-3.0", + "usb-3.1", + "audio-analog", + "serial-rs232", + "passthrough-coupler" + ], + "type": "string" + }, + "type": "array" + }, + "connector_type": { + "description": "Physical connector interface type.", + "enum": [ + "rj45", + "rj45-serial-console", + "sfp-plus", + "iec-c13", + "iec-c14", + "schuko-cee7", + "dc-5525", + "usb-c", + "usb-a", + "audio-35mm" + ], + "type": "string" + }, + "count": { + "description": "Total number of ports to generate in this group.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "direction": { + "description": "Signal or electrical power flow direction.", + "enum": [ + "input", + "output", + "bidirectional" + ], + "type": "string" + }, + "face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "grid": { + "additionalProperties": false, + "description": "2D grid layout parameters for automatic port matrix expansion.", + "properties": { + "columns": { + "description": "Number of horizontal port columns in the matrix.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "origin_x_mm": { + "description": "X coordinate of the first port (column 0) in mm.", + "type": "number" + }, + "origin_y_mm": { + "description": "Y coordinate of the first port (row 0) in mm.", + "type": "number" + }, + "pitch_x_mm": { + "description": "Horizontal center-to-center spacing between adjacent columns in mm.", + "type": "number" + }, + "pitch_y_mm": { + "description": "Vertical center-to-center spacing between adjacent rows in mm.", + "type": "number" + }, + "rows": { + "description": "Number of vertical port rows in the matrix.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "origin_x_mm", + "origin_y_mm", + "columns", + "rows", + "pitch_x_mm", + "pitch_y_mm" + ], + "type": "object" + }, + "id_prefix": { + "description": "Prefix for generated port_id values (e.g. \"eth\").", + "minLength": 1, + "type": "string" + }, + "is_passthrough_coupler": { + "description": "True if generated ports are passive front-to-rear couplers.", + "type": "boolean" + }, + "label_prefix": { + "description": "Prefix for generated human-readable labels.", + "type": "string" + }, + "orientation": { + "default": "upright", + "description": "Physical orientation of the connector latch/keyway.", + "enum": [ + "upright", + "inverted", + "left", + "right" + ], + "type": "string" + }, + "start_index": { + "default": 1, + "description": "Starting numeric suffix for generated port IDs (default: 1).", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "id_prefix", + "start_index", + "count", + "face", + "connector_type", + "direction", + "capabilities", + "orientation", + "grid" + ], + "type": "object" + }, + "type": "array" + }, + "ports": { + "default": [], + "description": "Explicit physical ports with local face millimeter coordinates.", + "items": { + "additionalProperties": false, + "description": "Explicit physical port definition with local millimeter coordinates.", + "properties": { + "capabilities": { + "default": [], + "description": "Electrical, optical, or PoE capabilities supported by this port.", + "items": { + "description": "Supported electrical, optical, or PoE protocol capability.", + "enum": [ + "100base-tx", + "1000base-t", + "2500base-t", + "5gbase-t", + "10gbase-t", + "10gbase-sr", + "10gbase-lr", + "10gbase-dac", + "25gbase-dac", + "poe-out", + "poe+", + "poe-out-af", + "poe-out-at", + "poe-out-bt-type3", + "poe-out-bt-type4", + "poe-in-af", + "poe-in-at", + "poe-in-bt-type3", + "poe-in-bt-type4", + "ac-mains", + "dc-power", + "usb-pd", + "usb-3.0", + "usb-3.1", + "audio-analog", + "serial-rs232", + "passthrough-coupler" + ], + "type": "string" + }, + "type": "array" + }, + "connector_type": { + "description": "Physical connector interface type.", + "enum": [ + "rj45", + "rj45-serial-console", + "sfp-plus", + "iec-c13", + "iec-c14", + "schuko-cee7", + "dc-5525", + "usb-c", + "usb-a", + "audio-35mm" + ], + "type": "string" + }, + "coordinates": { + "additionalProperties": false, + "description": "Local 2D coordinates on the device face in millimeters.", + "properties": { + "orientation": { + "default": "upright", + "description": "Physical orientation of the connector latch/keyway.", + "enum": [ + "upright", + "inverted", + "left", + "right" + ], + "type": "string" + }, + "x_mm": { + "description": "Horizontal offset in mm from the bottom-left corner of the face.", + "type": "number" + }, + "y_mm": { + "description": "Vertical offset in mm from the bottom-left corner of the face.", + "type": "number" + } + }, + "required": [ + "x_mm", + "y_mm", + "orientation" + ], + "type": "object" + }, + "direction": { + "description": "Signal or electrical power flow direction.", + "enum": [ + "input", + "output", + "bidirectional" + ], + "type": "string" + }, + "face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "is_passthrough_coupler": { + "description": "True if this port is a passive front-to-rear feedthrough coupler.", + "type": "boolean" + }, + "label": { + "description": "Human-readable silk-screened port label.", + "minLength": 1, + "type": "string" + }, + "port_id": { + "description": "Unique identifier of the port within the device.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "port_id", + "label", + "face", + "connector_type", + "direction", + "capabilities", + "coordinates" + ], + "type": "object" + }, + "type": "array" + }, + "power_and_thermal": { + "additionalProperties": false, + "description": "Electrical power consumption, PoE budget, thermal airflow, and acoustic dB(A) characteristics.", + "properties": { + "airflow": { + "default": "passive-convection", + "description": "Primary thermal airflow path through the device chassis.", + "enum": [ + "front-to-rear", + "rear-to-front", + "side-to-side", + "passive-convection", + "none" + ], + "type": "string" + }, + "electrical_role": { + "description": "Role in the electrical and PoE Directed Acyclic Graph (DAG).", + "enum": [ + "consumer", + "pse-switch", + "pdu", + "ups", + "passive" + ], + "type": "string" + }, + "idle_watts": { + "default": 0, + "description": "Idle power draw in watts.", + "minimum": 0, + "type": "number" + }, + "max_system_watts": { + "default": 0, + "description": "Peak own system power consumption in watts (excluding PoE output).", + "minimum": 0, + "type": "number" + }, + "noise_db_a": { + "description": "Acoustic noise emission in dB(A) at 1 meter distance.", + "minimum": 0, + "type": "number" + }, + "pdu_capacity_watts": { + "description": "Maximum output load capacity in watts for PDU units.", + "exclusiveMinimum": 0, + "type": "number" + }, + "poe_budget_watts": { + "description": "Maximum total PoE output power budget in watts for PSE switches.", + "minimum": 0, + "type": "number" + }, + "ups_capacity_watts": { + "description": "Maximum output load capacity in watts for UPS units.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "electrical_role", + "idle_watts", + "max_system_watts", + "airflow" + ], + "type": "object" + }, + "printable_metadata": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "type": "string" + }, + "printables_url": { + "description": "Optional reference URL to an upstream 3D model repository.", + "format": "uri", + "type": "string" + } + }, + "required": [ + "filament_grams", + "material_recommendation" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "3D printing fabrication metadata for printable modular carriers." + }, + "slot_compatibility": { + "description": "Slot compatibility token when mount_type is \"sub-module\".", + "type": "string" + }, + "slots": { + "default": [], + "description": "Sub-module carrier bays when mount_type is \"modular-carrier\".", + "items": { + "additionalProperties": false, + "description": "Sub-U carrier bay specification for modular child devices.", + "properties": { + "accepted_slot_type": { + "description": "Required child slot_compatibility token (e.g. \"mini-pc-1liter\").", + "minLength": 1, + "type": "string" + }, + "max_dimensions_mm": { + "additionalProperties": false, + "description": "Maximum internal bounding dimensions of a carrier slot in mm.", + "properties": { + "depth": { + "description": "Maximum allowed child depth in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "height": { + "description": "Maximum allowed child height in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "width": { + "description": "Maximum allowed child width in mm.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "width", + "height", + "depth" + ], + "type": "object" + }, + "offset_mm": { + "additionalProperties": false, + "description": "Local 3D offset of a sub-module slot relative to its parent carrier.", + "properties": { + "x": { + "description": "Local X offset from carrier origin in mm.", + "type": "number" + }, + "y": { + "description": "Local Y offset from carrier origin in mm.", + "type": "number" + }, + "z": { + "default": 0, + "description": "Local Z offset from carrier origin in mm.", + "type": "number" + } + }, + "required": [ + "x", + "y", + "z" + ], + "type": "object" + }, + "slot_id": { + "description": "Unique slot identifier within the carrier.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "slot_id", + "accepted_slot_type", + "offset_mm", + "max_dimensions_mm" + ], + "type": "object" + }, + "type": "array" + }, + "slug": { + "description": "Unique lowercase kebab-case hardware identifier (vendor-model-variant).", + "minLength": 1, + "pattern": "^[a-z0-9-]+$", + "type": "string" + }, + "visuals": { + "additionalProperties": false, + "default": { + "chassis_color_hex": "#E5E7EB", + "has_oled_display": false, + "material_preset": "matte-black-steel", + "stl_mesh_path": null + }, + "description": "Visual rendering metadata for 2D SVG and 3D WebGL pipelines.", + "properties": { + "chassis_color_hex": { + "default": "#E5E7EB", + "description": "Primary chassis hex color code.", + "pattern": "^#[0-9A-Fa-f]{6}$", + "type": "string" + }, + "has_oled_display": { + "default": false, + "description": "True if the front panel includes a status OLED screen.", + "type": "boolean" + }, + "material_preset": { + "default": "matte-black-steel", + "description": "Surface material shader preset for 3D procedural rendering.", + "enum": [ + "matte-black-steel", + "coated-aluminum", + "3d-printed-petg", + "3d-printed-abs", + "polycarbonate" + ], + "type": "string" + }, + "stl_mesh_path": { + "default": null, + "description": "Optional relative path to custom 3D mesh (.stl/.glb).", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "chassis_color_hex", + "material_preset", + "has_oled_display", + "stl_mesh_path" + ], + "type": "object" + } + }, + "required": [ + "slug", + "manufacturer", + "model", + "category", + "mount_type", + "geometry", + "power_and_thermal", + "port_groups", + "ports", + "slots", + "visuals", + "printable_metadata" + ], + "type": "object" + }, + "saved_path": { + "description": "Absolute filesystem path of the persisted custom blueprint YAML file, or null if in-memory.", + "type": [ + "string", + "null" + ] + }, + "slug": { + "description": "Registered lowercase kebab-case blueprint slug.", + "type": "string" + }, + "validation_errors": { + "description": "Schema validation details if the custom blueprint failed parsing.", + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
disconnect_cables3 fields changed- changed
Input schema / properties / cable_ids / descriptionPrevious value: -"Specific cable_id values to disconnect."New value: +"Specific cable_id values to disconnect (can be combined with instance_id; at least one of cable_ids or instance_id must be provided)." - changed
Input schema / properties / instance_id / descriptionPrevious value: -"Device instance_id whose attached cables should all be disconnected."New value: +"Mounted device or modular-carrier instance_id whose attached cables (including child sub-module cables) should all be disconnected." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Cable disconnection result payload.", + "properties": { + "remaining_cables_count": { + "description": "Total number of cables remaining in the active rack project.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "removed_cable_ids": { + "description": "List of cable_id values that were disconnected.", + "items": { + "type": "string" + }, + "type": "array" + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report after cable removal.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "removed_cable_ids", + "remaining_cables_count" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
export_deliverables3 fields changed- changed
Input schema / properties / formats / descriptionPrevious value: -"Deliverable formats to export."New value: +"Deliverable formats to generate and write to disk (defaults to all 6 formats; carrier-scad and carrier-stl emit files when modular carriers are mounted)." - changed
Input schema / properties / output_dir / descriptionPrevious value: -"Optional target directory where deliverable files will be written."New value: +"Optional target filesystem directory for generated files (defaults to the directory of the active rack.yaml file)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Deliverable export result payload.", + "properties": { + "bom_summary": { + "additionalProperties": {}, + "description": "Summary counts and power totals included in the Bill of Materials.", + "properties": { + "cables_count": { + "description": "Total routed cables.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "mounted_devices_count": { + "description": "Total mounted rack devices and carrier sub-modules.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "total_poe_budget_watts": { + "description": "Total available PSE PoE budget in watts.", + "minimum": 0, + "type": "number" + }, + "total_poe_draw_watts": { + "description": "Total PoE power draw in watts.", + "minimum": 0, + "type": "number" + }, + "total_power_draw_watts": { + "description": "Total peak system power draw in watts.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "mounted_devices_count", + "cables_count", + "total_power_draw_watts", + "total_poe_draw_watts", + "total_poe_budget_watts" + ], + "type": "object" + }, + "exported_files": { + "description": "Metadata for each deliverable file written to disk.", + "items": { + "additionalProperties": {}, + "properties": { + "format": { + "description": "Deliverable format identifier (e.g., \"elevation-svg\", \"carrier-stl\").", + "type": "string" + }, + "path": { + "description": "Absolute filesystem path of the written file.", + "type": "string" + }, + "size_bytes": { + "description": "Size of the written file in bytes.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "format", + "path", + "size_bytes" + ], + "type": "object" + }, + "type": "array" + }, + "output_dir": { + "description": "Resolved absolute directory path where deliverable files were written.", + "type": "string" + }, + "validation": { + "additionalProperties": false, + "description": "Current 5-stage validation report at the time of export.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "output_dir", + "exported_files", + "bom_summary", + "validation" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
get_device_blueprint2 fields changed- changed
Input schema / properties / slug / descriptionPrevious value: -"Exact hardware catalog blueprint slug to retrieve."New value: +"Exact lowercase kebab-case hardware catalog blueprint slug to retrieve (discoverable via search_catalog)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Blueprint lookup result payload.", + "properties": { + "blueprint": { + "additionalProperties": false, + "description": "Complete hardware blueprint specification with port_groups pre-expanded into flat ports[].", + "properties": { + "category": { + "description": "Primary functional category of the hardware unit.", + "enum": [ + "switch", + "router", + "compute-node", + "mini-pc", + "sbc", + "nas", + "patch-panel", + "pdu", + "ups", + "modular-carrier", + "brush-panel", + "blanking-panel", + "blank-panel", + "shelf", + "keystone-module" + ], + "type": "string" + }, + "description": { + "description": "Human-readable explanation of what the device is, its role in the rack, and its physical mounting method (e.g. native rack ears vs. 3D-printed carrier/cradle).", + "type": "string" + }, + "geometry": { + "additionalProperties": false, + "description": "Physical 3D bounding dimensions and mass specification.", + "properties": { + "depth_mm": { + "description": "Physical chassis depth in millimeters along the Z-axis.", + "exclusiveMinimum": 0, + "type": "number" + }, + "ear_mount_style": { + "default": "flush-front", + "description": "Mounting ear geometry relative to the vertical rack rails.", + "enum": [ + "included-19inch-ears", + "included-10inch-ears", + "included-6inch-ears", + "flush-front", + "recessed-20mm", + "sub-module-clip", + "rear-rail-mount", + "none" + ], + "type": "string" + }, + "front_protrusion_mm": { + "default": 0, + "description": "Protrusion in front of Z=0 (handles, ears, knobs) in mm.", + "minimum": 0, + "type": "number" + }, + "has_cable_pass_through": { + "description": "True if cables can pass front-to-rear through this unit.", + "type": "boolean" + }, + "height_mm": { + "description": "Physical chassis height in millimeters.", + "exclusiveMinimum": 0, + "type": "number" + }, + "rear_protrusion_mm": { + "default": 0, + "description": "Protrusion behind depth_mm (fans, PSU handles) in mm.", + "minimum": 0, + "type": "number" + }, + "u_height": { + "description": "Nominal height in Rack Units (1U = 44.45mm).", + "minimum": 0, + "type": "number" + }, + "weight_grams": { + "default": 0, + "description": "Total device mass in grams for Center of Gravity calculation.", + "minimum": 0, + "type": "number" + }, + "width_mm": { + "description": "Physical chassis body width in millimeters.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "u_height", + "width_mm", + "height_mm", + "depth_mm", + "ear_mount_style", + "front_protrusion_mm", + "rear_protrusion_mm", + "weight_grams" + ], + "type": "object" + }, + "is_passthrough_coupler": { + "description": "True if the entire unit acts as a passive front-to-rear feedthrough patch panel.", + "type": "boolean" + }, + "manufacturer": { + "description": "Hardware manufacturer name.", + "minLength": 1, + "type": "string" + }, + "model": { + "description": "Hardware model name or part number.", + "minLength": 1, + "type": "string" + }, + "mount_type": { + "description": "Physical form factor and mounting mechanism.", + "enum": [ + "rackmount-19", + "rackmount-10", + "rackmount-6", + "sub-module", + "shelf-standing" + ], + "type": "string" + }, + "port_groups": { + "default": [], + "description": "Optional repeating port grid macros expanded into flat ports[] upon registration.", + "items": { + "additionalProperties": false, + "description": "Declarative port matrix macro expanded into flat PortDefinition items on load.", + "properties": { + "capabilities": { + "default": [], + "description": "Capabilities assigned to every port generated by this group.", + "items": { + "description": "Supported electrical, optical, or PoE protocol capability.", + "enum": [ + "100base-tx", + "1000base-t", + "2500base-t", + "5gbase-t", + "10gbase-t", + "10gbase-sr", + "10gbase-lr", + "10gbase-dac", + "25gbase-dac", + "poe-out", + "poe+", + "poe-out-af", + "poe-out-at", + "poe-out-bt-type3", + "poe-out-bt-type4", + "poe-in-af", + "poe-in-at", + "poe-in-bt-type3", + "poe-in-bt-type4", + "ac-mains", + "dc-power", + "usb-pd", + "usb-3.0", + "usb-3.1", + "audio-analog", + "serial-rs232", + "passthrough-coupler" + ], + "type": "string" + }, + "type": "array" + }, + "connector_type": { + "description": "Physical connector interface type.", + "enum": [ + "rj45", + "rj45-serial-console", + "sfp-plus", + "iec-c13", + "iec-c14", + "schuko-cee7", + "dc-5525", + "usb-c", + "usb-a", + "audio-35mm" + ], + "type": "string" + }, + "count": { + "description": "Total number of ports to generate in this group.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "direction": { + "description": "Signal or electrical power flow direction.", + "enum": [ + "input", + "output", + "bidirectional" + ], + "type": "string" + }, + "face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "grid": { + "additionalProperties": false, + "description": "2D grid layout parameters for automatic port matrix expansion.", + "properties": { + "columns": { + "description": "Number of horizontal port columns in the matrix.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "origin_x_mm": { + "description": "X coordinate of the first port (column 0) in mm.", + "type": "number" + }, + "origin_y_mm": { + "description": "Y coordinate of the first port (row 0) in mm.", + "type": "number" + }, + "pitch_x_mm": { + "description": "Horizontal center-to-center spacing between adjacent columns in mm.", + "type": "number" + }, + "pitch_y_mm": { + "description": "Vertical center-to-center spacing between adjacent rows in mm.", + "type": "number" + }, + "rows": { + "description": "Number of vertical port rows in the matrix.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "origin_x_mm", + "origin_y_mm", + "columns", + "rows", + "pitch_x_mm", + "pitch_y_mm" + ], + "type": "object" + }, + "id_prefix": { + "description": "Prefix for generated port_id values (e.g. \"eth\").", + "minLength": 1, + "type": "string" + }, + "is_passthrough_coupler": { + "description": "True if generated ports are passive front-to-rear couplers.", + "type": "boolean" + }, + "label_prefix": { + "description": "Prefix for generated human-readable labels.", + "type": "string" + }, + "orientation": { + "default": "upright", + "description": "Physical orientation of the connector latch/keyway.", + "enum": [ + "upright", + "inverted", + "left", + "right" + ], + "type": "string" + }, + "start_index": { + "default": 1, + "description": "Starting numeric suffix for generated port IDs (default: 1).", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "id_prefix", + "start_index", + "count", + "face", + "connector_type", + "direction", + "capabilities", + "orientation", + "grid" + ], + "type": "object" + }, + "type": "array" + }, + "ports": { + "default": [], + "description": "Explicit physical ports with local face millimeter coordinates.", + "items": { + "additionalProperties": false, + "description": "Explicit physical port definition with local millimeter coordinates.", + "properties": { + "capabilities": { + "default": [], + "description": "Electrical, optical, or PoE capabilities supported by this port.", + "items": { + "description": "Supported electrical, optical, or PoE protocol capability.", + "enum": [ + "100base-tx", + "1000base-t", + "2500base-t", + "5gbase-t", + "10gbase-t", + "10gbase-sr", + "10gbase-lr", + "10gbase-dac", + "25gbase-dac", + "poe-out", + "poe+", + "poe-out-af", + "poe-out-at", + "poe-out-bt-type3", + "poe-out-bt-type4", + "poe-in-af", + "poe-in-at", + "poe-in-bt-type3", + "poe-in-bt-type4", + "ac-mains", + "dc-power", + "usb-pd", + "usb-3.0", + "usb-3.1", + "audio-analog", + "serial-rs232", + "passthrough-coupler" + ], + "type": "string" + }, + "type": "array" + }, + "connector_type": { + "description": "Physical connector interface type.", + "enum": [ + "rj45", + "rj45-serial-console", + "sfp-plus", + "iec-c13", + "iec-c14", + "schuko-cee7", + "dc-5525", + "usb-c", + "usb-a", + "audio-35mm" + ], + "type": "string" + }, + "coordinates": { + "additionalProperties": false, + "description": "Local 2D coordinates on the device face in millimeters.", + "properties": { + "orientation": { + "default": "upright", + "description": "Physical orientation of the connector latch/keyway.", + "enum": [ + "upright", + "inverted", + "left", + "right" + ], + "type": "string" + }, + "x_mm": { + "description": "Horizontal offset in mm from the bottom-left corner of the face.", + "type": "number" + }, + "y_mm": { + "description": "Vertical offset in mm from the bottom-left corner of the face.", + "type": "number" + } + }, + "required": [ + "x_mm", + "y_mm", + "orientation" + ], + "type": "object" + }, + "direction": { + "description": "Signal or electrical power flow direction.", + "enum": [ + "input", + "output", + "bidirectional" + ], + "type": "string" + }, + "face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "is_passthrough_coupler": { + "description": "True if this port is a passive front-to-rear feedthrough coupler.", + "type": "boolean" + }, + "label": { + "description": "Human-readable silk-screened port label.", + "minLength": 1, + "type": "string" + }, + "port_id": { + "description": "Unique identifier of the port within the device.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "port_id", + "label", + "face", + "connector_type", + "direction", + "capabilities", + "coordinates" + ], + "type": "object" + }, + "type": "array" + }, + "power_and_thermal": { + "additionalProperties": false, + "description": "Electrical power consumption, PoE budget, thermal airflow, and acoustic dB(A) characteristics.", + "properties": { + "airflow": { + "default": "passive-convection", + "description": "Primary thermal airflow path through the device chassis.", + "enum": [ + "front-to-rear", + "rear-to-front", + "side-to-side", + "passive-convection", + "none" + ], + "type": "string" + }, + "electrical_role": { + "description": "Role in the electrical and PoE Directed Acyclic Graph (DAG).", + "enum": [ + "consumer", + "pse-switch", + "pdu", + "ups", + "passive" + ], + "type": "string" + }, + "idle_watts": { + "default": 0, + "description": "Idle power draw in watts.", + "minimum": 0, + "type": "number" + }, + "max_system_watts": { + "default": 0, + "description": "Peak own system power consumption in watts (excluding PoE output).", + "minimum": 0, + "type": "number" + }, + "noise_db_a": { + "description": "Acoustic noise emission in dB(A) at 1 meter distance.", + "minimum": 0, + "type": "number" + }, + "pdu_capacity_watts": { + "description": "Maximum output load capacity in watts for PDU units.", + "exclusiveMinimum": 0, + "type": "number" + }, + "poe_budget_watts": { + "description": "Maximum total PoE output power budget in watts for PSE switches.", + "minimum": 0, + "type": "number" + }, + "ups_capacity_watts": { + "description": "Maximum output load capacity in watts for UPS units.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "electrical_role", + "idle_watts", + "max_system_watts", + "airflow" + ], + "type": "object" + }, + "printable_metadata": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "fasteners": { + "description": "Optional specification of required mounting screws and cage nuts.", + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "description": "Optional specification of required brass heat-set inserts.", + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "description": "Recommended 3D printing filament material (e.g. \"PETG\", \"ABS\", \"ASA\").", + "type": "string" + }, + "printables_url": { + "description": "Optional reference URL to an upstream 3D model repository.", + "format": "uri", + "type": "string" + } + }, + "required": [ + "filament_grams", + "material_recommendation" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "3D printing fabrication metadata for printable modular carriers." + }, + "slot_compatibility": { + "description": "Slot compatibility token when mount_type is \"sub-module\".", + "type": "string" + }, + "slots": { + "default": [], + "description": "Sub-module carrier bays when mount_type is \"modular-carrier\".", + "items": { + "additionalProperties": false, + "description": "Sub-U carrier bay specification for modular child devices.", + "properties": { + "accepted_slot_type": { + "description": "Required child slot_compatibility token (e.g. \"mini-pc-1liter\").", + "minLength": 1, + "type": "string" + }, + "max_dimensions_mm": { + "additionalProperties": false, + "description": "Maximum internal bounding dimensions of a carrier slot in mm.", + "properties": { + "depth": { + "description": "Maximum allowed child depth in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "height": { + "description": "Maximum allowed child height in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "width": { + "description": "Maximum allowed child width in mm.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "width", + "height", + "depth" + ], + "type": "object" + }, + "offset_mm": { + "additionalProperties": false, + "description": "Local 3D offset of a sub-module slot relative to its parent carrier.", + "properties": { + "x": { + "description": "Local X offset from carrier origin in mm.", + "type": "number" + }, + "y": { + "description": "Local Y offset from carrier origin in mm.", + "type": "number" + }, + "z": { + "default": 0, + "description": "Local Z offset from carrier origin in mm.", + "type": "number" + } + }, + "required": [ + "x", + "y", + "z" + ], + "type": "object" + }, + "slot_id": { + "description": "Unique slot identifier within the carrier.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "slot_id", + "accepted_slot_type", + "offset_mm", + "max_dimensions_mm" + ], + "type": "object" + }, + "type": "array" + }, + "slug": { + "description": "Unique lowercase kebab-case hardware identifier (vendor-model-variant).", + "minLength": 1, + "pattern": "^[a-z0-9-]+$", + "type": "string" + }, + "visuals": { + "additionalProperties": false, + "default": { + "chassis_color_hex": "#E5E7EB", + "has_oled_display": false, + "material_preset": "matte-black-steel", + "stl_mesh_path": null + }, + "description": "Visual rendering metadata for 2D SVG and 3D WebGL pipelines.", + "properties": { + "chassis_color_hex": { + "default": "#E5E7EB", + "description": "Primary chassis hex color code.", + "pattern": "^#[0-9A-Fa-f]{6}$", + "type": "string" + }, + "has_oled_display": { + "default": false, + "description": "True if the front panel includes a status OLED screen.", + "type": "boolean" + }, + "material_preset": { + "default": "matte-black-steel", + "description": "Surface material shader preset for 3D procedural rendering.", + "enum": [ + "matte-black-steel", + "coated-aluminum", + "3d-printed-petg", + "3d-printed-abs", + "polycarbonate" + ], + "type": "string" + }, + "stl_mesh_path": { + "default": null, + "description": "Optional relative path to custom 3D mesh (.stl/.glb).", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "chassis_color_hex", + "material_preset", + "has_oled_display", + "stl_mesh_path" + ], + "type": "object" + } + }, + "required": [ + "slug", + "manufacturer", + "model", + "category", + "mount_type", + "geometry", + "power_and_thermal", + "port_groups", + "ports", + "slots", + "visuals", + "printable_metadata" + ], + "type": "object" + }, + "requested_slug": { + "description": "Requested slug echoed when lookup fails with BLUEPRINT_NOT_FOUND.", + "type": "string" + } + }, + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
init_rack8 fields changed- changed
Input schema / properties / enclosure_type / descriptionPrevious value: -"Physical rack enclosure style governing front door clearance checks."New value: +"Enclosure door style (\"open-frame\", \"closed-glass-front\", or \"closed-vented-front\")." - changed
Input schema / properties / front_door_clearance_mm / descriptionPrevious value: -"Clearance in mm between front rails and door."New value: +"Available clearance in millimeters between front mounting rails (Z=0) and a closed front door." - changed
Input schema / properties / project_name / descriptionPrevious value: -"Human-readable project name."New value: +"Human-readable project name stored in rack.yaml." - changed
Input schema / properties / rail_depth_mm / descriptionPrevious value: -"Front-to-rear mounting rail depth in millimeters."New value: +"Front-to-rear mounting rail depth in millimeters along the Z-axis." - changed
Input schema / properties / rear_clearance_mm / descriptionPrevious value: -"Clearance in mm behind rear rails."New value: +"Available clearance in millimeters behind the rear mounting rails (Z=rail_depth_mm) for power plugs and bending radii." - changed
Input schema / properties / standard / descriptionPrevious value: -"EIA-310-D or homelab rack width standard."New value: +"Mechanical rack width standard (\"19inch\" = 482.6mm, \"10inch\" = 254.0mm, \"6inch\" = 152.4mm)." - changed
Input schema / properties / u_height / descriptionPrevious value: -"Total usable rack height in U (1U = 44.45mm)."New value: +"Total usable vertical rack height in Rack Units (1U = 44.45mm)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Rack initialization payload.", + "properties": { + "geometry": { + "additionalProperties": {}, + "description": "Computed millimeter enclosure dimensions.", + "properties": { + "aperture_width_mm": { + "description": "Inner usable rail aperture width in millimeters.", + "type": "number" + }, + "panel_width_mm": { + "description": "Outer mounting ear panel width in millimeters.", + "type": "number" + }, + "rail_depth_mm": { + "description": "Front-to-rear mounting rail depth in millimeters.", + "type": "number" + }, + "total_height_mm": { + "description": "Total vertical mounting height in millimeters (u_height * 44.45).", + "type": "number" + } + }, + "required": [ + "total_height_mm", + "rail_depth_mm", + "panel_width_mm", + "aperture_width_mm" + ], + "type": "object" + }, + "rack": { + "additionalProperties": false, + "description": "Initialized physical rack frame specification.", + "properties": { + "enclosure_type": { + "default": "open-frame", + "description": "Physical rack enclosure style governing front door clearance checks.", + "enum": [ + "open-frame", + "closed-glass-front", + "closed-vented-front" + ], + "type": "string" + }, + "front_door_clearance_mm": { + "default": 45, + "description": "Available clearance in front of Z=0 before hitting the front door in mm.", + "minimum": 0, + "type": "number" + }, + "rail_depth_mm": { + "description": "Distance from front mounting rail face (Z=0) to rear mounting rail face in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "rear_clearance_mm": { + "default": 40, + "description": "Available clearance behind Z=rail_depth_mm in mm.", + "minimum": 0, + "type": "number" + }, + "standard": { + "description": "EIA-310-D or homelab rack width standard.", + "enum": [ + "19inch", + "10inch", + "6inch" + ], + "type": "string" + }, + "u_height": { + "description": "Total vertical rack capacity in Rack Units (U / HE).", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "standard", + "u_height", + "rail_depth_mm", + "enclosure_type", + "front_door_clearance_mm", + "rear_clearance_mm" + ], + "type": "object" + }, + "validation": { + "additionalProperties": false, + "description": "Initial 5-stage validation report for the newly initialized empty rack.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "rack", + "geometry", + "validation" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
modify_equipment12 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Modification operation to apply."New value: +"Modification operation: \"move\" relocates a device, \"rename\" updates its hostname, and \"remove\" deletes the device instance." - changed
Input schema / properties / face / descriptionPrevious value: -"New mounting face when moving a rackmount device."New value: +"New mounting face (\"front\" or \"rear\") when action is \"move\" on a rackmount device (takes precedence over new_face)." - changed
Input schema / properties / hostname / descriptionPrevious value: -"New hostname when renaming a device."New value: +"New logical hostname when action is \"rename\" (takes precedence over new_hostname)." - changed
Input schema / properties / instance_id / descriptionPrevious value: -"Target mounted device or sub-module instance_id."New value: +"Existing mounted device or child sub-module instance_id to modify." - changed
Input schema / properties / new_face / descriptionPrevious value: -"Alias for face when moving a rackmount device."New value: +"Optional alias for face when action is \"move\"." - changed
Input schema / properties / new_hostname / descriptionPrevious value: -"Alias for hostname when renaming a device."New value: +"Optional alias for hostname when action is \"rename\"." - changed
Input schema / properties / new_u_position / descriptionPrevious value: -"Alias for u_position when moving a rackmount device."New value: +"Optional alias for u_position when action is \"move\"." - changed
Input schema / properties / parent_carrier_id / descriptionPrevious value: -"Target parent carrier instance_id when moving a sub-module."New value: +"Target parent carrier instance_id when action is \"move\" on a child sub-module." - changed
Input schema / properties / remove_connected_cables / descriptionPrevious value: -"Whether to automatically disconnect cables attached to a removed device."New value: +"When action is \"remove\", whether to automatically disconnect all cables and external endpoints attached to the removed device (default: true)." - changed
Input schema / properties / slot_id / descriptionPrevious value: -"Target slot_id inside parent_carrier_id when moving a sub-module."New value: +"Target slot_id inside parent_carrier_id when action is \"move\" on a child sub-module." - changed
Input schema / properties / u_position / descriptionPrevious value: -"New 1-indexed U position when moving a rackmount device."New value: +"New 1-indexed U position when action is \"move\" on a direct rackmount device (takes precedence over new_u_position)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Equipment modification result payload.", + "properties": { + "action": { + "description": "Modification operation that was executed.", + "enum": [ + "move", + "rename", + "remove" + ], + "type": "string" + }, + "instance_id": { + "description": "Target mounted device or sub-module instance_id.", + "type": "string" + }, + "removed_cable_ids": { + "description": "Cable IDs automatically disconnected when action is \"remove\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "rerouted_cables": { + "description": "Recalculated 3D cable length summaries after moving or removing equipment.", + "items": { + "additionalProperties": {}, + "properties": { + "cable_id": { + "description": "Cable connection identifier.", + "type": "string" + }, + "raw_arc_length_mm": { + "description": "Recalculated 3D spline arc length in mm.", + "type": "number" + }, + "recommended_commercial_mm": { + "description": "Standard commercial cable length bin in mm.", + "type": "number" + }, + "required_length_mm": { + "description": "Required cable length with slack in mm.", + "type": "number" + } + }, + "required": [ + "cable_id", + "raw_arc_length_mm", + "required_length_mm", + "recommended_commercial_mm" + ], + "type": "object" + }, + "type": "array" + }, + "updated_device": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Updated 3D world geometry of the device, or null if removed." + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report after the equipment modification.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "instance_id" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
mount_equipment8 fields changed- changed
Input schema / properties / blueprint_slug / descriptionPrevious value: -"Hardware catalog blueprint slug to instantiate."New value: +"Catalog or custom hardware blueprint slug to instantiate." - changed
Input schema / properties / face / descriptionPrevious value: -"Mounting or port face relative to the rack or chassis."New value: +"Target rack mounting face (\"front\" or \"rear\") for direct rackmount equipment." - changed
Input schema / properties / hostname / descriptionPrevious value: -"Logical hostname or label for this device instance."New value: +"Optional logical hostname or display label shown in elevations and schematics." - changed
Input schema / properties / instance_id / descriptionPrevious value: -"Unique instance identifier for this mounted device."New value: +"Unique project-wide instance identifier for this mounted device (e.g., \"ups-u1\", \"sw-core-01\")." - changed
Input schema / properties / parent_carrier_id / descriptionPrevious value: -"Instance ID of the parent modular-carrier when mounting a sub-module."New value: +"Mounted parent modular-carrier instance_id when mounting a sub-module (requires slot_id; mutually exclusive with u_position)." - changed
Input schema / properties / slot_id / descriptionPrevious value: -"Target slot_id inside parent_carrier_id when mounting a sub-module."New value: +"Target bay slot_id inside parent_carrier_id when mounting a sub-module (e.g., \"left-bay\", \"keystone-1\")." - changed
Input schema / properties / u_position / descriptionPrevious value: -"1-indexed target rack unit when mounting directly onto the rack."New value: +"1-indexed lowest Rack Unit (U) when mounting directly onto the rack rails (mutually exclusive with parent_carrier_id/slot_id)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Equipment mounting result payload.", + "properties": { + "blueprint_slug": { + "description": "Target blueprint_slug echoed when a pre-mount check fails.", + "type": "string" + }, + "instance_id": { + "description": "Target instance_id echoed when a pre-mount check fails.", + "type": "string" + }, + "mounted_device": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Computed 3D world bounding boxes (chassis and plug clearance) and global port coordinates for the mounted device." + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report after mounting the device.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
plan_external_endpoints2 fields changed- changed
Input schema / properties / clear_existing / descriptionPrevious value: -"If true, clears existing external_endpoints (and their front patch cables) on patch_panel_instance_id before planning."New value: +"If true, destructively clears existing external_endpoints (and their front patch cables) on patch_panel_instance_id before planning." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "External endpoint planning and auto-patching payload.", + "properties": { + "added_endpoints_count": { + "description": "Number of external building/room cable drops terminated on the patch panel rear ports.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "auto_connect_switch_instance_id": { + "description": "Target auto_connect_switch_instance_id echoed when a pre-check fails.", + "type": "string" + }, + "auto_patched_cables_count": { + "description": "Number of front Cat6A patch cables automatically created to the target switch.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "patch_panel_instance_id": { + "description": "Target patch_panel_instance_id echoed when a pre-check fails.", + "type": "string" + }, + "patching_guide": { + "description": "Step-by-step rear punchdown and front switch patching schedule.", + "items": { + "additionalProperties": {}, + "properties": { + "color_hex": { + "description": "Assigned cable hex color code.", + "type": "string" + }, + "endpoint_id": { + "description": "Unique external endpoint identifier.", + "type": "string" + }, + "front_patch_cable": { + "description": "Front patch panel to switch port assignment.", + "type": "string" + }, + "label": { + "description": "Human-readable room or device drop label.", + "type": "string" + }, + "poe_draw_watts": { + "description": "PoE power draw in watts for this drop.", + "minimum": 0, + "type": "number" + }, + "rear_punchdown": { + "description": "Rear patch panel port termination assignment.", + "type": "string" + }, + "room_or_zone": { + "description": "Building zone or room name.", + "type": "string" + }, + "step_number": { + "description": "Sequential installation step number.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "step_number", + "endpoint_id", + "label", + "room_or_zone", + "poe_draw_watts", + "rear_punchdown", + "front_patch_cable", + "color_hex" + ], + "type": "object" + }, + "type": "array" + }, + "total_external_endpoints": { + "description": "Total external endpoints now configured in the rack project.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report including cumulative PoE load from external building drops.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
search_catalog8 fields changed- changed
Input schema / properties / accepted_slot_type / descriptionPrevious value: -"Sub-module slot compatibility token (e.g., \"mini-pc-1liter\", \"standard-keystone\")."New value: +"Sub-module slot compatibility token matching either a sub-module slot_compatibility or a carrier slot accepted_slot_type (e.g., \"mini-pc-1liter\", \"sbc-rpi5\", \"standard-keystone\")." - changed
Input schema / properties / category / descriptionPrevious value: -"Primary functional category of the hardware unit."New value: +"Functional hardware category filter (e.g., \"switch\", \"router\", \"ups\", \"pdu\", \"patch-panel\", \"modular-carrier\", \"mini-pc\", \"sbc\")." - changed
Input schema / properties / form_factor / descriptionPrevious value: -"Hardware form factor or mounting mechanism filter."New value: +"Primary rack width or mounting form-factor filter (shorthands \"10inch\", \"19inch\", and \"6inch\" match both direct rackmount equipment and modular carriers of that width)." - changed
Input schema / properties / max_depth_mm / descriptionPrevious value: -"Maximum allowed chassis depth in millimeters."New value: +"Maximum allowed chassis depth in millimeters (inclusive upper bound)." - changed
Input schema / properties / min_poe_budget_watts / descriptionPrevious value: -"Minimum required PoE power budget in watts."New value: +"Minimum required PSE PoE output power budget in watts (inclusive lower bound)." - changed
Input schema / properties / mount_type / descriptionPrevious value: -"Hardware form factor or mounting mechanism filter."New value: +"Optional alias for form_factor to filter by physical mounting style (\"rackmount-10\", \"rackmount-19\", \"rackmount-6\", \"sub-module\", or \"shelf-standing\"); combined with logical AND if both are provided." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text search filter matching manufacturer, model, or slug."New value: +"Optional case-insensitive substring filter matching slug, manufacturer, or model name (omit to match all)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Catalog search result payload.", + "properties": { + "blueprints": { + "description": "Matching hardware blueprint summary records.", + "items": { + "additionalProperties": {}, + "description": "Compact hardware blueprint summary returned by search_catalog.", + "properties": { + "category": { + "description": "Primary functional category of the hardware unit.", + "enum": [ + "switch", + "router", + "compute-node", + "mini-pc", + "sbc", + "nas", + "patch-panel", + "pdu", + "ups", + "modular-carrier", + "brush-panel", + "blanking-panel", + "blank-panel", + "shelf", + "keystone-module" + ], + "type": "string" + }, + "depth_mm": { + "description": "Chassis depth in millimeters.", + "type": "number" + }, + "electrical_role": { + "description": "Role in the electrical and PoE Directed Acyclic Graph (DAG).", + "enum": [ + "consumer", + "pse-switch", + "pdu", + "ups", + "passive" + ], + "type": "string" + }, + "height_mm": { + "description": "Chassis height in millimeters.", + "type": "number" + }, + "manufacturer": { + "description": "Hardware manufacturer name.", + "type": "string" + }, + "max_system_watts": { + "description": "Peak system power consumption in watts.", + "type": "number" + }, + "model": { + "description": "Hardware model name.", + "type": "string" + }, + "mount_type": { + "description": "Physical form factor and mounting mechanism.", + "enum": [ + "rackmount-19", + "rackmount-10", + "rackmount-6", + "sub-module", + "shelf-standing" + ], + "type": "string" + }, + "poe_budget_watts": { + "description": "Available PSE PoE output budget in watts (0 if non-PSE).", + "type": "number" + }, + "port_count": { + "description": "Total number of expanded physical ports.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "slot_compatibility": { + "description": "Sub-module slot compatibility token, or null for rackmount equipment.", + "type": [ + "string", + "null" + ] + }, + "slots": { + "description": "Available carrier bays when mount_type is \"modular-carrier\".", + "items": { + "additionalProperties": false, + "properties": { + "accepted_slot_type": { + "description": "Accepted child sub-module compatibility token.", + "type": "string" + }, + "max_dimensions_mm": { + "additionalProperties": false, + "description": "Maximum internal bounding dimensions of a carrier slot in mm.", + "properties": { + "depth": { + "description": "Maximum allowed child depth in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "height": { + "description": "Maximum allowed child height in mm.", + "exclusiveMinimum": 0, + "type": "number" + }, + "width": { + "description": "Maximum allowed child width in mm.", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "width", + "height", + "depth" + ], + "type": "object" + }, + "slot_id": { + "description": "Carrier bay slot identifier.", + "type": "string" + } + }, + "required": [ + "slot_id", + "accepted_slot_type", + "max_dimensions_mm" + ], + "type": "object" + }, + "type": "array" + }, + "slug": { + "description": "Unique lowercase kebab-case hardware blueprint slug.", + "type": "string" + }, + "u_height": { + "description": "Nominal height in Rack Units (U).", + "type": "number" + }, + "weight_grams": { + "description": "Device mass in grams.", + "type": "number" + }, + "width_mm": { + "description": "Chassis width in millimeters.", + "type": "number" + } + }, + "required": [ + "slug", + "manufacturer", + "model", + "category", + "mount_type", + "u_height", + "width_mm", + "height_mm", + "depth_mm", + "weight_grams", + "electrical_role", + "max_system_watts", + "poe_budget_watts", + "slot_compatibility", + "slots", + "port_count" + ], + "type": "object" + }, + "type": "array" + }, + "count": { + "description": "Total number of catalog blueprints matching all supplied filter criteria.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "count", + "blueprints" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
undo_redo2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"History traversal direction: undo reverts the previous mutation, redo reapplies it."New value: +"History traversal direction: \"undo\" reverts the most recent state mutation, \"redo\" reapplies a reverted mutation." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Undo/redo history traversal result payload.", + "properties": { + "action": { + "description": "History traversal direction that was requested.", + "enum": [ + "undo", + "redo" + ], + "type": "string" + }, + "applied": { + "description": "True if a history snapshot was restored; false if the target history stack was empty.", + "type": "boolean" + }, + "ascii_elevation": { + "description": "Updated ASCII front/rear rack elevation diagram after history traversal.", + "type": "string" + }, + "redo_available": { + "description": "Number of remaining redo snapshots available in memory.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "undo_available": { + "description": "Number of remaining undo snapshots available in memory.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "validation": { + "additionalProperties": false, + "description": "Updated 5-stage validation report for the restored rack state.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "action", + "applied", + "undo_available", + "redo_available", + "ascii_elevation", + "validation" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
- Changed
validate_rack1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "description": "Rack state inspection and validation result payload.", + "properties": { + "ascii_elevation": { + "description": "Formatted ASCII front/rear rack elevation diagram, mounted device inventory, and power/PoE summary.", + "type": "string" + }, + "is_valid": { + "description": "True when error_count is 0 across all 5 validation stages.", + "type": "boolean" + }, + "validation": { + "additionalProperties": false, + "description": "Complete 5-stage deterministic validation report with issues and remediation_suggestions.", + "properties": { + "error_count": { + "description": "Total number of blocking ERROR diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "is_valid": { + "description": "True when zero ERROR-level diagnostic issues exist.", + "type": "boolean" + }, + "issues": { + "description": "List of all detected ERROR, WARNING, and INFO diagnostic issues.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "mechanical_summary": { + "additionalProperties": false, + "description": "Aggregated mechanical mass, center of gravity, thermal BTU/hr, and acoustic dB(A) metrics.", + "properties": { + "airflow_profile": { + "default": "uniform-passive", + "description": "Rack-wide thermal airflow regime classification.", + "enum": [ + "uniform-front-to-rear", + "uniform-passive", + "hybrid-active-passive", + "mixed-conflict" + ], + "type": "string" + }, + "available_portal_u_positions": { + "description": "1-indexed U slots that allow front-to-rear cable pass-through (open U or brush panel).", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "center_of_gravity_y_mm": { + "description": "Vertical Center of Gravity height from bottom of U1 in millimeters.", + "type": "number" + }, + "combined_noise_db_a": { + "default": 0, + "description": "Logarithmic sum of acoustic noise emissions in dB(A) across all mounted devices.", + "type": "number" + }, + "normalized_cog_y": { + "description": "Normalized vertical Center of Gravity ratio (0.0 = bottom, 1.0 = top; keep <= 0.50).", + "type": "number" + }, + "total_thermal_btu_hr": { + "default": 0, + "description": "Total peak thermal dissipation in BTU/hr (1W = 3.41214 BTU/hr).", + "type": "number" + }, + "total_weight_grams": { + "description": "Total mass of all mounted equipment in grams.", + "type": "number" + } + }, + "required": [ + "total_weight_grams", + "center_of_gravity_y_mm", + "normalized_cog_y", + "available_portal_u_positions", + "total_thermal_btu_hr", + "combined_noise_db_a", + "airflow_profile" + ], + "type": "object" + }, + "power_summary": { + "additionalProperties": false, + "description": "Aggregated electrical and PoE DAG power analysis.", + "properties": { + "power_sources": { + "description": "Per-PDU and per-UPS electrical load breakdown.", + "items": { + "additionalProperties": false, + "description": "Load and capacity summary for a mounted PDU or UPS unit.", + "properties": { + "capacity_watts": { + "description": "Maximum rated output capacity of the power source in watts.", + "type": "number" + }, + "role": { + "description": "Electrical source classification (\"pdu\" or \"ups\").", + "enum": [ + "pdu", + "ups" + ], + "type": "string" + }, + "source_instance_id": { + "description": "Instance ID of the upstream PDU or UPS unit.", + "type": "string" + }, + "total_load_watts": { + "description": "Cumulative downstream system and PoE load in watts.", + "type": "number" + }, + "utilization_percent": { + "description": "Percentage of rated watt capacity consumed (0..100+).", + "type": "number" + } + }, + "required": [ + "source_instance_id", + "role", + "capacity_watts", + "total_load_watts", + "utilization_percent" + ], + "type": "object" + }, + "type": "array" + }, + "pse_budgets": { + "description": "Per-switch PoE budget utilization breakdown.", + "items": { + "additionalProperties": false, + "description": "PoE budget utilization breakdown for a single PSE switch.", + "properties": { + "consumed_poe_watts": { + "description": "Total PoE power drawn by connected Powered Devices (PDs) in watts.", + "type": "number" + }, + "downstream_devices": { + "description": "Instance or endpoint IDs of downstream PoE consumers powered by this switch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poe_budget_watts": { + "description": "Maximum rated PoE output power budget of the switch in watts.", + "type": "number" + }, + "pse_instance_id": { + "description": "Instance ID of the PoE Power Sourcing Equipment (PSE) switch.", + "type": "string" + }, + "remaining_poe_watts": { + "description": "Remaining available PoE power budget in watts (negative if overloaded).", + "type": "number" + } + }, + "required": [ + "pse_instance_id", + "poe_budget_watts", + "consumed_poe_watts", + "remaining_poe_watts", + "downstream_devices" + ], + "type": "object" + }, + "type": "array" + }, + "total_poe_watts": { + "description": "Total PoE power draw across all connected PoE devices and external drops in watts.", + "type": "number" + }, + "total_system_watts": { + "description": "Total peak system power draw across all mounted equipment in watts.", + "type": "number" + }, + "unpowered_active_instances": { + "description": "Active device instance IDs missing a valid AC, DC, USB-C, or PoE power input.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "total_system_watts", + "total_poe_watts", + "pse_budgets", + "power_sources", + "unpowered_active_instances" + ], + "type": "object" + }, + "status": { + "description": "Overall rack validation state (\"VALID\" when error_count is 0).", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "warning_count": { + "description": "Total number of non-blocking WARNING diagnostics.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "status", + "is_valid", + "error_count", + "warning_count", + "issues", + "power_summary", + "mechanical_summary" + ], + "type": "object" + } + }, + "required": [ + "is_valid", + "ascii_elevation", + "validation" + ], + "type": "object" + }, + "issues": { + "description": "Structured diagnostic findings (ERROR, WARNING, INFO) with actionable remediation_suggestions.", + "items": { + "additionalProperties": false, + "description": "Single validation finding with deterministic self-correction feedback.", + "properties": { + "affected_instances": { + "description": "Device instance IDs involved in this diagnostic issue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "description": "Machine-readable deterministic validation diagnostic code.", + "enum": [ + "CHASSIS_COLLISION", + "PLUG_CLEARANCE_COLLISION", + "FRONT_DOOR_COLLISION", + "SLOT_DIMENSION_OVERFLOW", + "SLOT_INCOMPATIBLE", + "OUT_OF_RACK_BOUNDS", + "BLUEPRINT_NOT_FOUND", + "PORT_NOT_FOUND", + "PORT_ALREADY_OCCUPIED", + "CONNECTOR_INCOMPATIBLE", + "SIGNAL_PROTOCOL_INCOMPATIBLE", + "SPEED_MISMATCH", + "POE_BUDGET_EXCEEDED", + "POE_CLASS_EXCEEDED", + "UPS_OVERLOAD", + "UNPOWERED_DEVICE", + "TOP_HEAVY_RACK", + "NO_FRONT_TO_REAR_PORTAL", + "THERMAL_AIRFLOW_CONFLICT", + "THERMAL_HOTSPOT_STACKING", + "ACOUSTIC_NOISE_HIGH" + ], + "type": "string" + }, + "message": { + "description": "Detailed engineering explanation with exact millimeter/watt figures.", + "type": "string" + }, + "remediation_actions": { + "description": "Optional machine-actionable remediation descriptors.", + "items": { + "additionalProperties": false, + "description": "Structured self-correction action for autonomous agent remediation.", + "properties": { + "action_type": { + "description": "Recommended self-correction operation category.", + "enum": [ + "move_device", + "change_cable_type", + "connect_power", + "disconnect_cable", + "redistribute_poe", + "add_portal_gap", + "change_rack_depth" + ], + "type": "string" + }, + "description": { + "description": "Human- and agent-readable explanation of the remediation step.", + "type": "string" + }, + "suggested_cable_type": { + "description": "Suggested replacement cable_type (e.g. angled plug or higher speed grade).", + "type": "string" + }, + "suggested_face": { + "description": "Mounting or port face relative to the rack or chassis.", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "suggested_u_positions": { + "description": "Candidate 1-indexed U positions that resolve the spatial conflict.", + "items": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "type": "array" + }, + "target_cable_id": { + "description": "Cable connection cable_id targeted by this remediation action.", + "type": "string" + }, + "target_instance_id": { + "description": "Device instance_id targeted by this remediation action.", + "type": "string" + } + }, + "required": [ + "action_type", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "remediation_suggestions": { + "description": "Actionable self-correction instructions for the calling LLM agent.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "severity": { + "description": "Severity level of the engineering constraint diagnostic.", + "enum": [ + "ERROR", + "WARNING", + "INFO" + ], + "type": "string" + }, + "stage": { + "description": "Validation pipeline stage (1..5) that produced this finding.", + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "u_range": { + "additionalItems": false, + "description": "Inclusive [start_u, end_u] range where the issue occurs.", + "items": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "code", + "severity", + "affected_instances", + "message", + "remediation_suggestions" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Deterministic execution outcome: \"VALID\" when the operation succeeded with 0 validation errors; \"INVALID\" when precondition or engineering validation errors are present in issues[].", + "enum": [ + "VALID", + "INVALID" + ], + "type": "string" + }, + "summary": { + "description": "Concise human- and agent-readable summary of the tool result and validation status.", + "type": "string" + } + }, + "required": [ + "status", + "summary", + "data", + "issues" + ], + "type": "object" +}
11 tool updates
v0.4.9- Changed
connect_cables10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / cables / items / additionalPropertiesRemoved value: -false - removed
Input schema / properties / cables / items / properties / from / additionalPropertiesRemoved value: -false - added
Input schema / properties / cables / items / properties / preferred_portal_u / maximumAdded value: +9007199254740991 - added
Input schema / properties / cables / items / properties / routing_modeAdded value: +{ + "default": "shortest-direct", + "description": "Optional routing strategy override: defaults to shortest-direct (shortest collision-free path); set to left-duct or right-duct only when the user explicitly requests routing via a side cable duct.", + "enum": [ + "shortest-direct", + "left-duct", + "right-duct" + ], + "type": "string" +} - removed
Input schema / properties / cables / items / properties / to / $refRemoved value: -"#/properties/cables/items/properties/from" - added
Input schema / properties / cables / items / properties / to / descriptionAdded value: +"Source or destination port endpoint of a physical cable." - added
Input schema / properties / cables / items / properties / to / propertiesAdded value: +{ + "face": { + "description": "Explicit rack face selector (used to distinguish front vs rear connections on passthrough couplers).", + "enum": [ + "front", + "rear" + ], + "type": "string" + }, + "instance_id": { + "description": "Target device instance_id (top-level or child sub-module).", + "minLength": 1, + "type": "string" + }, + "port_id": { + "description": "Target port_id on the device.", + "minLength": 1, + "type": "string" + } +} - added
Input schema / properties / cables / items / properties / to / requiredAdded value: +[ + "instance_id", + "port_id" +] - added
Input schema / properties / cables / items / properties / to / typeAdded value: +"object"
- Changed
define_custom_blueprint37 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / additionalPropertiesRemoved value: -false - added
Input schema / properties / blueprint / properties / descriptionAdded value: +{ + "description": "Human-readable explanation of what the device is, its role in the rack, and its physical mounting method (e.g. native rack ears vs. 3D-printed carrier/cradle).", + "type": "string" +} - removed
Input schema / properties / blueprint / properties / geometry / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / port_groups / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / blueprint / properties / port_groups / items / properties / count / maximumAdded value: +9007199254740991 - removed
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / additionalPropertiesRemoved value: -false - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / columns / maximumAdded value: +9007199254740991 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / grid / properties / rows / maximumAdded value: +9007199254740991 - added
Input schema / properties / blueprint / properties / port_groups / items / properties / start_index / maximumAdded value: +9007199254740991 - removed
Input schema / properties / blueprint / properties / ports / items / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / items / $refRemoved value: -"#/properties/blueprint/properties/port_groups/items/properties/capabilities/items" - added
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / items / descriptionAdded value: +"Supported electrical, optical, or PoE protocol capability." - added
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / items / enumAdded value: +[ + "100base-tx", + "1000base-t", + "2500base-t", + "5gbase-t", + "10gbase-t", + "10gbase-sr", + "10gbase-lr", + "10gbase-dac", + "25gbase-dac", + "poe-out", + "poe+", + "poe-out-af", + "poe-out-at", + "poe-out-bt-type3", + "poe-out-bt-type4", + "poe-in-af", + "poe-in-at", + "poe-in-bt-type3", + "poe-in-bt-type4", + "ac-mains", + "dc-power", + "usb-pd", + "usb-3.0", + "usb-3.1", + "audio-analog", + "serial-rs232", + "passthrough-coupler" +] - added
Input schema / properties / blueprint / properties / ports / items / properties / capabilities / items / typeAdded value: +"string" - removed
Input schema / properties / blueprint / properties / ports / items / properties / connector_type / $refRemoved value: -"#/properties/blueprint/properties/port_groups/items/properties/connector_type" - added
Input schema / properties / blueprint / properties / ports / items / properties / connector_type / descriptionAdded value: +"Physical connector interface type." - added
Input schema / properties / blueprint / properties / ports / items / properties / connector_type / enumAdded value: +[ + "rj45", + "rj45-serial-console", + "sfp-plus", + "iec-c13", + "iec-c14", + "schuko-cee7", + "dc-5525", + "usb-c", + "usb-a", + "audio-35mm" +] - added
Input schema / properties / blueprint / properties / ports / items / properties / connector_type / typeAdded value: +"string" - removed
Input schema / properties / blueprint / properties / ports / items / properties / coordinates / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / ports / items / properties / coordinates / properties / orientation / $refRemoved value: -"#/properties/blueprint/properties/port_groups/items/properties/orientation" - added
Input schema / properties / blueprint / properties / ports / items / properties / coordinates / properties / orientation / enumAdded value: +[ + "upright", + "inverted", + "left", + "right" +] - added
Input schema / properties / blueprint / properties / ports / items / properties / coordinates / properties / orientation / typeAdded value: +"string" - removed
Input schema / properties / blueprint / properties / ports / items / properties / direction / $refRemoved value: -"#/properties/blueprint/properties/port_groups/items/properties/direction" - added
Input schema / properties / blueprint / properties / ports / items / properties / direction / descriptionAdded value: +"Signal or electrical power flow direction." - added
Input schema / properties / blueprint / properties / ports / items / properties / direction / enumAdded value: +[ + "input", + "output", + "bidirectional" +] - added
Input schema / properties / blueprint / properties / ports / items / properties / direction / typeAdded value: +"string" - removed
Input schema / properties / blueprint / properties / ports / items / properties / face / $refRemoved value: -"#/properties/blueprint/properties/port_groups/items/properties/face" - added
Input schema / properties / blueprint / properties / ports / items / properties / face / descriptionAdded value: +"Mounting or port face relative to the rack or chassis." - added
Input schema / properties / blueprint / properties / ports / items / properties / face / enumAdded value: +[ + "front", + "rear" +] - added
Input schema / properties / blueprint / properties / ports / items / properties / face / typeAdded value: +"string" - removed
Input schema / properties / blueprint / properties / power_and_thermal / additionalPropertiesRemoved value: -false - changed
Input schema / properties / blueprint / properties / printable_metadata / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "fasteners": { - "type": "string" - }, - "filament_grams": { - "description": "Estimated filament mass in grams.", - "minimum": 0, - "type": "number" - }, - "heat_set_inserts": { - "type": "string" - }, - "material_recommendation": { - "default": "PETG", - "type": "string" - }, - "printables_url": { - "format": "uri", - "type": "string" - } - }, - "required": [ - "filament_grams" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "fasteners": { + "type": "string" + }, + "filament_grams": { + "description": "Estimated filament mass in grams.", + "minimum": 0, + "type": "number" + }, + "heat_set_inserts": { + "type": "string" + }, + "material_recommendation": { + "default": "PETG", + "type": "string" + }, + "printables_url": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "filament_grams" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Input schema / properties / blueprint / properties / slots / items / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / slots / items / properties / max_dimensions_mm / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / slots / items / properties / offset_mm / additionalPropertiesRemoved value: -false - removed
Input schema / properties / blueprint / properties / visuals / additionalPropertiesRemoved value: -false
- Changed
disconnect_cables1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
export_deliverables1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_device_blueprint1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
init_rack2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / u_height / maximumAdded value: +9007199254740991
- Changed
modify_equipment6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / new_face / $refRemoved value: -"#/properties/face" - added
Input schema / properties / new_face / enumAdded value: +[ + "front", + "rear" +] - added
Input schema / properties / new_face / typeAdded value: +"string" - added
Input schema / properties / new_u_position / maximumAdded value: +9007199254740991 - added
Input schema / properties / u_position / maximumAdded value: +9007199254740991
- Changed
mount_equipment2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / u_position / maximumAdded value: +9007199254740991
- Added
plan_external_endpoints - Changed
search_catalog4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / mount_type / $refRemoved value: -"#/properties/form_factor" - added
Input schema / properties / mount_type / enumAdded value: +[ + "rackmount-19", + "rackmount-10", + "rackmount-6", + "sub-module", + "shelf-standing", + "10inch", + "19inch", + "6inch" +] - added
Input schema / properties / mount_type / typeAdded value: +"string"
- Changed
undo_redo1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
11 tool updates
v0.1.0- First observed
connect_cables - First observed
define_custom_blueprint - First observed
disconnect_cables - First observed
export_deliverables - First observed
get_device_blueprint - First observed
init_rack - First observed
modify_equipment - First observed
mount_equipment - First observed
search_catalog - First observed
undo_redo - First observed
validate_rack
TDQS
Scored across 12 tools
Every tool targets a distinct resource+action and the descriptions explicitly cross-reference neighbors (search_catalog vs get_device_blueprint, mount_equipment vs modify_equipment, connect_cables vs plan_external_endpoints). The only near-neighbors (search vs get, connect vs disconnect) are cleanly separated by discovery-vs-exact-lookup and add-vs-remove semantics.
All names follow a predictable verb_noun pattern (search_catalog, mount_equipment, connect_cables, validate_rack, export_deliverables), with only undo_redo deviating as a natural compound for its dual-action purpose. Uniform snake_case throughout, no camelCase mixing.
12 tools sit squarely in the well-scoped range and each earns its place across catalog, rack, cabling, external wiring, validation, export, and history. No redundant or filler tools are present.
Full lifecycle is covered: catalog discovery, custom blueprint registration, rack init/reset, mount/modify/remove equipment, cable connect/disconnect, external endpoints, validation, export, and undo/redo. The only soft gap is a dedicated read of mounted-device details, but validate_rack returns elevation diagrams and full diagnostics to inspect state.
Maintenance
Related MCP Connectors
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
AI network lab: build and validate real multi-vendor router and switch labs from a prompt.
Find drawer presets and create printer-aware Gridfinity baseplate configurations.
3D printing: printable models, calculators, troubleshooting wiki, build guides, AI 3D + CAD design.
Related MCP Servers
- AlicenseAqualityCmaintenanceDeterministic AI data-center design tools for sizing, validation, and conceptual rack/site layouts. Supports NVIDIA Hopper, Blackwell, and Rubin profiles. Calculations require a registered AIDC API key; results preserve warnings, RFIs, and pending validations.33MIT
- AlicenseAqualityBmaintenanceEnables generating parametric 3D-printable parts from OpenSCAD/CadQuery models, exporting STL/3MF files, running DFM checks, and retrieving Bambu X1 Carbon starting profile notes.8MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to design, modify, and verify exact B-rep 3D CAD models by running build123d scripts on an OpenCascade kernel, with live three.js preview, collision and FDM printability checks, text-based spatial perception, user notes/sketch annotations, version history, and one-click export to OrcaSlicer.1MIT
- AlicenseAqualityAmaintenanceFloor plans as code. Compile, describe, lint, validate, score, repair, fix, finish, suggest and complete ArchLang (.arch) plans: a deterministic open-source DSL and compiler that renders floor plans to SVG, DXF or PDF with geometric validation. Runs locally over stdio; no API key or network needed.111,850 npm27MIT