Skip to main content
Glama

Taokeh MCP server

File a pending recurring-invoice change draft (human approves in Taokeh)

update_recurring_invoice_draft

FILES A PENDING DRAFT ONLY — NOTHING CHANGES UNTIL A HUMAN REVIEWS AND APPROVES IT IN TAOKEH. Propose changes to a recurring invoice ALREADY set up in Taokeh — a price rise across a subscription, a changed quantity, a new end date, a cadence correction, or PAUSING the billing. This does NOT change anything: it files a pending DRAFT the owner reviews as a DIFF (current → proposed, changed fields only) and approves; only that tap writes. Name the schedule with recurringId, its real id — there is NO name fallback, because a schedule title is free text and one customer often has two schedules (a monthly retainer and an annual licence), so guessing between them would re-bill the wrong contract. proposed holds ONLY what you want changed: title, customerId/customer, lines, cadence, paymentMethod, startDate, endDate, maxOccurrences, notes, and status ("paused" to stop future invoices, "active" to resume). ⚠ lines is WHOLE-REPLACE: send every line the schedule should have, including the unchanged ones — for a price rise, send the same lines with the new prices. ⚠ APPROVING CAN MOVE THE BILLING DATE even when you change only a price: Taokeh re-derives the next issue date from the start date on every save, so the review page states the exact date the next invoice would go out, and whether that has moved. ⛔ WHAT IT CANNOT DO, each refused by name: it cannot set issueMode: "auto" — that would let one approval remove the human tap from every future invoice; it cannot set status: "ended", a ONE-WAY door no later draft could undo (propose "paused" instead, which stops the billing just as completely and can be resumed); it cannot set MFRS 15 revenue spreading, an accounting-policy decision on the schedule's own page; and it cannot touch the invoices this schedule has ALREADY issued — a change reaches the next firing and no earlier one. If a past invoice was wrong, credit it (create_credit_note_draft); the schedule only decides what happens next. A field the record already agrees with is dropped, and a proposal that changes nothing is refused rather than filed as an empty diff. One schedule per call — loop for a sweep across several, because each reviewable diff is the point.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesNoA SHORT reviewer note, in the reviewer's language: what you changed, why, and what they should double-check.
proposedYesONLY the fields you want changed. A field the record already agrees with is dropped; an unknown or deliberately-excluded field is refused by name.
needsReviewNoSet true when something gave you pause — a price the user was unsure about, a date you inferred.
recurringIdYesThe recurring invoice's real id. Required — there is no name fallback.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / proposed / properties / lines / description
      Previous value: -"WHOLE-REPLACE. Send every line the schedule should bill from now on, not just the changed ones — a partial set would silently drop the rest. ⛔ LINE KEYS ARE STRICT, exactly as on create_recurring_invoice_draft: a key this schema does not list is REFUSED BY NAME and NOTHING is filed."New value: +"WHOLE-REPLACE. Send every line the schedule should bill from now on, not just the changed ones — a partial set would silently drop the rest. A line carrying Taokeh's printed per-foot or per-piece note (like \"(400' @ RM 1.60/feet)\") is refused: a schedule holds no size or tally, so it would bill without its rounding line every cycle. Raise those invoices with create_invoice_draft in their filed form. On an update, such a line already on the schedule may be sent back unchanged. ⛔ LINE KEYS ARE STRICT, exactly as on create_recurring_invoice_draft: a key this schema does not list is REFUSED BY NAME and NOTHING is filed."
  2. Changed1 schema field changed
    • addedInput schema / properties / proposed / properties / lines / items / properties / unitPrice / description
      Added value: +"Two decimals at most (whole sen, or whole cents in another currency); put a discount or tax in its own field, never folded into the price."
  3. Changed4 schema fields changed
    • changedInput schema / properties / proposed / properties / lines / description
      Previous value: -"WHOLE-REPLACE. Send every line the schedule should bill from now on, not just the changed ones — a partial set would silently drop the rest."New value: +"WHOLE-REPLACE. Send every line the schedule should bill from now on, not just the changed ones — a partial set would silently drop the rest. ⛔ LINE KEYS ARE STRICT, exactly as on create_recurring_invoice_draft: a key this schema does not list is REFUSED BY NAME and NOTHING is filed."
    • addedInput schema / properties / proposed / properties / lines / items / additionalProperties
      Added value: +false
    • addedInput schema / properties / proposed / properties / lines / items / properties / description / description
      Added value: +"The line text as PRINTED on the document, when it says more than the product name does — a size, a grade, a job reference, a period covered. It rides onto the posted line and prints on the customer's copy, so send what the paper says rather than a tidier phrasing of your own. Leave it out when the product name already says it. This is TEXT, not a field: Taokeh has no column for a dimension, a grade or a variant, so anything of that kind belongs here."
    • addedInput schema / properties / proposed / properties / lines / minItems
      Added value: +1
  4. Added

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/safety flags; the description goes far beyond by disclosing the draft-then-human-approve flow, that approval itself can move the billing date, whole-replace line semantics, silent dropping of already-matching fields, refusal of empty diffs, and no-name-fallback behavior. This is rich behavioral context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical constraint ('FILES A PENDING DRAFT ONLY') is front-loaded in caps before any detail, and each subsequent sentence carries a distinct gotcha. It is dense and long, but almost every sentence earns its place; a modest trim of the prohibition section would sharpen it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-object mutation tool with no output schema, the description covers the write path (draft, diff review, approval), refusals, edge cases (billing-date drift, line replacement, dedup), and error handling. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds meaning the schema does not: why recurringId requires the real id (free-text titles, duplicate schedules for one customer), that proposed should carry only changed fields, how lines is whole-replace, and the reversible-vs-one-way distinction for status. This is genuine cross-parameter semantics rather than a restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Propose changes to a recurring invoice ALREADY set up in Taokeh') and enumerates the change types it handles — price rise, quantity, end date, cadence, pausing. It is immediately distinguishable from create_recurring_invoice_draft (creation) and create_credit_note_draft (past invoices), which it names explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when and when-not, with alternatives named by name: use create_credit_note_draft for a wrong past invoice, loop for a multi-schedule sweep, propose 'paused' instead of 'ended'. Four hard exclusions are spelled out (issueMode auto, status ended, MFRS 15 spreading, already-issued invoices), which is exactly the routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources