Put a batch of supplier invoices into one spreadsheet with net, tax and gross totals.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Fallback only: several invoices pasted as one text; they are split at --- lines or where a new invoice number starts.
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 for invoices that show none, as an ISO code, e.g. USD. A code printed on the invoice wins.
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.
Order of numeric dates such as 03/04/2026: DMY (UK, EU) or MDY (US). Detected when a day is above 12.
Decimal mark of the amounts: "." (1,234.56) or "," (1.234,56). Detected per invoice when omitted.
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"].
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http invoice-ledger https://invoice-ledger.zovo.one/mcp
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.
| Argument | Type | Description |
|---|---|---|
| text | any | Fallback only: several invoices pasted as one text; they are split at --- lines or where a new invoice number starts. |
| files | array | 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 | string | number | null | Currency for invoices that show none, as an ISO code, e.g. USD. A code printed on the invoice wins. |
| invoices | any | 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 | any | Order of numeric dates such as 03/04/2026: DMY (UK, EU) or MDY (US). Detected when a day is above 12. |
| decimal_mark | any | Decimal mark of the amounts: "." (1,234.56) or "," (1.234,56). Detected per invoice when omitted. |
| invoice_texts | any | 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#",
"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\"]."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.