Statements of account, aging buckets and dunning letters from your invoices.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <Pro license key or anonymous token from GET https://mcp.zovo.one/mcp/token>
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.
Write a payment chaser at level 1 friendly, 2 firm or 3 final demand: every OVERDUE invoice with its age, the total and your bank details. Refused if nothing is overdue. No interest is stated. The letter is also a .txt download link valid one hour. Level 3 is Pro.
1 friendly reminder, 2 firm reminder, 3 final demand. Level 3 is Pro
Client id from the invoice server, an exact client name, or a name containing this text
Age the invoices as at this date, YYYY-MM-DD. Defaults to today
Only needed when the client has documents in more than one currency. Currencies are never added together
Opening line, default "Hello" and the client name
Closing line, default your business name from the shared profile
Write a payment chaser at level 1 friendly, 2 firm or 3 final demand: every OVERDUE invoice with its age, the total and your bank details. Refused if nothing is overdue. No interest is stated. The letter is also a .txt download link valid one hour. Level 3 is Pro.
| Argument | Type | Description |
|---|---|---|
| as_of | string | Age the invoices as at this date, YYYY-MM-DD. Defaults to today |
| level* | integer | 1 friendly reminder, 2 firm reminder, 3 final demand. Level 3 is Pro |
| client* | string | Client id from the invoice server, an exact client name, or a name containing this text |
| currency | string | Only needed when the client has documents in more than one currency. Currencies are never added together |
| greeting | string | Opening line, default "Hello" and the client name |
| sign_off | string | Closing line, default your business name from the shared profile |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client",
"level"
],
"properties": {
"as_of": {
"type": "string",
"maxLength": 10,
"description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
},
"level": {
"type": "integer",
"maximum": 3,
"minimum": 1,
"description": "1 friendly reminder, 2 firm reminder, 3 final demand. Level 3 is Pro"
},
"client": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client id from the invoice server, an exact client name, or a name containing this text"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
},
"greeting": {
"type": "string",
"maxLength": 4000,
"description": "Opening line, default \"Hello\" and the client name"
},
"sign_off": {
"type": "string",
"maxLength": 4000,
"description": "Closing line, default your business name from the shared profile"
}
},
"additionalProperties": false
}Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.
| Argument | Type | Description |
|---|---|---|
| key* | string | License key from checkout, MCPL1.<payload>.<signature> |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
},
"additionalProperties": false
}Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Age open invoices into 0-30, 31-60, 61-90 and over 90 days past DUE date at a date, per client and currency, with the invoices themselves. Free. statements_report rolls up the whole book instead.
| Argument | Type | Description |
|---|---|---|
| as_of | string | Age the invoices as at this date, YYYY-MM-DD. Defaults to today |
| limit | integer | Maximum invoice rows returned, default and ceiling 2000 |
| client | string | One client id or name. Omit to age every client in the books |
| currency | string | Only this currency. Omit for every currency, each aged separately |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"as_of": {
"type": "string",
"maxLength": 10,
"description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
},
"limit": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"description": "Maximum invoice rows returned, default and ceiling 2000"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "One client id or name. Omit to age every client in the books"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only this currency. Omit for every currency, each aged separately"
}
},
"additionalProperties": false
}Build one client's statement for a period: opening, invoices, payments with deposits applied broken out, credit notes and closing, formatted and in minor units. Free: 5 a month; a rebuild is free.
| Argument | Type | Description |
|---|---|---|
| to* | string | Last day of the period, YYYY-MM-DD, inclusive |
| from* | string | First day of the period, YYYY-MM-DD. Everything dated before it becomes the opening balance |
| client* | string | Client id from the invoice server, an exact client name, or a name containing this text |
| currency | string | Only needed when the client has documents in more than one currency. Currencies are never added together |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client",
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"maxLength": 10,
"description": "Last day of the period, YYYY-MM-DD, inclusive"
},
"from": {
"type": "string",
"maxLength": 10,
"description": "First day of the period, YYYY-MM-DD. Everything dated before it becomes the opening balance"
},
"client": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client id from the invoice server, an exact client name, or a name containing this text"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
}
},
"additionalProperties": false
}Call this tool to render one client's A4 statement of account and return a download link valid for one hour. Titled STATEMENT OF ACCOUNT, movements in date order, BALANCE OUTSTANDING at the foot. Pro.
| Argument | Type | Description |
|---|---|---|
| to* | string | Last day of the period, YYYY-MM-DD, inclusive |
| from* | string | First day of the period, YYYY-MM-DD |
| as_of | string | Date printed on the statement, YYYY-MM-DD. Defaults to today |
| client* | string | Client id from the invoice server, an exact client name, or a name containing this text |
| currency | string | Only needed when the client has documents in more than one currency. Currencies are never added together |
| out_path | string | Name for the downloaded file, e.g. acme-statement. Defaults to the client, currency and period; the statement comes back as a download link valid for one hour |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client",
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"maxLength": 10,
"description": "Last day of the period, YYYY-MM-DD, inclusive"
},
"from": {
"type": "string",
"maxLength": 10,
"description": "First day of the period, YYYY-MM-DD"
},
"as_of": {
"type": "string",
"maxLength": 10,
"description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
},
"client": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client id from the invoice server, an exact client name, or a name containing this text"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
},
"out_path": {
"type": "string",
"description": "Name for the downloaded file, e.g. acme-statement. Defaults to the client, currency and period; the statement comes back as a download link valid for one hour"
}
},
"additionalProperties": false
}Turn one client's statement into a plain-text letter for an email: movements in date order, opening and closing balances, deposit held, a sign-off. It is also a .txt download link valid one hour and counts toward the 5 a month; statement_pdf writes the A4 page.
| Argument | Type | Description |
|---|---|---|
| to* | string | Last day of the period, YYYY-MM-DD, inclusive |
| from* | string | First day of the period, YYYY-MM-DD |
| as_of | string | Date printed on the statement, YYYY-MM-DD. Defaults to today |
| client* | string | Client id from the invoice server, an exact client name, or a name containing this text |
| currency | string | Only needed when the client has documents in more than one currency. Currencies are never added together |
| greeting | string | Opening line, default "Hello" and the client name |
| sign_off | string | Closing line, default your business name from the shared profile |
Receivables across every client at a date: totals and aging per currency, clients ranked by how much is OVERDUE, and the oldest overdue invoice. Pro. statement_aging is the free per-client view.
| Argument | Type | Description |
|---|---|---|
| as_of | string | Age the invoices as at this date, YYYY-MM-DD. Defaults to today |
| limit | integer | How many clients to list, worst first. Default 20 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"as_of": {
"type": "string",
"maxLength": 10,
"description": "Age the invoices as at this date, YYYY-MM-DD. Defaults to today"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "How many clients to list, worst first. Default 20"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client",
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"maxLength": 10,
"description": "Last day of the period, YYYY-MM-DD, inclusive"
},
"from": {
"type": "string",
"maxLength": 10,
"description": "First day of the period, YYYY-MM-DD"
},
"as_of": {
"type": "string",
"maxLength": 10,
"description": "Date printed on the statement, YYYY-MM-DD. Defaults to today"
},
"client": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client id from the invoice server, an exact client name, or a name containing this text"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Only needed when the client has documents in more than one currency. Currencies are never added together"
},
"greeting": {
"type": "string",
"maxLength": 4000,
"description": "Opening line, default \"Hello\" and the client name"
},
"sign_off": {
"type": "string",
"maxLength": 4000,
"description": "Closing line, default your business name from the shared profile"
}
},
"additionalProperties": false
}