Skip to main content
Glama

Benchmark a price

price_benchmark
Read-only

Judges a specific price or quote against the closest comparable products by what they do (no fixed categories), in the buyer's tier and pricing unit. Use this when asked whether a price is fair or what a capability typically costs, e.g. 'Is $49/month reasonable for an AI SDR for a small team?'. Pass the capability as query (aliases: task, niche). Returns observed prices of comparable products — median, p25/p75, range, mean, stdev and n — split by delivery type (agent | mcp) and buyer tier (individual / pro / team_sme / enterprise), never blended across incompatible pricing units. A benchmark describes an observed sample; it is not a quote and not evidence of willingness to pay. Set provider_type and buyer_tier when known. If nothing priced is close it returns resolved:false with a note, never an invented figure. Use get_group_fair_price instead for a broad group-wide guide; find_market for who competes.

Input Schema

NameRequiredDescriptionDefault
taskNoAlias of `query` (same text).
limitNoObservations per page in full mode (1–100, default 50).
nicheNoLegacy alias of `query`, kept for older clients — prefer `query`.
queryNoThe capability to benchmark, in natural language, e.g. 'AI code review' or 'supplier invoice reconciliation'. Preferred input.
offsetNoPaging offset over the selected observations in full mode.
sectorNoSector name, e.g. 'legal' (ignored if a query is given)
currencyNoCurrency of proposed_price (ISO code, default USD).
buyer_tierNoBuyer tier being priced. Set when the user describes who is buying (an individual, a professional, a team/SME, or an enterprise). An individual licence must never be represented by the SME or enterprise price.
cohort_refNoOptional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call (its cohort_ref), instead of re-selecting the market from new wording.
commitmentNoBilling commitment of proposed_price (default monthly).
request_refNoOptional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref.
pricing_unitNoBilling unit the benchmark is FOR (1.17.0: honoured). Selects the comparable observations; units are never converted into one another, and a thin unit returns its observations and the gap — never a flat-monthly substitute. A query such as 'cost per support ticket' sets it when omitted.
provider_typeNoDelivery type being priced. Set when the user says provider, MCP or API. Omit (or 'all') to get the per-type matrix instead of a blended figure. 'api' is recognised but not yet a separate commercial cohort (folded into provider).
response_modeNo'summary' (default): the selected benchmark with its top observations. 'full': every included observation (paged), with plan, native price, unit, commitment, source and observed date.
proposed_priceNoOptional (sellers): a proposed price to position against the selected comparable offers (same unit; currency below). Returns where it sits in the observed range; a percentile only with ≥5 comparable providers. A market reference, not an optimal price.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "JSON result; identical to the text content block.",
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / request_ref
      Added value: +{
      +  "description": "Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref.",
      +  "type": "string"
      +}
  3. Changed9 schema fields changed
    • addedInput schema / properties / cohort_ref
      Added value: +{
      +  "description": "Optional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call (its cohort_ref), instead of re-selecting the market from new wording.",
      +  "type": "string"
      +}
    • addedInput schema / properties / commitment
      Added value: +{
      +  "description": "Billing commitment of proposed_price (default monthly).",
      +  "enum": [
      +    "monthly",
      +    "annual"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / currency
      Added value: +{
      +  "description": "Currency of proposed_price (ISO code, default USD).",
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Observations per page in full mode (1–100, default 50).",
      +  "type": "number"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Paging offset over the selected observations in full mode.",
      +  "type": "number"
      +}
    • changedInput schema / properties / pricing_unit / description
      Previous value: -"Optional pricing unit to hold constant (e.g. 'flat', 'per_seat', 'per_agent'). Incompatible units are never combined."New value: +"Billing unit the benchmark is FOR (1.17.0: honoured). Selects the comparable observations; units are never converted into one another, and a thin unit returns its observations and the gap — never a flat-monthly substitute. A query such as 'cost per support ticket' sets it when omitted."
    • addedInput schema / properties / pricing_unit / enum
      Added value: +[
      +  "flat",
      +  "per_seat",
      +  "per_agent",
      +  "per_call",
      +  "per_ticket",
      +  "per_conversation",
      +  "per_resolution",
      +  "per_transaction",
      +  "per_invoice",
      +  "per_document",
      +  "per_page",
      +  "per_minute",
      +  "per_message",
      +  "per_email",
      +  "per_credit",
      +  "per_token",
      +  "percent_of_spend"
      +]
    • addedInput schema / properties / proposed_price
      Added value: +{
      +  "description": "Optional (sellers): a proposed price to position against the selected comparable offers (same unit; currency below). Returns where it sits in the observed range; a percentile only with ≥5 comparable providers. A market reference, not an optimal price.",
      +  "type": "number"
      +}
    • changedInput schema / properties / response_mode / description
      Previous value: -"'summary' (default): compact per-type/per-tier benchmark matrix. 'full': also returns the deprecated blended legacy block + AEPI index."New value: +"'summary' (default): the selected benchmark with its top observations. 'full': every included observation (paged), with plan, native price, unit, commitment, source and observed date."
  4. Changed3 schema fields changed
    • changedInput schema / properties / provider_type / enum
      Previous value: -[
      -  "provider",
      -  "mcp",
      -  "api",
      -  "all"
      -]New value: +[
      +  "agent",
      +  "mcp",
      +  "api",
      +  "all"
      +]
    • addedInput schema / properties / query
      Added value: +{
      +  "description": "The capability to benchmark, in natural language, e.g. 'AI code review' or 'supplier invoice reconciliation'. Preferred input.",
      +  "type": "string"
      +}
    • addedInput schema / properties / task
      Added value: +{
      +  "description": "Alias of `query` (same text).",
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / niche / description
      Previous value: -"Niche slug (or an approximate slug / natural-language name — it is resolved to the canonical niche), e.g. 'contract-review-automation'"New value: +"Legacy alias of `query`, kept for older clients — prefer `query`."
    • changedInput schema / properties / sector / description
      Previous value: -"Sector name, e.g. 'legal' (ignored if niche is given)"New value: +"Sector name, e.g. 'legal' (ignored if a query is given)"
  6. Changed4 schema fields changed
    • addedInput schema / properties / buyer_tier
      Added value: +{
      +  "description": "Buyer tier being priced. Set when the user describes who is buying (an individual, a professional, a team/SME, or an enterprise). An individual licence must never be represented by the SME or enterprise price.",
      +  "enum": [
      +    "individual",
      +    "pro",
      +    "team_sme",
      +    "enterprise",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / pricing_unit
      Added value: +{
      +  "description": "Optional pricing unit to hold constant (e.g. 'flat', 'per_seat', 'per_agent'). Incompatible units are never combined.",
      +  "type": "string"
      +}
    • addedInput schema / properties / provider_type
      Added value: +{
      +  "description": "Delivery type being priced. Set when the user says provider, MCP or API. Omit (or 'all') to get the per-type matrix instead of a blended figure. 'api' is recognised but not yet a separate commercial cohort (folded into provider).",
      +  "enum": [
      +    "provider",
      +    "mcp",
      +    "api",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / response_mode
      Added value: +{
      +  "description": "'summary' (default): compact per-type/per-tier benchmark matrix. 'full': also returns the deprecated blended legacy block + AEPI index.",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / niche / description
      Previous value: -"Niche slug as returned by market_gaps/compare_agents, e.g. 'contract-review-automation'"New value: +"Niche slug (or an approximate slug / natural-language name — it is resolved to the canonical niche), e.g. 'contract-review-automation'"
  8. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, non-destructive, closed-world), and the description adds substantial context beyond them: results are never blended across incompatible pricing units, split by delivery type and buyer tier, and fall back to resolved:false with a note rather than an invented figure. It also sets expectations that a benchmark is an observed sample, not a quote or willingness to pay.

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?

Purpose and trigger are front-loaded before the return-shape and caveat sentences, and each sentence carries information. Slightly long for a single tool definition, with some overlap between the return-format and sibling-routing sentences, but no filler.

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 15-parameter analytical tool with an output schema, the description covers input intent, segmentation logic, degenerate-case behavior, and the interpretive limits of the result. Nothing an agent needs to call it correctly or read the output sensibly 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 the baseline is 3; the description earns above that by explaining when to supply provider_type and buyer_tier and by naming the query aliases (task, niche). It does not add much for paging, currency, commitment, or cohort_ref, which the schema already handles.

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 — judges a price/quote against comparable products — with the comparison basis ('by what they do, no fixed categories') and scoping (buyer tier, pricing unit). It explicitly distinguishes itself from siblings by naming get_group_fair_price for group-wide guides and find_market for competitor discovery.

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 trigger ('Use this when asked whether a price is fair or what a capability typically costs') with a concrete example, plus named alternatives and the conditions that select them. Guidance on setting provider_type and buyer_tier when known further narrows invocation.

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