Occam finds the simplest equation consistent with your data.
checking…
Occam is an MCP server that discovers mathematical equations from numerical data. Give it measurements, get back governing equations — ranked by the tradeoff between simplicity and accuracy.
Tools
| Tool | Method | Speed | Best for |
|---|---|---|---|
| sindy_run | Sparse Identification of Nonlinear Dynamics | seconds | Differential equations from time series |
| pysr_run | Evolutionary symbolic regression | 10s–5m | Algebraic relationships (Pareto front) |
| pysr_uncertainty | Bootstrap confidence intervals on a frozen expression | seconds | CIs on fit constants & prediction bands for an expression returned by pysr_run |
Examples
SINDy — discover a dynamical system
Given time series of the Lorenz attractor, Occam recovers the governing equations:
dx/dt = -10.0 x + 10.0 y
dy/dt = 28.0 x - 1.0 y - 1.0 x z
dz/dt = -2.667 z + 1.0 x y
PySR — find an algebraic law
Given noisy observations of a physical relationship, Occam returns a Pareto front trading complexity against accuracy:
Complexity Loss Expression
1 3.41 1.4
3 0.92 sin(x) * y
5 0.003 sin(x) * y + 1.4
Pricing
Free tier: Both tools accept up to 100 rows and 8 variables/features at no charge. Rate-limited to 10 requests/hour per IP.
Beyond free tier:
| Parameter | sindy_run | pysr_run |
|---|---|---|
| Baseline fee | $0.05 | $0.25 |
| Per 100 extra rows | $0.01 | $0.03 |
| Per extra variable² | $0.01 | $0.01 |
| Max rows | 500,000 | 50,000 |
| Max variables / features | 50 | 20 |
| Timeout | 30s | 5 min |
Payment methods: x402 (USDC on Base) or MPP/Stripe (card — adds $0.35 surcharge). When payment is required, the tool returns pricing details and payment options automatically.
Connect
Connect any MCP client to the remote endpoint:
https://occam.fit/mcp/
Or in claude_desktop_config.json:
{
"mcpServers": {
"occam": {
"type": "streamable-http",
"url": "https://occam.fit/mcp/"
}
}
}
How it works
SINDy uses PySINDy to fit sparse linear combinations of candidate library functions to numerical derivatives. It runs in-process in Python and returns results in seconds.
PySR delegates to a pool of pre-warmed Julia workers running SymbolicRegression.jl v2. It evolves a population of candidate expressions and returns the Pareto-optimal set — every expression that is the best known at its complexity level.