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/guideWhy not a spreadsheet
| In a spreadsheet | In 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 cell | SUM(gl.amount MATCHING *) maintained as a group-by |
| A wrong reference produces a plausible number | An unknown name is a compile error with a suggestion |
| Changing one input recalculates the workbook | Only the affected cells are recomputed |
| No way to ask why a cell has its value | explain returns the rule, the reads and the dependents |
| Copy the file to try something | Add a scenario member; compare scenarios in one view |
| The agent reads cells to check its work | list_errors is empty or it is not |
| 100,000 customers means 100,000 rows of formulas | A list with 100,000 members and one rule |
| Colleagues expect an .xlsx | export 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