Skip to main content
Glama

Get sales figures

get_sales_figures
Read-onlyIdempotent

Get the sales figures of a series. Without region_code it returns the overview {series_id, url, region_totals, lifetime, coverage, regions}; with region_code it returns that region year by year {series_id, url, region_code, region_totals, coverage, cells, figures, next_year_from}. region_totals sum years within one country only, so never add across countries or add a parent region to its children. lifetime rows are cumulative or per-generation totals that must not be added to the grid. With a model_id, region_totals and lifetime are those of that generation; otherwise region_totals are the series totals and lifetime is the whole series. coverage rows are the blanks that were checked and found empty, with the reason; a region with coverage rows and no figures was researched, not skipped. regions lists the region codes that have figures or checked blanks, with the first and last year; pass one of them as region_code, since any other code is an error. cells are the grid a figure may be summed into, one per series, country, calendar year and metric; a null units on a cell means the sources disagree, never zero sold. figures are the rows as published, each with units, the source's own wording, the period, source_url and a verbatim source_excerpt; match them to cells by region_code, year and metric. A model_id narrows figures to that generation, while cells stay series-wide because allocating a year to a generation needs the whole series. Years are cut to fit the response size, never splitting a year; when next_year_from is not null, call again with year_from set to it. An empty list means not researched yet, never zero.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
model_idNoGeneration (model) id (a UUID from search_vehicles). Takes precedence over series_id when both are given.
series_idNoSeries id (a UUID from search_vehicles).
year_fromNoFirst calendar year to return for region_code; pass next_year_from from the previous response. Omit to start from the earliest year.
region_codeNoA region code from regions in the overview, such as JP (upper case, as listed). Omit to get the overview.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / region_code
      Added value: +{
      +  "description": "A region code from regions in the overview, such as JP (upper case, as listed). Omit to get the overview.",
      +  "type": "string"
      +}
    • addedInput schema / properties / year_from
      Added value: +{
      +  "description": "First calendar year to return for region_code; pass next_year_from from the previous response. Omit to start from the earliest year.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Despite annotations indicating read-only, idempotent, and non-destructive behavior, the description goes far beyond this to clarify critical nuances: that region_totals must never be summed across countries or parents, that lifetime rows are cumulative and must not be added, that null units mean disagreement not zero, and that empty lists mean 'not researched yet' not zero. It also explains the semantics of coverage rows, preventing misinterpretation. This is exceptional behavioral transparency.

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 description is quite long, but every sentence carries necessary semantic weight—there is no fluff. The structure is front-loaded with the primary return format and then dives into specific nuances. It could be slightly more concise by grouping related concepts (e.g., all warnings about summing), but the density is justified given the complexity. It is structured logically, moving from output overview to parameter-specific details.

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 read-only tool with no output schema, the description is remarkably complete. It explains all output fields, their semantics, pitfalls, and how to interact with the tool across multiple calls (pagination). It covers error conditions (invalid region_code), edge cases (null units, empty lists), and the interaction between parameters (model_id narrowing). Nothing an agent needs to correctly invoke and interpret results 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?

The input schema has 100% coverage for parameters, so the baseline is 3. The description adds significant value by explaining the relationship between parameters (e.g., model_id takes precedence over series_id, region_code must come from the regions list, year_from is used for pagination with next_year_from). It also clarifies that only one of series_id or model_id should be passed, which is not explicitly in the schema beyond the description field. However, it doesn't elaborate on the format of year_from beyond what's in the schema (e.g., is it inclusive?), so a small gap remains.

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 clearly states the tool's purpose: to get sales figures for a series, with two distinct modes (overview vs. region-specific) based on presence of region_code. It explicitly details the output structure for each mode, which distinguishes it from siblings like get_vehicle or search_vehicles, which are about vehicle metadata, not sales data.

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?

The description provides explicit usage guidance: when to omit region_code (overview) vs. include it, how to handle pagination via next_year_from, and emphasizes that only region codes from the regions list are valid, as others cause errors. It also implies when to use other tools by referencing search_vehicles for UUIDs, but does not explicitly say 'use X instead of this'—though the clear domain separation makes that implicit.

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