The modeling database for AI agents.

Spreadsheets are for eyes. Finicast is for agents: named line items, a real calendar, incremental recalculation, scenarios, and an explain for every number. Open-source engine (FiniDB); hosted at finicast.com.

For humans

Tell your agent:

Read https://finicast.com/agents and build me a three-year forecast from this CSV.

For agents

If you are an AI agent, this is your path. Total time: under a minute.

1. Connect to a FiniDB engine.
   Local (no account needed):
     npx finidb init ./model
     claude mcp add finidb -- npx finidb mcp --data ./model
   Hosted (your human creates a project at https://finicast.com and gives you a project id and token):
     claude mcp add finicast -- npx finidb mcp --url https://finicast.com --db <project> --token <token>

2. Read the guide (about 2,000 tokens): https://finicast.com/guide
   It covers the object model (lists, calendar, tables, modules, line items,
   scoped rules, views, scenarios), the formula language, ten idioms, and the
   diagnostic codes.

3. Build.
   finidb_describe                 → what exists
   finidb_import_csv               → land facts in a table; lists are created from the data
   finidb_apply_spec               → declare calendar, lists, modules, rules, views in one call
   finidb_query / finidb_explain   → read numbers back and check them

4. Verify before you hand back.
   finidb_list_errors must be empty. Use dry_run on finidb_apply_spec when you
   are not sure. Tell the human what you changed; in the hosted product they
   see your commands, the changed cells and the spec diff, and can restore.

5. Deliver.
   finidb_export kind=csv gives the human a grid; kind=spec gives a
   diffable model file.

Everything is name-based. There are no cell addresses. A formula looks like
   revenue = PREV(revenue) * (1 + growth)
and a rule can be scoped:
   amount {scenario: forecast, time: "> @last_actual"} = PREV(amount) * (1 + drivers.rev_growth)

Full API: https://finicast.com/docs/api   Full guide: https://finicast.com/guide

Why not a spreadsheet

In a spreadsheetIn Finicast
=C7*(1+$B$3)revenue = PREV(revenue) * (1 + growth)
=IF(D$2>$B$9, C7*(1+$B$3), D5)amount {time: "> @last_actual"} = PREV(amount) * (1 + growth), and a separate rule for actuals
=SUMIFS(GL!$D:$D, GL!$A:$A, $A7, GL!$B:$B, D$2) recomputed for every cellSUM(gl.amount MATCHING *) maintained as a group-by
A wrong reference produces a plausible numberAn unknown name is a compile error with a suggestion
Changing one input recalculates the workbookOnly the affected cells are recomputed
No way to ask why a cell has its valueexplain returns the rule, the reads and the dependents
Copy the file to try somethingAdd a scenario member; compare scenarios in one view
The agent reads cells to check its worklist_errors is empty or it is not
100,000 customers means 100,000 rows of formulasA list with 100,000 members and one rule
Colleagues expect an .xlsxexport kind=csv (xlsx coming)

See it built

A CSV of actuals becomes a three-statement forecast in twelve tool calls, including one diagnostic and its fix. Read the transcript.

Quick start: local (open source)

npx finidb init ./model
claude mcp add finidb -- npx finidb mcp --data ./model

Quick start: hosted

Create a project, copy the connect line from the Connect your agent card, and hand it to your agent.

What you get

lists · calendar · fact tables · modules · scoped rules · views · scenarios · explain · CSV export