geo_experiment
ADMIN/CURATOR ONLY, the GEO/SEO experiment ledger (spec 2026-11-08-geo-mcp-loop): the dated book of every crawler-touchable change, marker, open question and prediction, the one thing that makes a move in the organic channel (Google, Bing, LLM citations) attributable. Three actions: add writes one row ({title, change?, expected_effect?, kind? = change | marker | open_question | prediction, date? = today, review_after_days? = 14, notes?, url_path? = the page the change touched, as a path like /connectors/shopify, so the row joins the per-URL signals}; same date + title twice = reported as duplicate, never a second row); review records the verdict on one row ({id, verdict = helped | hurt | neutral | unknown, notes?}); list returns the ledger ({open?: true = unreviewed rows only, limit? = 50}), each row with id, date, kind, title, change, expected_effect, review_after_days, reviewed_at, verdict, notes, url_path. The numbers to judge a row against are in get_traction_overview under geo (28 days of geo_metrics_daily, SSR health, the crawler split) and geo_ledger (open rows with due flags, the last verdicts, Bing citations per URL); per-URL detail is in seo_360 / content_360 / audience_360 on the autario.com property. The same doors as the CLI geo-experiment add|review|list. Requires the connector to be OAuth-authorized as the autario curator account | any other caller gets a permission error. Use when asked "log this change in the GEO ledger", "what is due for review", "record the verdict on experiment 12".
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": {
"action": "<action>"
},
"name": "geo_experiment"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | review: the ledger row id (from list). | |
| date | No | add: the day the change went live, YYYY-MM-DD (default today). | |
| kind | No | add: change (default) = something we shipped; marker = an observed external inflection; open_question = a suspected external cause; prediction = a standing falsifiable prediction. | |
| open | No | list: true = unreviewed rows only (default all). | |
| limit | No | list: max rows (default 50). | |
| notes | No | add or review: free-form notes or links. | |
| title | No | add: short stable handle of the change (unique with date). | |
| action | Yes | add = one new ledger row; review = the verdict on one row; list = the ledger rows. | |
| change | No | add: what exactly changed, one or two sentences. | |
| format | No | Output wire format for this MCP call. Default 'toon' (Token-Oriented Notation, fewest tokens, best for tabular rows). 'compact' = minified JSON. 'json' = pretty JSON for readability. The REST API always returns JSON regardless. | |
| verdict | No | review: the verdict. | |
| url_path | No | add: the page the change touched, a site-relative path (/connectors/shopify) or an autario.com URL; omit for site-wide changes. | |
| expected_effect | No | add: the effect expected on impressions, clicks, LLM leads or indexing (the falsifiable part). | |
| review_after_days | No | add: when the verdict is due, counted from date (default 14). |