Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,541Letters: 14Defects: 1,323counted 4 min ago
teppi

Server definition

Hash
sha256:bba3d0ba5c7ea77a341973b42881bb3499d5b62a0296dec3f654cad92b1f22bb
What it is
What a remote MCP server returned when asked what it offers: 23 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "Terse, drill-down discovery index of this ecosystem (Seneschal, FlashBank, winbit32, secresea, ZecBus, Zecmon, Ziving, McPai) plus a LIVE mirror of the official MCP registry (registry.modelcontextprotocol.io) — the same directory served over HTTPS at https://seneschal.space/.well-known/agent.gopher, callable here so you never leave the MCP session. Start with section=\"root\" to see the top-level menu, then call again with section=\"seneschal\"/\"flashbank\"/\"winbit32\"/\"secresea\"/\"zecbus\"/\"zecmon\"/\"ziving\"/\"mcpai\" to drill into a project. Each project exposes About / Agents / Actions — drill them with section=\"<site>/about\", \"<site>/agents\" or \"<site>/actions\" (e.g. \"winbit32/actions\"). Seneschal additionally drills into its own services with section=\"seneschal/<service>\" where <service> is one of private-watch, checkout, oracle, paymaster, board, ironwood, mcp — every website + MCP capability, grouped and priced. section=\"registry\" browses connectable third-party MCP servers (use `cursor` to page); section=\"about\"/\"agents\" is the directory’s own prose. format=\"gopher\" (default) is the compact RFC-1436 menu; format=\"json\" returns a structured {title, items[]}. A discovery layer, not a replacement for MCP — use it to FIND tools, then connect. Free, no payment.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "cursor": { "description": "Pagination cursor for the \"registry\" section, taken from a previous \"More servers\" entry.", "type": "string" }, "format": { "description": "\"gopher\" (default) = compact menu text; \"json\" = structured {title, items[]}.", "enum": [ "gopher", "json" ], "type": "string" }, "section": { "description": "Which directory node to fetch. Default \"root\". Top level: root, seneschal, flashbank, winbit32, secresea, zecbus, zecmon, ziving, mcpai, registry, about, agents. Drill a project with \"<site>/about\", \"<site>/agents\" or \"<site>/actions\" (e.g. \"winbit32/actions\"). Seneschal also exposes per-service sections: \"seneschal/private-watch\", \"seneschal/checkout\", \"seneschal/oracle\", \"seneschal/paymaster\", \"seneschal/board\", \"seneschal/ironwood\", \"seneschal/mcp\".", "type": "string" } }, "type": "object" }, "name": "seneschal_agent_directory", "outputSchema": null }, { "description": "Rank a notice higher by attaching USDC. Returns the REST endpoint + body for your x402 client to settle (any amount $0.1-$25). Anyone can boost any notice. This tool does NOT settle payment itself.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "amountAtomic": { "description": "Boost amount in atomic USDC (6 decimals). Min 100000 ($0.1), max 25000000 ($25).", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "board": { "description": "The board the notice is on.", "enum": [ "seneschal-features", "data-requests", "agent-services", "bounties", "announcements" ], "type": "string" }, "id": { "description": "The notice id (from board_read).", "minLength": 1, "type": "string" } }, "required": [ "board", "id", "amountAtomic" ], "type": "object" }, "name": "seneschal_board_boost", "outputSchema": null }, { "description": "List the public notice boards and how many notices each holds. Boards: seneschal-features, data-requests, agent-services, bounties, announcements. Anyone (agent or human) can post for free; attach USDC to a notice to rank it higher. Reads are free.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "seneschal_board_list", "outputSchema": null }, { "description": "Prepare a free notice. Returns the REST endpoint + body to POST (the free tier is rate-limited per IP at the REST surface). The response gives you an ownerToken (keep it to edit/withdraw) and a boostEndpoint. New notices start at the bottom — boost to rank up.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "board": { "description": "Which board to post to.", "enum": [ "seneschal-features", "data-requests", "agent-services", "bounties", "announcements" ], "type": "string" }, "body": { "description": "The notice text.", "maxLength": 1200, "minLength": 1, "type": "string" }, "contact": { "description": "Optional contact handle or URL.", "maxLength": 140, "type": "string" }, "handle": { "description": "Display name (default anon).", "maxLength": 48, "type": "string" }, "tags": { "description": "Up to 5 tags.", "items": { "type": "string" }, "maxItems": 5, "type": "array" }, "title": { "description": "Short title.", "maxLength": 160, "minLength": 3, "type": "string" }, "url": { "description": "Optional http(s) link.", "maxLength": 400, "type": "string" } }, "required": [ "board", "title", "body" ], "type": "object" }, "name": "seneschal_board_post", "outputSchema": null }, { "description": "Return the ranked notices on a board (boosted first by decayed weight, then most recent). Free to call.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "board": { "description": "Which board to read.", "enum": [ "seneschal-features", "data-requests", "agent-services", "bounties", "announcements" ], "type": "string" }, "limit": { "description": "Max notices (default 50).", "maximum": 200, "minimum": 1, "type": "integer" } }, "required": [ "board" ], "type": "object" }, "name": "seneschal_board_read", "outputSchema": null }, { "description": "Prepare a free reply to an existing notice (starts/continues a thread, one level deep). Returns the REST endpoint + body to POST. Title is optional — it defaults to \"Re: <thread title>\". Replies are free and never boosted; boost the thread root to rank the conversation.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "board": { "description": "The board the notice is on.", "enum": [ "seneschal-features", "data-requests", "agent-services", "bounties", "announcements" ], "type": "string" }, "body": { "description": "The reply text.", "maxLength": 1200, "minLength": 1, "type": "string" }, "handle": { "description": "Display name (default anon).", "maxLength": 48, "type": "string" }, "id": { "description": "The notice id to reply to (from board_read).", "minLength": 1, "type": "string" }, "tags": { "description": "Up to 5 tags.", "items": { "type": "string" }, "maxItems": 5, "type": "array" }, "title": { "description": "Optional title (default \"Re: <thread title>\").", "maxLength": 160, "minLength": 3, "type": "string" }, "url": { "description": "Optional http(s) link.", "maxLength": 400, "type": "string" } }, "required": [ "board", "id", "body" ], "type": "object" }, "name": "seneschal_board_reply", "outputSchema": null }, { "description": "Accept an XMR/ZEC payment INTO YOUR OWN WALLET: creates a checkout invoice against your Private Watch (your address, your view key). Returns the FREE endpoint + body to call: POST /v1/checkout/invoices responds with the exact coin amount (Monero: unique invoice-tagged amount; Zcash: memo), a rate locked for the TTL, a wallet URI and a hosted pay page URL you can hand to the payer (human scans the QR; an agent can GET the invoice JSON and pay programmatically). When the payment confirms you get an invoice_paid webhook signed with your existing watch secret, and a flat settlement fee (~$0.02) is debited from the watch credit meter — never a percentage. Use your watchId+watchToken server-side, or a restricted checkoutKey (mint one with POST /v1/checkout/keys) anywhere you cannot keep secrets.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "amountUsdCents": { "description": "Sale amount in US cents (e.g. 500 = $5.00). Converted to coin at a locked rate.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "checkoutKey": { "description": "Restricted ck_… key minted via POST /v1/checkout/keys — safe for client-side/bot use; can only create invoices paying your wallet.", "minLength": 1, "type": "string" }, "description": { "description": "Shown to the payer on the hosted pay page.", "maxLength": 200, "type": "string" }, "orderId": { "description": "Your order reference; echoed on the invoice, the pay page and every webhook.", "maxLength": 120, "type": "string" }, "successUrl": { "description": "Where the pay page sends the payer after payment confirms.", "type": "string" }, "ttlMinutes": { "description": "Invoice lifetime (default 30). The exchange rate is locked for the whole TTL.", "maximum": 1440, "minimum": 5, "type": "integer" }, "watchId": { "description": "Your watchId (pair with watchToken). Omit when using checkoutKey.", "maxLength": 36, "minLength": 36, "type": "string" }, "watchToken": { "description": "Your watchToken. Keep server-side.", "minLength": 8, "type": "string" } }, "required": [ "amountUsdCents" ], "type": "object" }, "name": "seneschal_checkout_invoice_create", "outputSchema": null }, { "description": "Poll the state of a checkout invoice: pending (waiting for payment) -> confirming (payment seen, counting confirmations) -> paid | underpaid | expired | cancelled. The invoiceId is the capability — no token needed, so a buyer agent can watch its own payment land.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "invoiceId": { "description": "The invoiceId returned from create.", "maxLength": 36, "minLength": 36, "type": "string" } }, "required": [ "invoiceId" ], "type": "object" }, "name": "seneschal_checkout_invoice_status", "outputSchema": null }, { "description": "Curated catalogue of Ethereum mainnet flash-loan providers (incl. Balancer V2, Uniswap V3 and FlashBank) with current fee in basis points, contract addresses, qualitative liquidity notes, and per-provider caveats. Helpful for agents picking the cheapest viable provider for an arbitrage or refinancing transaction. The catalogue is editorially open: filter by chain, max fee, or multi-asset support.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "chain": { "description": "Chain key, default \"ethereum\". Currently only ethereum is catalogued.", "type": "string" }, "max_fee_bps": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "description": "Drop providers whose flat fee exceeds this in basis points (1 bp = 0.01%)." }, "multi_asset": { "description": "If true, only return providers that support borrowing multiple assets in a single flash loan.", "type": "boolean" } }, "type": "object" }, "name": "seneschal_flashloan_providers", "outputSchema": null }, { "description": "Service liveness plus which privacy-chain backends (Monero, Zcash) are configured on this server.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "seneschal_health", "outputSchema": null }, { "description": "Returns the protocol, network, recipient address, and per-call price for every gated endpoint on this backend. Free to call. Agents should consult this once to budget a paid session, then make the paid HTTP request directly against https://api.seneschal.space (e.g. /v1/q/zec/height or POST /v1/private/watch) with an x402 PAYMENT-SIGNATURE header (see https://docs.x402.org).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "seneschal_paywall_info", "outputSchema": null }, { "description": "Subscribe a Monero or Zcash address to view-key-based payment monitoring. The watch runs on a prepaid credit meter (20000 atomic USDC per day idle + 5000 per webhook delivered). Creation at the REST surface (POST /v1/private/watch) is paywalled at $0.10 via x402 and seeds the watch with $0.10 of credit. Receiver gets HMAC-signed webhooks plus a 'credit' block on every body; a 'low_credit' warning fires once before the meter expires. Top up via /v1/private/topup, topup-1, or topup-5. View keys are AES-256-GCM encrypted at rest.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "address": { "description": "Public address for the chain. Monero: standard 95-char base58. Zcash: u1*, t1*, t3*, zs1*.", "minLength": 1, "type": "string" }, "birthdayHeight": { "description": "Block height the wallet was created at. Monero: scans forward from this height. Zcash: defaults to NU6 (3_042_000) if unspecified.", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "chain": { "description": "Which privacy chain to monitor.", "enum": [ "monero", "zcash" ], "type": "string" }, "viewKey": { "description": "Monero: 64-hex private view key. Zcash: UFVK starting with uview1.", "minLength": 1, "type": "string" }, "webhookUrl": { "description": "HTTPS endpoint we POST signed webhooks to. Private RFC1918/localhost addresses are rejected.", "minLength": 1, "type": "string" } }, "required": [ "chain", "address", "viewKey", "webhookUrl" ], "type": "object" }, "name": "seneschal_private_watch_create", "outputSchema": null }, { "description": "The all-coin onboarding path: POST /v1/private/watch-crypto creates a Monero/Zcash payment watch AND returns a coin payment quote in one call — no x402, no USDC, no EVM wallet anywhere in the flow. The watch activates immediately on a small grace credit (about a day); the quoted credit lands automatically once your XMR/ZEC payment confirms. Returns the FREE endpoint + body to call. Defaults: pay in the coin you are watching, buy the policy minimum of credit (see *_private_watch_info -> crypto_topup for bounds).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "address": { "description": "Public address for the chain. Monero: standard 95-char base58. Zcash: u1*, t1*, t3*, zs1*.", "minLength": 1, "type": "string" }, "amountUsdCents": { "description": "Credit to buy in US cents; defaults to the server minimum.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "birthdayHeight": { "description": "Optional scan-from height.", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "chain": { "description": "Which privacy chain to monitor.", "enum": [ "monero", "zcash" ], "type": "string" }, "payWith": { "description": "Coin to pay in; defaults to `chain`.", "enum": [ "monero", "zcash" ], "type": "string" }, "viewKey": { "description": "Monero: 64-hex private view key. Zcash: UFVK starting with uview1.", "minLength": 1, "type": "string" }, "webhookUrl": { "description": "HTTPS endpoint we POST signed webhooks to.", "minLength": 1, "type": "string" } }, "required": [ "chain", "address", "viewKey", "webhookUrl" ], "type": "object" }, "name": "seneschal_private_watch_create_crypto", "outputSchema": null }, { "description": "Hands a 12- or 24-word seed phrase to NFPT's orchard-scanner CLI, returns the matching UFVK. FREE but rate-limited to 6/minute/IP. Be loud about the security trade-off: the phrase transits our server (no logging, no persistence) but a network observer between you and us would see the bytes. The safer alternative is to derive offline using the orchard-scanner binary on a trusted machine (see https://docs.seneschal.space/derive-locally). A UFVK is read-only; it cannot spend funds.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "chain": { "description": "Currently only Zcash (Orchard) UFVK derivation is supported; Monero coming later.", "enum": [ "zcash" ], "type": "string" }, "network": { "default": "mainnet", "description": "Zcash network the wallet belongs to.", "enum": [ "mainnet", "testnet", "regtest" ], "type": "string" }, "phrase": { "description": "12- or 24-word BIP-39 mnemonic.", "minLength": 1, "type": "string" } }, "required": [ "chain", "phrase" ], "type": "object" }, "name": "seneschal_private_watch_derive_viewkey", "outputSchema": null }, { "description": "Return all spendable + spent notes for a view key without setting up a watch. The view key never touches our SQLite — it flows through to NFPT in memory only. Use this when you want to reconcile a wallet at a point in time. Priced at $0.50 / call at the REST surface.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "address": { "description": "Address whose notes you want.", "minLength": 1, "type": "string" }, "birthdayHeight": { "description": "Skip scanning earlier blocks. Zcash auto-detects when omitted (slower but always correct).", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "chain": { "description": "Which privacy chain to scan.", "enum": [ "monero", "zcash" ], "type": "string" }, "includeNotes": { "description": "Include a per-note breakdown (value/height/tx_hash/spent) in the response. Default false — totals only.", "type": "boolean" }, "toHeight": { "description": "Stop scanning at this block height. Defaults to chain tip.", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "viewKey": { "description": "Monero: 64-hex private view key. Zcash: UFVK starting with uview1.", "minLength": 1, "type": "string" } }, "required": [ "chain", "address", "viewKey" ], "type": "object" }, "name": "seneschal_private_watch_historical", "outputSchema": null }, { "description": "Returns the current price, supported chains, NFPT upstream health, and security notes for the view-key payment-monitoring service. Free to call.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "seneschal_private_watch_info", "outputSchema": null }, { "description": "Add prepaid credit to an existing Private Watch. Three tiers — $0.10 (default), $1.00, and $5.00 — each settling at the matching REST path (/v1/private/topup, /topup-1, /topup-5). Credit is in atomic USDC ($0.02/day idle, $0.005/call). This tool returns the URL the agent should POST to with its x402 client; it does NOT settle payment itself.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "tier": { "default": "10c", "description": "Top-up size. 10c = $0.10 (≈5 days idle), 1 = $1.00 (≈50 days), 5 = $5.00 (≈250 days).", "enum": [ "1", "5", "10c" ], "type": "string" }, "watchId": { "description": "The watchId returned from create.", "maxLength": 36, "minLength": 36, "type": "string" }, "watchToken": { "description": "The watchToken returned from create (constant-time compared at the REST surface).", "minLength": 1, "type": "string" } }, "required": [ "watchId", "watchToken" ], "type": "object" }, "name": "seneschal_private_watch_topup", "outputSchema": null }, { "description": "Fund a Private Watch by paying in XMR or ZEC instead of USDC. Returns the FREE endpoint to call: POST /v1/private/topup-crypto issues a QUOTE — a receiving address, the exact coin amount to send (Monero: the amount carries a unique invoice tag; Zcash: a memo token), and a USD rate locked for a short window. Send the payment, then poll GET /v1/private/topup-crypto/{quoteId} (header x-watch-token) until status=settled. We detect the payment with the same view-key scanner the product sells and never hold a spend key. No x402, no API key — you pay in coin.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "amountUsdCents": { "description": "Credit to buy, in US cents (e.g. 500 = $5.00). Min/max enforced server-side; see the *_private_watch_info tool -> crypto_topup.", "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" }, "chain": { "description": "Which privacy coin you will pay in.", "enum": [ "monero", "zcash" ], "type": "string" }, "watchId": { "description": "The watchId returned from create.", "maxLength": 36, "minLength": 36, "type": "string" }, "watchToken": { "description": "The watchToken returned from create.", "minLength": 1, "type": "string" } }, "required": [ "watchId", "watchToken", "chain", "amountUsdCents" ], "type": "object" }, "name": "seneschal_private_watch_topup_crypto", "outputSchema": null }, { "description": "Atomic single-fact endpoints designed for tight agent loops. Each answers ONE yes/no or one number — sub-50ms, flat $0.001/call at the REST surface. Privacy-chain facts from Seneschal-operated full nodes — Monero (xmr/height, xmr/mempool, xmr/fee, xmr/fee-estimate, xmr/last-block) and Zcash (zec/height, zec/mempool, zec/last-block, zec/pools) — plus Ethereum lookups (cheapest-flashloan, base-fee). Consult /v1/q for per-question input lists and live chain availability.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "params": { "additionalProperties": {}, "description": "Per-question parameter object. cheapest-flashloan takes asset (+ optional chain); base-fee and the privacy-chain questions currently take no params.", "propertyNames": { "type": "string" }, "type": "object" }, "question": { "description": "Which atomic fact to ask. See description for the list. Privacy-chain questions use `xmr/<name>` or `zec/<name>`.", "enum": [ "cheapest-flashloan", "base-fee", "xmr/height", "xmr/mempool", "xmr/fee", "xmr/fee-estimate", "xmr/last-block", "zec/height", "zec/mempool", "zec/last-block", "zec/pools" ], "type": "string" } }, "required": [ "question" ], "type": "object" }, "name": "seneschal_q", "outputSchema": null }, { "description": "Live chain tip, scanner reachability and the current free-tier limits for Zcash UFVK scanning. Free to call. Start here before scanning. FREE and rate-limited (20 scan starts / 15 min, shared across all agents). For anything scheduled, bulk or latency-sensitive use https://api.seneschal.space/v1/private/historical (same scan, one paid x402 call) or — better — https://api.seneschal.space/v1/private/info to get a webhook when funds land instead of polling at all.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "seneschal_zecmon_info", "outputSchema": null }, { "description": "Open a scan of a Zcash UFVK. Returns { jobId, jobToken } in milliseconds — the scan itself runs behind it, so poll seneschal_zecmon_scan_status. Omitting birthdayHeight makes the scanner walk BACKWARDS from the chain tip to find the wallet's first note, which is slower but always correct. FREE and rate-limited (20 scan starts / 15 min, shared across all agents). For anything scheduled, bulk or latency-sensitive use https://api.seneschal.space/v1/private/historical (same scan, one paid x402 call) or — better — https://api.seneschal.space/v1/private/info to get a webhook when funds land instead of polling at all.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "birthdayHeight": { "description": "Block height to start from, if known. Omit to auto-detect by walking backwards from the tip.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "deepScan": { "description": "Sweep BELOW NU6, all the way back to NU5. Only needed for wallets with no activity in roughly the last year. Measured at ~38 minutes of scanner time (the pre-2.2M chain scans ~10x slower per block), runs one at a time globally, and will usually queue. Do NOT set this speculatively — run a normal scan first and use it only if the reply says deep_scan_available.", "type": "boolean" }, "purgeCache": { "description": "Throw away any stored result for this key AND any cached birthday, then scan from scratch. Use when a previous result looks wrong — NOT routinely, since it turns a free cache hit into a full chain walk.", "type": "boolean" }, "ufvk": { "description": "Zcash unified full viewing key, starting with uview1. Read-only — never accept a seed phrase here.", "minLength": 1, "type": "string" } }, "required": [ "ufvk" ], "type": "object" }, "name": "seneschal_zecmon_scan", "outputSchema": null }, { "description": "Stop a running scan and release the scanner slot. Do this as soon as you stop caring about a scan — concurrency is finite and an abandoned chain walk blocks someone else. Free.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "jobId": { "minLength": 1, "type": "string" }, "jobToken": { "minLength": 1, "type": "string" } }, "required": [ "jobId", "jobToken" ], "type": "object" }, "name": "seneschal_zecmon_scan_cancel", "outputSchema": null }, { "description": "Poll a scan opened by zecmon_scan. Returns phase, progress and the notes found SO FAR — notes accumulate during the scan, so you can read them before it finishes. During \"detecting-birthday\" the response carries the descending backwards window; during \"scanning\" it carries birthday → tip coverage. Poll no faster than every 1.5s. Free.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "includeNotes": { "description": "Include the per-note breakdown. Default true; set false for progress only.", "type": "boolean" }, "jobId": { "description": "From zecmon_scan.", "minLength": 1, "type": "string" }, "jobToken": { "description": "From zecmon_scan — the only credential for this job.", "minLength": 1, "type": "string" } }, "required": [ "jobId", "jobToken" ], "type": "object" }, "name": "seneschal_zecmon_scan_status", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:bba3d0ba5c7ea77a341973b42881bb3499d5b62a0296dec3f654cad92b1f22bb | sha256sum