Alpha MCPAPI reference · v1

The MCP your agents call.

Tritemporal memory that cannot lie about the past, a governed causal graph, knock-on simulation, and a decision ledger — the engine behind every Cascadian answer, at machine speed.

MCPPOSTGRESGOVERNED
Tools / Causal

identify()

Key

Runs the identification strategy tree on the approved subgraph: randomized → backdoor (pgmpy adjustment sets) → frontdoor → IV if declared → DiD/ITS if preconditions are declared → not_identifiable / exploratory_only. Returns the full review, including forbidden controls and every required assumption, each linked to supporting or missing memory. No estimate exists without this review — invariant I3.

identify(treatment, outcome, as_of)IDENTIFICATION REVIEW

Callable over MCP as identify(treatment, outcome, as_of). REST mirror POST /v1/identify Planned — alpha is MCP-only

Why your agent calls it

The question almost nobody asks before quoting an effect: can this even be estimated from data we have? identify() answers it on the approved graph — here, discount → win_rate is identifiable by backdoor with adjustment set {segment, rep_experience} — and names the forbidden controls and the assumptions doing the work. Without its review id, estimate() refuses to run.

What it returns
QUERYdiscount → win_rateIDENTIFYBACKDOOR · ADJUST FOR{segment, rep_exp}NO CAUSAL ESTIMATE WITHOUT IDENTIFICATION — INVARIANT I3
identify() · Can this effect be estimated at all? The gate.ILLUSTRATIVE
Call it from an agent

Over MCP, your agent invokes it on its own when the moment calls for it — just describe the situation. A Python SDK for headless runtimes is planned; this is what the call will look like.

agent · python sdkSDK · PLANNED — ALPHA IS MCP-ONLY
from cascadian import Cascadian cx = Cascadian(api_key=os.environ["CASCADIAN_API_KEY"]) result = cx.identify( treatment="discount", outcome="win_rate", as_of="2026-06-11T17:00:00Z", )
Parameters
ParamTypeDescription
treatmentREQUIREDstringThe cause variable, e.g. "discount".
outcomeREQUIREDstringThe effect variable, e.g. "win_rate".
as_oftimestampIdentify on the graph as it stood then. Default now.
Example response
identify()JSON · ILLUSTRATIVE
{ "query": { "treatment": "discount", "outcome": "win_rate" }, "strategy": "backdoor", "identifiable": true, "adjustment_set": ["segment", "rep_experience"], "forbidden_controls": ["deal_size_post_quote"], "required_assumptions": [ { "assumption": "no unobserved confounder of discount and win_rate", "support": "mem_0871" } ], "identification_review_id": "idr_0271" }
Related — Causal