Skip to main content
Glama

Update quote

update_quote
DestructiveIdempotent

Update a quote: change its status (exactly draft → sent → accepted / lost), link an opportunity, or replace its line items. When you pass lines, the SERVER re-prices from the catalog and replaces the whole line set, recomputing the total — you never pass a price (catalog products price from unit_price_cents (integer cents) and pricing_mode on the product object; per_unit multiplies by quantity, flat charges once, a missing or unknown pricing_mode resolves to flat, a flat line with quantity > 1 is flagged). Discounts are percent only (per-line discount_pct and/or a quote-level discount_pct) and apply when you re-price, so pass lines to change a discount. Status- or opportunity-only edits don't re-price. A quote is a pre-commit artifact (invoicing and contracts happen elsewhere). Returns the updated quote, its priced lines and flags.

When to use: The user wants to change a quote that already exists.

Example: Mark Acme's quote as sent, and add 5 more units.

Input Schema

NameRequiredDescriptionDefault
idYesA uuid.
nameNoNew display name for the quote; replaces the stored header name.
linesNoAt least one item.
notesNoNew free-text notes for the quote header; replaces the stored notes and never affects pricing.
statusNoOne of: draft | sent | accepted | lost.
valid_untilNoMust match /^\d{4}-\d{2}-\d{2}$/.
discount_pctNoA number from 0 to 100.
opportunity_idNoOpportunity to link the quote to (must exist in this workspace); null clears the link, omitting leaves it unchanged.

Output Schema

NameRequiredDescriptionDefault
noteNo
quoteNo
updatedNo
guidanceNo
repricedNo
line_itemsNo
mixed_cadenceNo
missing_objectsNo
tier_validationsNo
annualized_total_centsNo
pricing_mode_validationsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • removedInput schema / properties / discount_pct / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / discount_pct / type
      Added value: +[
      +  "number",
      +  "string"
      +]
    • removedInput schema / properties / lines / items / properties / discount_pct / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / lines / items / properties / discount_pct / type
      Added value: +[
      +  "number",
      +  "string"
      +]
    • removedInput schema / properties / lines / items / properties / quantity / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / lines / items / properties / quantity / type
      Added value: +[
      +  "number",
      +  "string"
      +]
  2. Changed1 schema field changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
  3. Changed12 schema fields changed
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedOutput schema / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / guidance / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / guidance / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / line_items / items / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / line_items / items / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / pricing_mode_validations / items / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / pricing_mode_validations / items / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / quote / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / quote / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / tier_validations / items / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / tier_validations / items / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations by explaining that passing `lines` destroys and replaces the entire line set, that the server re-prices from the catalog, that prices are never supplied by the caller, and that status/opportunity-only edits skip repricing. It also scopes the artifact ('pre-commit; invoicing and contracts happen elsewhere') and describes the return payload.

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?

Front-loads the three mutation modes and puts the when-to-use and example at the end, with no filler. The pricing rules arrive in dense parenthetical clauses that take close reading, which keeps it from being maximally clean.

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 an 8-parameter, side-effecting mutation with an output schema, the description covers what changes, what gets replaced, how pricing is derived, what is returned, and what the object is not for. Nothing an agent needs to call it correctly is missing.

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 coverage is 100%, so baseline is 3, but the description adds real semantics the schema cannot: discounts only take effect via a re-price, quote-level vs per-line discount_pct, and the catalog pricing_mode rules (per_unit/flat/missing→flat, flat+qty>1 flagged). It does not touch name/notes/valid_until handling, so not a 5.

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?

Opens with a specific verb+resource and enumerates the three distinct mutation modes (status, opportunity link, line replacement). This clearly separates it from create_quote and from generic update_record.

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?

Explicit 'When to use' line plus a concrete example (mark sent, add units) gives a clear context. It does not name a sibling alternative (e.g. create_quote for new quotes) or state exclusions, so it stops short of a 5.

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