Zovo Invoice Reader
Server Details
Turns invoice PDFs into one spreadsheet and checks the tax, totals and money math of each invoice.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
The two tools are mostly distinct: check_invoice_math handles pasted/typed amounts, while read_invoices handles attached PDFs and extraction. There is some overlap because read_invoices also performs the same three arithmetic checks, but the descriptions explicitly guide the agent on when to use each.
Both names follow a clear snake_case verb_noun pattern: check_invoice_math and read_invoices. The convention is predictable and readable.
Two tools is slightly thin, but each has a clear, non-redundant role for a narrowly scoped invoice reader. The set is reasonable for the purpose, though it offers little room for adjacent operations.
The surface covers the core domain: extracting invoice data from PDFs and validating invoice arithmetic. Minor gaps exist around OCR/scanned documents and correction workflows, but those are explicitly out of scope.
Available Tools
2 toolscheck_invoice_mathCheck invoice mathARead-onlyIdempotentInspect
Use this when the user types or pastes invoice amounts (line quantities, unit prices, line amounts, subtotal, discount, tax, shipping, total) and wants to know whether the invoice adds up. Returns PASS, MISMATCH with the difference in cents, or NOT CHECKABLE when a value is missing, for three checks: lines add up to the subtotal, subtotal - discount + tax + shipping = total, quantity x unit price = amount. Uses integer cent math. Does not read files (use read_invoices for PDFs), does not compute tax rates, and does not pay or send anything.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | No | Amount as printed, e.g. 33.56. Leave out when the invoice has none. | |
| lines | No | Invoice lines, e.g. [{"description":"Toner","qty":2,"unit_price":"89.99","amount":"179.98"}]. Up to 500. | |
| total | No | Amount as printed, e.g. 440.29. Leave out when the invoice has none. | |
| discount | No | Amount as printed, e.g. 15.00. Leave out when the invoice has none. | |
| shipping | No | Amount as printed, e.g. 9.95. Leave out when the invoice has none. | |
| subtotal | No | Amount as printed, e.g. 406.73. Leave out when the invoice has none. | |
| decimal_mark | No | Decimal mark of the amounts: "." for 1,234.56 or "," for 1.234,56. Default: decided from the values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| lines | Yes | |
| checks | Yes | |
| status | Yes | |
| lines_sum | Yes | |
| lines_count | No | |
| computed_total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real value beyond them: the three return statuses (PASS, MISMATCH with difference in cents, NOT CHECKABLE when a value is missing) and the use of integer cent math. It could go further on edge behavior (e.g. how multiple mismatches are reported, or partial-line failures), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger condition, then results, then exclusions — a logical order with no filler sentences. The parenthetical field list is somewhat long, but each clause still carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, a full output schema, and 100% parameter coverage already supplied, the description covers everything remaining an agent needs: the trigger, the checks performed, the status vocabulary, and the scope boundaries. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including per-field examples and the decimal_mark enum, so the schema carries the parameter burden. The description restates the field families (quantities, unit prices, line amounts, subtotal, discount, tax, shipping, total) but adds no format or parsing guidance beyond what the schema already says; integer cent math is the only real addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('check whether the invoice adds up') and enumerates the exact three arithmetic checks performed. It also names the sibling it is not ('does not read files (use read_invoices for PDFs)'), so an agent can separate it from read_invoices without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the user types or pastes invoice amounts... and wants to know whether the invoice adds up') plus explicit exclusions: no file reading, no tax-rate computation, no payment or sending. The alternative tool for PDFs is named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_invoicesRead invoice PDFsARead-onlyIdempotentInspect
Use this when the user attaches 1 to 20 invoice PDFs and wants them in a spreadsheet, wants invoice data extracted (vendor, invoice number, invoice date, due date, subtotal, tax or VAT or GST, shipping, discount, total, amount due, line items), or wants the invoice arithmetic checked. Returns one Excel workbook (Invoices and Line items sheets) and a ZIP of CSV files, plus per-invoice checks: lines add up to the subtotal, subtotal - discount + tax + shipping = total, quantity x unit price = amount. Each check is PASS, MISMATCH with the difference, or NOT CHECKABLE when a value is missing. Text-based PDFs only (no OCR), up to 10 MB and 20 pages per file. Does not pay, approve, or send invoices. Do not use for receipts photographed with a phone or for making a new invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The invoice PDFs, in any order, e.g. inv-1001.pdf, inv-1002.pdf. 1 to 20 files. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| files | Yes | |
| summary | Yes | |
| invoices | Yes | |
| warnings | Yes | |
| downloads | No | |
| invoices_count | No | |
| totals_by_currency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, closed-world read; the description goes well beyond them by naming the exact deliverables and the tri-state check semantics (PASS, MISMATCH with difference, NOT CHECKABLE). It also scopes the tool negatively — it does not pay, approve, or send invoices — and discloses the no-OCR limitation that will cause silent failures on scanned files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the triggering condition, then outputs, then check semantics, then limits and exclusions. The long field list in parentheses is dense but each item earns its place by helping an agent match user requests. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though an output schema exists, the description still usefully characterizes the return shape and the meaning of check results. For a one-parameter extraction tool with hard input limits and a non-obvious failure mode (scanned PDFs), nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema (100% coverage), which already sets minItems/maxItems of 1-20. The description adds meaning the schema lacks: the files are invoice PDFs in any order and must be text-based, under 10 MB and 20 pages. It does not explain the download_url/file_id mechanics, but the schema covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource (extract/check invoice PDFs) and enumerates the exact fields extracted, so an agent knows precisely what it gets. The output artifacts (Excel workbook, CSV ZIP, per-invoice arithmetic checks) further pin down what the tool is versus the sibling check_invoice_math.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use (1-20 attached invoice PDFs, spreadsheet needed, data extraction, arithmetic checking) and explicitly when not to use (phone-photographed receipts, creating a new invoice). Input constraints — text-based PDFs only, no OCR, 10 MB and 20 pages per file — are stated up front rather than left to error handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
check_invoice_math - First observed
read_invoices
Related MCP Connectors
Invoice PDFs, scans and photos to Excel, with the math checked: fields, line items and totals.
Reads invoices and receipts from PDF to JSON and checks the math. $0.04/page via x402.
Convert PDF bank statements into Excel and check that the balances add up. Invoices and tables too.
Put a batch of supplier invoices into one spreadsheet with net, tax and gross totals.
1
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect and extract invoice metadata from PDFs, Word documents, Excel files, and images, then synchronize and enrich the extracted data into an Excel ledger.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and finance teams to extract structured fields from messy invoices and audit them before payment, applying seven evidence-backed risk rules that catch total/tax mismatches, duplicate invoices, missing fields, future dates, and round amounts, then returning a 0–100 score with a payment link. Exposes four MCP tools over stdio and Streamable HTTP (spec 2025-11-25) plus a web UI, backed by an optional AWS Bedrock or OpenAI-compatible extraction brain that degrades gracefully to a zero-dependency offline engine.MIT
- AlicenseAqualityCmaintenanceTurns invoice details from an MCP client conversation into calculated totals and formatted Excel workbooks in JPY, USD, or EUR, using integer minor-unit arithmetic and grouped tax rounding. Supports mixed tax rates, Excel formulas with cached totals, and A4 print-ready layouts, writing files locally with no network access or API key.298 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables accounts payable teams to extract invoice data from PDFs and images, detect duplicates, normalize vendor names, calculate payment terms, and validate invoice completeness. Supports local extraction for text PDFs and optional vision providers for scanned documents.-
Glama MCP Gateway
Add one secure layer between your agents and this server.