Causal guardrail: pass/caution/hold verdict on a causal claim before an agent acts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your Syl Guardian API key (get a trial key at https://sylai.io/guardian).
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get a pre-signed URL for uploading a large CSV (more than ~200 rows). Use this instead of pasting rows into ``guardian_review``. Returns ``upload_url``, ``dataset_id`` and a ready-to-run ``curl`` command: run it (replace ``data.csv`` with your file; gzip is accepted with ``Content-Encoding: gzip``), then call ``guardian_review`` with ``dataset_id`` (and no ``csv``/``data``). The URL is single-use and expires after 30 minutes; the dataset is only usable by the same API key, and is single-use too: it is deleted when ``guardian_review`` reads it (even if that review fails), so request a new upload to retry. This call does not consume review quota.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Get a pre-signed URL for uploading a large CSV (more than ~200 rows). Use this instead of pasting rows into ``guardian_review``. Returns ``upload_url``, ``dataset_id`` and a ready-to-run ``curl`` command: run it (replace ``data.csv`` with your file; gzip is accepted with ``Content-Encoding: gzip``), then call ``guardian_review`` with ``dataset_id`` (and no ``csv``/``data``). The URL is single-use and expires after 30 minutes; the dataset is only usable by the same API key, and is single-use too: it is deleted when ``guardian_review`` reads it (even if that review fails), so request a new upload to retry. This call does not consume review quota.
No arguments.
{
"type": "object",
"title": "guardian_request_uploadArguments",
"properties": {},
"additionalProperties": false
}Sanity-check a causal claim ("cause drove effect") before acting on it. Provide exactly one of ``csv`` (CSV text), ``data`` (list of row objects) or ``dataset_id`` (a dataset uploaded via ``guardian_request_upload``; use this for more than ~200 rows; single-use, deleted when reviewed) containing columns named by ``cause`` and ``effect``. Returns a verdict -- ``pass`` (act), ``caution`` (act carefully), or ``hold`` (do not act; the effect looks confounded or unsupported) -- with the naive correlational effect versus the confounder-adjusted causal effect and its confidence interval, the confounders adjusted for, a confidence score, a plain-English interpretation, and a recommended action. All numbers are deterministic statistics (never LLM-generated); only the interpretation prose may be AI-written. Args: cause: Treatment column the claim says drives the outcome (e.g. "ad_spend"). effect: Outcome column (e.g. "new_customers"). csv: Dataset as CSV text (header row required). data: Dataset as a list of row records (alternative to ``csv``). dataset_id: ID returned by ``guardian_request_upload`` after uploading the CSV (alternative to ``csv``/``data``; for datasets above ~200 rows). Single-use: the dataset is deleted when reviewed, so re-upload to retry. known_confounders: Columns to adjust for; otherwise discovered automatically. context: Free-text business context, e.g. "Q3 promo evaluation". units: Display-only unit hints by column, e.g. {"ad_spend": "USD"}. step: A concrete treatment step (e.g. 1000 for a $1,000 spend increase) to restate the effect in business terms (cost per incremental outcome, ...). time_col: Column to order rows by for time series (autocorrelation-robust standard errors and adstock). adstock: Opt-in geometric-adstock transform for a lagged/carryover treatment. se: Standard-error flavor; "auto" diagnoses autocorrelation when ``time_col`` is given. test_design: ``true`` (or an options object) also returns how many periods a spend-cut test needs to confirm the effect.
| Argument | Type | Description |
|---|---|---|
| se | string | |
| csv | any | |
| data | any | |
| step | any | |
| cause* | string | |
| units | any | |
| effect* | string | |
| adstock | any | |
| context | any | |
| time_col | any | |
| dataset_id | any | |
| test_design | any | |
| known_confounders | any |
{
"type": "object",
"$defs": {
"AdstockOptions": {
"type": "object",
"title": "AdstockOptions",
"required": [
"time_col"
],
"properties": {
"grid": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Grid",
"default": null,
"description": "Candidate decay values to grid-search when `decay` is omitted."
},
"decay": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Decay",
"default": null,
"description": "Fixed decay in [0, 1). Omit to grid-search it by AIC."
},
"time_col": {
"type": "string",
"title": "Time Col",
"description": "Column to sort by before applying the adstock transform."
}
},
"description": "Opt-in geometric-adstock transform for a lagged/carryover treatment.\n\nMirrors `syl_causal_core.adstock.AdstockSpec`; the decay search itself (when\n`decay` is omitted) is run deterministically by `syl-causal-core`, never here."
},
"TestDesignOptions": {
"type": "object",
"title": "TestDesignOptions",
"properties": {
"alpha": {
"type": "number",
"title": "Alpha",
"default": 0.05,
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
"power": {
"type": "number",
"title": "Power",
"default": 0.8,
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
"cut_fraction": {
"type": "number",
"title": "Cut Fraction",
"default": 0.5,
"maximum": 1,
"description": "Fraction of baseline spend to cut.",
"exclusiveMinimum": 0
},
"detectable_multiplier": {
"type": "number",
"title": "Detectable Multiplier",
"default": 1.2,
"description": "Size the test to detect this multiple of the fitted effect.",
"exclusiveMinimum": 0
}
},
"description": "Tuning for the opt-in spend-cut test design (`syl_causal_core.design_spend_test`)."
}
},
"title": "guardian_reviewArguments",
"required": [
"cause",
"effect"
],
"properties": {
"se": {
"enum": [
"nonrobust",
"HC1",
"HAC",
"auto"
],
"type": "string",
"title": "Se",
"default": "auto"
},
"csv": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv",
"default": null
},
"data": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Data",
"default": null
},
"step": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Step",
"default": null
},
"cause": {
"type": "string",
"title": "Cause"
},
"units": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Units",
"default": null
},
"effect": {
"type": "string",
"title": "Effect"
},
"adstock": {
"anyOf": [
{
"$ref": "#/$defs/AdstockOptions"
},
{
"type": "null"
}
],
"default": null
},
"context": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Context",
"default": null
},
"time_col": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Time Col",
"default": null
},
"dataset_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dataset Id",
"default": null
},
"test_design": {
"anyOf": [
{
"type": "boolean"
},
{
"$ref": "#/$defs/TestDesignOptions"
}
],
"title": "Test Design",
"default": false
},
"known_confounders": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Known Confounders",
"default": null
}
},
"additionalProperties": false
}