compile_events · live
awaiting first compile…
For AI-native developers · MCP / REST · day one

A financial modeling MCP
your agent can call.

Typed IR. DAG. Sensitivity. Scenarios. One npx command, and your agent harness has a deterministic finance backend behind it. No custom-tool glue, no JSON pretending to be a model.

agent builders · live pulse0 compiles · 0 in last window
MCP+ REST

Both protocols, day one. Your agent calls the same engine your backend can curl.

quickstart
1command

npx flatland-setup auto-detects Claude Code and Cursor. Writes config, runs end-to-end test.

install
Specimen · MCP tool catalogyour agent sees these
Tool
Purpose
Returns
flatland_init
Load skills and templates into the agent context. Call first every session.
skills_catalog, version_info, usage_summary
flatland_create_model
Create a new model. Set name, currency, period configuration.
model_id, name
flatland_compile
Topologically sort the DAG, evaluate, run dimensional inference, run assertions. The headline tool.
bindings, assertions, latency_ms, bit_identical
flatland_sensitivity
Perturb one or more drivers, walk the DAG, return elasticity-ranked output deltas.
ranked_drivers, elasticities, latency_ms
flatland_save_model
Persist the current model to local storage (~/.flatland/models/).
model_id, path
flatland_load_model
Load a previously saved model by name.
model_id, drivers, assertions

Your agent calls.
A real compiler answers.

flatland → /workshopflatlandfi.com/m/________

Intake

What are you modeling?
What stage?
What vertical?
12 drivers · 4 assertions · ready

Your compile runs on our servers and is saved so you can share it. It also feeds the live heartbeat: counts, timing, and a coarse region — never the model itself.

// Answer the three questions on the left. Your IR materializes here.
Dependency graph
arpucustchurncashburnarrgmburn_multrunway
Output · forward 24 months
ARR$3.2M
Gross margin78.4%
Runway at current burn19 months
Burn multiple1.12
Compile1.84s · bit-identical
Now build one with your numbers
Build your own modelShareable URLcopy →
Specimen · one tool call, end to endMCP · tools/call · flatland_compile
RequestPOST /mcp · tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "flatland_compile",
    "arguments": {
      "model_id": "ndo_q3"
    }
  }
}

Header: X-API-Key: fl_live_…

Response (200)3 / 4 assertions pass
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "model_id": "ndo_q3",
    "bindings": {
      "arr": 1617720,
      "gross_margin": 0.82,
      "runway_months": 18.27,
      "burn_multiple": 3.86
    },
    "assertions": [
      { "id": "gm_floor",          "passed": true },
      { "id": "runway_target",     "passed": true },
      { "id": "burn_mult_ceiling", "passed": false },
      { "id": "arr_floor",         "passed": true }
    ],
    "latency_ms": 47,
    "bit_identical": true
  }
}

The model produced a number and told your agent which assumption broke. That's the difference between an answer and a guess.

Nextpick where you want to go deeper

Bring your agent.
We'll bring the math.

Flatland · index of everything
© 2026 Flatland · Financial Reasoning Infrastructure · live pulse · awaiting first compile