addrbookFor publishers
← The evidence ledger

Evidence row 297758

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint cf78035a-5d2d-432b-879d-2c18974458b5
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
fce0e776693748e0c612af6695a21abcc9b07719135d93a3f48f75a45a4fa7ae
Leaf
0xced85b91d1ed3984c28a2d1ee93bf2f23767f6236879be805389df30ec20ce9d

What was observed

{
  "count": 7,
  "tools": [
    {
      "description": "Turn time entries (hours x rate, with optional rounding, grouping by task and expenses) into a validated invoice JSON with totals, ready for POST /v1/invoice.pdf. Use validate_invoice (free) instead if you already have an invoice. Pure calculation: no network request, nothing is sent or stored. Costs $0.02 USDC per call via x402 (payment goes in _meta[\"x402/payment\"]); invalid input returns an error and is not charged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "buyer": {
            "properties": {
              "address": {
                "maxLength": 400,
                "type": "string"
              },
              "email": {
                "format": "email",
                "maxLength": 254,
                "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                "type": "string"
              },
              "name": {
                "maxLength": 120,
                "minLength": 1,
                "type": "string"
              },
              "phone": {
                "maxLength": 40,
                "type": "string"
              },
              "tax_id": {
                "maxLength": 60,
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "currency": {
            "default": "USD",
            "type": "string"
          },
          "default_rate": {
            "description": "Hourly rate for entries without their own rate",
            "maximum": 1000000,
            "minimum": 0,
            "type": "number"
          },
          "discount": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number"
          },
          "due_date": {
            "description": "YYYY-MM-DD; or give terms instead",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "entries": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "date": {
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "type": "string"
                },
                "description": {
                  "maxLength": 250,
                  "minLength": 1,
                  "type": "string"
                },
                "hours": {
                  "exclusiveMinimum": 0,
                  "maximum": 1000,
                  "type": "number"
                },
                "rate": {
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "description",
                "hours"
              ],
              "type": "object"
            },
            "maxItems": 500,
            "minItems": 1,
            "type": "array"
          },
          "expenses": {
            "description": "Reimbursable expenses, one line each",
            "items": {
              "additionalProperties": false,
              "properties": {
                "amount": {
                  "maximum": 1000000000,
                  "minimum": 0,
                  "type": "number"
                },
                "description": {
                  "maxLength": 250,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "description",
                "amount"
              ],
              "type": "object"
            },
            "maxItems": 100,
            "type": "array"
          },
          "group_by": {
            "default": "entry",
            "description": "entry = one line per entry; description = merge entries with the same description and rate",
            "enum": [
              "entry",
              "description"
            ],
            "type": "string"
          },
          "invoice_number": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "issue_date": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "notes": {
            "maxLength": 2000,
            "type": "string"
          },
          "payment_instructions": {
            "maxLength": 1000,
            "type": "string"
          },
          "rounding": {
            "additionalProperties": false,
            "properties": {
              "increment_minutes": {
                "anyOf": [
                  {
                    "const": 1,
                    "type": "number"
                  },
                  {
                    "const": 5,
                    "type": "number"
                  },
                  {
                    "const": 6,
                    "type": "number"
                  },
                  {
                    "const": 10,
                    "type": "number"
                  },
                  {
                    "const": 15,
                    "type": "number"
                  },
                  {
                    "const": 30,
                    "type": "number"
                  },
                  {
                    "const": 60,
                    "type": "number"
                  }
                ],
                "description": "Round each entry to this many minutes"
              },
              "mode": {
                "default": "up",
                "enum": [
                  "up",
                  "nearest"
                ],
                "type": "string"
              }
            },
            "required": [
              "increment_minutes"
            ],
            "type": "object"
          },
          "seller": {
            "properties": {
              "address": {
                "maxLength": 400,
                "type": "string"
              },
              "email": {
                "format": "email",
                "maxLength": 254,
                "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                "type": "string"
              },
              "name": {
                "maxLength": 120,
                "minLength": 1,
                "type": "string"
              },
              "phone": {
                "maxLength": 40,
                "type": "string"
              },
              "tax_id": {
                "maxLength": 60,
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "tax_rate": {
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "terms": {
            "description": "e.g. \"Net 15\"; sets due_date from issue_date (early-pay discounts are not applied to the invoice)",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "seller",
          "buyer",
          "invoice_number",
          "issue_date",
          "entries"
        ],
        "type": "object"
      },
      "name": "invoice_from_timesheet"
    },
    {
      "description": "Calculate the late fee on one overdue invoice: flat fee, monthly % or annual %, simple or compounding, with optional grace days. Returns days late, the fee, the new total and a line to paste on the invoice. Use payment_terms_check instead to work out when an invoice is due. Not legal advice; it does not look up state caps. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta[\"x402/payment\"]); invalid input returns an error and is not charged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "amount": {
            "description": "Unpaid invoice amount",
            "exclusiveMinimum": 0,
            "maximum": 1000000000,
            "type": "number"
          },
          "as_of": {
            "description": "Date paid, or the date to calculate to, YYYY-MM-DD (default: today, UTC)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "compounding": {
            "default": false,
            "description": "false = simple interest (default); true = compounds (monthly: per 30 days; annual: daily)",
            "type": "boolean"
          },
          "currency": {
            "default": "USD",
            "description": "ISO-4217, default USD",
            "type": "string"
          },
          "due_date": {
            "description": "Invoice due date, YYYY-MM-DD",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "fee_type": {
            "description": "flat = one fixed fee; monthly_percent e.g. 1.5; annual_percent e.g. 18",
            "enum": [
              "flat",
              "monthly_percent",
              "annual_percent"
            ],
            "type": "string"
          },
          "flat_fee": {
            "description": "Flat fee; required for fee_type=flat, optional one-time add-on otherwise",
            "maximum": 1000000,
            "minimum": 0,
            "type": "number"
          },
          "grace_days": {
            "default": 0,
            "description": "Days after the due date before any fee applies",
            "maximum": 365,
            "minimum": 0,
            "type": "integer"
          },
          "rate_percent": {
            "description": "Rate for monthly_percent / annual_percent",
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "state": {
            "description": "US state (2-letter) for the legal note",
            "type": "string"
          }
        },
        "required": [
          "amount",
          "due_date",
          "fee_type"
        ],
        "type": "object"
      },
      "name": "late_fee_calc"
    },
    {
      "description": "Draft a payment reminder email for one unpaid invoice in a friendly, firm or final-notice tone. Returns a subject, plain-text body, days overdue and a suggested next step. Use late_fee_calc first if you want the fee amount quoted in the email. Draft only: nothing is sent. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta[\"x402/payment\"]); invalid input returns an error and is not charged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "amount": {
            "description": "Amount due",
            "exclusiveMinimum": 0,
            "maximum": 1000000000,
            "type": "number"
          },
          "as_of": {
            "description": "Today's date for the days-overdue count, YYYY-MM-DD (default: today, UTC)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "client_name": {
            "description": "Client's name for the greeting",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "currency": {
            "default": "USD",
            "description": "ISO-4217, default USD",
            "type": "string"
          },
          "due_date": {
            "description": "YYYY-MM-DD",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "final_deadline_days": {
            "default": 7,
            "description": "Final notice: days the client has to pay",
            "maximum": 60,
            "minimum": 1,
            "type": "integer"
          },
          "from_name": {
            "description": "Your name or business, used in the sign-off",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "invoice_number": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "late_fee_terms": {
            "description": "Your agreed late-fee terms, e.g. \"1.5% per month\"; mentioned in the final notice only",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "payment_link": {
            "format": "uri",
            "maxLength": 500,
            "type": "string"
          },
          "tone": {
            "description": "\"friendly\" (alias \"polite\"), \"firm\", or \"final\"",
            "enum": [
              "friendly",
              "polite",
              "firm",
              "final"
            ],
            "type": "string"
          }
        },
        "required": [
          "tone",
          "from_name"
        ],
        "type": "object"
      },
      "name": "payment_reminder_draft"
    },
    {
      "description": "Work out the due date and status for payment terms such as Net 30, 2/10 Net 30, Due on receipt, EOM or Net 30 EOM. Returns the early-payment discount amount and deadline, the annualized cost of skipping the discount, and suggested reminder dates. Use late_fee_calc once the invoice is overdue. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta[\"x402/payment\"]); invalid input returns an error and is not charged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "amount": {
            "description": "Invoice total (optional; enables the discount math)",
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number"
          },
          "as_of": {
            "description": "Date to compute status for, YYYY-MM-DD (default: today, UTC)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "currency": {
            "default": "USD",
            "description": "ISO-4217, default USD",
            "type": "string"
          },
          "invoice_date": {
            "description": "Invoice date, YYYY-MM-DD",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "terms": {
            "description": "Payment terms, e.g. \"Net 30\", \"2/10 Net 30\", \"Due on receipt\", \"EOM\", \"Net 30 EOM\"",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "invoice_date",
          "terms"
        ],
        "type": "object"
      },
      "name": "payment_terms_check"
    },
    {
      "description": "Free. Return the price of every paid tool and of the HTTP invoice PDF route, the payment network (Base) and the receiving address. No input, no network request, no payment.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "pricing"
    },
    {
      "description": "Grade the health of a business's accounts receivable from its invoice list. Send a CSV export (QuickBooks, Xero, FreshBooks, Wave, Stripe or any CSV with customer and amount columns; columns are auto-detected) or JSON rows, up to 1000 invoices. Returns an A-F grade and 0-100 score with reasons, aging buckets (current, 1-30, 31-60, 61-90, 90+ days), overdue %, weighted days outstanding, DSO, average days to pay, customer concentration, a collection priority list with the next action per overdue invoice (pointing to payment_reminder_draft and late_fee_calc), and recommendations. Use it for a monthly AR review or before chasing payments. Not accounting or legal advice. Pure calculation: no network request, nothing is sent or stored. Costs $1 USDC per call via x402 (payment goes in _meta[\"x402/payment\"]); invalid input returns an error and is not charged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "as_of": {
            "description": "Report date, default today (UTC)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "csv": {
            "description": "CSV export (QuickBooks, Xero, FreshBooks, Wave, Stripe or your own). Header row required. Recognized columns: invoice number, customer, amount/total, amount paid, balance/open balance, invoice date, due date, terms, paid date, status.",
            "maxLength": 60000,
            "type": "string"
          },
          "currency": {
            "default": "USD",
            "type": "string"
          },
          "default_terms": {
            "default": "Net 30",
            "description": "Used when a row has no due date and no terms",
            "maxLength": 40,
            "type": "string"
          },
          "invoices": {
            "description": "Or JSON rows instead of CSV",
            "items": {
              "additionalProperties": false,
              "properties": {
                "amount": {
                  "maximum": 10000000000,
                  "minimum": 0,
                  "type": "number"
                },
                "amount_paid": {
                  "maximum": 10000000000,
                  "minimum": 0,
                  "type": "number"
                },
                "balance": {
                  "maximum": 10000000000,
                  "type": "number"
                },
                "customer": {
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "due_date": {
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "type": "string"
                },
                "invoice_number": {
                  "maxLength": 60,
                  "minLength": 1,
                  "type": "string"
                },
                "issue_date": {
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "type": "string"
                },
                "paid_date": {
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                  "type": "string"
                },
                "status": {
                  "maxLength": 30,
                  "type": "string"
                },
                "terms": {
                  "maxLength": 40,
                  "type": "string"
                }
              },
              "required": [
                "invoice_number",
                "customer",
                "amount"
              ],
              "type": "object"
            },
            "maxItems": 1000,
            "type": "array"
          },
          "revenue_window_days": {
            "default": 90,
            "description": "Window for DSO: invoiced amount in the last N days",
            "maximum": 365,
            "minimum": 30,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "receivables_health_report"
    },
    {
      "description": "Free. Validate an invoice JSON (the body for POST /v1/invoice.pdf, or the output of invoice_from_timesheet) and return computed subtotal, discount, tax and total, or a list of field errors. Same checks as the paid PDF route. Offline, no payment.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "invoice": {
            "additionalProperties": {},
            "description": "Invoice object: from, to, number, issue_date, currency, line_items[{description, quantity, unit_price}], optional tax and discount",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "required": [
          "invoice"
        ],
        "type": "object"
      },
      "name": "validate_invoice"
    }
  ]
}

What the leaf hashes

{"body":"fce0e776693748e0c612af6695a21abcc9b07719135d93a3f48f75a45a4fa7ae","id":297758,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793052318715293,"prev":null,"subject":"cf78035a-5d2d-432b-879d-2c18974458b5","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0xced8680e4649a1080e67deb8a28fff3a5e2c3d8cf12c262526b9e4ac3d5d2b38
  2. 0xff2251e6be9dfc0f3299b44382209b14f7f7e07ec672150ed9c00323bc0c02f2
  3. 0xde9166306ecfde2bcc2ec1501ab40290d75a3a714d75a9419b11b25744b78d8d
  4. 0x5b2be0724e940a71318ef9ab76898dbe1e413892cba14b9ee5c02a1b1f737364
  5. 0x7b12381f668f05444802224bde6be676ff6526cecc22ab6f7f7d1402cfa79d38
  6. 0xc26b55038cb30afb1e84941df442e95374012f2016bbf02df0db5201af74f8b8
  7. 0x6ac7ae0107e720540c43b2894027289cc80928d47a61b51c3e15dd7f7508df18
  8. 0x9745c1bef1d820bc6468da48e2050968265dd4a67922a6da749751015763d84e
  9. 0x620e46a467bb6ea328be9baa498db8c9a6b6f5095a07956301edab68c1ef1f7b
  10. 0xe105839525c4828b89b7d05e44f371385eb52639386c098d62734be5b4a1ce05
  11. 0xd57a32d9d2666c4270544dcb78bbea2f4774705d3879a86973628e2542543e62
  12. 0xa45f4438c9296b0ba586fc2eec9f0202e5d3c61a1d3adc975b80f6a1f4a5ca57
  13. 0xe43762a621da83c0b4b63f549cd2e19c428ac702bfc1038d70233867b06c447f
  14. 0xefabf1105e09cf52c12c58e60cbb5048b9ac3f02631d1816a926e14bdd86fbdf
  15. 0xe94ca5b798e9899ad611e57835af42266e20f53f44977e487d81365e30972beb
  16. 0x703f95866af09c5e5d6ead7411e9a10f964a41a2aff64d4a55ff0053c023a023
  17. 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON