{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://spoolis.com/api/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/spoolis-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/spoolis-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/spoolis-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 12695,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 38
          },
          "findings": [
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "abandon_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "accept_spool",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "add_source",
              "message": "none of its 8 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "amend_spool",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "cancel_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "commit_payment",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "compile_spool",
              "message": "its one parameter, source, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "complete_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_counterparty_invite",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_spool",
              "message": "none of its 12 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "decide_review",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "decline_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_dispute",
              "message": "its one parameter, dispute_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_receipt_status",
              "message": "its one parameter, receipt_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_review",
              "message": "its one parameter, review_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_spool_events",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_discrepancies",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_facts",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_matches",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "open_discrepancy",
              "message": "none of its 9 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "open_dispute",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "propose_spool",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "request_review",
              "message": "none of its 5 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "resolve_discrepancy",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "run_matching",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "run_sandbox_scenario",
              "message": "none of its 6 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "submit_evidence",
              "message": "none of its 8 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "sync_source",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "verify_result",
              "message": "none of its 9 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "verify_spool",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC12",
              "severity": "warn",
              "tool": "verify_result",
              "message": "no type for evidence.payload",
              "fix": "Give every parameter a type (or an enum)."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "open_dispute",
              "message": "scope (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "request_review",
              "message": "scope (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC18",
              "severity": "warn",
              "tool": "cancel_spool",
              "message": "destructiveHint is false but the name says \"cancel\"",
              "fix": "If it deletes, overwrites or moves money, destructiveHint should be true."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "amend_spool",
              "message": "the definition is about 1,589 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "create_spool",
              "message": "the definition is about 2,900 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "verify_result",
              "message": "the definition is about 1,655 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "32 of 32 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:23:58Z",
        "count": 32,
        "schemaTokens": 12695,
        "status": "ok",
        "tools": [
          {
            "name": "verify_result",
            "title": "Result verification",
            "description": "Get a signed, durable, portable Outcome Receipt: a verdict artifact, per unit for unitized work, another system can fetch and independently verify. Spoolis makes it by verifying returned work against explicit acceptance criteria. Use when an agent, vendor, or tool reports work as done and the next action depends on whether the delivery actually met the agreed criteria. This runs in one call using exactly one of inline conditions or a locally registered recipe slug and hash, creating an inspectable unilateral Spool, the versioned acceptance policy. The maximum amount field is optional for verification-only runs. Omit it when nobody is paying; the earned amount is then zero and the receipt omits committed value. The maximum amount field is required when unit is present because unit math needs the cap. Recipe verification uses the hosted conditions exactly as written and fails closed when the hash differs. The external provider does not accept conditions in Spoolis. For a batch delivery where items can pass, fail, or remain uncertain individually, pass unit (its unit count matching the item count) AND evidence type dataset with exactly one row per delivered item, keeping a field present with a null value when it is missing; that returns distinct per-unit verdicts and earned value only for passing units. Text evidence with unit is batch-only and settles all-or-nothing. For a keyless production alternative, use POST /api/v1/verify/x402. Sandbox dataset evidence is limited to 100 records. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "conditions": {
                  "anyOf": [
                    {
                      "maxLength": 2000,
                      "minLength": 1,
                      "type": "string"
                    },
                    {
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "description": {
                            "maxLength": 2000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "deterministic_check": {
                            "oneOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "row_count",
                                    "type": "string"
                                  },
                                  "expected": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "expected"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "completeness",
                                    "type": "string"
                                  },
                                  "required_fields": {
                                    "items": {
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "minItems": 1,
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "required_fields"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "duplicate_rate",
                                    "type": "string"
                                  },
                                  "key": {
                                    "minLength": 1,
                                    "type": "string"
                                  },
                                  "maximum": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "key",
                                  "maximum"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "url_format",
                                    "type": "string"
                                  },
                                  "field": {
                                    "minLength": 1,
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "field"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "json_path",
                                    "type": "string"
                                  },
                                  "expected": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "boolean"
                                      }
                                    ]
                                  },
                                  "operator": {
                                    "enum": [
                                      "eq",
                                      "gte",
                                      "lte",
                                      "contains"
                                    ],
                                    "type": "string"
                                  },
                                  "path": {
                                    "minLength": 1,
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "path",
                                  "expected",
                                  "operator"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "http_status",
                                    "type": "string"
                                  },
                                  "expected_status": {
                                    "maximum": 599,
                                    "minimum": 100,
                                    "type": "integer"
                                  },
                                  "timeout_ms": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 5000,
                                    "type": "integer"
                                  },
                                  "url": {
                                    "format": "uri",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "url",
                                  "expected_status"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "case_sensitive": {
                                    "type": "boolean"
                                  },
                                  "checker": {
                                    "const": "text_contains",
                                    "type": "string"
                                  },
                                  "field": {
                                    "minLength": 1,
                                    "type": "string"
                                  },
                                  "needle": {
                                    "minLength": 1,
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "needle"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "algorithm": {
                                    "const": "sha256",
                                    "type": "string"
                                  },
                                  "checker": {
                                    "const": "hash_matches",
                                    "type": "string"
                                  },
                                  "expected": {
                                    "pattern": "^[a-fA-F0-9]{64}$",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "algorithm",
                                  "expected"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "deadline_met",
                                    "type": "string"
                                  },
                                  "due_at": {
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "due_at"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "checker": {
                                    "const": "claim_cited",
                                    "type": "string"
                                  },
                                  "claim": {
                                    "maxLength": 2000,
                                    "minLength": 1,
                                    "type": "string"
                                  },
                                  "evidence_ref": {
                                    "pattern": "^evd_.*",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "checker",
                                  "claim"
                                ],
                                "type": "object"
                              }
                            ]
                          }
                        },
                        "required": [
                          "description",
                          "deterministic_check"
                        ],
                        "type": "object"
                      },
                      "maxItems": 50,
                      "minItems": 1,
                      "type": "array"
                    }
                  ],
                  "nullable": true,
                  "type": [
                    "string",
                    "array"
                  ]
                },
                "evidence": {
                  "additionalProperties": false,
                  "properties": {
                    "payload": {},
                    "provenance": {
                      "enum": [
                        "api_response",
                        "uploaded_json",
                        "url_fetch"
                      ],
                      "type": "string"
                    },
                    "rows": {
                      "items": {
                        "additionalProperties": {},
                        "propertyNames": {
                          "type": "string"
                        },
                        "type": "object"
                      },
                      "maxItems": 100000,
                      "type": "array"
                    },
                    "type": {
                      "enum": [
                        "dataset",
                        "text",
                        "url"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "provenance"
                  ],
                  "type": "object"
                },
                "gated_action": {
                  "enum": [
                    "payment",
                    "workflow_step",
                    "publish",
                    "merge",
                    "delegation",
                    "other"
                  ],
                  "nullable": true,
                  "type": "string"
                },
                "gated_action_note": {
                  "maxLength": 120,
                  "nullable": true,
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 128,
                  "minLength": 1,
                  "nullable": true,
                  "type": "string"
                },
                "max_amount_cents": {
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991,
                  "nullable": true,
                  "type": "integer"
                },
                "recipe": {
                  "additionalProperties": false,
                  "nullable": true,
                  "properties": {
                    "hash": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "slug": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "slug",
                    "hash"
                  ],
                  "type": "object"
                },
                "settlement": {
                  "default": "external",
                  "enum": [
                    "external",
                    "managed"
                  ],
                  "nullable": true,
                  "type": "string"
                },
                "unit": {
                  "additionalProperties": false,
                  "nullable": true,
                  "properties": {
                    "identity": {
                      "additionalProperties": false,
                      "properties": {
                        "key": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "visibility": {
                          "enum": [
                            "label",
                            "pseudonymous"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "visibility"
                      ],
                      "type": "object"
                    },
                    "total_units": {
                      "exclusiveMinimum": 0,
                      "maximum": 100000,
                      "type": "integer"
                    },
                    "unit_amount_cents": {
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991,
                      "type": "integer"
                    }
                  },
                  "required": [
                    "total_units",
                    "unit_amount_cents"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "evidence"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "run_sandbox_scenario",
            "title": "Sandbox scenario",
            "description": "Evaluate Spoolis without a key or account: run a seeded synthetic scenario through a real demo Spool (the agreement object), verification, and a signed demo Outcome Receipt. Use to observe which units may continue after verification and inspect seeded truth only after the Outcome exists. Scenarios: data_enrichment, external_judge_two_consumers, qualified_meetings, production_migration, review_and_dispute, and sources_and_matching. This persists only run parameters and aggregate results; modeled economics are labeled modeled. commercial_state opens and resolves a blocking discrepancy, proving the Outcome moves from uncertain back to accepted. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "adversarial_case_count": {
                  "maximum": 100,
                  "minimum": 0,
                  "type": "integer"
                },
                "defect_rate": {
                  "maximum": 1,
                  "minimum": 0,
                  "type": "number"
                },
                "modeled_cost_per_unit": {
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "number"
                },
                "record_count": {
                  "maximum": 1000,
                  "minimum": 1,
                  "type": "integer"
                },
                "scenario": {
                  "enum": [
                    "commercial_state",
                    "data_enrichment",
                    "external_judge_two_consumers",
                    "production_migration",
                    "qualified_meetings",
                    "review_and_dispute",
                    "sources_and_matching"
                  ],
                  "type": "string"
                },
                "seed": {
                  "maxLength": 128,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "scenario"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "compile_spool",
            "title": "Spool draft",
            "description": "Turn purchase intent into a proposed DRAFT Spool (the agreement object) with explicit acceptance criteria and earned-value rules. Use before both parties confirm terms; do not use for one-call unilateral result verification. This creates a persisted draft to inspect, then accept_spool confirms it, amend_spool changes conditions or unitization, and abandon_spool discards it. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "source": {
                  "maxLength": 8192,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "source"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "create_spool",
            "title": "Spool creation",
            "description": "Create a production Spool (the agreement object) from structured terms and acceptance criteria. Use when both parties will participate in the agreement lifecycle; do not use for one-call unilateral verification. This persists a proposed agreement and may send the counterparty invite reported in the response handoff block. The type field defaults to the person or business service path, while agent selects the agent settlement rail. Conditions may declare verification_method third_party with an external_judge so verification consumes your own evaluator's bound result instead of Spoolis judging those conditions. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "agreement": {
                  "additionalProperties": false,
                  "properties": {
                    "mode": {
                      "enum": [
                        "bilateral",
                        "unilateral"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "mode"
                  ],
                  "type": "object"
                },
                "conditions": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "description": {
                        "maxLength": 2000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "deterministic_check": {
                        "oneOf": [
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "row_count",
                                "type": "string"
                              },
                              "expected": {
                                "maximum": 9007199254740991,
                                "minimum": 0,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "checker",
                              "expected"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "completeness",
                                "type": "string"
                              },
                              "required_fields": {
                                "items": {
                                  "minLength": 1,
                                  "type": "string"
                                },
                                "minItems": 1,
                                "type": "array"
                              }
                            },
                            "required": [
                              "checker",
                              "required_fields"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "duplicate_rate",
                                "type": "string"
                              },
                              "key": {
                                "minLength": 1,
                                "type": "string"
                              },
                              "maximum": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "checker",
                              "key",
                              "maximum"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "url_format",
                                "type": "string"
                              },
                              "field": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "field"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "json_path",
                                "type": "string"
                              },
                              "expected": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  }
                                ]
                              },
                              "operator": {
                                "enum": [
                                  "eq",
                                  "gte",
                                  "lte",
                                  "contains"
                                ],
                                "type": "string"
                              },
                              "path": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "path",
                              "expected",
                              "operator"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "http_status",
                                "type": "string"
                              },
                              "expected_status": {
                                "maximum": 599,
                                "minimum": 100,
                                "type": "integer"
                              },
                              "timeout_ms": {
                                "exclusiveMinimum": 0,
                                "maximum": 5000,
                                "type": "integer"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "url",
                              "expected_status"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "case_sensitive": {
                                "type": "boolean"
                              },
                              "checker": {
                                "const": "text_contains",
                                "type": "string"
                              },
                              "field": {
                                "minLength": 1,
                                "type": "string"
                              },
                              "needle": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "needle"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "algorithm": {
                                "const": "sha256",
                                "type": "string"
                              },
                              "checker": {
                                "const": "hash_matches",
                                "type": "string"
                              },
                              "expected": {
                                "pattern": "^[a-fA-F0-9]{64}$",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "algorithm",
                              "expected"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "deadline_met",
                                "type": "string"
                              },
                              "due_at": {
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "due_at"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "claim_cited",
                                "type": "string"
                              },
                              "claim": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "evidence_ref": {
                                "pattern": "^evd_.*",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "claim"
                            ],
                            "type": "object"
                          }
                        ]
                      },
                      "evidence_requirements": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "expected_type": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "freshness_seconds": {
                              "maximum": 9007199254740991,
                              "minimum": 0,
                              "type": "integer"
                            },
                            "id": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "on_missing": {
                              "enum": [
                                "uncertain",
                                "fail"
                              ],
                              "type": "string"
                            },
                            "provenance": {
                              "additionalProperties": false,
                              "properties": {
                                "independent_of": {
                                  "enum": [
                                    "provider",
                                    "buyer"
                                  ],
                                  "type": "string"
                                },
                                "min_class": {
                                  "enum": [
                                    "submitted_by_provider",
                                    "submitted_by_buyer",
                                    "fetched_by_spoolis",
                                    "signed_by_external_system",
                                    "confirmed_by_human",
                                    "unknown_origin"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "source": {
                              "additionalProperties": false,
                              "properties": {
                                "description": {
                                  "type": "string"
                                },
                                "ref": {
                                  "minLength": 1,
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ref"
                              ],
                              "type": "object"
                            },
                            "who_may_supply": {
                              "items": {
                                "enum": [
                                  "provider",
                                  "buyer",
                                  "spoolis",
                                  "external_system",
                                  "human"
                                ],
                                "type": "string"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "id",
                            "expected_type",
                            "source"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "external_judge": {
                        "additionalProperties": false,
                        "properties": {
                          "evaluator_id": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "evaluator_version": {
                            "maxLength": 200,
                            "minLength": 1,
                            "type": "string"
                          },
                          "kind": {
                            "enum": [
                              "external_service",
                              "zk_verifier",
                              "marketplace_evaluator",
                              "buyer_owned",
                              "ai_evaluator",
                              "human_arbitration"
                            ],
                            "type": "string"
                          },
                          "on_missing": {
                            "enum": [
                              "uncertain",
                              "fail"
                            ],
                            "type": "string"
                          },
                          "proof_requirement": {
                            "enum": [
                              "signed",
                              "hashed_ref",
                              "declared"
                            ],
                            "type": "string"
                          },
                          "public_key": {
                            "maxLength": 10000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "score_mapping": {
                            "additionalProperties": false,
                            "properties": {
                              "consensus_gte": {
                                "maximum": 100,
                                "minimum": 0,
                                "type": "integer"
                              },
                              "quality_gte": {
                                "maximum": 100,
                                "minimum": 0,
                                "type": "integer"
                              },
                              "schema_id": {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "schema_id",
                              "quality_gte",
                              "consensus_gte"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "evaluator_id",
                          "kind",
                          "proof_requirement"
                        ],
                        "type": "object"
                      },
                      "required": {
                        "type": "boolean"
                      },
                      "verification_method": {
                        "enum": [
                          "buyer_confirm",
                          "both_confirm",
                          "deterministic",
                          "ai_assisted",
                          "third_party"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "description",
                      "required",
                      "verification_method"
                    ],
                    "type": "object"
                  },
                  "maxItems": 50,
                  "type": "array"
                },
                "deliverable": {
                  "additionalProperties": false,
                  "properties": {
                    "attributes": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "description": {
                      "type": "string"
                    },
                    "title": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "type": {
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "title",
                    "description",
                    "attributes"
                  ],
                  "type": "object"
                },
                "dispute_policy": {
                  "additionalProperties": false,
                  "properties": {
                    "escalation": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "kind": {
                              "const": "reverify",
                              "type": "string"
                            }
                          },
                          "required": [
                            "kind"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "kind": {
                              "const": "external_judge",
                              "type": "string"
                            },
                            "ref": {
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "kind",
                            "ref"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "kind": {
                              "const": "none",
                              "type": "string"
                            }
                          },
                          "required": [
                            "kind"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "finality": {
                      "enum": [
                        "escalation_is_final",
                        "unresolved_stays_disputed"
                      ],
                      "type": "string"
                    },
                    "new_evidence": {
                      "enum": [
                        "allowed",
                        "not_allowed"
                      ],
                      "type": "string"
                    },
                    "on_dispute": {
                      "enum": [
                        "freeze_disputed_value",
                        "freeze_all"
                      ],
                      "type": "string"
                    },
                    "scope": {
                      "enum": [
                        "units",
                        "outcome"
                      ],
                      "type": "string"
                    },
                    "who_may_dispute": {
                      "items": {
                        "enum": [
                          "buyer",
                          "provider"
                        ],
                        "type": "string"
                      },
                      "minItems": 1,
                      "type": "array"
                    },
                    "window_seconds": {
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991,
                      "type": "integer"
                    }
                  },
                  "required": [
                    "who_may_dispute",
                    "window_seconds",
                    "scope",
                    "on_dispute",
                    "new_evidence",
                    "escalation",
                    "finality"
                  ],
                  "type": "object"
                },
                "economics": {
                  "additionalProperties": false,
                  "properties": {
                    "capture_policy": {
                      "additionalProperties": false,
                      "properties": {
                        "auto_capture": {
                          "items": {
                            "const": "grounded",
                            "type": "string"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "auto_capture"
                      ],
                      "type": "object"
                    },
                    "expiry": {
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                      "type": "string"
                    },
                    "fee_cents": {
                      "maximum": 9007199254740991,
                      "minimum": 0,
                      "type": "integer"
                    },
                    "unitization": {
                      "additionalProperties": false,
                      "properties": {
                        "identity": {
                          "additionalProperties": false,
                          "properties": {
                            "key": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "visibility": {
                              "enum": [
                                "label",
                                "pseudonymous"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "key",
                            "visibility"
                          ],
                          "type": "object"
                        },
                        "total_units": {
                          "exclusiveMinimum": 0,
                          "maximum": 100000,
                          "type": "integer"
                        },
                        "unit_amount_cents": {
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "total_units",
                        "unit_amount_cents"
                      ],
                      "type": "object"
                    }
                  },
                  "type": "object"
                },
                "finality": {
                  "additionalProperties": false,
                  "properties": {
                    "correction": {
                      "additionalProperties": false,
                      "properties": {
                        "allowed": {
                          "type": "boolean"
                        },
                        "requires_authority": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "allowed",
                        "requires_authority"
                      ],
                      "type": "object"
                    },
                    "on_silence": {
                      "enum": [
                        "keep",
                        "hold",
                        "reject"
                      ],
                      "type": "string"
                    },
                    "reopen": {
                      "additionalProperties": false,
                      "properties": {
                        "allowed": {
                          "type": "boolean"
                        },
                        "by": {
                          "items": {
                            "enum": [
                              "buyer",
                              "provider",
                              "third_party"
                            ],
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "until": {
                          "enum": [
                            "final",
                            "never"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "allowed",
                        "by",
                        "until"
                      ],
                      "type": "object"
                    },
                    "window": {
                      "additionalProperties": false,
                      "properties": {
                        "after": {
                          "enum": [
                            "acceptance",
                            "evidence",
                            "period_end"
                          ],
                          "type": "string"
                        },
                        "duration_iso8601": {
                          "pattern": "^P(?=\\d|T\\d)",
                          "type": "string"
                        }
                      },
                      "required": [
                        "after",
                        "duration_iso8601"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "window",
                    "reopen",
                    "correction",
                    "on_silence"
                  ],
                  "type": "object"
                },
                "gated_action": {
                  "enum": [
                    "payment",
                    "workflow_step",
                    "publish",
                    "merge",
                    "delegation",
                    "other"
                  ],
                  "nullable": true,
                  "type": "string"
                },
                "gated_action_note": {
                  "maxLength": 120,
                  "nullable": true,
                  "type": "string"
                },
                "parties": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "account_id": {
                        "maxLength": 200,
                        "type": "string"
                      },
                      "contact": {
                        "maxLength": 300,
                        "type": "string"
                      },
                      "display_name": {
                        "maxLength": 120,
                        "minLength": 1,
                        "type": "string"
                      },
                      "kind": {
                        "enum": [
                          "human",
                          "agent",
                          "org",
                          "service"
                        ],
                        "type": "string"
                      },
                      "role": {
                        "enum": [
                          "buyer",
                          "seller",
                          "client",
                          "provider"
                        ],
                        "type": "string"
                      },
                      "settlement_address": {
                        "pattern": "^(?:wallet:eip155:(?:8453|42431):)?0x[a-fA-F0-9]{40}$",
                        "type": "string"
                      },
                      "stripe_account_id": {
                        "pattern": "^acct_.*",
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "kind",
                      "display_name"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 2,
                  "type": "array"
                },
                "terms": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "provenance": {
                        "additionalProperties": false,
                        "properties": {
                          "origin": {
                            "enum": [
                              "extracted",
                              "inferred",
                              "spoolis_proposed",
                              "user_added",
                              "user_edited",
                              "mutually_agreed"
                            ],
                            "type": "string"
                          },
                          "source": {
                            "enum": [
                              "listing",
                              "chat",
                              "image",
                              "freeform",
                              "user_added"
                            ],
                            "type": "string"
                          },
                          "source_ref": {
                            "maxLength": 500,
                            "type": "string"
                          }
                        },
                        "required": [
                          "source"
                        ],
                        "type": "object"
                      },
                      "text": {
                        "maxLength": 2000,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "text",
                      "provenance"
                    ],
                    "type": "object"
                  },
                  "maxItems": 50,
                  "minItems": 1,
                  "type": "array"
                },
                "type": {
                  "default": "service",
                  "enum": [
                    "goods_in_person",
                    "service",
                    "digital",
                    "agent_task"
                  ],
                  "type": "string"
                },
                "value": {
                  "additionalProperties": false,
                  "properties": {
                    "amount_cents": {
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991,
                      "type": "integer"
                    },
                    "currency": {
                      "const": "USD",
                      "type": "string"
                    },
                    "rail_preference": {
                      "maxLength": 100,
                      "type": "string"
                    }
                  },
                  "required": [
                    "amount_cents",
                    "currency"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "parties",
                "value",
                "deliverable",
                "terms",
                "conditions"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_spool",
            "title": "Spool details",
            "description": "Read a Spool (the agreement object), including hash-covered evidence requirements, dispute policy, and salted unit identity configuration. Use for status checks; it has no side effects. A party named in who_may_dispute can supersede an issued receipt through POST /api/v1/receipts/{receipt_id}/supersede. There is no review queue or UI. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_receipt_status",
            "title": "Outcome Receipt status",
            "description": "Check whether an Outcome Receipt is still current or has been superseded, before acting on it. Returns state (current, superseded, unknown) and status (active, corrected, revoked). Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "receipt_id": {
                  "pattern": "^ocr_[a-f0-9]{24}$",
                  "type": "string"
                }
              },
              "required": [
                "receipt_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "request_review",
            "title": "Review request",
            "description": "Route receipt units from a Spool (the agreement object) or its whole outcome to a named reviewer. Use when a human decision is required; this creates a review request and hosted link but does not decide it. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "deadline_at": {
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "type": "string"
                },
                "on_timeout": {
                  "enum": [
                    "hold",
                    "reject",
                    "keep_accepted"
                  ],
                  "type": "string"
                },
                "receipt_id": {
                  "pattern": "^ocr_[a-f0-9]{24}$",
                  "type": "string"
                },
                "reviewer": {
                  "additionalProperties": false,
                  "properties": {
                    "display_name": {
                      "maxLength": 100,
                      "minLength": 1,
                      "nullable": true,
                      "type": "string"
                    },
                    "email": {
                      "format": "email",
                      "maxLength": 254,
                      "nullable": true,
                      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                      "type": "string"
                    },
                    "role": {
                      "enum": [
                        "buyer",
                        "provider",
                        "third_party"
                      ],
                      "type": "string"
                    },
                    "subject": {
                      "maxLength": 200,
                      "minLength": 3,
                      "pattern": "^[a-z0-9_-]+:[^\\s]+$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "subject",
                    "role"
                  ],
                  "type": "object"
                },
                "scope": {
                  "oneOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "const": "units",
                          "type": "string"
                        },
                        "units": {
                          "items": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "maxItems": 1000,
                          "minItems": 1,
                          "type": "array"
                        }
                      },
                      "required": [
                        "kind",
                        "units"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "const": "outcome",
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "type": "object"
                    }
                  ],
                  "type": "object"
                }
              },
              "required": [
                "receipt_id",
                "scope",
                "reviewer",
                "deadline_at",
                "on_timeout"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_review",
            "title": "Review details",
            "description": "Read the review request for a Spool (the agreement object). Use to poll its state; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "review_id": {
                  "pattern": "^rvq_[23456789A-HJ-NP-Za-km-z]{21}$",
                  "type": "string"
                }
              },
              "required": [
                "review_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "decide_review",
            "title": "Review decision",
            "description": "Decide a pending review for a Spool (the agreement object). Use after inspecting its evidence; this records confirmation or creates a dispute and does not settle payment. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "counter_evidence": {
                  "default": [],
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "enum": [
                          "text",
                          "url"
                        ],
                        "type": "string"
                      },
                      "value": {
                        "maxLength": 10000,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "type": "object"
                  },
                  "maxItems": 10,
                  "nullable": true,
                  "type": "array"
                },
                "reason": {
                  "maxLength": 1000,
                  "minLength": 1,
                  "type": "string"
                },
                "review_id": {
                  "pattern": "^rvq_[23456789A-HJ-NP-Za-km-z]{21}$",
                  "type": "string"
                },
                "verdict": {
                  "enum": [
                    "confirm",
                    "dispute"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "review_id",
                "verdict",
                "reason"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "open_dispute",
            "title": "Dispute opening",
            "description": "Open a dispute for a Spool (the agreement object). Use inside its declared window; this records counter-evidence and marks policy-defined value as not currently final or payable. It does not restrict money. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "counter_evidence": {
                  "default": [],
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "enum": [
                          "text",
                          "url"
                        ],
                        "type": "string"
                      },
                      "value": {
                        "maxLength": 10000,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "type": "object"
                  },
                  "maxItems": 10,
                  "nullable": true,
                  "type": "array"
                },
                "reason": {
                  "maxLength": 1000,
                  "minLength": 1,
                  "type": "string"
                },
                "receipt_id": {
                  "pattern": "^ocr_[a-f0-9]{24}$",
                  "type": "string"
                },
                "scope": {
                  "oneOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "const": "units",
                          "type": "string"
                        },
                        "units": {
                          "items": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "maxItems": 1000,
                          "minItems": 1,
                          "type": "array"
                        }
                      },
                      "required": [
                        "kind",
                        "units"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "const": "outcome",
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "type": "object"
                    }
                  ],
                  "type": "object"
                }
              },
              "required": [
                "receipt_id",
                "scope",
                "reason"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_dispute",
            "title": "Dispute details",
            "description": "Read a dispute for a Spool (the agreement object). Use to inspect claimed, accepted, disputed, final, and payable figures plus resolution state; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "dispute_id": {
                  "pattern": "^dsp_[23456789A-HJ-NP-Za-km-z]{21}$",
                  "type": "string"
                }
              },
              "required": [
                "dispute_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_discrepancies",
            "title": "Discrepancy list",
            "description": "Read discrepancies for a Spool (the agreement object). Use for inspecting differences; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "open_discrepancy",
            "title": "Discrepancy opening",
            "description": "Open a discrepancy for a Spool (the agreement object). Use when expected and observed figures do not reconcile; this records the difference and does not assume either source is wrong. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "expected": {
                  "additionalProperties": {},
                  "propertyNames": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "explanation": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "amount",
                    "count",
                    "timing",
                    "attribution",
                    "definition",
                    "evidence",
                    "duplicate",
                    "other"
                  ],
                  "type": "string"
                },
                "links": {
                  "additionalProperties": false,
                  "default": {
                    "match_ids": []
                  },
                  "properties": {
                    "dispute_id": {
                      "pattern": "^dsp_.*",
                      "type": "string"
                    },
                    "match_ids": {
                      "default": [],
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "review_request_id": {
                      "pattern": "^rvq_.*",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "observed": {
                  "additionalProperties": {},
                  "propertyNames": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "receipt_id": {
                  "pattern": "^ocr_[a-f0-9]{24}$",
                  "type": "string"
                },
                "sandbox_session_id": {
                  "type": "string"
                },
                "unit": {
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991,
                  "type": "integer"
                }
              },
              "required": [
                "id",
                "kind",
                "expected",
                "observed",
                "explanation"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "resolve_discrepancy",
            "title": "Discrepancy resolution",
            "description": "Resolve a discrepancy for a Spool (the agreement object). Use after authority determines the outcome; this records the resolution and does not initiate settlement. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "discrepancy_id": {
                  "pattern": "^dsc_[23456789A-HJ-NP-Za-km-z]{21}$",
                  "type": "string"
                },
                "outcome": {
                  "maxLength": 500,
                  "minLength": 1,
                  "type": "string"
                },
                "resolved_by": {
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                },
                "superseding_receipt_id": {
                  "pattern": "^ocr_[a-f0-9]{24}$",
                  "type": "string"
                }
              },
              "required": [
                "discrepancy_id",
                "outcome",
                "resolved_by"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_sources",
            "title": "Source list",
            "description": "Read source connections for a Spool (the agreement object). Use for source health inspection; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "add_source",
            "title": "Source addition",
            "description": "Add a source connection for a Spool (the agreement object). Use before ingestion; this creates a connection and does not ingest evidence. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "auth": {
                  "additionalProperties": false,
                  "properties": {
                    "kind": {
                      "enum": [
                        "none",
                        "api_key",
                        "bearer",
                        "basic",
                        "signed_webhook",
                        "db_credentials"
                      ],
                      "type": "string"
                    },
                    "secret_ref": {
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "kind"
                  ],
                  "type": "object"
                },
                "config": {
                  "additionalProperties": {},
                  "propertyNames": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "correction_semantics": {
                  "enum": [
                    "in_place",
                    "append_new_version",
                    "unknown"
                  ],
                  "type": "string"
                },
                "deletion_semantics": {
                  "enum": [
                    "hard",
                    "soft",
                    "tombstone",
                    "unknown"
                  ],
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "csv",
                    "json",
                    "file_upload",
                    "http_openapi",
                    "webhook_signed",
                    "sql_readonly",
                    "object_store_s3",
                    "cloudevents"
                  ],
                  "type": "string"
                },
                "name": {
                  "minLength": 1,
                  "type": "string"
                },
                "schema_version": {
                  "default": "1",
                  "type": "string"
                },
                "spool_id": {
                  "nullable": true,
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "kind",
                "name",
                "config",
                "auth",
                "deletion_semantics",
                "correction_semantics"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "sync_source",
            "title": "Source sync",
            "description": "Sync a source for a Spool (the agreement object). Use after configuration; this creates an idempotent checkpointed job. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^src_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_facts",
            "title": "Fact list",
            "description": "Read typed facts for a Spool (the agreement object). Use to inspect observed evidence; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "run_matching",
            "title": "Matching run",
            "description": "Run matching for a Spool (the agreement object). Use after claims and facts exist; this records explainable results and discrepancies. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_matches",
            "title": "Match list",
            "description": "Read matches for a Spool (the agreement object). Use to inspect outcomes and explanations; it has no side effects. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_counterparty_invite",
            "title": "Counterparty invite",
            "description": "Create a 15-minute, single-use grant that lets the other party join a Spool (the agreement object). Use when a counterparty needs scoped access without signing in; do not use as payment authority. This creates a credential that expires after use or 15 minutes. Requires the initiator's full-scope key. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "propose_spool",
            "title": "Spool proposal",
            "description": "Move a draft Spool (the agreement object) into the proposed state so the counterparty can review it. Use after the acceptance criteria are ready; this changes agreement state and does not accept terms or settle payment. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "accept_spool",
            "title": "Spool acceptance",
            "description": "Confirm the compiled contract by accepting a proposed Spool (the agreement object). Use only after reviewing its terms and acceptance criteria; this records agreement acceptance but does not verify fulfillment or settle payment. Production agent agreements require the current quote digest. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                },
                "quote_digest": {
                  "pattern": "^sha256:[0-9a-f]{64}$",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "amend_spool",
            "title": "Spool amendment",
            "description": "Change acceptance criteria or unit-based earned-value rules on a proposed Spool (the agreement object). Use before acceptance when the draft does not match the intended purchase; this replaces proposal details and does not accept or verify the work. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "add_conditions": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "description": {
                        "maxLength": 2000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "deterministic_check": {
                        "oneOf": [
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "row_count",
                                "type": "string"
                              },
                              "expected": {
                                "maximum": 9007199254740991,
                                "minimum": 0,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "checker",
                              "expected"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "completeness",
                                "type": "string"
                              },
                              "required_fields": {
                                "items": {
                                  "minLength": 1,
                                  "type": "string"
                                },
                                "minItems": 1,
                                "type": "array"
                              }
                            },
                            "required": [
                              "checker",
                              "required_fields"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "duplicate_rate",
                                "type": "string"
                              },
                              "key": {
                                "minLength": 1,
                                "type": "string"
                              },
                              "maximum": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "checker",
                              "key",
                              "maximum"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "url_format",
                                "type": "string"
                              },
                              "field": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "field"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "json_path",
                                "type": "string"
                              },
                              "expected": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  }
                                ]
                              },
                              "operator": {
                                "enum": [
                                  "eq",
                                  "gte",
                                  "lte",
                                  "contains"
                                ],
                                "type": "string"
                              },
                              "path": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "path",
                              "expected",
                              "operator"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "http_status",
                                "type": "string"
                              },
                              "expected_status": {
                                "maximum": 599,
                                "minimum": 100,
                                "type": "integer"
                              },
                              "timeout_ms": {
                                "exclusiveMinimum": 0,
                                "maximum": 5000,
                                "type": "integer"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "url",
                              "expected_status"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "case_sensitive": {
                                "type": "boolean"
                              },
                              "checker": {
                                "const": "text_contains",
                                "type": "string"
                              },
                              "field": {
                                "minLength": 1,
                                "type": "string"
                              },
                              "needle": {
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "needle"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "algorithm": {
                                "const": "sha256",
                                "type": "string"
                              },
                              "checker": {
                                "const": "hash_matches",
                                "type": "string"
                              },
                              "expected": {
                                "pattern": "^[a-fA-F0-9]{64}$",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "algorithm",
                              "expected"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "deadline_met",
                                "type": "string"
                              },
                              "due_at": {
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "due_at"
                            ],
                            "type": "object"
                          },
                          {
                            "additionalProperties": false,
                            "properties": {
                              "checker": {
                                "const": "claim_cited",
                                "type": "string"
                              },
                              "claim": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "evidence_ref": {
                                "pattern": "^evd_.*",
                                "type": "string"
                              }
                            },
                            "required": [
                              "checker",
                              "claim"
                            ],
                            "type": "object"
                          }
                        ]
                      },
                      "evidence_requirements": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "expected_type": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "freshness_seconds": {
                              "maximum": 9007199254740991,
                              "minimum": 0,
                              "type": "integer"
                            },
                            "id": {
                              "minLength": 1,
                              "type": "string"
                            },
                            "on_missing": {
                              "enum": [
                                "uncertain",
                                "fail"
                              ],
                              "type": "string"
                            },
                            "provenance": {
                              "additionalProperties": false,
                              "properties": {
                                "independent_of": {
                                  "enum": [
                                    "provider",
                                    "buyer"
                                  ],
                                  "type": "string"
                                },
                                "min_class": {
                                  "enum": [
                                    "submitted_by_provider",
                                    "submitted_by_buyer",
                                    "fetched_by_spoolis",
                                    "signed_by_external_system",
                                    "confirmed_by_human",
                                    "unknown_origin"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "source": {
                              "additionalProperties": false,
                              "properties": {
                                "description": {
                                  "type": "string"
                                },
                                "ref": {
                                  "minLength": 1,
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ref"
                              ],
                              "type": "object"
                            },
                            "who_may_supply": {
                              "items": {
                                "enum": [
                                  "provider",
                                  "buyer",
                                  "spoolis",
                                  "external_system",
                                  "human"
                                ],
                                "type": "string"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "id",
                            "expected_type",
                            "source"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "external_judge": {
                        "additionalProperties": false,
                        "properties": {
                          "evaluator_id": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "evaluator_version": {
                            "maxLength": 200,
                            "minLength": 1,
                            "type": "string"
                          },
                          "kind": {
                            "enum": [
                              "external_service",
                              "zk_verifier",
                              "marketplace_evaluator",
                              "buyer_owned",
                              "ai_evaluator",
                              "human_arbitration"
                            ],
                            "type": "string"
                          },
                          "on_missing": {
                            "enum": [
                              "uncertain",
                              "fail"
                            ],
                            "type": "string"
                          },
                          "proof_requirement": {
                            "enum": [
                              "signed",
                              "hashed_ref",
                              "declared"
                            ],
                            "type": "string"
                          },
                          "public_key": {
                            "maxLength": 10000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "score_mapping": {
                            "additionalProperties": false,
                            "properties": {
                              "consensus_gte": {
                                "maximum": 100,
                                "minimum": 0,
                                "type": "integer"
                              },
                              "quality_gte": {
                                "maximum": 100,
                                "minimum": 0,
                                "type": "integer"
                              },
                              "schema_id": {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "schema_id",
                              "quality_gte",
                              "consensus_gte"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "evaluator_id",
                          "kind",
                          "proof_requirement"
                        ],
                        "type": "object"
                      },
                      "required": {
                        "type": "boolean"
                      },
                      "verification_method": {
                        "enum": [
                          "buyer_confirm",
                          "both_confirm",
                          "deterministic",
                          "ai_assisted",
                          "third_party"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "description",
                      "required",
                      "verification_method"
                    ],
                    "type": "object"
                  },
                  "maxItems": 50,
                  "type": "array"
                },
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                },
                "remove_condition_ids": {
                  "items": {
                    "pattern": "^cond_[A-Za-z0-9_-]+$",
                    "type": "string"
                  },
                  "maxItems": 50,
                  "type": "array"
                },
                "unitization": {
                  "additionalProperties": false,
                  "properties": {
                    "identity": {
                      "additionalProperties": false,
                      "properties": {
                        "key": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "visibility": {
                          "enum": [
                            "label",
                            "pseudonymous"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "visibility"
                      ],
                      "type": "object"
                    },
                    "total_units": {
                      "exclusiveMinimum": 0,
                      "maximum": 100000,
                      "type": "integer"
                    },
                    "unit_amount_cents": {
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991,
                      "type": "integer"
                    }
                  },
                  "required": [
                    "total_units",
                    "unit_amount_cents"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "abandon_spool",
            "title": "Spool abandonment",
            "description": "Abandon an active Spool (the agreement object) before payment is committed. Use when the initiator no longer wants to proceed; this ends the agreement and cannot verify work or settle value. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "decline_spool",
            "title": "Spool decline",
            "description": "Decline a proposed Spool (the agreement object). Use when the counterparty rejects its terms; this ends the proposal without accepting it, verifying work, or settling payment. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "cancel_spool",
            "title": "Spool cancellation",
            "description": "Cancel a Spool (the agreement object) that should not continue. Use only when cancellation is an allowed action; this changes lifecycle state and does not verify fulfillment or settle payment. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "commit_payment",
            "title": "Payment commitment",
            "description": "Ask the configured settlement adapter to authorize and, where supported, hold the maximum value for a Spool (the agreement object). Use after terms are accepted when the selected payment path requires commitment; this may create a payment authorization or hold, but does not verify work or determine earned value. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "submit_evidence",
            "title": "Evidence submission",
            "description": "Attach fulfillment evidence to an acceptance criterion in a Spool (the agreement object). Use after work is delivered and before verification; this persists evidence but does not decide whether it passes or what was earned. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "claim_class": {
                  "enum": [
                    "actor_identity",
                    "artifact_state",
                    "machine_fact"
                  ],
                  "type": "string"
                },
                "condition_id": {
                  "pattern": "^cond_.*",
                  "type": "string"
                },
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                },
                "metadata": {
                  "additionalProperties": {},
                  "default": {},
                  "propertyNames": {
                    "type": "string"
                  },
                  "type": "object"
                },
                "on_behalf_of": {
                  "pattern": "^pty_.*",
                  "type": "string"
                },
                "provenance": {
                  "enum": [
                    "api_response",
                    "uploaded_json",
                    "url_fetch",
                    "external_tool_result"
                  ],
                  "type": "string"
                },
                "source": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "photo",
                    "text",
                    "file",
                    "url",
                    "dataset",
                    "confirmation"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "id",
                "condition_id",
                "type",
                "source"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "verify_spool",
            "title": "Spool verification",
            "description": "Issue a signed, durable, portable Outcome Receipt from this Spool, the versioned acceptance policy. The receipt is a verdict artifact, per unit for unitized work, another system can fetch and independently verify. Spoolis makes it by evaluating submitted evidence against the acceptance criteria and determining what was earned. Use after evidence is attached; this records the verdict and required evidence as present, missing, stale, unavailable, or provenance unsatisfied. Missing required evidence defaults to uncertain. Conditions with verification_method third_party keep your own judge: verification consumes the declared external evaluator's result, bound to this agreement and evidence per its declared proof requirement, instead of Spoolis judging those conditions itself. Unitized receipts may include salted public unit identities. Sandbox dataset evidence is limited to 100 records. Canonical recipe: compile -\u003e verify -\u003e Outcome Receipt -\u003e verifyReceipt -\u003e optional status check -\u003e consumer acts on earned. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "confirmations": {
                  "default": [],
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "condition_id": {
                        "pattern": "^cond_.*",
                        "type": "string"
                      },
                      "detail": {
                        "additionalProperties": {},
                        "propertyNames": {
                          "type": "string"
                        },
                        "type": "object"
                      },
                      "evidence_refs": {
                        "items": {
                          "pattern": "^evd_.*",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "method": {
                        "enum": [
                          "buyer_confirm",
                          "both_confirm"
                        ],
                        "type": "string"
                      },
                      "outcome": {
                        "enum": [
                          "passed",
                          "failed",
                          "waived"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "condition_id",
                      "method",
                      "outcome",
                      "evidence_refs"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "complete_spool",
            "title": "Completed Spool",
            "description": "Read a Spool (the agreement object) whose outcome is already completed. Use for compatibility when a completed result is expected; it has no side effects and does not run verification or settlement. Production only: set SPOOLIS_API_KEY; not available in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_spool_events",
            "title": "Spool event history",
            "description": "Read the canonical audit history for a Spool (the agreement object), including agreement, fulfillment, verification, and settlement events. Use to reconstruct what happened; it has no side effects. Works in the no-key sandbox.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "pattern": "^spl_.*",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          }
        ]
      },
      "name": "Spoolis",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "@spoolis/mcp",
          "version": "0.1.5",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/spoolis-mcp.json",
      "popularity": {
        "npmWeekly": 45
      },
      "registryName": "com.spoolis/mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://spoolis.com/api/mcp"
        }
      ],
      "repository": "",
      "reviewed": false,
      "slug": "spoolis-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.spoolis/mcp",
      "summary": "Verify work against acceptance criteria; signed receipts attest what passed and was earned.",
      "updatedAt": "2026-09-11T18:51:03Z",
      "url": "https://www.anchorterminal.com/tools/spoolis-mcp",
      "vendor": "spoolis.com",
      "vendorUrl": "https://spoolis.com/docs/mcp",
      "version": "0.1.8",
      "websiteUrl": "https://spoolis.com/docs/mcp",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/spoolis-mcp",
    "json": "https://www.anchorterminal.com/tools/spoolis-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/spoolis-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/spoolis-mcp.min.md"
  },
  "markdown": "# Spoolis\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by spoolis.com (https://spoolis.com/docs/mcp)\n- Listed because: It's published in the registry under spoolis.com, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Verify work against acceptance criteria; signed receipts attest what passed and was earned.\n\n## Facts\n\n- MCP registry: `com.spoolis/mcp` 0.1.8\n- Endpoint: https://spoolis.com/api/mcp (streamable HTTP)\n- Package: npm `@spoolis/mcp` (stdio)\n- Website: https://spoolis.com/docs/mcp\n- npm downloads a week: 45\n- Registry entry updated: 2026-09-11\n\n## Tools\n\n- Tools it lists (32, about 12,695 tokens of context, `tools/list` without credentials over MCP 2025-11-25, checked 2026-10-04 22:23 UTC):\n  - `verify_result` (writes): Get a signed, durable, portable Outcome Receipt: a verdict artifact, per unit for unitized work, another system can fetch and independently verify. Spoolis…\n  - `run_sandbox_scenario` (writes): Evaluate Spoolis without a key or account: run a seeded synthetic scenario through a real demo Spool (the agreement object), verification, and a signed demo…\n  - `compile_spool` (writes): Turn purchase intent into a proposed DRAFT Spool (the agreement object) with explicit acceptance criteria and earned-value rules. Use before both parties…\n  - `create_spool` (writes): Create a production Spool (the agreement object) from structured terms and acceptance criteria. Use when both parties will participate in the agreement…\n  - `get_spool` (read-only): Read a Spool (the agreement object), including hash-covered evidence requirements, dispute policy, and salted unit identity configuration. Use for status…\n  - `get_receipt_status` (read-only): Check whether an Outcome Receipt is still current or has been superseded, before acting on it. Returns state (current, superseded, unknown) and status (active,…\n  - `request_review` (writes): Route receipt units from a Spool (the agreement object) or its whole outcome to a named reviewer. Use when a human decision is required; this creates a review…\n  - `get_review` (read-only): Read the review request for a Spool (the agreement object). Use to poll its state; it has no side effects. Production only: set SPOOLIS_API_KEY; not available…\n  - `decide_review` (writes): Decide a pending review for a Spool (the agreement object). Use after inspecting its evidence; this records confirmation or creates a dispute and does not…\n  - `open_dispute` (writes): Open a dispute for a Spool (the agreement object). Use inside its declared window; this records counter-evidence and marks policy-defined value as not…\n  - `get_dispute` (read-only): Read a dispute for a Spool (the agreement object). Use to inspect claimed, accepted, disputed, final, and payable figures plus resolution state; it has no side…\n  - `list_discrepancies` (read-only): Read discrepancies for a Spool (the agreement object). Use for inspecting differences; it has no side effects. Production only: set SPOOLIS_API_KEY; not…\n  - `open_discrepancy` (writes): Open a discrepancy for a Spool (the agreement object). Use when expected and observed figures do not reconcile; this records the difference and does not assume…\n  - `resolve_discrepancy` (writes): Resolve a discrepancy for a Spool (the agreement object). Use after authority determines the outcome; this records the resolution and does not initiate…\n  - `list_sources` (read-only): Read source connections for a Spool (the agreement object). Use for source health inspection; it has no side effects. Production only: set SPOOLIS_API_KEY; not…\n  - `add_source` (writes): Add a source connection for a Spool (the agreement object). Use before ingestion; this creates a connection and does not ingest evidence. Production only: set…\n  - `sync_source` (writes): Sync a source for a Spool (the agreement object). Use after configuration; this creates an idempotent checkpointed job. Production only: set SPOOLIS_API_KEY;…\n  - `list_facts` (read-only): Read typed facts for a Spool (the agreement object). Use to inspect observed evidence; it has no side effects. Production only: set SPOOLIS_API_KEY; not…\n  - `run_matching` (writes): Run matching for a Spool (the agreement object). Use after claims and facts exist; this records explainable results and discrepancies. Production only: set…\n  - `list_matches` (read-only): Read matches for a Spool (the agreement object). Use to inspect outcomes and explanations; it has no side effects. Production only: set SPOOLIS_API_KEY; not…\n  - `create_counterparty_invite` (writes): Create a 15-minute, single-use grant that lets the other party join a Spool (the agreement object). Use when a counterparty needs scoped access without signing…\n  - `propose_spool` (writes): Move a draft Spool (the agreement object) into the proposed state so the counterparty can review it. Use after the acceptance criteria are ready; this changes…\n  - `accept_spool` (writes): Confirm the compiled contract by accepting a proposed Spool (the agreement object). Use only after reviewing its terms and acceptance criteria; this records…\n  - `amend_spool` (writes): Change acceptance criteria or unit-based earned-value rules on a proposed Spool (the agreement object). Use before acceptance when the draft does not match the…\n  - `abandon_spool` (writes): Abandon an active Spool (the agreement object) before payment is committed. Use when the initiator no longer wants to proceed; this ends the agreement and…\n  - `decline_spool` (writes): Decline a proposed Spool (the agreement object). Use when the counterparty rejects its terms; this ends the proposal without accepting it, verifying work, or…\n  - `cancel_spool` (writes): Cancel a Spool (the agreement object) that should not continue. Use only when cancellation is an allowed action; this changes lifecycle state and does not…\n  - `commit_payment` (writes): Ask the configured settlement adapter to authorize and, where supported, hold the maximum value for a Spool (the agreement object). Use after terms are…\n  - `submit_evidence` (writes): Attach fulfillment evidence to an acceptance criterion in a Spool (the agreement object). Use after work is delivered and before verification; this persists…\n  - `verify_spool` (writes): Issue a signed, durable, portable Outcome Receipt from this Spool, the versioned acceptance policy. The receipt is a verdict artifact, per unit for unitized…\n  - `complete_spool` (writes): Read a Spool (the agreement object) whose outcome is already completed. Use for compatibility when a completed result is expected; it has no side effects and…\n  - `get_spool_events` (read-only): Read the canonical audit history for a Spool (the agreement object), including agreement, fulfillment, verification, and settlement events. Use to reconstruct…\n- How its tools read to an agent (0 errors, 38 warnings, 1 note, about 12,695 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC11 abandon_spool: its one parameter, id, has no description\n  - warn TC11 accept_spool: none of its 2 parameters has a description\n  - warn TC11 add_source: none of its 8 parameters has a description\n  - warn TC11 amend_spool: none of its 4 parameters has a description\n  - warn TC11 cancel_spool: its one parameter, id, has no description\n  - warn TC11 commit_payment: its one parameter, id, has no description\n  - warn TC11 compile_spool: its one parameter, source, has no description\n  - warn TC11 complete_spool: its one parameter, id, has no description\n  - warn TC11 create_counterparty_invite: its one parameter, id, has no description\n  - warn TC11 create_spool: none of its 12 parameters has a description\n  - warn TC11 decide_review: none of its 4 parameters has a description\n  - warn TC11 decline_spool: its one parameter, id, has no description\n  - warn TC11 get_dispute: its one parameter, dispute_id, has no description\n  - warn TC11 get_receipt_status: its one parameter, receipt_id, has no description\n  - warn TC11 get_review: its one parameter, review_id, has no description\n  - warn TC11 get_spool: its one parameter, id, has no description\n  - warn TC11 get_spool_events: its one parameter, id, has no description\n  - warn TC11 list_discrepancies: its one parameter, id, has no description\n  - warn TC11 list_facts: its one parameter, id, has no description\n  - warn TC11 list_matches: its one parameter, id, has no description\n  - warn TC11 open_discrepancy: none of its 9 parameters has a description\n  - warn TC11 open_dispute: none of its 4 parameters has a description\n  - warn TC11 propose_spool: its one parameter, id, has no description\n  - warn TC11 request_review: none of its 5 parameters has a description\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/spoolis-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "Spoolis",
        "url": ""
      }
    ],
    "description": "Spoolis, an MCP server by spoolis.com, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Verify work against acceptance criteria; signed receipts attest what passed and was earned.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "Spoolis",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/spoolis-mcp",
    "published": "",
    "section": "indexed",
    "title": "Spoolis: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/tools/spoolis-mcp"
  },
  "tokens": {
    "markdown": 2500,
    "slim": 2430
  },
  "version": 1
}
