# Zovo Invoice Reader

> Turns invoice PDFs into one spreadsheet and checks the tax, totals and money math of each invoice.

- name: io.github.theluckystrike/invoice-reader
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 94/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.theluckystrike%2Finvoice-reader
- tools: https://api.protogrid.dev/v1/servers/io.github.theluckystrike%2Finvoice-reader/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "invoice-reader": {
      "type": "http",
      "url": "https://invoice-reader.zovo.one/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-100% +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 94/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 2 of 2 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 997 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 6 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 2, about 997 tokens to load them all
- tool set hash: 9fc82b1b6c6113be3cf07c39930429e3
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.theluckystrike/invoice-reader.svg)](https://protogrid.dev/servers/io.github.theluckystrike/invoice-reader)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://invoice-reader.zovo.one/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (2)

- `check_invoice_math`: 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.
- `read_invoices`: 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.
