Machine interface · JSON, MCP, metered

Your software can ask what binds, and get an engineering answer back.

The same engine behind the studies, callable directly. Thirteen electrical, thermal and physical constraints solved against a hall; the binding one returned with its basis, the costed relief ladder behind it, and the date the whole thing turns on. No account manager, no PDF, no spreadsheet round-trip.

Infrastructure engineer working at a workstation beside live server racks, screens unreadable.
Reference photography — not a customer site; not measured evidence.
Two dialects, one definition

OpenAI / Anthropic function-calling shape at /v1/tools, and Model Context Protocol over JSON-RPC at /mcp. Both generated from the same schema the server validates against.

Units, not calls

A qualify and a forty-hall portfolio run do not cost the same and are not billed the same. Rates are published at /v1/version so you can price a job before you run it.

Evidence on every number

Each figure carries an evidence class E0–E7 and a provenance digest. A modelled number loose inside an agent loop is more dangerous than one in a board pack, not less.

What you can call

gridforge_qualify is free and needs no key. Everything else meters.

ToolEndpointUnitsReturns
gridforge_qualifyfree/v1/qualify0binding constraint, racks as found and after relief, the item that sets the date, and the inputs nobody has measured. No capital cost, no lead times: those are the paid engagement.
gridforge_screen/v1/screen1screen payload, or the rendered screening document.
gridforge_compare/v1/compare1gridforge/ttp-compare/1: scenarios[], ranking, grade, caveats, request_digest, provenance.
gridforge_study/v1/study5the model pack, a rendered document, or the CSV working files.
gridforge_portfolio/v1/portfolio1halls ranked against the objective, with the total deployable rack count.
gridforge_diff/v1/diff2headline, racks/weeks/capex deltas, ranked drivers, explained and residual.
gridforge_spec/v1/spec3the specification document, what it is sized for, and the response template a supplier fills in.
gridforge_bids/v1/bids2ranked bids with scores, schedule impact, and optional cost-library lines.
gridforge_power_assess/v1/power/assess5capacity (current/target/gap), binding_constraint, headroom_ladder (every relief priced and dated), time_to_power (critical item and dependencies), evidence (calibration state, evidence classes used), and next_action.
gridforge_power_deploy_assess/v1/power/deploy/assess5load_profile summary (peak/mean/load-factor/ramp/step-events, with its own evidence class), capacity (grid-only vs. target, the gap), architectures (each with contingency status, CAPEX, lead time, whether fully costed, readiness_gates — interconnection/protection/fuel/permitting/electrical/reliability, each PASS/FAIL/MISSING_DATA/REQUIRES_ENGINEERING_STUDY/REQUIRES_LICENSED_REVIEW/NOT_APPLICABLE with its reason and what's missing — plus rfq_ready [enough data to prepare an RFQ], external_clearances_required [who still has to sign off — protection, utility, permitting], and execution_ready [cleared to build, which on-site generation/storage architectures will almost never show as true from screening alone]), and next_action, which names a missing readiness field before it ever says 'proceed to RFQ', always separates RFQ-readiness from build clearance, and states which objective was used, why, and the trade-off against the runner-up architecture — never a silent 'cheapest wins'.
gridforge_power_deploy_spec/v1/power/deploy/spec3the specification document, or its summary and response template as JSON.
gridforge_power_deploy_bids/v1/power/deploy/bids2the ranked comparison, the leading compliant supplier (or null) and the note.
gridforge_proposal/v1/proposal2the proposal document and the engagement's catalogue price.

Add it to your AI client

The free qualifier works over MCP with no key and no account. Paste one of these and ask your assistant whether a hall can take GB300 racks — it will come back with the constraint that binds first, the rack count as found, and which item sets the energisation date.

claude mcp add --transport http gridforge https://gridforge-engine.fly.dev/mcp

The handshake tells the model not to present a modelled figure as a property of a physical asset, and every result carries our calibration state. An E0 number loose in an agent loop is more dangerous than one in a board pack — nobody downstream reads the footnote.

Try it without a key

Seven numbers about an existing air-cooled hall. The answer names the constraint that binds first, how many racks fit as found, and which item sets the energisation date.

curl -s -X POST https://gridforge-engine.fly.dev/v1/qualify \
  -H 'content-type: application/json' \
  -d '{"contracted_MW":12,
       "current_site_peak_MW":7.4,
       "current_it_load_MW":4.9,
       "busway_ampacity_A":400,
       "tapoff_max_A":63,
       "plant_supply_C":6,
       "positions_available":180}'

Point an agent at it

MCP over JSON-RPC 2.0 at /mcp, protocol 2025-06-18. The transport is open; each tool keeps its own tier, so the free qualifier works without a key and everything else asks for one.

curl -s -X POST https://gridforge-engine.fly.dev/mcp \
  -H 'x-api-key: YOUR_KEY' \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,
       "method":"tools/call",
       "params":{"name":"gridforge_qualify",
                 "arguments":{ ... }}}'

What the engine says about its own accuracy

Model accuracy against instrumented sites has not been established: 0 reconciled observations across 0 sites, covering 0 of 20 model outputs. Every figure in this report is modelled. The uncertainty ranges shown come from input uncertainty propagated through the model, not from the difference between this engine's predictions and site data — no such difference has been recorded yet.

State

uncalibrated

Observations

0

Sites

0

Outputs covered

0/20

This block is on every response, including the free one, including while the answer is zero. An accuracy record that only appears once it flatters us is a marketing number. Live at /v1/calibration.

If you are integrating this

Every numeric field in a response carries an evidence class (E0 assumed … E7 observed in operation) and a provenance digest. An agent consuming these must not present an E0 or E1 figure as a property of the physical asset. The calibration block states how far this engine has been reconciled against site data; where it says uncalibrated, it means uncalibrated.

Metered access

Run a free capacity check first — if it answers your question you do not need a key. If you have two hundred halls and a model that needs re-running every time a tariff or a platform spec moves, this is what that costs.

The key link goes to this address. Use the one your engineers actually read.

API — Triage

€900 /month

600 units · 120 full solves, or 600 screens

Metered access to the engine for one team screening a portfolio it already owns. 600 units a month: 600 constraint screens, or 120 full solves, or any mix. The free qualifier stays free and never touches the allowance.

API — Scale

€2,900 /month

2,500 units · 500 full solves, or 2,500 screens

For a platform or fund pricing halls continuously rather than in batches. 2,500 units a month, the portfolio endpoint billed per hall, and change notes naming the input that moved the answer.

API — Platform

€7,500 /month

10,000 units · 2,000 full solves, or 10,000 screens

For embedding the engine in a product your own customers use. 10,000 units a month, a named engineer on call for model questions, and redistribution terms for output you show to your own customers.

Monthly, cancel any time. No overage billing: over the allowance the engine returns 402 and you upgrade or wait for the reset — we would rather you saw a refusal than an invoice you did not expect.

Not sure yet?

The qualifier is free and needs no key, and the full deliverable is published in full — document, deck, proposal and the tables behind every number.

Run free capacity check See the full deliverableTry the BTM power deployment assessment