Change orders against a quote or work order: deltas, approval, running contract value.
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.
Add one line to a draft change order: added or removed with a quantity and a unit price in minor units, or changed with the old and the new quantity and price, each with a reason and a date. Free.
added for new work, removed for work taken out, changed for a line whose quantity or price moves
Why, in the client's words if you have them, e.g. Client asked for a second page after the kickoff
added or removed: how many. changed: the NEW quantity
The line as it reads on the quote or work order, e.g. Website audit
The change order id, e.g. CO-2026-0001, or its title when only one carries it
added or removed: the unit price in whole minor units. changed: the NEW unit price. 45000 is EUR 450.00
The day the change was asked for, YYYY-MM-DD. Default the change order's date
VAT percent for this line, overriding the shared profile's default
changed only: the quantity before the change
changed only: the unit price before the change, in whole minor units
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add one line to a draft change order: added or removed with a quantity and a unit price in minor units, or changed with the old and the new quantity and price, each with a reason and a date. Free.
| Argument | Type | Description |
|---|---|---|
| date | string | The day the change was asked for, YYYY-MM-DD. Default the change order's date |
| kind* | string | added for new work, removed for work taken out, changed for a line whose quantity or price moves |
| note | string | |
| reason* | string | Why, in the client's words if you have them, e.g. Client asked for a second page after the kickoff |
| quantity* | number | added or removed: how many. changed: the NEW quantity |
| tax_rate | number | VAT percent for this line, overriding the shared profile's default |
| description* | string | The line as it reads on the quote or work order, e.g. Website audit |
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
| was_quantity | number | changed only: the quantity before the change |
| unit_price_minor* | integer | added or removed: the unit price in whole minor units. changed: the NEW unit price. 45000 is EUR 450.00 |
| was_unit_price_minor | integer | changed only: the unit price before the change, in whole minor units |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order",
"kind",
"description",
"quantity",
"unit_price_minor",
"reason"
],
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the change was asked for, YYYY-MM-DD. Default the change order's date"
},
"kind": {
"enum": [
"added",
"removed",
"changed"
],
"type": "string",
"description": "added for new work, removed for work taken out, changed for a line whose quantity or price moves"
},
"note": {
"type": "string",
"maxLength": 2000
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why, in the client's words if you have them, e.g. Client asked for a second page after the kickoff"
},
"quantity": {
"type": "number",
"maximum": 1000000,
"description": "added or removed: how many. changed: the NEW quantity",
"exclusiveMinimum": 0
},
"tax_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for this line, overriding the shared profile's default"
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "The line as it reads on the quote or work order, e.g. Website audit"
},
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
},
"was_quantity": {
"type": "number",
"maximum": 1000000,
"description": "changed only: the quantity before the change",
"exclusiveMinimum": 0
},
"unit_price_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "added or removed: the unit price in whole minor units. changed: the NEW unit price. 45000 is EUR 450.00"
},
"was_unit_price_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "changed only: the unit price before the change, in whole minor units"
}
},
"additionalProperties": false
}Raise a change order against a quote or work order and return its CO-YYYY-NNNN number: the reference, the client, a title, the date, and the original contract value in minor units. Free tier: 5 open.
| Argument | Type | Description |
|---|---|---|
| date | string | The day the change was raised, YYYY-MM-DD. Default today |
| note | string | |
| title* | string | What the change is, in one line, e.g. Add a second landing page and drop hosting |
| client* | string | The client the change is agreed with, as named on the quote or work order |
| currency | string | ISO code the contract is priced in. Defaults to the shared business profile's currency |
| reference* | string | The quote or work order this change order is against, by its id, e.g. Q-2026-0003 or WO-2026-0001 |
| duplicate_ok | boolean | Raise it even though an identical change order exists on this reference. Default false |
| reference_kind | string | What the reference is. Inferred from the id when omitted: WO-... is a work order, anything else a quote |
Delete a DRAFT change order with no lines, freeing an open slot. One sent, approved, rejected or voided is refused, and so is one carrying lines: void it with change_order_status instead. The number is not reissued.
| Argument | Type | Description |
|---|---|---|
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order"
],
"properties": {
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
}
},
"additionalProperties": false
}Render one change order as a plain-text document for the client to approve: every line with its reason, the delta net and gross, the contract value before and after, and an approval block. The same text also comes back as a .txt download link valid for one hour. Pro.
| Argument | Type | Description |
|---|---|---|
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order"
],
"properties": {
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
}
},
"additionalProperties": false
}Return one change order in full by CO number or client: every added, removed and changed line with its reason and delta, VAT, delta gross, the status history and the running value. change_order_list finds the id.
| Argument | Type | Description |
|---|---|---|
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order"
],
"properties": {
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
}
},
"additionalProperties": false
}Build the approved delta as invoice_create-ready items in MAJOR units and quote_create-ready items in MINOR units, with VAT at the shared profile rate. Writes nothing and creates nothing. Pro.
| Argument | Type | Description |
|---|---|---|
| tax_rate | number | VAT percent for lines with no rate of their own, overriding the shared business profile's default |
| issue_date | string | The invoice issue date, YYYY-MM-DD. Default today |
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order"
],
"properties": {
"tax_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for lines with no rate of their own, overriding the shared business profile's default"
},
"issue_date": {
"type": "string",
"maxLength": 10,
"description": "The invoice issue date, YYYY-MM-DD. Default today"
},
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
}
},
"additionalProperties": false
}List change orders newest first with status, reference, client, currency and net delta, and above them the APPROVED and the pending delta per currency, kept apart. Filter by reference, status, client, date.
| Argument | Type | Description |
|---|---|---|
| to | string | Latest date, YYYY-MM-DD |
| from | string | Earliest date, YYYY-MM-DD |
| limit | integer | Maximum rows returned, default and ceiling 500 |
| client | string | Only change orders whose client name contains this text |
| status | string | One status, or open for draft and sent together |
| reference | string | Only change orders against this quote or work order |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"maxLength": 10,
"description": "Latest date, YYYY-MM-DD"
},
"from": {
"type": "string",
"maxLength": 10,
"description": "Earliest date, YYYY-MM-DD"
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Maximum rows returned, default and ceiling 500"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "Only change orders whose client name contains this text"
},
"status": {
"enum": [
"draft",
"sent",
"approved",
"rejected",
"void",
"open"
],
"type": "string",
"description": "One status, or open for draft and sent together"
},
"reference": {
"type": "string",
"maxLength": 64,
"description": "Only change orders against this quote or work order"
}
},
"additionalProperties": false
}Move one change order along and stamp the date and note: draft to sent, sent to approved or rejected, either to void. Backwards steps, an unsent approval and a backdated move are all refused.
| Argument | Type | Description |
|---|---|---|
| date | string | The day it happened, YYYY-MM-DD. Default today |
| note | string | What happened, e.g. Emailed to the client, or Approved by phone, confirmed in writing |
| status* | string | The status to move to |
| change_order* | string | The change order id, e.g. CO-2026-0001, or its title when only one carries it |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"change_order",
"status"
],
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day it happened, YYYY-MM-DD. Default today"
},
"note": {
"type": "string",
"maxLength": 2000,
"description": "What happened, e.g. Emailed to the client, or Approved by phone, confirmed in writing"
},
"status": {
"enum": [
"draft",
"sent",
"approved",
"rejected",
"void"
],
"type": "string",
"description": "The status to move to"
},
"change_order": {
"type": "string",
"maxLength": 200,
"description": "The change order id, e.g. CO-2026-0001, or its title when only one carries it"
}
},
"additionalProperties": false
}The running value of one quote or work order: original, approved deltas and current value, with pending draft and sent deltas kept apart. Net of VAT. A reference with no change order is refused.
| Argument | Type | Description |
|---|---|---|
| reference* | string | The quote or work order this change order is against, by its id, e.g. Q-2026-0003 or WO-2026-0001 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"reference"
],
"properties": {
"reference": {
"type": "string",
"maxLength": 64,
"description": "The quote or work order this change order is against, by its id, e.g. Q-2026-0003 or WO-2026-0001"
}
},
"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": {}
}| original_value_minor | integer | The contract value BEFORE any change order, net of VAT, in whole minor units. Required on the first change order against a reference; inherited by every later one |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"reference",
"client",
"title"
],
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the change was raised, YYYY-MM-DD. Default today"
},
"note": {
"type": "string",
"maxLength": 2000
},
"title": {
"type": "string",
"maxLength": 2000,
"description": "What the change is, in one line, e.g. Add a second landing page and drop hosting"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "The client the change is agreed with, as named on the quote or work order"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code the contract is priced in. Defaults to the shared business profile's currency"
},
"reference": {
"type": "string",
"maxLength": 64,
"description": "The quote or work order this change order is against, by its id, e.g. Q-2026-0003 or WO-2026-0001"
},
"duplicate_ok": {
"type": "boolean",
"description": "Raise it even though an identical change order exists on this reference. Default false"
},
"reference_kind": {
"enum": [
"quote",
"work_order"
],
"type": "string",
"description": "What the reference is. Inferred from the id when omitted: WO-... is a work order, anything else a quote"
},
"original_value_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "The contract value BEFORE any change order, net of VAT, in whole minor units. Required on the first change order against a reference; inherited by every later one"
}
},
"additionalProperties": false
}