PaidPilot Invoice Tools
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Invoice tools: reminders, late fees, terms, timesheets and a receivables health report (x402).
| Author | io.paidpilot.api |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2387 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"PaidPilot Invoice Tools": {
"url": "https://api.paidpilot.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (7)
pricingread-onlyFree. Return the price of every paid tool and of the HTTP invoice PDF route, the payment network (Base) and the receiving address. No input, no network request, no payment.
Hints: read-only yes · destructive no · idempotent yes · open-world no
validate_invoiceread-onlyFree. Validate an invoice JSON (the body for POST /v1/invoice.pdf, or the output of invoice_from_timesheet) and return computed subtotal, discount, tax and total, or a list of field errors. Same checks as the paid PDF route. Offline, no payment.
Parameters:
invoice(required) — object — Invoice object: from, to, number, issue_date, currency, line_items[{description, quantity, unit_price}], optional tax and discount
Hints: read-only yes · destructive no · idempotent yes · open-world no
payment_reminder_draftread-onlyDraft a payment reminder email for one unpaid invoice in a friendly, firm or final-notice tone. Returns a subject, plain-text body, days overdue and a suggested next step. Use late_fee_calc first if you want the fee amount quoted in the email. Draft only: nothing is sent. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta["x402/payment"]); invalid input returns an error and is not charged.
Parameters:
tone(required) — string — "friendly" (alias "polite"), "firm", or "final"from_name(required) — string — Your name or business, used in the sign-offas_of— string — Today's date for the days-overdue count, YYYY-MM-DD (default: today, UTC)amount— number — Amount duecurrency— string — ISO-4217, default USDdue_date— string — YYYY-MM-DDclient_name— string — Client's name for the greetingpayment_link— stringinvoice_number— stringlate_fee_terms— string — Your agreed late-fee terms, e.g. "1.5% per month"; mentioned in the final notice onlyfinal_deadline_days— integer — Final notice: days the client has to pay
Hints: read-only yes · destructive no · idempotent yes · open-world no
late_fee_calcread-onlyCalculate the late fee on one overdue invoice: flat fee, monthly % or annual %, simple or compounding, with optional grace days. Returns days late, the fee, the new total and a line to paste on the invoice. Use payment_terms_check instead to work out when an invoice is due. Not legal advice; it does not look up state caps. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta["x402/payment"]); invalid input returns an error and is not charged.
Parameters:
amount(required) — number — Unpaid invoice amountdue_date(required) — string — Invoice due date, YYYY-MM-DDfee_type(required) — string — flat = one fixed fee; monthly_percent e.g. 1.5; annual_percent e.g. 18as_of— string — Date paid, or the date to calculate to, YYYY-MM-DD (default: today, UTC)state— string — US state (2-letter) for the legal notecurrency— string — ISO-4217, default USDflat_fee— number — Flat fee; required for fee_type=flat, optional one-time add-on otherwisegrace_days— integer — Days after the due date before any fee appliescompounding— boolean — false = simple interest (default); true = compounds (monthly: per 30 days; annual: daily)rate_percent— number — Rate for monthly_percent / annual_percent
Hints: read-only yes · destructive no · idempotent yes · open-world no
payment_terms_checkread-onlyWork out the due date and status for payment terms such as Net 30, 2/10 Net 30, Due on receipt, EOM or Net 30 EOM. Returns the early-payment discount amount and deadline, the annualized cost of skipping the discount, and suggested reminder dates. Use late_fee_calc once the invoice is overdue. Pure calculation: no network request, nothing is sent or stored. Costs $0.01 USDC per call via x402 (payment goes in _meta["x402/payment"]); invalid input returns an error and is not charged.
Parameters:
invoice_date(required) — string — Invoice date, YYYY-MM-DDterms(required) — string — Payment terms, e.g. "Net 30", "2/10 Net 30", "Due on receipt", "EOM", "Net 30 EOM"as_of— string — Date to compute status for, YYYY-MM-DD (default: today, UTC)amount— number — Invoice total (optional; enables the discount math)currency— string — ISO-4217, default USD
Hints: read-only yes · destructive no · idempotent yes · open-world no
invoice_from_timesheetread-onlyTurn time entries (hours x rate, with optional rounding, grouping by task and expenses) into a validated invoice JSON with totals, ready for POST /v1/invoice.pdf. Use validate_invoice (free) instead if you already have an invoice. Pure calculation: no network request, nothing is sent or stored. Costs $0.02 USDC per call via x402 (payment goes in _meta["x402/payment"]); invalid input returns an error and is not charged.
Parameters:
seller(required) — objectbuyer(required) — objectinvoice_number(required) — stringissue_date(required) — stringentries(required) — arraynotes— stringterms— string — e.g. "Net 15"; sets due_date from issue_date (early-pay discounts are not applied to the invoice)currency— stringdiscount— numberdue_date— string — YYYY-MM-DD; or give terms insteadexpenses— array — Reimbursable expenses, one line eachgroup_by— string — entry = one line per entry; description = merge entries with the same description and raterounding— objecttax_rate— numberdefault_rate— number — Hourly rate for entries without their own ratepayment_instructions— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
receivables_health_reportread-onlyGrade the health of a business's accounts receivable from its invoice list. Send a CSV export (QuickBooks, Xero, FreshBooks, Wave, Stripe or any CSV with customer and amount columns; columns are auto-detected) or JSON rows, up to 1000 invoices. Returns an A-F grade and 0-100 score with reasons, aging buckets (current, 1-30, 31-60, 61-90, 90+ days), overdue %, weighted days outstanding, DSO, average days to pay, customer concentration, a collection priority list with the next action per overdue invoice (pointing to payment_reminder_draft and late_fee_calc), and recommendations. Use it for a monthly AR review or before chasing payments. Not accounting or legal advice. Pure calculation: no network request, nothing is sent or stored. Costs $1 USDC per call via x402 (payment goes in _meta["x402/payment"]); invalid input returns an error and is not charged.
Parameters:
csv— string — CSV export (QuickBooks, Xero, FreshBooks, Wave, Stripe or your own). Header row required. Recognized columns: invoice number, customer, amount/total, amount paid, balance/open balance, invoice date, due date, terms, paid date, status.as_of— string — Report date, default today (UTC)currency— stringinvoices— array — Or JSON rows instead of CSVdefault_terms— string — Used when a row has no due date and no termsrevenue_window_days— integer — Window for DSO: invoiced amount in the last N days
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.