Occam
Server Details
Finds the simplest equation consistent with your data. SINDy and PySR symbolic regression via MCP.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: pysr_run and sindy_run are explicitly cross-referenced to separate algebraic regression from differential equation discovery, pysr_uncertainty is a well-defined follow-up, and feature_request is a meta-tool. There is no realistic risk of an agent selecting the wrong tool.
Compute tools follow a clear <method>_run/<method>_uncertainty pattern, but feature_request breaks the convention by leading with the object rather than a verb. Names are still lowercase snake_case and readable, so the deviation is minor.
Four tools is a tight, well-scoped surface for a symbolic regression server: two core methods, one uncertainty companion, and one feedback channel. Each tool earns its place without redundancy.
The domain is covered end-to-end: algebraic regression via PySR, dynamical system discovery via SINDy, uncertainty quantification on PySR results, and a request mechanism for unsupported capabilities. No obvious missing operation is needed for the intended workflows.
Available Tools
4 toolsfeature_requestAInspect
Request a feature that Occam doesn't support yet.
Use this when you need a capability that Occam doesn't currently
offer. Requests are logged and used to prioritize development.
Rate limit: 5 requests/hour per IP, 50/hour global — stricter than
the compute tools' 10/hour to prevent log flooding. Descriptions
longer than 500 characters are truncated.
Inputs: description (required). Returns: ok, message, description
pysr_runARead-onlyInspect
Evolutionary Symbolic Regression (PySR).
Discovers algebraic equations y = f(x1, x2, ...) from feature/target
data. Returns a Pareto front ranked by the complexity/accuracy
tradeoff. Slower than SINDy (10-60s); searches often terminate early
on convergence. For differential equations from time series, use
sindy_run instead.
Pricing: free tier up to 100 rows × 8 features, 60s timeout. Beyond
that, $0.25 + $0.03 per 100 extra rows + $0.01 per extra feature
squared, timeout up to 300s (5 min), 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: occam://pricing
Advisory limits: jobs over 50,000 rows or 20 features are accepted
but may not converge; response carries a top-level `warning`.
Operators: fixed supported set only — custom operators (e.g.
'inv(x) = 1/x') are rejected. Unary: sin, cos, tan, exp, log, log2,
log10, sqrt, abs, sinh, cosh, tanh. Binary: +, -, *, /, ^.
See also prompt `supported_operators`.
Loss metric: `loss` (in `pareto_front[].loss` and `best_loss`) is
mean squared error between model prediction and `y` on the full
training set — not RMSE, and not normalized by Var(y). A threshold
appropriate for one dataset scales with y's magnitude, so set
`loss_threshold` with that in mind (e.g. for y values near 1.0,
1e-6 is a tight fit; for y near 1000, the equivalent is 1.0).
Early termination: set `loss_threshold` to stop at your noise floor.
The server also stops when the search stalls (<1% improvement in the
last third of the budget); disable with `stall_detection=false`.
Response `stop_reason` is one of: loss_threshold, stall, timeout,
natural.
If `feature_names` is supplied, its length must equal the number of
columns in `X`; a mismatch is rejected with a validation error.
Follow-up: call `pysr_uncertainty` with a chosen expression and the
same dataset for bootstrap confidence intervals on its fit constants
and optional prediction bands.
Rate limit: 10 requests/hour per IP, 200/hour global, max queue
depth 20 (shared with sindy_run and pysr_uncertainty).
Response (success) includes `pareto_front[]` (each with `complexity`,
`loss`, `expression`, `expression_latex`), `best_expression`,
`best_expression_latex`, `best_loss`, `best_complexity`, `stop_reason`,
`elapsed_seconds`, `queue_seconds` (>0 = server saturated; use as
backoff signal), optional `warning`, optional `_meta` (MPP receipt).
Full response and payment-required schemas: occam://tool-schemas
Example request:
X=[[0.0], [1.0], [2.0], [3.0], [4.0]], y=[1.0, 3.0, 5.0, 7.0, 9.0],
feature_names=["x"], max_complexity=10, timeout_seconds=15
Policy: occam://privacy-policy — Citation: occam://citation-info
Inputs: X (required), y (required), payment, populations, +7 more. Returns: warning, best_loss, stop_reason, pareto_front, +5 more
pysr_uncertaintyARead-onlyInspect
Bootstrap confidence intervals for the numeric constants of a frozen expression, plus optional prediction bands on an x-grid.
Typical flow: call pysr_run, pick an expression from the response
(best_expression or a pareto_front entry), pass it back here with
the same dataset to get CIs on its fit constants.
Returns frequentist bootstrap confidence intervals, not Bayesian
credible intervals — posterior inference over expression structures
is an open research problem. This tool freezes the expression
chosen by the caller and bootstraps only its numeric constants;
uncertainty about *which* expression is correct is not quantified.
Bootstrap semantics:
- If y_sigma is supplied, uses parametric bootstrap
(y_b = y + Normal(0, y_sigma)). CI reflects user-stated
measurement noise.
- Otherwise uses residual bootstrap: fit once, resample residuals.
CI reflects estimated-from-residuals noise.
Only Float constants in the expression become free parameters.
Integers stay structural (the 2 in x**2 is a function-class choice,
not a fit constant). Expressions with no Float constants
(e.g. "x + y") will be rejected with a validation error.
Expression grammar: the `expression` string is parsed by sympy.
Accepted operators are the same set pysr_run emits: unary `sin`,
`cos`, `tan`, `exp`, `log`, `log2`, `log10`, `sqrt`, `abs`, `sinh`,
`cosh`, `tanh`; binary `+`, `-`, `*`, `/`, `^` (or `**`). Whitespace
and parenthesization are free. Every free symbol in the expression
must correspond to an entry in `feature_names` — an unrecognised
symbol is silently treated as a fresh sympy Symbol and the fit will
fail downstream rather than reject early. Parse failures (syntax
errors, malformed operators) surface as tool errors.
If `feature_names` is supplied, its length must equal the number of
columns in `X`; a mismatch is rejected with a validation error.
Pricing: always free, regardless of dataset size. This tool has no
`payment` parameter and is never subject to the x402/Stripe gate.
Large bootstrap jobs still count against the shared rate limit
below, so budget `n_resamples` accordingly.
Rate limit: 10 requests/hour per IP, 200/hour global, max queue
depth 20 (shared with sindy_run and pysr_run).
Inputs: X (required), y (required), expression (required), alpha, +4 more. Returns: Always a success shape — pysr_uncertainty is never paid.
sindy_runARead-onlyIdempotentInspect
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
Inputs: t (required), data (required), payment, max_iter, +3 more. Returns: warning, equations, library_terms, nonzero_terms, +2 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Find novel, statistically validated patterns in tabular data — hypothesis-free.
Independent statistical feature evaluation for machine learning and forecasting. ML Referee tests up to 1,000 candidate features in one run against a declared baseline, helping researchers and AI agents decide which inputs to pursue, which bounded feature repairs merit further testing, and where more evidence is needed—without a separate ablation run for every feature. Use the MCP tools to discover input schemas, check access and credits, preflight a dataset, obtain a quote, submit an authorized evaluation, and retrieve structured results and reports. Results are scoped to the submitted evidence and evaluation design; they do not guarantee future model performance. Invite-only beta with manual approval. Public tool discovery requires no authentication; account and evaluation tools require OAuth through approved client connections and available evaluation credits. Connect directly to https://api.mlreferee.com/mcp. Website: https://mlreferee.com Request beta access: https://mlreferee.com/beta Agent setup and documentation: https://mlreferee.com/agents
Newton MCP — wraps the Newton math solver API (free, no auth)
Deterministic MCP solver for real equation systems (<=6 vars), Krawczyk-certified.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides a token-efficient exact math engine for AI agents, enabling computation of derivatives, integrals, equations, and optimized Python/NumPy code via a single MCP tool.147 PyPI8MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to run zero-dependency statistical modeling and data analysis through MCP, including multivariate linear regression via gradient descent, anomaly detection, time-series forecasting, hypothesis testing, and PCA dimensionality reduction.7MIT
- AlicenseAqualityDmaintenanceMCP server that gives small LLMs verified symbolic-math & logic tools.614 PyPI2Apache 2.0
- AlicenseAqualityBmaintenanceAirtight math tools an AI uses over MCP — 3.7M-theorem search, PSLQ constant ID, OEIS, real Lean kernel checks, applicability checklists. No LLM inside, no API key.1213Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.