ProofJSON MCP server for AI agents — local stdio tools for verifiable structured JSON outputs, supplied_data_only.
Three tools with complete schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. All tool descriptions repeat the same boilerplate scope note (supplied_data_only), which is necessary for legal/safety reasons but reduces clarity about what each tool actually does. Parameter descriptions are minimal (e.g., 'supplier_name, invoice_number, amount...' as a comma-separated list rather than individual parameter docs). No output schemas documented. Error handling is generic (error/call_failed). Tool names follow verb_noun pattern (assess_, verify_, list_) which is good, but descriptions lack actionable guidance on when to use each tool vs. alternatives.
Assess invoice payment risk before paying, approving, scheduling or escalating an invoice. Returns a decision (allow | review | block) with reasons, confidence, scope, checks_performed, checks_not_performed and human_confirmation_required. ProofJSON v1 is supplied_data_only: it assesses the supplied invoice data, supplied context and configured policy. It does NOT independently verify supplier IBAN ownership, sanctions status, bank account ownership or external payment history unless external trust adapters are configured. allow is not a guarantee the invoice is safe.
List the live ProofJSON Pack Tasks (verification capabilities). ProofJSON v1 is supplied_data_only: it assesses the supplied invoice data, supplied context and configured policy. It does NOT independently verify supplier IBAN ownership, sanctions status, bank account ownership or external payment history unless external trust adapters are configured. allow is not a guarantee the invoice is safe.
Verify a ProofJSON proof for structure, hash consistency and signature validity. This tool does NOT verify the real-world truth of the underlying claim, invoice, payment, supplier identity, IBAN ownership or sanctions status. ProofJSON v1 is supplied_data_only: it assesses the supplied invoice data, supplied context and configured policy. It does NOT independently verify supplier IBAN ownership, sanctions status, bank account ownership or external payment history unless external trust adapters are configured. allow is not a guarantee the invoice is safe.
Parameter descriptions are comma-separated lists, not individual documented parameters. 'supplier_name, invoice_number, amount, currency, payment_iban, payment_account, purchase_order_number' should be separate parameter objects with type, description, and constraints for each.
No output schemas documented. LLMs cannot plan downstream calls or extract fields without knowing what assess_invoice_before_payment, verify_proofjson_proof, and list_proofjson_packs return. Test client shows expected fields (decision, scope, human_confirmation_required, valid, status, live_packs) but these are not in the tool definitions.
Boilerplate scope note (supplied_data_only) repeated verbatim in all three tool descriptions. While legally necessary, it obscures the actual functional difference between tools. Shorten to a single sentence per tool explaining its unique purpose, then reference scope in a separate 'limitations' field or server-level documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Generic error handling. Catch block returns {error: 'call_failed', detail: String(e)}. LLMs cannot determine if error is retryable, user-fixable, or fatal. No guidance on recovery (e.g., 'Invalid invoice format. Ensure invoice.amount is a number and invoice.currency is ISO 4217 code.').
Optional parameters (expected, policy, history, options) lack descriptions of when/why to use them. LLMs cannot reason about whether to include them. E.g., 'policy' description should explain: 'Optional policy constraints. If omitted, defaults to permissive assessment. Set review_above_amount to flag invoices exceeding a threshold for manual review.'