Home · Guides

One rate card, and a paper trail when the job grows

Two problems here and they are the same problem. Prices typed fresh into every quote drift, and scope that changes in a phone call does not appear on the invoice. Both are fixed by writing it down once in a place the other servers can read.

The price list

Set a SKU: DEV-HOUR, senior development hour, 90 EUR. And DESIGN-HOUR at 75 EUR.

Paste this into Claude with the server connected.

sku_set on the catalogue server. lines_resolve is what the quote and the invoice call to turn a code and a quantity into a priced line, and it is free on every tier, along with price_list_text and every other text answer. Withholding resolution would withhold the one thing the sibling servers came for.

Free is 25 SKUs, the one standard price tier, and unlimited rate cards. Pro adds price tiers, so trade and wholesale are a second column rather than a second catalogue, plus the A4 price list PDF and a report of which rows a later row already replaces.

One behaviour worth knowing: sku_delete is free on every tier, and a code that has already priced a line, or that a rate card points at, is refused by name with the number of times it was used and the last resolution id. A code printed on a document you sent somebody is a fact about that document, not a row you can quietly remove.

The job

Raise a work order for Acme: 12 DEV-HOUR and 4 DESIGN-HOUR, scheduled Thursday.

Paste this into Claude with the server connected.

The work-order server prices the job the way the invoice will. Free holds five open work orders, which is a one-van trade, with 200 lines each on every tier. The cap counts open jobs rather than jobs ever raised, so finishing one frees its slot. The text completion report is free, because handing the customer what was done is the thing the job was for.

Then the scope changes

Raise a change order against that job: 6 more DEV-HOUR, reason client added a second language.

Paste this into Claude with the server connected.

The change-order server holds it as a document against the original quote or work order, with the reason, the price delta and the client approval state. contract_value is free on every tier and returns the running value derived from what the client actually approved, which is the number the whole thing exists to produce.

Free is five open change orders, counted as the ones the client has not answered yet, so approving, rejecting or voiding one frees its slot. Pro adds change_order_document, a plain-text document with every line, its reason, the contract value before and after, and an approval block to sign, plus change_order_invoice_payload, which hands the approved delta straight to invoice_create with VAT at the profile rate and the rounding drift asserted to zero.

A duplicate is refused before the cap

On both the work-order and change-order servers, a byte-identical document is refused before the free cap is consulted, and the refusal names the id already holding it rather than offering an upgrade. It burns neither a slot nor a document number. The adversarial test suite asserts that the refusal text does not contain the words "free tier", because a duplicate is one job filed twice far more often than it is two jobs.

All free and Pro figures on this page are from data/facts.json. Tool counts from data/tools.json: 12 on catalogue, 12 on work-order, 11 on change-order.

Questions

Can the invoice read the price list directly?

lines_resolve returns the priced lines and you pass them to invoice_create. There is no hidden coupling between the stores, which is deliberate: an invoice is a record of what you charged, and a price list that changed afterwards must not be able to rewrite it.

What happens to a SKU whose price changes?

Set the new price and the newer row is what resolves from then on. Documents already issued keep the price they were issued at, because they hold resolved lines rather than a reference. catalogue_report on Pro lists which rows a later row already replaces.

Do I need the work-order server for desk work?

No. It exists for jobs with a site, a schedule and a sign-off, which is trades and field work. For desk work the quote is the job document and change orders attach to the quote instead.

Why is contract_value free?

Because the running value is the thing the change orders exist to answer, and withholding it would withhold the record rather than a convenience. The same reasoning puts trial_balance, statement_aging, loan_schedule and the petty cash reconcile on the free tier of their own servers.

Related

All MCP servers and prices · All guides · Buy the bundle $39