Skip to main content
Glama

Caribooks (QuickBooks Online)

Save the payout setup

save_payout_setup

Save the payout setup the user chose, by QuickBooks ids from get_payout_setup. It is checked first (the holding account must be a Bank account, each tax code must charge the platform's rates, the start date cannot be inside closed books) and waits for the user to confirm it on the Caribooks Payouts page; nothing is booked before that.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "holding_account_id": "<holding_account_id>",
      "bank_account_id": "<bank_account_id>",
      "fee_account_id": "<fee_account_id>",
      "vendor_id": "<vendor_id>",
      "exempt_tax_code_id": "<exempt_tax_code_id>",
      "fee_tax_code_id": "<fee_tax_code_id>",
      "items": "<items>",
      "tax_codes": "<tax_codes>",
      "start_date": "<start_date>",
      "mode": "<mode>"
    },
    "name": "save_payout_setup"
  }
}

Input Schema

NameRequiredDescriptionDefault
modeYeseach_sale or payout_summary, as the user chose.
itemsYesStripe product id → QuickBooks item id.
companyNoThe connected QuickBooks company (name, realm id, or connection id). Optional when only one company is connected.
customersNoStripe customer id → QuickBooks customer id, for customers email and name do not match.
tax_codesYesStripe tax combination key (from get_payout_setup) → QuickBooks tax code id.
vendor_idYesThe vendor on fee expenses, usually Stripe.
start_dateYesThe first day booked, YYYY-MM-DD.
fee_account_idYesThe expense account for Stripe's fees.
stripe_accountNoWhich Stripe account (its id, acct_…, or its name) when the company has several connected; the setup prompt names it. Optional when it has one.
bank_account_idYesThe bank account Stripe pays out to.
default_item_idNoThe item for a sale with no Stripe invoice whose description names no item in the books.
fee_tax_code_idYesThe purchase tax code for Stripe's own fees that Stripe charges sales tax on, so it is claimed back; null to book them whole.
exempt_tax_code_idYesThe tax code for card processing fees, which carry no sales tax (e.g. Exempt); null when the company has no sales tax.
holding_account_idYesThe Bank account that stands for the Stripe balance.
uninvoiced_tax_code_idNoThe sales tax code whose tax the amount of a sale with no Stripe invoice includes, as the user says; null when such sales are charged no tax.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / default_item_id / description
      Previous value: -"The item for a sale with no Stripe invoice to read products from."New value: +"The item for a sale with no Stripe invoice whose description names no item in the books."
    • addedInput schema / properties / stripe_account
      Added value: +{
      +  "description": "Which Stripe account (its id, acct_…, or its name) when the company has several connected; the setup prompt names it. Optional when it has one.",
      +  "type": "string"
      +}
    • addedInput schema / properties / uninvoiced_tax_code_id
      Added value: +{
      +  "description": "The sales tax code whose tax the amount of a sale with no Stripe invoice includes, as the user says; null when such sales are charged no tax.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed8 schema fields changed
    • removedInput schema / properties / default_item_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / default_item_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / exempt_tax_code_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / exempt_tax_code_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / fee_tax_code_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / fee_tax_code_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / tax_codes / additionalProperties / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / tax_codes / additionalProperties / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Added
  4. Removed
  5. Added

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say this is a non-destructive, open-world write; the description adds the important behavioral facts: pre-save validation rules (holding account must be a Bank account, tax codes must reflect platform rates, start date cannot fall inside closed books) and the deferred effect (nothing is booked until the user confirms on the Caribooks Payouts page). That materially changes how an agent should sequence and explain the call.

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?

Two compact sentences with the verb and resource front-loaded, followed by prerequisites and the confirmation caveat; nothing is filler. The second sentence is dense with three parenthetical validation rules, which is efficient but slightly harder to scan.

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

Completeness4/5

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

For a 15-parameter, nested-object write with no output schema, the description covers the critical unknowns: provenance of the ids, validation behavior, and the fact that the save is pending rather than immediately booked. It could go one step further and say what the call returns (e.g. a pending setup identifier or confirmation reference) since no output schema exists to cover it.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema carries most of the burden and the baseline is 3. The description still adds meaning beyond the schema by sourcing the QuickBooks ids from get_payout_setup and by tying concrete validation constraints to holding_account_id, tax_codes, and start_date, which is genuine semantic value.

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?

The description states a specific verb and resource ("Save the payout setup the user chose") and explicitly ties the input ids to their source, get_payout_setup, which cleanly separates it from the read-only sibling get_payout_setup/get_payout_status. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Usage is implied clearly: call this after get_payout_setup, once the user has chosen the setup, and the tool will then wait for confirmation on the Caribooks Payouts page. What's missing is an explicit when-not statement (e.g. do not call before the user has picked, or how to revise an already-confirmed setup), so it stops short of full routing guidance.

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