Progressive settlement for outcome-based capital: what is decided, what the remainder must do.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
PAID: compile a Verified Outcome Contract v0 — a series, a strike, a settlement rule (above | at_or_above | below | at_or_below) and a closing time, content-addressed; the contract_id is the sha256 of its canonical form.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http settlement-engine https://mcp.viridisconservation.com/settlement-engine/mcp
PAID: compile a Verified Outcome Contract v0 — a series, a strike, a settlement rule (above | at_or_above | below | at_or_below) and a closing time, content-addressed; the contract_id is the sha256 of its canonical form.
| Argument | Type | Description |
|---|---|---|
| rule* | string | |
| terms | any | |
| strike* | number | |
| parties | any | |
| closes_at* | string | |
| series_id* | string |
{
"type": "object",
"title": "compile_contractArguments",
"required": [
"series_id",
"strike",
"rule",
"closes_at"
],
"properties": {
"rule": {
"type": "string",
"title": "Rule"
},
"terms": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Terms",
"default": null
},
"strike": {
"type": "number",
"title": "Strike"
},
"parties": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Parties",
"default": null
},
"closes_at": {
"type": "string",
"title": "Closes At"
},
"series_id": {
"type": "string",
"title": "Series Id"
}
}
}FREE: every strike across registered series that is decided by the published part alone.
No arguments.
{
"type": "object",
"title": "decided_strikesArguments",
"properties": {}
}FREE: actions, invariants S1–S10 and limits.
No arguments.
{
"type": "object",
"title": "describe_agentArguments",
"properties": {}
}FREE: deterministic plain-language reading of a series (no LLM in the serving path).
| Argument | Type | Description |
|---|---|---|
| series_id* | string |
{
"type": "object",
"title": "explainArguments",
"required": [
"series_id"
],
"properties": {
"series_id": {
"type": "string",
"title": "Series Id"
}
}
}FREE: a compiled contract and its settlement ids.
| Argument | Type | Description |
|---|---|---|
| contract_id* | string |
{
"type": "object",
"title": "get_contractArguments",
"required": [
"contract_id"
],
"properties": {
"contract_id": {
"type": "string",
"title": "Contract Id"
}
}
}FREE: append observations [{slot, value, source_url, source_sha256 (64 hex of the source document), observed_at}]. A re-posted slot replaces the value and is logged as a revision (S7). Each observation is hashed (S4).
| Argument | Type | Description |
|---|---|---|
| series_id* | string | |
| observations* | array |
{
"type": "object",
"title": "ingestArguments",
"required": [
"series_id",
"observations"
],
"properties": {
"series_id": {
"type": "string",
"title": "Series Id"
},
"observations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Observations"
}
}
}FREE: registered series cards.
No arguments.
{
"type": "object",
"title": "list_seriesArguments",
"properties": {}
}FREE: published share, published aggregate, remaining slots, and per strike the required remainder, the decided flag (arithmetic + declared bounds only) and a labelled model estimate kept separate from the facts (S1).
| Argument | Type | Description |
|---|---|---|
| series_id* | string |
{
"type": "object",
"title": "period_statusArguments",
"required": [
"series_id"
],
"properties": {
"series_id": {
"type": "string",
"title": "Series Id"
}
}
}FREE: declare a progressively published series. aggregate: mean (prices), sum (totals), share (survival/success 0/1 per slot), last (closing value). n_expected: number of observation slots in the period. value_min/value_max: the physical bounds of one observation; without them nothing is decided until the period is complete (S5).
| Argument | Type | Description |
|---|---|---|
| meta | any | |
| name* | string | |
| unit* | string | |
| source* | string | |
| strikes | any | |
| aggregate* | string | |
| value_max | any | |
| value_min | any | |
| n_expected* | integer | |
FREE: what the remaining slots must average / sum to / hit for the aggregate to reach the strike, plus decided.
| Argument | Type | Description |
|---|---|---|
| strike* | number | |
| series_id* | string |
{
"type": "object",
"title": "required_remainderArguments",
"required": [
"series_id",
"strike"
],
"properties": {
"strike": {
"type": "number",
"title": "Strike"
},
"series_id": {
"type": "string",
"title": "Series Id"
}
}
}PAID: evaluate a contract against the ledger at an explicit time: YES / NO / UNDECIDED with the exact arithmetic and every observation hash used. A decided strike settles before closure; an incomplete, undecided series at closure is UNDECIDED, never a guess (S10). Settlements are immutable and recomputable (S8).
| Argument | Type | Description |
|---|---|---|
| now* | string | |
| contract_id* | string |
{
"type": "object",
"title": "settle_contractArguments",
"required": [
"contract_id",
"now"
],
"properties": {
"now": {
"type": "string",
"title": "Now"
},
"contract_id": {
"type": "string",
"title": "Contract Id"
}
}
}FREE: recompute a settlement from its stored evidence (hash, aggregate, result each checked separately).
| Argument | Type | Description |
|---|---|---|
| settlement | any | |
| settlement_id | any |
{
"type": "object",
"title": "verify_settlementArguments",
"properties": {
"settlement": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Settlement",
"default": null
},
"settlement_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Settlement Id",
"default": null
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.
| period_end* |
| string |
| period_start* | string |
{
"type": "object",
"title": "register_seriesArguments",
"required": [
"name",
"unit",
"aggregate",
"n_expected",
"source",
"period_start",
"period_end"
],
"properties": {
"meta": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Meta",
"default": null
},
"name": {
"type": "string",
"title": "Name"
},
"unit": {
"type": "string",
"title": "Unit"
},
"source": {
"type": "string",
"title": "Source"
},
"strikes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Strikes",
"default": null
},
"aggregate": {
"type": "string",
"title": "Aggregate"
},
"value_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Value Max",
"default": null
},
"value_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Value Min",
"default": null
},
"n_expected": {
"type": "integer",
"title": "N Expected"
},
"period_end": {
"type": "string",
"title": "Period End"
},
"period_start": {
"type": "string",
"title": "Period Start"
}
}
}