{
  "reference_kind": "editorial_input_field_inventory_not_runtime_json_schema",
  "verified_on": "2026-11-02",
  "implementation_revision": "62aba5a2d4bccc6077cc42b6b68b79a0352a4e2c",
  "endpoint": "https://dev.testril.ai/mcp",
  "endpoint_status": "read_only_development_endpoint_reviewed_production_designation_not_confirmed",
  "authority": "Reviewed v0.14.0 source tag and read-only development initialize/tools/list; deployed schemas, instructions, configured chains and actual payment offers remain authoritative.",
  "live_observation": {
    "observed_on": "2026-11-02",
    "checked_at": "2026-11-02T16:02:40+00:00",
    "endpoint": "https://dev.testril.ai/mcp",
    "server_version": "0.14.0",
    "protocol_version": "2025-06-18",
    "tool_names_and_input_field_names_match": true,
    "instructions_sha256": "aaa0bf0cb3a8648a21e7e28813a598c13519ca10f7ef42163ffd1fce6d4a91d2",
    "scope": "Read-only initialize and tools/list with no pagination, plus free health_check and inspect subjects chains, pricing, and function for erc20.token_balance. No payment, metric read, binding, materialization, stop, or reward claim.",
    "implementation_revision": null,
    "source_handlers_and_tests_reviewed": true
  },
  "tools": [
    {
      "name": "health_check",
      "description": "Shallow process/connect diagnostics, chain IDs, version, counts, and payment rail; no dependency probes.",
      "input_fields": {},
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "inspect",
      "description": "Catalog, scope, coverage, jobs, chains, payment channels, pricing, and wallet accounting.",
      "input_fields": {
        "subject": {
          "type": "string",
          "required": true
        },
        "bound_function_id": {
          "type": "string",
          "required": false
        },
        "function_slug": {
          "type": "string",
          "required": false
        },
        "job_id": {
          "type": "string",
          "required": false
        },
        "chain_id": {
          "type": "unsigned_integer",
          "required": false
        },
        "payer": {
          "type": "string",
          "required": false
        },
        "network": {
          "type": "string",
          "required": false
        },
        "wallet": {
          "type": "string",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "bind",
      "description": "Instantiate a catalog template with explicit chain and structural scope; no metric data.",
      "input_fields": {
        "function_slug": {
          "type": "string",
          "required": true
        },
        "chain_id": {
          "type": "unsigned_integer",
          "required": true
        },
        "params": {
          "type": "object",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "ask",
      "description": "Select a catalog Function and bind scope; authors nothing. Unwritten addresses are requested, with already-landed Bound Functions offered when available.",
      "input_fields": {
        "chain_id": {
          "type": "unsigned_integer",
          "required": true
        },
        "from_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "function_slug": {
          "type": "string",
          "required": false
        },
        "metric": {
          "type": "string",
          "required": true
        },
        "params": {
          "type": "object",
          "required": false
        },
        "to_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "from_hour": {
          "type": "string",
          "required": false
        },
        "to_hour": {
          "type": "string",
          "required": false
        },
        "from_day": {
          "type": "string",
          "required": false
        },
        "to_day": {
          "type": "string",
          "required": false
        },
        "from_month": {
          "type": "string",
          "required": false
        },
        "to_month": {
          "type": "string",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "materialize",
      "description": "Fill unpaid coverage holes; x402 payment is attached to the same MCP call in transport metadata.",
      "input_fields": {
        "bound_function_id": {
          "type": "string",
          "required": true
        },
        "from_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "to_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "extra_cache_days": {
          "type": "unsigned_integer",
          "required": false
        },
        "from_hour": {
          "type": "string",
          "required": false
        },
        "to_hour": {
          "type": "string",
          "required": false
        },
        "from_day": {
          "type": "string",
          "required": false
        },
        "to_day": {
          "type": "string",
          "required": false
        },
        "from_month": {
          "type": "string",
          "required": false
        },
        "to_month": {
          "type": "string",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "read",
      "description": "Read all row attributes typed by the Function row schema from fully materialized coverage; optional leading row-key filter, no indexing or pagination.",
      "input_fields": {
        "bound_function_id": {
          "type": "string",
          "required": true
        },
        "from_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "to_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "key": {
          "type": "object_of_string_values",
          "required": false,
          "constraint": "A leading run of key parts from the Function row schema after block."
        },
        "from_hour": {
          "type": "string",
          "required": false
        },
        "to_hour": {
          "type": "string",
          "required": false
        },
        "from_day": {
          "type": "string",
          "required": false
        },
        "to_day": {
          "type": "string",
          "required": false
        },
        "from_month": {
          "type": "string",
          "required": false
        },
        "to_month": {
          "type": "string",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "provenance",
      "description": "Expand contributing block numbers and hashes for the bound function and exact window; no attribute selector.",
      "input_fields": {
        "from_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "to_block": {
          "type": "unsigned_integer",
          "required": false
        },
        "bound_function_id": {
          "type": "string",
          "required": true
        },
        "from_hour": {
          "type": "string",
          "required": false
        },
        "to_hour": {
          "type": "string",
          "required": false
        },
        "from_day": {
          "type": "string",
          "required": false
        },
        "to_day": {
          "type": "string",
          "required": false
        },
        "from_month": {
          "type": "string",
          "required": false
        },
        "to_month": {
          "type": "string",
          "required": false
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "stop",
      "description": "Stop the specific in-flight materialize quote held by the current NFT owner; inspect the returned stopped-job detail and any refund error.",
      "input_fields": {
        "bound_function_id": {
          "type": "string",
          "required": true
        },
        "wallet": {
          "type": "string",
          "required": true
        },
        "quote_id": {
          "type": "string",
          "required": true
        }
      },
      "reference_url": "/agents/mcp-tools/"
    },
    {
      "name": "claim_rewards",
      "description": "Pay eligible unclaimed USDC atoms to the current claim-right holder; minimum 10000 atoms ($0.01).",
      "input_fields": {
        "nft": {
          "type": "string",
          "required": true
        }
      },
      "reference_url": "/agents/mcp-tools/"
    }
  ],
  "inspect_subjects": {
    "functions": {
      "required_fields": [],
      "optional_fields": []
    },
    "function": {
      "required_fields": [
        "function_slug"
      ],
      "optional_fields": []
    },
    "bound_functions": {
      "required_fields": [],
      "optional_fields": [
        "function_slug"
      ]
    },
    "bound_function": {
      "required_fields": [
        "bound_function_id"
      ],
      "optional_fields": []
    },
    "jobs": {
      "required_fields": [],
      "optional_fields": []
    },
    "job": {
      "required_fields": [
        "job_id"
      ],
      "optional_fields": []
    },
    "chains": {
      "required_fields": [],
      "optional_fields": []
    },
    "chain": {
      "required_fields": [
        "chain_id"
      ],
      "optional_fields": []
    },
    "channels": {
      "required_fields": [
        "payer"
      ],
      "optional_fields": [
        "network"
      ]
    },
    "nft": {
      "required_fields": [
        "wallet"
      ],
      "optional_fields": []
    },
    "pricing": {
      "required_fields": [],
      "optional_fields": []
    }
  },
  "outcomes": [
    "success",
    "error",
    "suggested"
  ],
  "rules": {
    "block_windows": "half_open_from_block_inclusive_to_block_exclusive",
    "paid_execution": "Retry the same call and arguments with signed x402 PaymentPayload in MCP _meta[x402/payment].",
    "identity": "Returned bound_function_id, not name or metric phrasing.",
    "quote_lifetime_seconds": 120,
    "maximum_provenance_contributing_blocks": 10000,
    "spending": "Operator-set Testril CLI budgets authorize qualifying payments without another prompt; otherwise confirm quoted scope and amount, including mock settlement.",
    "unknown_fields": "Rejected.",
    "provenance_identity": "bound_function_id is required by the wire schema.",
    "read_materialize_identity": "bound_function_id plus the applicable block or period window; payment is transport metadata.",
    "public_tools_only": "Only the nine advertised public tools are documented; internal and separate admin-server operations are excluded.",
    "read_key": "Optional object of string values for a leading run of row-key parts; all attributes are returned.",
    "retired_inputs": [
      "read.attributes",
      "read.entity",
      "provenance.attribute",
      "read.cursor",
      "read.limit"
    ],
    "indexing_head": "Indexing runs through the current chain head; future paid tails wait in waiting_blocks, not for finality.",
    "stateful_materialize": "Functions with memory are quoted and walked from contract creation; preceding coverage is required.",
    "stop_ownership": "Current NFT owner at the chain tip, when a collection is configured; original payer alone is insufficient.",
    "minimum_claim_atoms": 10000,
    "ask_options": "An address not written in the question or supplied in params is requested. A params suggestion may offer up to five already-landed Bound Functions with params for the operator to select.",
    "dependency_materialize": "Served instructions advertise quotes across needed dependency and reader blocks, walking dependencies first; runtime execution was not verified.",
    "money_objects": "In 0.9.0, ordinary MCP and REST money fields are objects with atoms as an integer USDC-atom string and usd as server-formatted display text.",
    "money_object_fields": [
      "quote.amount",
      "quote.lines[].amount",
      "quote.lines[].unit_price",
      "native_quote.est_spend",
      "materialize_or_read_replay.amount",
      "materialize_or_read_replay.receipt.amount",
      "inspect.job.spent",
      "stop.job.refunded",
      "inspect.pricing.rates[].unit_price",
      "ask.retention.price_per_row",
      "ask.retention.spend"
    ],
    "x402_accepts_amount": "accepts[].amount remains a bare decimal string of USDC atoms.",
    "payment_policy": "Payment settles the exact quoted amount. Agent spending caps belong in the wallet or signer, not Testril tool arguments or quote objects.",
    "batch_minimum_deposit": "The declared and server-enforced minimum deposit is 10000 atoms ($0.01), whatever the call's price; batch offers carry it at accepts[].extra.minDeposit as a bare atom string.",
    "nft_accounting_money": "NFT accounting amounts, including cost, earned, and pnl, remain bare decimal strings of USDC atoms.",
    "reward_network": "Rewards are paid on the selected NFT's recorded collection network, regardless of payment networks used by reads; claim_rewards takes nft and no reward network argument.",
    "claim_rights": "A wallet can hold one claim-right per payment chain and more through transfers. inspect subject:nft returns cards in nfts plus unreadable-chain entries in unavailable; a pending mint carries minting true.",
    "payment_required_transport": "An unpaid materialize or read is an MCP isError result: x402 PaymentRequired is in structuredContent/content[0], while the Testril quote {quote_id, amount, lines} is in content[1].",
    "payment_idempotency": "Retrying the same spent payment or x402 payment-identifier returns the stored purchase without another charge; using an identifier for another request is refused as payment_identifier_conflict.",
    "payment_recovery": "payment_recovery_pending retains the original signed payment and retries completion; do not sign a replacement, even after quote expiry.",
    "rest_payment": "The data GET returns 402 with PAYMENT-REQUIRED and a quote body when unpaid, accepts base64 JSON PaymentPayload in PAYMENT-SIGNATURE, and returns PAYMENT-RESPONSE when paid. A malformed signature is 400, a decoded non-payment is 402 invalid_payload, and identifier conflict is 409."
  },
  "captured_example_endpoint": "https://dev.testril.ai/mcp",
  "captured_example_payment_asset": "USDC",
  "release_review": {
    "reviewed_on": "2026-11-02",
    "source_reviewed_at": "2026-11-02",
    "implementation_worktree_clean": null,
    "implementation_revision": "62aba5a2d4bccc6077cc42b6b68b79a0352a4e2c",
    "release_tag_revision": "62aba5a2d4bccc6077cc42b6b68b79a0352a4e2c",
    "live_protocol_version": "2025-06-18",
    "live_tool_names_and_input_fields_match": true,
    "live_schema_sha256": "500f5d55e81f648e263a749a308ebef33d6387c5b2905b0cb618cd10165ba373",
    "live_instructions_sha256": "aaa0bf0cb3a8648a21e7e28813a598c13519ca10f7ef42163ffd1fce6d4a91d2",
    "verification_scope": "Reviewed v0.14.0 public MCP registrations, argument types, served instructions, handlers, REST route, payment recovery/reward paths and relevant tests; read-only development initialize/tools/list plus free health, chain, pricing and erc20.token_balance Function-schema observations. Backend tests were read, not executed; no service mutation, metric read or payment.",
    "schema_fingerprint_encoding": "UTF-8 JSON of tools array, sorted object keys, compact separators, ensure_ascii=true",
    "deployment_revision": "Not independently established; endpoint reports 0.14.0. The reviewed release tag is not proof of the exact deployed Git revision.",
    "live_server_version": "0.14.0",
    "implementation_review_scope": "See docs/pr24-release-review.md for source paths and verification limits.",
    "deployment_differences": [
      "Exact deployed Git revision remains unknown. Source-tag review and matching live input inventory do not verify execution or production availability."
    ],
    "release_changes": "Testril 0.14.0 adds payment-completion recovery and expands the Function catalog for ENS, The Graph, launchpads, prediction markets, token metadata, wallet transfers, and NFT collection metadata. The nine public tool names and input fields are unchanged.",
    "release_scope": "Factual-accuracy update for current product, agent, REST, payment, reward and marketing claims; historical Workflow captures preserved. No ASI or Official Registry submission.",
    "live_checked_at": "2026-11-02T16:02:40+00:00"
  },
  "review_history": [
    {
      "reviewed_on": "2026-10-27",
      "source_reviewed_at": "2026-10-27",
      "implementation_worktree_clean": null,
      "implementation_revision": "089892e0224cb8e4d748563ba7b2d9bd0e298e24",
      "release_tag_revision": "345cd5a857faed75c17ac0c94f05e96e8f935b15",
      "live_protocol_version": "2025-06-18",
      "live_tool_names_and_input_fields_match": true,
      "live_schema_sha256": "08c59aa90934dc27d4214b2dbd136b13171bd1151b5436d8a033185c3e32c3a0",
      "live_instructions_sha256": "e0b78e95a2bc3051e083fcd233cea80721210946d57ebc1422c2ae24d683de5a",
      "verification_scope": "Reviewed v0.13.0 and current-main public MCP registrations, argument types, served instructions, handlers, REST route, payment/reward paths and relevant tests; read-only development initialize/tools/list plus free health, chain and pricing observations. Backend tests were read, not executed; no service mutation, metric read or payment.",
      "schema_fingerprint_encoding": "UTF-8 JSON of tools array, sorted object keys, compact separators, ensure_ascii=true",
      "deployment_revision": "Not independently established; endpoint reports 0.13.0. Reviewed release tag and current main are not proof of the exact deployed Git revision.",
      "live_server_version": "0.13.0",
      "implementation_review_scope": "See docs/pr23-release-review.md for source paths and verification limits.",
      "deployment_differences": [
        "Exact deployed Git revision remains unknown. Source-tag review and matching live input inventory do not verify execution or production availability."
      ],
      "release_scope": "Factual-accuracy update for current product, agent, REST, payment, reward and marketing claims; historical Workflow captures preserved. No ASI or Official Registry submission.",
      "live_checked_at": "2026-10-27T06:37:14+00:00"
    },
    {
      "reviewed_on": "2026-10-20",
      "source_reviewed_at": "2026-10-20",
      "implementation_worktree_clean": true,
      "implementation_revision": "31c97a6f6de33747ab33fcaa46886e24f863b800",
      "live_protocol_version": "2025-06-18",
      "live_tool_names_and_input_fields_match": true,
      "live_schema_sha256": "0628f855bb1077e48b01701b112e61705df2354464db312bfc1b8f4977052f93",
      "live_instructions_sha256": "e6060f0ec457be4fd501fa955b27720b97112ced8f791be7f2b4cf3a797107f1",
      "verification_scope": "Reviewed v0.11.0 public MCP registrations, argument types, served instructions, handlers, payment/reward paths and relevant test sources; read-only development initialize/tools/list plus free pricing observation. Tests in the backend were read, not executed; no service mutation, metric read or payment.",
      "schema_fingerprint_encoding": "UTF-8 JSON of tools array, sorted object keys, compact separators, ensure_ascii=true",
      "deployment_revision": "Not independently established; endpoint reports 0.11.0. Reviewed source is the v0.11.0 tag, not proof of the exact deployed Git revision.",
      "live_server_version": "0.11.0",
      "implementation_review_scope": "See docs/pr22-release-review.md for source paths and verification limits.",
      "deployment_differences": [
        "Exact deployed Git revision remains unknown. Source-tag review and matching live input inventory do not verify execution or production availability."
      ],
      "release_scope": "MCP service card, variable quoted pricing metadata and ASI draft; native new-tab raw-card links and sanitized reference_open tracking. Updated current network/reward guidance, preserving historical Workflow captures. No ASI or Official Registry submission.",
      "live_checked_at": "2026-10-20T17:23:14+00:00"
    },
    {
      "reviewed_on": "2026-10-13",
      "implementation_worktree_clean": null,
      "live_protocol_version": null,
      "live_tool_names_and_input_fields_match": null,
      "live_schema_sha256": null,
      "live_instructions_sha256": null,
      "verification_scope": "Source review of backend PR 274 release notes, public registrations and argument types, MCP and REST wire models, served instructions, handlers, and relevant tests; no live 0.9.0 endpoint was available.",
      "schema_fingerprint_encoding": null,
      "deployment_revision": "Target source revision 319b8eb3c4ae94475b189f0015e9ade30c043fda; deployment pending.",
      "live_server_version": null,
      "implementation_review_scope": "Backend PR 274 at its reviewed head, including CHANGELOG.md and crates/wire/mcp-server/src/instructions.rs as primary contract sources.",
      "post_review_owner_corrections": "On 2026-10-13, the owner clarified that agent-facing priced tools have no spending-cap field and that Testril 0.9.1 declares and enforces a 10000-atom ($0.01) batch minimum deposit.",
      "deployment_differences": [
        "Testril 0.9.0 was not deployed at review time; live initialize, tools/list, instructions, and response shapes remain to be confirmed after deployment."
      ],
      "release_scope": "Updated all current agent and REST money documentation for the 0.9.0 {atoms, usd} wire contract while preserving labeled historical Workflow captures. No metric execution, writes, or payments performed.",
      "source_reviewed_at": "2026-10-13"
    }
  ],
  "live_observation_history": [
    {
      "observed_on": "2026-10-27",
      "checked_at": "2026-10-27T06:37:14+00:00",
      "endpoint": "https://dev.testril.ai/mcp",
      "server_version": "0.13.0",
      "protocol_version": "2025-06-18",
      "tool_names_and_input_field_names_match": true,
      "instructions_sha256": "e0b78e95a2bc3051e083fcd233cea80721210946d57ebc1422c2ae24d683de5a",
      "scope": "Read-only initialize and tools/list with no pagination, plus free health_check and inspect subjects chains and pricing. No payment, metric read, binding, materialization, stop, or reward claim.",
      "implementation_revision": null,
      "source_handlers_and_tests_reviewed": true
    },
    {
      "observed_on": "2026-10-20",
      "checked_at": "2026-10-20T17:23:14+00:00",
      "endpoint": "https://dev.testril.ai/mcp",
      "server_version": "0.11.0",
      "protocol_version": "2025-06-18",
      "tool_names_and_input_field_names_match": true,
      "instructions_sha256": "e6060f0ec457be4fd501fa955b27720b97112ced8f791be7f2b4cf3a797107f1",
      "scope": "Read-only initialize and tools/list with no pagination; earlier October 20 free inspect subject:pricing confirmed meter rates. No payment, metric read, binding, materialization, stop, or reward claim.",
      "implementation_revision": null,
      "source_handlers_and_tests_reviewed": true
    },
    {
      "observed_on": "2026-10-19",
      "endpoint": "https://dev.testril.ai/mcp",
      "server_version": "0.10.0",
      "protocol_version": "2025-06-18",
      "tool_names_and_input_field_names_match": true,
      "instructions_sha256": "52aab5089df32534c59a6864ec3d7d6e5fb5dcbd18e5839592b3a9ae0ffbb2c1",
      "scope": "Read-only initialize and tools/list, plus free health_check and inspect subject:pricing. Live provenance block-end requiredness corrected in this inventory. No payment or metric-data read for this review.",
      "implementation_revision": null,
      "source_handlers_and_tests_reviewed": false
    }
  ]
}
