Skip to main content
Glama

Quote Delivery

quote_delivery
Destructive

Get a usage estimate for delivering an audience before creating billable work. A fresh quote creates a pending quote record and replaces the audience current quote reference; it does not purchase or deliver records. Returns TWO cost figures: cost_estimate is the license-aware expected charge (identities this audience already holds an active 12-month license for elsewhere are excluded from the billable count), and max_cost_estimate is the worst-case ceiling assuming nothing is pre-licensed — always quote max_cost_estimate as the ceiling and cost_estimate as the expected price when license_pricing.status is "live" or "cached"; if license_pricing.status is "unavailable", cost_estimate equals max_cost_estimate exactly and only one number needs mentioning. Key response fields: already_delivered (true = this exact delivery is free), cost_estimate.total_cost / max_cost_estimate.total_cost (total USD), cost_estimate.base_cost / match_cost / field_cost / destination_cost (breakdown; match_cost is the one-time deferred file-match component, never license-discounted), billing_count (records that will be billed), sufficient_balance, shortfall. Call this before deliver_audience so the user can review cost. Requires 'discovery' scope.

Input Schema

NameRequiredDescriptionDefault
field_listNoCustom field list (alternative to template_id)
audience_idYesAudience to quote
destinationYesActive delivery destination; partner pushes are not yet available
template_idNoEnrichment template ID
output_formatNoRequested download artifact format.
output_compressionNoRequested download compression. gzip supports csv/json/jsonl; Avro uses native DEFLATE.none

Output Schema

NameRequiredDescriptionDefault
guidanceNoInterpretation or recovery guidance for this result
shortfallYes
count_unitNo
page_countNoNumber of objects on this page, not the organization total
audience_idYes
count_stateNoUnknown means no count; available does not guarantee freshness. Recount for a current value.
destinationYes
next_actionsNoSuggested next calls using returned IDs and available scopes. Not executed and not user consent.
cost_estimateYesExpected license-aware charge in USD
money_displayNoCurrency amounts formatted once from source paths ending in _cents. Use verbatim; do not divide again. Null/missing source amounts are omitted, not zero.
license_pricingYes
population_inputNoPopulation input used for the preview; IDs refer to their current saved definitions
already_deliveredYes
max_cost_estimateYesWorst-case charge ceiling in USD
sufficient_balanceYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "already_delivered": {
      +      "type": "boolean"
      +    },
      +    "audience_id": {
      +      "type": "string"
      +    },
      +    "cost_estimate": {
      +      "additionalProperties": {},
      +      "description": "Expected license-aware charge in USD",
      +      "properties": {
      +        "base_cost": {
      +          "type": "number"
      +        },
      +        "billing_count": {
      +          "type": "number"
      +        },
      +        "destination_cost": {
      +          "type": "number"
      +        },
      +        "field_cost": {
      +          "type": "number"
      +        },
      +        "match_cost": {
      +          "type": "number"
      +        },
      +        "total_cost": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "base_cost",
      +        "match_cost",
      +        "field_cost",
      +        "destination_cost",
      +        "total_cost",
      +        "billing_count"
      +      ],
      +      "type": "object"
      +    },
      +    "count_state": {
      +      "description": "Unknown means no count; available does not guarantee freshness. Recount for a current value.",
      +      "enum": [
      +        "unknown",
      +        "available"
      +      ],
      +      "type": "string"
      +    },
      +    "count_unit": {
      +      "const": "records",
      +      "type": "string"
      +    },
      +    "destination": {
      +      "type": "string"
      +    },
      +    "guidance": {
      +      "description": "Interpretation or recovery guidance for this result",
      +      "type": "string"
      +    },
      +    "license_pricing": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "status": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status"
      +      ],
      +      "type": "object"
      +    },
      +    "max_cost_estimate": {
      +      "additionalProperties": {},
      +      "description": "Worst-case charge ceiling in USD",
      +      "properties": {
      +        "base_cost": {
      +          "type": "number"
      +        },
      +        "billing_count": {
      +          "type": "number"
      +        },
      +        "destination_cost": {
      +          "type": "number"
      +        },
      +        "field_cost": {
      +          "type": "number"
      +        },
      +        "match_cost": {
      +          "type": "number"
      +        },
      +        "total_cost": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "base_cost",
      +        "match_cost",
      +        "field_cost",
      +        "destination_cost",
      +        "total_cost",
      +        "billing_count"
      +      ],
      +      "type": "object"
      +    },
      +    "money_display": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "description": "Currency amounts formatted once from source paths ending in _cents. Use verbatim; do not divide again. Null/missing source amounts are omitted, not zero.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "next_actions": {
      +      "description": "Suggested next calls using returned IDs and available scopes. Not executed and not user consent.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "arguments": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "reason": {
      +            "type": "string"
      +          },
      +          "tool": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "tool",
      +          "arguments",
      +          "reason"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "page_count": {
      +      "description": "Number of objects on this page, not the organization total",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "population_input": {
      +      "additionalProperties": {},
      +      "description": "Population input used for the preview; IDs refer to their current saved definitions",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "shortfall": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "sufficient_balance": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "audience_id",
      +    "destination",
      +    "already_delivered",
      +    "cost_estimate",
      +    "max_cost_estimate",
      +    "sufficient_balance",
      +    "shortfall",
      +    "license_pricing"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Discloses non-obvious side effects beyond the annotations — a fresh quote creates a pending quote record and replaces the audience's current quote reference — which is consistent with destructiveHint=true and idempotentHint=false. It also explains license-aware billing exclusions, the match_cost exception, behavior when license_pricing.status is 'unavailable', and the required 'discovery' scope.

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 purpose and the pre-delivery rule, then layers cost semantics; every clause carries meaning. It is dense but long, and some of the enumerated response fields would be available in the output schema, which costs a point on conciseness.

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?

Covers when to call, side effects, billing semantics, edge cases (licensing unavailable, already_delivered), and the OAuth scope requirement. For a quote tool with a destructive annotation, this leaves nothing an agent needs to know before invoking it.

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

Parameters3/5

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

Schema description coverage is 100%, so parameter documentation is already handled by the schema, and the description adds nothing about field_list, template_id, output_format, or output_compression. Baseline 3 applies since the schema does the heavy lifting here.

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 ('Get a usage estimate for delivering an audience') plus a scope qualifier ('before creating billable work'). It explicitly separates itself from the sibling deliver_audience by noting it does not purchase or deliver records.

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?

Gives an explicit ordering rule: 'Call this before deliver_audience so the user can review cost.' The alternative (actually delivering) is named and the condition selecting this tool is unambiguous.

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