Zovo AR Aging Report
Server Details
Make an accounts receivable aging report from your open invoices and see who owes you money.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
The two tools produce clearly different outputs: an aging summary versus per-customer statements. Descriptions explicitly cross-reference each other and warn against using the wrong tool, though both consume the same invoice inputs and generate reminder email drafts, creating minor overlap.
Both names follow a consistent verb_noun pattern: generate_aging_report and generate_customer_statements. The singular/plural noun difference reflects the output naturally and does not hurt predictability.
Two tools is thin, and each is a large composite workflow packing calculations, formatting, email drafts, and multiple export formats into one call. The narrow domain makes two defensible, but additional focused tools could make the surface easier to use.
The surface covers the core AR reporting needs: aging buckets, customer-level statements, partial payments, credit memos, DSO, reminders, and PDF/Excel/CSV outputs. Minor gaps exist around customization or accounting-software integration, but the latter is explicitly out of scope.
Available Tools
2 toolsgenerate_aging_reportGenerate AR aging reportARead-onlyIdempotentInspect
Use this when the user wants an accounts receivable aging report (AR aging report, aged receivables, 'who owes me money and how late', ar aging report template filled in) from open invoices typed in chat, pasted as CSV/TSV, or attached as a CSV/XLSX export from QuickBooks, Xero, FreshBooks or Wave. Buckets each open balance into Current, 1-30, 31-60, 61-90 and over 90 days past due as of a date (default today in New York), with per-customer and grand totals that add up to the cent, partial payments and credit memos, optional DSO from credit sales, polite past-due reminder email drafts from invoice facts, and aging PDF, Excel and CSV downloads. Does not connect to accounting software, send emails or collect payments. Do not use for accounts payable (bills you owe).
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | An open invoices or A/R aging export (CSV, TSV or XLSX) from QuickBooks, Xero, FreshBooks, Wave or a spreadsheet, e.g. open_invoices.csv. | |
| currency | No | Currency code, e.g. "USD" (default), "CAD", "EUR". With a mixed-currency file, only this currency is aged. | |
| invoices | No | Open invoices: an array of objects like {customer:"Acme Corp", invoice_number:"INV-1042", invoice_date:"2026-08-01", terms:"Net 30", amount:1200, amount_paid:200}, or pasted CSV/TSV text with a header row, or one line per invoice like "Acme Corp, INV-1042, 2026-08-01, Net 30, 1200, paid 200". Give this or file. | |
| as_of_date | No | Age the invoices as of this date, e.g. "2026-10-31". Default today in New York time. | |
| sender_name | No | Name to sign the reminder emails with, e.g. "Dana Lee". Default the company name. | |
| company_name | No | Your business name for the report header and email sign-off, e.g. "Bright Path Design LLC". | |
| credit_sales | No | Credit sales for the period, to compute DSO, e.g. 240000 or "$240,000". | |
| default_terms | No | Terms for invoices with no due date and no terms, e.g. "Net 30" (default) or 15. | |
| sales_period_days | No | Days in the credit sales period for DSO, e.g. 365 (default), 90, "quarter", "month". |
Output Schema
| Name | Required | Description |
|---|---|---|
| dso | Yes | |
| kind | Yes | |
| input | Yes | |
| totals | Yes | |
| buckets | Yes | |
| currency | Yes | |
| customers | Yes | |
| downloads | Yes | |
| pdf_pages | Yes | |
| reminders | Yes | |
| as_of_date | Yes | |
| as_of_note | Yes | |
| assumptions | Yes | |
| reminders_total | Yes | |
| file_total_check | Yes | |
| customers_not_shown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavior: bucket boundaries, the New York default as-of date, that totals reconcile to the cent, that partial payments and credit memos are handled, that emails are drafts only and payments are never collected. It stops short of describing pagination or limits on invoice volume.
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?
The guidance is front-loaded in the first clause, which is correct, but the body is one sprawling sentence with a parenthetical synonym dump ('ar aging report template filled in') and feature stacking that strains readability. Some of the enumeration aids retrieval, yet phrases like 'polite past-due reminder email drafts from invoice facts' add words without adding decision-relevant meaning.
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?
For a 9-parameter, nested-object tool with an output schema, the description covers the inputs it needs to justify (invoices vs. file, as-of date, DSO inputs) and the outputs without needing to restate return structure. An agent has enough to decide to call it, pick the data source, and set the aging date.
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% and every parameter already carries an example and default, so the baseline is 3. The description adds a little beyond the schema, notably that a mixed-currency file is filtered to the single currency and that DSO derives from credit sales, but most of the 9 parameters are only exercised implicitly through the feature list.
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?
The description names a specific verb+resource (generate an accounts receivable aging report) and enumerates the exact outputs: Current/1-30/31-60/61-90/90+ buckets, per-customer and grand totals, DSO, reminder drafts, and PDF/Excel/CSV downloads. It explicitly excludes the adjacent-but-different task (accounts payable) and the accounting-software integration it does not perform. It never mentions the sibling generate_customer_statements, so an agent gets no help separating this from the statement tool.
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?
The opening 'Use this when the user wants...' clause plus the synonym set (aged receivables, 'who owes me money and how late') gives a clear triggering context, and 'Do not use for accounts payable (bills you owe)' is an explicit exclusion. It also states what the tool does not do (connect to accounting software, send emails, collect payments). The gap is that no alternative tool is named for overlapping cases such as customer statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_customer_statementsGenerate customer statementsARead-onlyIdempotentInspect
Use this when the user wants customer statements (customer statement template, statement of account, open item statement) for customers who owe them money, from the same open invoices: typed, pasted CSV/TSV, or an attached CSV/XLSX export. Returns a PDF with one page per customer listing each open invoice with date, due date, amount, paid, open balance and days past due, an aging strip and the balance due, plus polite past-due reminder email drafts. Filter by customer names or overdue_only. Does not send statements or emails, and does not build an aging summary (use generate_aging_report).
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | An open invoices or A/R aging export (CSV, TSV or XLSX) from QuickBooks, Xero, FreshBooks, Wave or a spreadsheet, e.g. open_invoices.csv. | |
| message | No | Short note printed on every statement, e.g. "Thank you for your business." | |
| currency | No | Currency code, e.g. "USD" (default), "CAD", "EUR". With a mixed-currency file, only this currency is aged. | |
| invoices | No | Open invoices: an array of objects like {customer:"Acme Corp", invoice_number:"INV-1042", invoice_date:"2026-08-01", terms:"Net 30", amount:1200, amount_paid:200}, or pasted CSV/TSV text with a header row, or one line per invoice like "Acme Corp, INV-1042, 2026-08-01, Net 30, 1200, paid 200". Give this or file. | |
| remit_to | No | Payment instructions printed on each statement, e.g. "ACH or check to Bright Path Design, 12 Main St". | |
| customers | No | Only these customers, e.g. ["Acme Corp", "Globex"] or "Acme Corp, Globex". Default every customer with a balance. | |
| as_of_date | No | Age the invoices as of this date, e.g. "2026-10-31". Default today in New York time. | |
| sender_name | No | Name to sign the reminder emails with, e.g. "Dana Lee". | |
| company_name | No | Your business name for the report header and email sign-off, e.g. "Bright Path Design LLC". | |
| overdue_only | No | true to make statements only for customers with past-due invoices. Default false. | |
| default_terms | No | Terms for invoices with no due date and no terms, e.g. "Net 30" (default) or 15. | |
| company_address | No | Your address or contact lines for the statement header, e.g. "12 Main St, Austin TX 78701, billing@brightpath.com". |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| input | Yes | |
| notes | Yes | |
| pages | Yes | |
| totals | Yes | |
| currency | Yes | |
| downloads | Yes | |
| reminders | Yes | |
| as_of_date | Yes | |
| as_of_note | Yes | |
| statements | Yes | |
| reminders_total | Yes | |
| statements_count | Yes | |
| statements_not_listed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real context on top: it produces a PDF with one page per customer, an aging strip, balance due, and polite reminder email drafts, and clarifies that nothing is actually sent. That negative constraint is the most important behavioral disclosure. It stops short of mentioning size limits, pagination, or failure modes for unparseable 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?
Three dense sentences, front-loaded with the trigger and the input modes before the return shape and the exclusions. Every clause does work, but the statement of what the PDF contains is long and partially duplicates the output schema rather than earning new 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?
For a 12-parameter tool with nested invoice objects and an output schema, the description covers what an agent needs to decide to call it: accepted input sources, default behavior for customers and as_of_date, the two useful filters, and what it deliberately does not do. Return values need not be explained further because an output schema exists.
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%, so every parameter is already documented in the schema and the baseline of 3 applies. The description adds some value by enumerating the three accepted input shapes for invoices/file (typed objects, pasted CSV/TSV, attached CSV/XLSX export) and by calling out the customers and overdue_only filters, but it does not add format or edge-case detail beyond the schema.
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?
The description names a specific verb and resource ("customer statements") and immediately pins down the domain with synonyms an agent would search for ("statement of account", "open item statement"). It also explicitly distinguishes itself from the sole sibling, generate_aging_report, so an agent can choose between them 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?
It gives an explicit trigger ("Use this when the user wants customer statements ... for customers who owe them money") and explicit exclusions ("Does not send statements or emails, and does not build an aging summary (use generate_aging_report)"). The alternative is named along with the condition that selects it, leaving nothing to inference.
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
generate_aging_report - First observed
generate_customer_statements
Related MCP Connectors
Find overdue invoices, draft invoices, and chase payment. Sends need your confirmation.
Chase unpaid invoices: reminder, firm reminder and final notice letters, and a daily chase list.
Accounts receivable for Xero and QuickBooks Online: customer replies, contacts and invoices.
Client statements of account, ageing of open invoices and payment chasers as text or PDF.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables users to track unpaid invoices and generate an escalating ladder of payment-reminder letters — first reminder, second reminder, and final notice — anchored to the due date, plus overdue listings, aging buckets, and a daily chase list of what to send today. It records payments and letters sent, rendering each letter as Markdown or printable HTML without ever emailing anything itself.1146 npmMIT
- AlicenseAqualityBmaintenanceEnables building client statements of account from existing invoices, credit notes, and deposits, with aged outstanding balances, PDF/plain-text output, and drafted payment chasers at friendly, firm, or final levels.860 npmMIT
- AlicenseNot gradedqualityCmaintenanceLets a user ask what their business is owed, who to chase first, and get a chase email drafted in their own voice, via tools for weekly totals, chase queues, customer history, due-soon invoices and insights. Every tool only reads or returns a draft, so nothing can be sent.MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to turn an invoice CSV into an accounts receivable aging report, showing open and overdue totals, aging buckets, and customers ranked by who to chase first. It also inspects CSV columns and row counts without exposing row contents.376 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.