Zovo Invoice Ledger MCP
An MCP server that processes batches of supplier invoices to create a consolidated Excel ledger. It extracts key fields like supplier, dates, and amounts, calculates tax by rate, and performs validation checks for duplicates and arithmetic accuracy across multiple currencies.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://invoice-ledger.zovo.one/mcpWhat its tools do
1 tool, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Consolidate multiple supplier invoices into a single Excel ledger
- Generate a VAT summary broken down by tax rate
- Check invoices for duplicate numbers and incorrect totals
Source and maintenance
Protocol and capabilities
- Server
- invoice-ledger 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 1 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
1 advertised
generate_invoice_ledger — Generate invoice ledger
Use this when the user wants several invoices in one spreadsheet ("put these invoices into Excel", "invoice log from these PDFs", "purchase ledger", "VAT summary by rate", "check these invoices for duplicates"). Send the invoices as rows when their values are in the chat or a screenshot; send attached invoice PDFs (selectable text) in files; send pasted invoice text in invoice_texts (one string per invoice), and use text only as a fallback. Returns an Excel ledger (supplier, invoice number, invoice and due date, currency, net, tax per rate, tax total, gross, status) with By supplier, By tax rate and Checks sheets, and a CSV. Flags totals that do not equal net + tax, tax that does not match its rate, and duplicate invoice numbers per supplier. Reads header totals only, not line items. Does not read scanned images, convert currencies, file tax returns, or say whether tax is reclaimable.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"text": {
"anyOf": [
{
"type": "string",
"maxLength": 400000
},
{
"type": "null"
}
],
"description": "Fallback only: several invoices pasted as one text; they are split at --- lines or where a new invoice number starts."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"file_name": {
"type": "string",
"description": "Original file name if known, e.g. statement.pdf."
},
"mime_type": {
"type": "string",
"description": "Media type if known, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
}
}
},
"maxItems": 20,
"description": "Invoice PDFs with selectable text (not scans), up to 20, e.g. acme-inv-1001.pdf, northwind-re-77.pdf. A .txt with pasted invoice text also works."
},
"currency": {
"type": [
"string",
"number",
"null"
],
"description": "Currency for invoices that show none, as an ISO code, e.g. USD. A code printed on the invoice wins."
},
"invoices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"net": {
"type": [
"string",
"number",
"null"
],
"description": "Net amount before tax (subtotal), e.g. 1250.00 or \"1.250,00\"."
},
"tax": {
"type": [
"string",
"number",
"null"
],
"description": "Total tax amount if one rate, e.g. 250.00."
},
"gross": {
"type": [
"string",
"number",
"null"
],
"description": "Invoice total including tax, e.g. 1500.00."
},
"currency": {
"type": [
"string",
"number",
"null"
],
"description": "ISO currency code, e.g. GBP. Defaults to the currency argument."
},
"due_date": {
"type": [
"string",
"number",
"null"
],
"description": "Payment due date if printed, e.g. 2026-10-31."
},
"supplier": {
"type": [
"string",
"number",
"null"
],
"description": "Supplier name as printed, e.g. Acme Supplies Ltd."
},
"tax_rate": {
"type": [
"string",
"number",
"null"
],
"description": "Tax rate in percent if one rate, e.g. 20 (not 0.2)."
},
"tax_lines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"net": {
"type": [
"string",
"number",
"null"
],
"description": "Taxable base at this rate, e.g. 100.00."
},
"tax": {
"type": [
"string",
"number",
"null"
],
"description": "Tax at this rate, e.g. 5.50."
},
"rate": {
"type": [
"string",
"number",
"null"
],
"description": "Rate in percent, e.g. 5.5."
}
}
},
"maxItems": 10
},
{
"type": "null"
}
],
"description": "Several tax rates on one invoice, e.g. [{\"rate\":5.5,\"net\":100,\"tax\":5.5},{\"rate\":20,\"net\":41.67,\"tax\":8.33}]."
},
"amount_due": {
"type": [
"string",
"number",
"null"
],
"description": "Amount due if it differs from the total (part paid), e.g. 500.00."
},
"invoice_date": {
"type": [
"string",
"number",
"null"
],
"description": "Invoice (issue) date, e.g. 2026-10-01 or 01/10/2026."
},
"invoice_number": {
"type": [
"string",
"number",
"null"
],
"description": "Invoice number exactly as printed, e.g. INV-1001."
}
},
"additionalProperties": {}
},
"maxItems": 200
},
{
"type": "null"
}
],
"description": "Invoices as rows, one per invoice, e.g. [{\"supplier\":\"Acme Supplies Ltd\",\"invoice_number\":\"INV-1001\",\"invoice_date\":\"2026-10-01\",\"currency\":\"GBP\",\"net\":1250,\"tax_rate\":20,\"gross\":1500}]. Use this when the invoice values are in the chat or a screenshot."
},
"date_order": {
"anyOf": [
{
"enum": [
"DMY",
"MDY"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Order of numeric dates such as 03/04/2026: DMY (UK, EU) or MDY (US). Detected when a day is above 12."
},
"decimal_mark": {
"anyOf": [
{
"enum": [
".",
","
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Decimal mark of the amounts: \".\" (1,234.56) or \",\" (1.234,56). Detected per invoice when omitted."
},
"invoice_texts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 60000
},
"maxItems": 200
},
{
"type": "null"
}
],
"description": "Pasted invoice text, one string per invoice, e.g. [\"Acme Supplies Ltd\\nInvoice No: INV-2044\\nInvoice Date: 14/10/2026\\nSubtotal £2,400.00\\nVAT 20% £480.00\\nTotal £2,880.00\"]."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"invoices",
"currencies",
"by_tax_rate",
"by_supplier",
"duplicate_numbers",
"arithmetic_mismatches",
"invoices_with_issues",
"issues",
"preview",
"skipped_files",
"notes",
"downloads",
"links_expire_minutes"
],
"properties": {
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"issues": {
"type": "array",
"items": {
"type": "string"
}
},
"preview": {
"type": "array",
"items": {
"type": "object",
"required": [
"n",
"source",
"supplier",
"number",
"date",
"currency",
"net",
"tax",
"gross",
"status"
],
"properties": {
"n": {
"type": "number"
},
"net": {
"type": "string"
},
"tax": {
"type": "string"
},
"date": {
"type": "string"
},
"gross": {
"type": "string"
},
"number": {
"type": "string"
},
"source": {
"type": "string"
},
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"supplier": {
"type": "string"
}
},
"additionalProperties": false
}
},
"invoices": {
"type": "number"
},
"downloads": {
"type": "object",
"required": [
"xlsx",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"xlsx": {
"type": "string"
}
},
"additionalProperties": false
},
"currencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"currency",
"invoices",
"net",
"tax",
"gross"
],
"properties": {
"net": {
"type": "string"
},
"tax": {
"type": "string"
},
"gross": {
"type": "string"
},
"currency": {
"type": "string"
},
"invoices": {
"type": "number"
}
},
"additionalProperties": false
}
},
"by_supplier": {
"type": "array",
"items": {
"type": "object",
"required": [
"currency",
"supplier",
"invoices",
"gross"
],
"properties": {
"gross": {
"type": "string"
},
"currency": {
"type": "string"
},
"invoices": {
"type": "number"
},
"supplier": {
"type": "string"
}
},
"additionalProperties": false
}
},
"by_tax_rate": {
"type": "array",
"items": {
"type": "object",
"required": [
"currency",
"rate",
"lines",
"net",
"tax"
],
"properties": {
"net": {
"type": "string"
},
"tax": {
"type": "string"
},
"rate": {
"type": "string"
},
"lines": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"additionalProperties": false
}
},
"preview_count": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"skipped_files": {
"type": "array",
"items": {
"type": "object",
"required": [
"file",
"reason"
],
"properties": {
"file": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
},
"by_supplier_count": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"by_tax_rate_count": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"duplicate_numbers": {
"type": "number"
},
"invoices_with_issues": {
"type": "number"
},
"links_expire_minutes": {
"type": "number"
},
"arithmetic_mismatches": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Generate invoice ledger",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
invoice-ledger-widget — Zovo Invoice Ledger view
Interactive view for Zovo Invoice Ledger.
ui://widget/invoice-ledger-v1-1.0.0-6a6ef28770a92c3e944c456f8cae1a8b2e55840fbdabae4f7c82b87f69b9c62d.htmlinvoice-ledger-widget-legacy — Zovo Invoice Ledger view (previous versions)
ui://widget/invoice-ledger-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 469 ms
- 95th percentile latency
- 469 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 469 ms · metadata changed · 1 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-invoice-ledger-mcp https://invoice-ledger.zovo.one/mcpCodex
codex mcp add zovo-invoice-ledger-mcp --url https://invoice-ledger.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-invoice-ledger-mcp": {
"url": "https://invoice-ledger.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-invoice-ledger-mcp": {
"type": "streamableHttp",
"url": "https://invoice-ledger.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-invoice-ledger-mcp": {
"type": "http",
"url": "https://invoice-ledger.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-invoice-ledger-mcp https://invoice-ledger.zovo.one/mcpClaude Desktop
https://invoice-ledger.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-invoice-ledger-mcp": {
"serverUrl": "https://invoice-ledger.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Invoice Ledger MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.