SD-DC

An agentic stack for data centre design

A data centre is sized, routed, costed and simulated by a dozen tools that don't talk to each other, and people carry the numbers between them. SD-DC bets that an agent can close that loop instead: sizing, routing, drawing and simulating become tool calls over one machine-readable model of the building, and every answer gets checked by running it.

The AU01 hall digital twin at 709.8 kW sustained load, with cold supply air entering the rack faces and an amber exhaust plume rising into the return
The AU01 hall digital twin at 709.8 kW sustained, solved faster than real time and streamed to a browser. Worst rack 28.85 °C against a 35 °C envelope.

The design loop

The unit of work isn't a drawing. It's a catalogue entry, a sizing calculation, a route or a simulation. Each is machine-readable, carries its own provenance, and can be checked by running it.

Brief1 MW hall, N+1 cooling, AS/NZS
Agentdecides what to call
Tools over MCPsize, route, draw, simulate
Verifydoes it route, export, clear, pass?
Outputsschedules, BOM, STEP, a hall the twin can run

Every answer is checkable

A cable size is right or wrong against a standard. A pipe route closes or it doesn't. That makes the test suite a reward signal as well as a test.

The inputs are finite

Vendors publish datasheets and standards publish methods. A data hall contains a few hundred product families, not a long tail.

Nothing is real time

A design takes weeks. An agent that takes four minutes and a hundred tool calls to size a feeder run is still far faster than the meeting it replaces.

The tools share one model, IndustroML. It describes a site as containers, assets, interfaces and connections. A connection routed through named trays is an electrical fact, a geometric fact and a line on the bill of materials all at once.

Pipe routing as a service

An A* router over corners rather than grid cells, so the pipe rules are part of every move: leave along the outlet, arrive against the inlet, keep runs long enough for real elbows, keep clear of everything. It needs no FreeCAD, and other agents call it over MCP or REST.

A review sheet with plan, two elevations and an isometric of four chilled-water pipes routed from two chillers to two CDUs around a column
A review sheet from piping_render_routes for an invented plant room: four DN150 pipes, two chillers to two CDUs. Supply is blue and return red. Elbows are drawn to scale, and anything that breaks a rule shows in red.

What an agent gets back

  • Corner points, straights and elbows, lengths and a bill of materials
  • The validator's verdict, and a hash of the request
  • An IndustroML connection, ready to write into the model
  • A PNG review sheet with a JSON summary, for a person to look at

A refusal it can act on

A pipe that can't be built says why, in terms the agent can fix:

{"status": "failed", "reason": "blocked_nozzle",
 "nozzle": "CH2.in", "obstacle": "R-1/run2",
 "suggest": ["move R-1/run2 at least 218 mm
             further from CH2.in",
             "use DN40, which needs 147 mm"]}

Tools

MCP toolRESTDoes
piping_route_pipePOST /api/routeOne pipe, outlet nozzle to inlet nozzle
piping_route_networkPOST /api/route/batchPipes in order; each routed pipe becomes an obstacle for the next
piping_validate_routePOST /api/validateChecks corner points someone drew by hand
piping_render_routesPOST /api/renderRoutes or checks, then draws plan, elevations and isometric
tray_route_and_supportPOST /api/trayRoutes a cable tray, supports it, sizes its cables and builds the 3D model

On a real project benchmark of 34 chilled-water pipes, the router routed all 34 for a total of 194.2 m with 42 elbows. The engineer's hand-drawn routes were 196.4 m with 46 elbows.

Cable trays, supports and the cables in them

The same router lays out a ladder tray: it keeps the tray's real depth clear above and below and its full width clear beside it, and bends at the fitting radius. It then sizes every circuit on the tray to AS/NZS 3008, sets the support spacing from the actual cable weight, and builds the whole run as a FreeCAD and STEP model.

Plan, elevations and isometric of a ladder tray from a transformer to a switchroom, past a generator and a pit, on 20 ground-mounted supports
An invented yard: a 900 mm ladder from a transformer's LV box to a switchroom wall, past a generator and a drainage pit, on 20 two-post supports at 1.5 m spacing.
FreeCAD model of the tray bend, with each circuit's cables following its own radius around the bend and the supports below
The bend in FreeCAD. Each cable keeps its place across the tray, so the inside ones take the tighter radius.
FreeCAD model of the full tray run with supports and the surrounding equipment
The whole run, with the transformer, generator and switchroom as context. Builds in about three seconds.
Cross-section of the tray: three parallel trefoil groups for the largest feeder, then smaller trefoils with neutral and earth alongside
Cross-section. Every core is drawn at its catalogue diameter: trefoils of three actives, with the neutral and earth beside them.

The cable schedule it produces

CircuitLoadCableLengthDesign / capacityVoltage drop
F-011200 kW3 × (3 × 1C 630 + 1C 630 N) + 1C 500 E41 m1757 / 1822 A0.66 %
F-02400 kW3 × 1C 630 + 1C 630 N + 1C 185 E41 m586 / 625 A0.65 %
F-03160 kW3 × 1C 150 + 1C 150 N + 1C 50 E43 m247 / 256 A0.80 %
F-04250 kVA3 × 1C 240 + 1C 240 N + 1C 95 E41 m348 / 349 A0.74 %
F-0563 A3 × 1C 16 + 1C 16 N + 1C 10 E45 m63 / 73 A1.69 %

Copper XLPE single-core cables, sized at 40 °C ambient and a 25 kA fault level. All seven parallel runs on the tray count towards grouping derating. The full schedule also gives fault current, operating temperature, weight and tray width per circuit, and the metres of each size to order. It comes out as CSV and Markdown.

The loads are made up and the tray's load table is synthetic. Support ratings are unverified and every result is a draft for an engineer to check.

Images for review, then a live view

An agent's design is only useful once a person can check it, so every tool that makes geometry also makes something to look at.

Built Schematic sheets

Plan, elevations and isometric as SVG or PNG, straight from the router. No CAD needed, so an agent can attach one to every answer.

Next Shaded renders

A render job on the headless FreeCAD worker that images the real solids: the model's own views, close-ups and sections.

Planned Live view

The FreeCAD desktop streamed over WebRTC so an engineer can watch an agent work, or take the controls.

Containerised CAD

FreeCAD is heavy, stateful and slow to script, so it sits behind a job queue rather than inside a tool call. A CAD worker builds the solids, checks every joint, and either returns the STEP and glTF or says which clearance failed. A worker that refuses with a reason is a tool an agent can use. One that quietly produces geometry nobody can build just moves the error to the site.

Generated tray fittings: a 90 degree bend, an internal riser, a tee, a reducer and a closed rectangular circuit
Generated tray fittings: a bend, a riser, a tee, a reducer, and a closed circuit that proves the joints line up.

What's built today

The loop above is where this is going. This is how far it has got.

ComponentWhat it doesState
cable-sizingAS/NZS 3008 cable sizing with a full audit trail. REST, MCP over stdio and HTTP, browser UIMature
digital-twinReal-time hall thermals, calibrated against CFD, streamed to a browserDeployed
pipingPipe router, validator and review sheets as an MCP and REST serviceService
traysTray routing, supports off the ground, cable sizing on the tray, FreeCAD and STEP modelDraft
cfd-cabinet-coolingOpenFOAM: does a fan wall keep a 30 kW cabinet inside ASHRAE limits?Working
liquid-twinDirect liquid cooling, CDU to chillers, as a hydraulic networkPhase 1 of 6
cables, cable-tray-ezystrutCatalogues: cable OD, weight, bend radius and impedance; tray families and joining rulesWorking
vm-setupHeadless FreeCAD, XML-RPC server and MCP bridgeWorking
Design agentAn agent that takes a design task and calls all of the aboveDesigned
layout, costingComposing a hall from a brief; BOM to rates to a numberNot built
OpenFOAM streamlines through the AU01 hall
OpenFOAM ground truth for the twin: airflow through the AU01 hall.

Try it

git clone https://github.com/sinkers/sd-dc
cd sd-dc
./run-tests.sh

# pipe routing over MCP
claude mcp add piping -- \
  python3 piping/mcp_server.py

# the tray demo on this page
python3 trays/tools/demo.py

The value suites skip without the licensed data, which isn't in the repo. A synthetic suite still checks that it all fits together.

Code open, data private

Engines, schemas, tests and docs are public. Vendor documents, standards tables and project data are not.

Public

The engines, the IndustroML schema, tests and documentation, in sd-dc and industroml. Every demo on this page uses invented scenes.

Private

Vendor datasheets, standards tables, the training corpus, project models and installed rates. A calculator holds the data and the user gets an answer, the same way the established AS/NZS 3008 calculators work.

This is a private study and research project, not for commercial use. A statement of purpose isn't a licence: the vendor data it reads isn't licensed to you, so check each source's terms before using it.