sindy_run
Sparse Identification of Nonlinear Dynamics (SINDy).
Recovers governing differential equations (dx/dt = f(x)) from time
series data. Returns human-readable sparse expressions. Fast (seconds).
For algebraic y = f(x) relationships without time structure, use
pysr_run instead.
Pricing: free tier up to 100 rows and 8 variables. Beyond that,
$0.05 + $0.01 per 100 extra rows + $0.01 per extra variable squared,
via x402 (USDC on Base) or MPP/Stripe. MPP/Stripe adds a flat $0.35
per-transaction fee (Stripe processing), so the MPP challenge amount
in a `payment_required` response is $0.35 higher than the x402 amount
for the same base price; x402 gets the lower rate. Omit `payment`
for free-tier requests; paid requests without a valid credential
receive a `payment_required` result with pricing and accepted schemes.
Full pricing table as structured JSON: occam://pricing
Advisory limits: jobs over 500,000 rows or 50 variables are accepted
but may not converge within the time budget; the response carries a
top-level `warning` the agent should surface and treat as tentative.
If `feature_names` is supplied, its length must equal the number of
data columns; a mismatch is rejected with a validation error.
Rate limit: 10 requests/hour per IP, 200/hour global, max queue
depth 20 (shared with pysr_run and pysr_uncertainty).
Response (success) includes `equations[]` (each with `variable`,
`equation`, `expression`, `expression_latex`, `r2`), `library_terms`,
`nonzero_terms`, `elapsed_seconds`, `canonical_match` (dict with
`system`, `form`, `variable_map`, `parameter_map`, `confidence` if
the discovered system matches one of Lorenz / Lotka-Volterra /
Van der Pol / Duffing; `null` otherwise), optional `warning`,
optional `_meta` (MPP receipt on paid calls). Full response and
payment-required schemas: occam://tool-schemas
Example request:
data=[[1.0, 0.0], [0.95, -0.31], [0.81, -0.59]], t=[0.0, 0.1, 0.2],
feature_names=["x", "y"], poly_degree=2, threshold=0.1
Policy: occam://privacy-policy — Citation: occam://citation-info
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"data": "<data>",
"t": "<t>"
},
"name": "sindy_run"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| t | Yes | Timestamps corresponding to each row of data. Length must match row count. | |
| data | Yes | 2D array of time series data. Each row is a timestep, each column is a state variable. Minimum 3 rows (finite-difference derivative). Free tier: 100 rows, 8 variables. Paid tier: up to 500,000 rows, 50 variables. | |
| payment | No | Payment credential. Accepts either a JSON object or a JSON-encoded string (FastMCP's transport pre-parses strings whose field annotation is non-bare-`str` into objects, so the object form is canonical; the string form is accepted for legacy callers). Required when the dataset exceeds the free tier (100 rows, 8 variables). Omit for free-tier requests. For x402: {"transaction":"0x...","network":"...","priceToken":"..."}. For MPP/Stripe: {"challenge":{...},"payload":"..."}. For prepaid API key: {"scheme":"prepaid","api_key":"occ_live_...","request_id":"<optional uuid>"}. | |
| max_iter | No | Maximum STLSQ optimizer iterations. Default 20. | |
| threshold | No | STLSQ sparsity threshold. Higher values produce sparser equations. Default 0.1. | |
| poly_degree | No | Polynomial library degree for SINDy candidate functions. Default 2. | |
| feature_names | No | Names for each variable/feature column. Defaults to x0, x1, ... |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| warning | No | ||
| equations | No | ||
| library_terms | No | ||
| nonzero_terms | No | ||
| canonical_match | No | ||
| elapsed_seconds | No |