addrbookFor publishers
← The evidence ledger

Evidence row 565469

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 42de7ab7-d5f2-4f45-b1b6-79ec0ca87226
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
2b20dd25d0e8c2da503da7168a60ac17b906b7802b6a3a8dc29ff2a92fab2002
Leaf
0x85e0472eb576defaee9423137a2faff76c49532227e6744e1253cfd72e47cd0c

What was observed

{
  "count": 6,
  "tools": [
    {
      "description": "Convert an e-invoice to UBL or CII. The result is checked before it is returned.\n\nInput: `invoice_base64` is the base64 of an XML invoice or a ZUGFeRD /\nFactur-X PDF, at most 4 MB decoded; or pass the file as a download link in\n`file`. `target_syntax` is \"ubl\" or \"cii\". `target_flavor` is optional,\n\"en16931\" or \"xrechnung\"; without it the flavor of the source is kept.\n\nReturns `xml`, `syntax`, `flavor` and `self_validation` (`valid`,\n`finding_count`). invowerk checks the converted XML before answering and never\nreturns an invalid document. Input that cannot be read or converted fails with\nan error message.\n\nCredits: 3 per call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "file": {
            "default": null,
            "description": "The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL.",
            "properties": {
              "download_url": {
                "description": "A public https URL of the file.",
                "type": "string"
              },
              "file_id": {
                "description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
                "type": "string"
              },
              "file_name": {
                "type": "string"
              },
              "mime_type": {
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "invoice_base64": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "The invoice file, base64-encoded. At most 4 MB decoded."
          },
          "target_flavor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional: \"en16931\" or \"xrechnung\". Without it the flavor of the source is kept."
          },
          "target_syntax": {
            "description": "Syntax to convert to: \"ubl\" or \"cii\".",
            "type": "string"
          }
        },
        "required": [
          "target_syntax"
        ],
        "type": "object"
      },
      "name": "convert_invoice"
    },
    {
      "description": "Explain rule codes in plain language. Works without an API key.\n\nCovers the codes of `validate_invoice` findings and hints: EN 16931,\nXRechnung, ZUGFeRD and invowerk's own hint codes (IW-*).\n\nInput: `codes` is a list of one or more codes, e.g. [\"BR-CO-18\", \"BR-DE-21\"].\nDuplicates are removed. `lang` is \"de\" (default) or \"en\".\n\nReturns `lang` and `explanations`. Each explanation has `title`, `meaning`,\n`causes`, `fixes`, `severity`, `standard`, `bt_refs`, `xpath_hints` and\n`explain_url` (the German page for the code). If any code is unknown, the call\nfails and names the unknown codes.\n\nCredits: free. This tool is not metered.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "codes": {
            "description": "One or more rule codes from validate_invoice, e.g. [\"BR-CO-18\", \"BR-DE-21\"].",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "lang": {
            "default": "de",
            "description": "Language of the explanations: \"de\" (default) or \"en\".",
            "enum": [
              "de",
              "en"
            ],
            "type": "string"
          }
        },
        "required": [
          "codes"
        ],
        "type": "object"
      },
      "name": "explain_errors"
    },
    {
      "description": "Create a valid EN 16931 e-invoice (UBL or CII XML) from JSON.\n\nInput: `invoice` is a JSON object keyed on EN 16931 Business Terms, the same\nschema as `POST /v1/generate`, at most 4 MB. Main fields: `syntax` (\"ubl\"\ndefault, or \"cii\"), `flavor` (\"en16931\" default, or \"xrechnung\", which\nrequires `buyer_reference`, the Leitweg-ID BT-10, and `payment_iban`),\n`invoice_number`,\n`issue_date` (YYYY-MM-DD), `currency`, `seller`, `buyer`, `lines`,\n`tax_breakdown`, `totals`. invowerk writes your amounts as given. It does not\ncompute or correct them. Input that breaks an EN 16931 or XRechnung rule\nreturns an error naming each rule, e.g. BT-112 = BT-109 + BT-110 (BR-CO-15).\nDates are YYYY-MM-DD, amounts go up to 999,999,999.99.\n\nReturns `xml`, `syntax`, `flavor` and `self_validation`. invowerk checks the\nXML before answering and never returns an invalid document. Invalid input, or\nXML that fails the check, returns an error, as does a busy (`engine_busy`) or\noverrunning (`engine_timeout`) generate.\n\nCredits: 5 per call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "invoice": {
            "additionalProperties": true,
            "description": "The invoice as a JSON object keyed on EN 16931 Business Terms, the schema of POST /v1/generate and of parse_invoice's `model`: syntax, flavor, invoice_number, issue_date, currency, seller, buyer, lines, tax_breakdown, totals.",
            "type": "object"
          }
        },
        "required": [
          "invoice"
        ],
        "type": "object"
      },
      "name": "generate_invoice"
    },
    {
      "description": "Read an existing e-invoice into JSON keyed on EN 16931 Business Terms.\n\nThe JSON is the input format of `generate_invoice`, so you can edit it and\ncreate the invoice again.\n\nInput: `invoice_base64` is the base64 of an XML invoice (UBL or CII) or a\nZUGFeRD / Factur-X PDF, at most 4 MB decoded; or pass the file as a download\nlink in `file`. A PDF may have at most 500 pages and 16 attachments.\n\nReturns `model` (the invoice as JSON), `detection` (`syntax`, `flavor`,\n`customization_id`) and `source` (\"xml\" or \"pdf-embedded\"). A file that cannot\nbe read fails with an error that starts with an error code, e.g. a PDF without\nembedded XML, a UBL credit note, malformed XML, or a busy (`engine_busy`) or\noverrunning (`engine_timeout`) read.\n\nCredits: 2 per call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "file": {
            "default": null,
            "description": "The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL.",
            "properties": {
              "download_url": {
                "description": "A public https URL of the file.",
                "type": "string"
              },
              "file_id": {
                "description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
                "type": "string"
              },
              "file_name": {
                "type": "string"
              },
              "mime_type": {
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "invoice_base64": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "The invoice file, base64-encoded. At most 4 MB decoded."
          }
        },
        "type": "object"
      },
      "name": "parse_invoice"
    },
    {
      "description": "Render an XML e-invoice (UBL or CII, e.g. XRechnung) as a readable HTML page.\n\ninvowerk uses the KoSIT XRechnung visualization. Use it to show a person what\nan e-invoice contains.\n\nInput: `invoice_base64` is the base64 of the XML, at most 4 MB decoded, or pass\nthe file as a download link in `file`. PDFs are not accepted. `lang` sets the\nlabel language, \"de\" (default) or \"en\".\n\nReturns `html` (a complete HTML document), `lang`, `flavor` (e.g.\n\"xrechnung\") and `syntax` (e.g. \"ubl_invoice\"). A file that is not an XML\ninvoice, malformed XML or XML with a DOCTYPE fails with an error message,\nand so does a busy (`engine_busy`) or overrunning (`engine_timeout`) render.\n\nCredits: 1 per call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "file": {
            "default": null,
            "description": "The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL.",
            "properties": {
              "download_url": {
                "description": "A public https URL of the file.",
                "type": "string"
              },
              "file_id": {
                "description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
                "type": "string"
              },
              "file_name": {
                "type": "string"
              },
              "mime_type": {
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "invoice_base64": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "The invoice file, base64-encoded. At most 4 MB decoded."
          },
          "lang": {
            "default": "de",
            "description": "Language of the labels: \"de\" (default) or \"en\".",
            "enum": [
              "de",
              "en"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "render_invoice"
    },
    {
      "description": "Check an e-invoice against EN 16931 and German rules.\n\nInput: `invoice_base64` is the base64 of an XML invoice (UBL or CII) or a\nZUGFeRD / Factur-X PDF, at most 4 MB decoded; or pass the file as a download\nlink in `file`. `explain=true` adds an explanation to findings whose rule\nhas one, in `lang` (\"de\" or \"en\").\n\n`valid` is the result. For XRechnung the KoSIT validator decides. If it is\nunreachable, invowerk's own check with the same rules decides,\n`verdict_source` is \"local\" and `official_degraded` is true.\n`disagreement` is true when both ran and differ. `findings` lists each\nproblem with `rule_id`, `severity` and `message`; pass the codes to\n`explain_errors` (free). `pdfa_verdict` is the PDF/A check of a PDF.\n`hints` never change `valid`. Unreadable input returns a finding, not an\nerror. It fails with an error when the check is busy (`engine_busy`), ran\nlonger than 20 s (`engine_timeout`) or the XML has more than 100,000\nelements (`document_too_complex`).\n\nCredits: 1 per call.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "explain": {
            "default": false,
            "description": "true adds an explanation to each finding whose rule has one.",
            "type": "boolean"
          },
          "file": {
            "default": null,
            "description": "The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL.",
            "properties": {
              "download_url": {
                "description": "A public https URL of the file.",
                "type": "string"
              },
              "file_id": {
                "description": "An identifier for the file. ChatGPT sets it; other clients may pass any label, such as the file name.",
                "type": "string"
              },
              "file_name": {
                "type": "string"
              },
              "mime_type": {
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "invoice_base64": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "The invoice file, base64-encoded. At most 4 MB decoded."
          },
          "lang": {
            "default": "de",
            "description": "Language of the explanations: \"de\" (default) or \"en\".",
            "enum": [
              "de",
              "en"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "validate_invoice"
    }
  ]
}

What the leaf hashes

{"body":"2b20dd25d0e8c2da503da7168a60ac17b906b7802b6a3a8dc29ff2a92fab2002","id":565469,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793138176737862,"prev":null,"subject":"42de7ab7-d5f2-4f45-b1b6-79ec0ca87226","subject_kind":"endpoint"}

Proof

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

  1. 0x85e0903e4e419771d32f8651926ae1862b833e1172159a9af6c49ed48095b4f8
  2. 0x488efb391bd93dbb90ad83a5b0a9cab90a9cf44c157c4efe9e4f3288bb8bd400
  3. 0xdc0c2273e88c41fcd0c3465847323da46953889db77412cd09f089a0d51340b9
  4. 0x25b7829ad2c97b4da0cd7a243275fd0ceef5dd720756ce1376443446e491e227
  5. 0x8efcc59710cf058e2e12237890c49d298c0d8d5209ff9e77dd11781bbf890127
  6. 0x9b06b89873c054111398ddb7faf40d9d9726b1022fb438d3ade1db9f9fa0e8b2
  7. 0x0015dca7e546fdfaa2768aa4052ecf3413b565ac4db524ef70b3c00ca11f06d5
  8. 0x05ca6eef8ea4b9b58bb95cc6b803665de2dfad0bc446628cc48959f2e18eb5f9
  9. 0x5028957b94cc25e4240b37de1a85e70b3fdac565f1aa00f14f3b4477399dfb78
  10. 0x96a0da13299187f33c6402d51c70a67e16424b1c2efecb62b5deff3accdc84f9
  11. 0x94b5117661526893571c5099bb213b21f54068dc9f381d688b9be7c593a99d91
  12. 0xe5ce8ac1ba4d6152605e0a032058cac5906d85f82e3fda1ad44852337b713b17
  13. 0x07d414626f116f3edc6ddb34183ed02538c3a805fec6db00f9d764f8fd595d04
  14. 0x4964f0806efde5ed25f60da2b45d78cd2e0f07d67e64aad2822f6016ad973c47
  15. 0x3c500ec3d3edf0c74b87a6ca8fcd77656bfbe03db3d478bd0c184d0c88839c6b
  16. 0xfecf3d4646dd4984a13dd715499e842c3fde63692336d97394c2bfd8e877ca5d
  17. 0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON