# Testril > Testril is an Ormi product. A Universe of Blockchain Data. An MCP service built for agents. Service endpoint: https://dev.testril.ai/mcp. Discover the deployed tools/list schemas and instructions before calling. ## Agent documentation - [Agent reference](https://testril.si/agents/): Implementation-based workflows for agents querying, materializing, paying for, and verifying blockchain data. Markdown: https://testril.si/agents/index.md - [Connect an agent](https://testril.si/agents/connection/): MCP connection, tool discovery, and the single HTTP data route. Markdown: https://testril.si/agents/connection.md - [Catalog-first quickstart](https://testril.si/agents/quickstart/): A complete discover, bind, inspect, materialize, pay, read, and verify workflow. Markdown: https://testril.si/agents/quickstart.md - [MCP tool reference](https://testril.si/agents/mcp-tools/): All nine public tools, their input contracts, and the full inspect subject matrix. Markdown: https://testril.si/agents/mcp-tools.md - [Identities and data contracts](https://testril.si/agents/data-contract/): Functions, bound identities, strict input fields, half-open block ranges, and typed values. Markdown: https://testril.si/agents/data-contract.md - [Outcomes and recovery](https://testril.si/agents/outcomes/): A result-state decision table and recovery rules that prevent false success or duplicate spending. Markdown: https://testril.si/agents/outcomes.md - [Payment and execution](https://testril.si/agents/payments/): Frozen prices, signed x402 payloads, quote lifetimes, retries, and batch channels. Markdown: https://testril.si/agents/payments.md - [Coverage, jobs, and retention](https://testril.si/agents/coverage/): How to find cached windows, materialize holes, wait for future blocks, and stop a paid job. Markdown: https://testril.si/agents/coverage.md - [Every Action Leaves a Trace](https://testril.si/agents/provenance/): Expand source blocks, compare digests, and preserve evidence without overstating verification. Markdown: https://testril.si/agents/provenance.md - [Resolve a question with ask](https://testril.si/agents/authoring/): Select a catalog Function, resolve missing scope and windows, and handle unsupported questions. Markdown: https://testril.si/agents/authoring.md - [Agent recipes](https://testril.si/agents/recipes/): Practical patterns for balance checks, event metrics, verified reports, and resuming interrupted work. Markdown: https://testril.si/agents/recipes.md - [Data liquidity and rewards](https://testril.si/agents/rewards/): Inspect paid coverage, wallet accounting, revenue eligibility, and claims without promising profits. Markdown: https://testril.si/agents/rewards.md ## Machine-readable reference - [Full reference](https://testril.si/llms-full.txt): Complete agent documentation in plain text. - [MCP tool catalog](https://testril.si/agents/mcp-tools.json): Editorial input-field inventory; not runtime JSON Schema. - [Existing product content](https://testril.si/agents/site-content.json): Homepage copy, published FAQ, and blog summaries as JSON; editorial context, not the API contract. - [Workflow examples](https://testril.si/agents/workflow-examples.json): Historical MCP captures plus labeled current illustrations. Recorded pre-0.9.0 tools, arguments, and money values remain archival, not current wire examples. ## Critical conventions - Always switch on outcome; x402 payment required is returned as an MCP error result. PaymentRequired is in structuredContent/content[0], and the quote {quote_id, amount, lines} is in content[1]. - Scope uses returned bound_function_id; windows are half-open. - Discover catalog Functions before binding. Ask selects existing Functions; it authors nothing. Discover coverage before materializing. - Confirm spending authorization; retry the identical priced call with signed payment in MCP _meta["x402/payment"], and retain _meta["x402/payment-response"]. There is no pay_quote tool or payment_id argument. - Ordinary money fields use {atoms, usd}: use atoms for exact USDC arithmetic and usd for display. x402 accepts[].amount and NFT accounting remain bare atom strings. Payment settles the exact quoted amount; spending caps belong in the agent wallet or signer. The batch minimum is 10000 atoms ($0.01), carried at accepts[].extra.minDeposit. - Quotes expire 120 seconds after freeze, paid or unpaid. The same spent payment or payment-identifier is idempotent; a different request using that identifier is payment_identifier_conflict. For payment_recovery_pending, retry the original payment and never sign a replacement. - claim_rewards requires {nft}, the claim-right id from inspect subject:nft. - REST has one GET route: /v1/bound_functions/{sha256:id}/data. Unpaid it returns 402 with PAYMENT-REQUIRED and a quote body; paid it takes PAYMENT-SIGNATURE and returns PAYMENT-RESPONSE. There is no HTTP provenance, write, status, quote, or OpenAPI route. - Reads do not index. Provenance is a separate MCP call over the same bound identity and window; it takes no attribute selector. - Never infer deployment chains, prices, or credentials from marketing examples. ## MCP service card - [Service description](https://testril.si/.well-known/mcp.json): Connection and per-tool pricing overview for the development endpoint. The live MCP tools/list and individual quotes remain authoritative.