Skip to main content
Glama

openapi_v2_markets_history

  1. Function

Return monthly historical profiles of category markets, with full-market and leading-sample Listing counts and sales totals, plus sample means for price, star rating, rating count, monthly unit sales and monthly revenue.

  1. Use cases

Track Listing counts, monthly unit sales, monthly revenue and sample prices and ratings across snapshots; compare market size and sample performance across months to support seasonality and longer-term trend research.

  1. Example

{"categoryIds":["679399011"],"dateFrom":"2026-07-01","dateTo":"2026-09-30","sampleType":"unitSalesTop100"}

  1. Data range

US marketplace only. Each category is analyzed independently; product coverage can include or exclude descendants. Missing metrics remain null. Returns published month-end snapshots within the requested date range in chronological order, with full-market totals and leading-sample sales, price and rating statistics. Missing dates are not filled. Does not include new-product or distribution history. Before querying, balance must cover the distinct requested market count at the endpoint unit price; this check does not deduct credits. Billing counts distinct returned markets (site and category ID); empty data costs zero. Price and rating means in this response exclude Listings whose corresponding metric is null; zero values participate. Different means can have different denominators; no valid values returns null. The leading sample is selected independently at each month-end using that snapshot’s monthly unit sales or revenue; membership may change between months. Changes therefore do not represent growth of a fixed cohort.

Migration from the previous history response

This agent-only endpoint intentionally upgrades its response on the existing path and MCP tool ID. Only legacy request arguments are normalized; response readers must migrate.

Request example (still accepted):

{"categoryId":"679399011","startDate":"2026-07-01","endDate":"2026-09-30","sampleType":"byRevenue100"}

Canonical request:

{"categoryIds":["679399011"],"dateFrom":"2026-07-01","dateTo":"2026-09-30","sampleType":"revenueTop100"}

Previous response reader

Current response reader

data.points[]

Iterate data[], then each series' points[]

data.categoryId

series.category.id

point.date

point.date (unchanged from the published history point)

point.marketTotal

point.marketSize

point.marketSample

point.sampleProfile

skuCount, monthlySales, monthlyRevenue inside totals

productCount, monthlySales, monthlyRevenue

data.resolvedDateFrom / data.resolvedDateTo

First / last points[].date in each nonempty series

data.dateFrom / data.dateTo

Retain the requested range in the caller

Keep each series separate: category paths and currencies may change over time. An empty response is data=[]; do not assume a first series or point. Listing counts group variations under the same parent, so old SKU counts and averages are not numerically interchangeable. Unsupported new-product history fields have no replacement. Refresh cached response schemas before consuming this release.

Input Schema

NameRequiredDescriptionDefault
dateToYesInclusive end date for monthly history (YYYY-MM-DD); the boundary need not be a month end and must not precede dateFrom.
dateFromYesInclusive start date for monthly history (YYYY-MM-DD); the boundary need not be a month end.
sampleTypeNounitSalesTop100 selects up to 100 Amazon Listings by monthly unit sales; revenueTop100 selects up to 100 by monthly revenue. Concentration analysis uses the same metric to rank products, brands or sellers and calculate their sample shares.unitSalesTop100
categoryIdsYesReal category IDs; each ID selects an independent market.
marketplaceNoMarketplace code; currently US only.US
includeDescendantCategoryProductsNotrue includes products from this category and its descendants; false counts only directly assigned products. Controls product statistics, not market-row selection.

Output Schema

NameRequiredDescriptionDefault
dataNoResponse data payload
metaYesResponse metadata including pagination info
errorNoError details if request failed
successNoWhether the request was successful

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / dateFrom / description
      Previous value: -"Inclusive start date for actual published historical snapshots (YYYY-MM-DD)."New value: +"Inclusive start date for monthly history (YYYY-MM-DD); the boundary need not be a month end."
    • changedInput schema / properties / dateTo / description
      Previous value: -"Inclusive end date for actual published historical snapshots (YYYY-MM-DD); must not precede dateFrom."New value: +"Inclusive end date for monthly history (YYYY-MM-DD); the boundary need not be a month end and must not precede dateFrom."
    • changedInput schema / properties / sampleType / description
      Previous value: -"unitSalesTop100 selects up to 100 Listings by monthly unit sales; revenueTop100 selects up to 100 by monthly revenue."New value: +"unitSalesTop100 selects up to 100 Amazon Listings by monthly unit sales; revenueTop100 selects up to 100 by monthly revenue. Concentration analysis uses the same metric to rank products, brands or sellers and calculate their sample shares."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "ErrorDetail": {
      +      "description": "Error detail structure.",
      +      "properties": {
      +        "code": {
      +          "description": "Error code identifier",
      +          "title": "Code",
      +          "type": "string"
      +        },
      +        "details": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Additional error details",
      +          "title": "Details"
      +        },
      +        "message": {
      +          "description": "Human-readable error message",
      +          "title": "Message",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "message"
      +      ],
      +      "title": "ErrorDetail",
      +      "type": "object"
      +    },
      +    "MarketHistoryCategory": {
      +      "properties": {
      +        "id": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Amazon category ID.",
      +          "title": "Id"
      +        },
      +        "idPath": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Real category IDs aligned with path, ordered from root to current category.",
      +          "title": "Idpath"
      +        },
      +        "path": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Category names ordered from the root through the current category.",
      +          "title": "Path"
      +        }
      +      },
      +      "title": "MarketHistoryCategory",
      +      "type": "object"
      +    },
      +    "MarketHistoryFact": {
      +      "properties": {
      +        "date": {
      +          "anyOf": [
      +            {
      +              "format": "date",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Published month-end snapshot date (YYYY-MM-DD); identifies the historical month, not a product launch date.",
      +          "title": "Date"
      +        },
      +        "marketSize": {
      +          "anyOf": [
      +            {
      +              "$ref": "#/$defs/MarketHistorySales"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Full-market Listing count, monthly unit sales and monthly revenue at this historical snapshot."
      +        },
      +        "sampleProfile": {
      +          "anyOf": [
      +            {
      +              "$ref": "#/$defs/MarketHistorySampleProfile"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Sample Listing count, monthly unit sales and monthly revenue, plus per-Listing means for price, star rating, rating count, monthly unit sales and monthly revenue."
      +        }
      +      },
      +      "title": "MarketHistoryFact",
      +      "type": "object"
      +    },
      +    "MarketHistorySales": {
      +      "properties": {
      +        "monthlyRevenue": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Monthly revenue total for this statistics block, in USD. marketSize refers to the full market; sampleProfile refers to the selected sample. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Monthlyrevenue"
      +        },
      +        "monthlySales": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Monthly unit-sales total for this statistics block. marketSize refers to the full market; sampleProfile refers to the selected sample. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Monthlysales"
      +        },
      +        "productCount": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Listing count in this statistics block. marketSize refers to the full market; sampleProfile refers to the selected sample.",
      +          "title": "Productcount"
      +        }
      +      },
      +      "title": "MarketHistorySales",
      +      "type": "object"
      +    },
      +    "MarketHistorySampleProfile": {
      +      "properties": {
      +        "avgMonthlyRevenue": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Average monthly revenue per Amazon Listing in the selected sample at this historical snapshot, in USD. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Avgmonthlyrevenue"
      +        },
      +        "avgMonthlySales": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Average monthly unit sales per Amazon Listing in the selected sample at this historical snapshot. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Avgmonthlysales"
      +        },
      +        "avgPrice": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Average 30-day prices across Amazon Listings in the selected sample at this historical snapshot, in USD. Excludes Listings whose corresponding metric is null; zeros participate. The denominator can differ from other means; no valid values returns null.",
      +          "title": "Avgprice"
      +        },
      +        "avgRating": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Average star ratings across Amazon Listings in the selected sample at this historical snapshot (0–5). Excludes Listings whose corresponding metric is null; zeros participate. The denominator can differ from other means; no valid values returns null.",
      +          "title": "Avgrating"
      +        },
      +        "avgRatingCount": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Average rating counts per Amazon Listing in the selected sample at this historical snapshot; not written-review counts. Excludes Listings whose corresponding metric is null; zeros participate. The denominator can differ from other means; no valid values returns null.",
      +          "title": "Avgratingcount"
      +        },
      +        "monthlyRevenue": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Monthly revenue total for this statistics block, in USD. marketSize refers to the full market; sampleProfile refers to the selected sample. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Monthlyrevenue"
      +        },
      +        "monthlySales": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Monthly unit-sales total for this statistics block. marketSize refers to the full market; sampleProfile refers to the selected sample. Sales cover the trailing 30 days at this data snapshot, not cumulative sales over a launch-age window or requested date range.",
      +          "title": "Monthlysales"
      +        },
      +        "productCount": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Listing count in this statistics block. marketSize refers to the full market; sampleProfile refers to the selected sample.",
      +          "title": "Productcount"
      +        }
      +      },
      +      "title": "MarketHistorySampleProfile",
      +      "type": "object"
      +    },
      +    "MarketHistorySeries": {
      +      "properties": {
      +        "category": {
      +          "anyOf": [
      +            {
      +              "$ref": "#/$defs/MarketHistoryCategory"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Category identity and hierarchy shared by this historical market series."
      +        },
      +        "currency": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Currency of monetary metrics; USD for the US marketplace.",
      +          "title": "Currency"
      +        },
      +        "includeDescendantCategoryProducts": {
      +          "anyOf": [
      +            {
      +              "type": "boolean"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "true includes products in this category and its descendants; false counts only directly assigned products.",
      +          "title": "Includedescendantcategoryproducts"
      +        },
      +        "points": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "$ref": "#/$defs/MarketHistoryFact"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Actual published snapshots ordered by date ascending; missing dates are not filled.",
      +          "title": "Points"
      +        },
      +        "sampleType": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "unitSalesTop100",
      +                "revenueTop100"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "At each historical month-end, unitSalesTop100 selects up to 100 Listings by that snapshot’s monthly unit sales; revenueTop100 selects them by monthly revenue. Membership can change each month; this does not track a fixed cohort.",
      +          "title": "Sampletype"
      +        },
      +        "site": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Amazon site, currently amazon.com.",
      +          "title": "Site"
      +        }
      +      },
      +      "title": "MarketHistorySeries",
      +      "type": "object"
      +    },
      +    "ResponseMeta": {
      +      "description": "Metadata for API responses.\n\nCredit fields follow the ADR-0003 parallel-fields strategy (Option 3):\n- `credits_remaining` / `credits_consumed` (int): legacy fields, rounded\n  to whole credits, kept for zero-breaking-change to existing SDK clients.\n- `credits_remaining_exact` / `credits_consumed_exact` (float): new\n  precision-aware fields for clients that opt in to decimal credits.\n\nSee ADR-0003 decision 5 and the §8 deprecation timeline.\n\nTODO(2026-11, ADR-0003 §8 +6mo): mark `credits_remaining` /\n`credits_consumed` as `deprecated=True` in their Field() definitions\nand announce in customer changelog.\nTODO(2027-05, ADR-0003 §8 +12mo): remove the legacy int fields via a\nmajor-version bump of the OpenAPI surface.",
      +      "properties": {
      +        "creditsConsumed": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Credits consumed by this request (rounded; see creditsConsumedExact for precise value)",
      +          "title": "Creditsconsumed"
      +        },
      +        "creditsConsumedExact": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Credits consumed by this request, precise to 1 decimal place",
      +          "title": "Creditsconsumedexact"
      +        },
      +        "creditsRemaining": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Remaining API credits (rounded to whole credits; see creditsRemainingExact for precise value)",
      +          "title": "Creditsremaining"
      +        },
      +        "creditsRemainingExact": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Remaining API credits, precise to 1 decimal place",
      +          "title": "Creditsremainingexact"
      +        },
      +        "page": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Current page number",
      +          "title": "Page"
      +        },
      +        "pageSize": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Number of records per page",
      +          "title": "Pagesize"
      +        },
      +        "requestId": {
      +          "description": "Unique request identifier",
      +          "title": "Requestid",
      +          "type": "string"
      +        },
      +        "timestamp": {
      +          "description": "Response timestamp in ISO 8601 format",
      +          "title": "Timestamp",
      +          "type": "string"
      +        },
      +        "tokensUsage": {
      +          "anyOf": [
      +            {
      +              "$ref": "#/$defs/TokensUsage"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Provider token-usage block — populated on terminal video polls only, null on every non-video endpoint. See TokensUsage for its fields."
      +        },
      +        "total": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Total number of records",
      +          "title": "Total"
      +        },
      +        "totalPages": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Total number of pages",
      +          "title": "Totalpages"
      +        }
      +      },
      +      "required": [
      +        "requestId",
      +        "timestamp"
      +      ],
      +      "title": "ResponseMeta",
      +      "type": "object"
      +    },
      +    "TokensUsage": {
      +      "additionalProperties": true,
      +      "description": "Provider token-usage block surfaced on `meta.tokensUsage`.\n\nModeled fields use camelCase aliases to match the V2 envelope\nconvention (`requestId`, `creditsRemaining`, `tokensUsage` itself);\nthe upstream snake_case names (`completion_tokens`, `total_tokens`)\nare still accepted on input via `populate_by_name=True` so the\nBytePlus raw `usage` dict can be passed to `model_validate()`\nunchanged.\n\nToken *counts* only — never a USD amount; the customer derives USD\ncost from these counts times the published per-token rate.\n`extra=\"allow\"` keeps any additional upstream usage field reaching\nthe customer without a redeploy (those extras pass through under\nwhatever name the provider sent them with).",
      +      "properties": {
      +        "completionTokens": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Tokens the provider generated for the task — the billing basis. Multiply by the published per-token rate for the (model, resolution, input-video) combination to get the USD cost. Present on a successful terminal poll.",
      +          "title": "Completiontokens"
      +        },
      +        "totalTokens": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Total tokens attributed to the task (input + output). For current video models this equals `completionTokens`; may be absent if the provider does not report it.",
      +          "title": "Totaltokens"
      +        }
      +      },
      +      "title": "TokensUsage",
      +      "type": "object"
      +    }
      +  },
      +  "examples": [],
      +  "properties": {
      +    "data": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/MarketHistorySeries"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Response data payload",
      +      "title": "Data"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ErrorDetail"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Error details if request failed"
      +    },
      +    "meta": {
      +      "$ref": "#/$defs/ResponseMeta",
      +      "description": "Response metadata including pagination info"
      +    },
      +    "success": {
      +      "default": true,
      +      "description": "Whether the request was successful",
      +      "title": "Success",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "meta"
      +  ],
      +  "title": "OpenApiResponse[list[MarketHistorySeries]]",
      +  "type": "object"
      +}
  2. Changed8 schema fields changed
    • removedInput schema / properties / categoryId
      Removed value: -{
      -  "description": "Amazon category node ID to analyze.",
      -  "minLength": 1,
      -  "title": "categoryId",
      -  "type": "string"
      -}
    • addedInput schema / properties / categoryIds
      Added value: +{
      +  "description": "Real category IDs; each ID selects an independent market.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "minItems": 1,
      +  "title": "categoryIds",
      +  "type": "array"
      +}
    • changedInput schema / properties / dateFrom / description
      Previous value: -"First date of the requested history range (YYYY-MM-DD), inclusive."New value: +"Inclusive start date for actual published historical snapshots (YYYY-MM-DD)."
    • changedInput schema / properties / dateTo / description
      Previous value: -"Last date of the requested history range (YYYY-MM-DD), inclusive; must be on or after dateFrom."New value: +"Inclusive end date for actual published historical snapshots (YYYY-MM-DD); must not precede dateFrom."
    • changedInput schema / properties / includeDescendantCategoryProducts / description
      Previous value: -"Whether market metrics include products assigned to descendant category nodes; defaults to true."New value: +"true includes products from this category and its descendants; false counts only directly assigned products. Controls product statistics, not market-row selection."
    • changedInput schema / properties / marketplace / description
      Previous value: -"Amazon marketplace; currently US only."New value: +"Marketplace code; currently US only."
    • changedInput schema / properties / sampleType / description
      Previous value: -"How to select the Top 100 products within the category scope: by estimated monthly unit sales or by estimated monthly revenue."New value: +"unitSalesTop100 selects up to 100 Listings by monthly unit sales; revenueTop100 selects up to 100 by monthly revenue."
    • changedInput schema / required
      Previous value: -[
      -  "categoryId",
      -  "dateFrom",
      -  "dateTo"
      -]New value: +[
      +  "categoryIds",
      +  "dateFrom",
      +  "dateTo"
      +]
  3. Added

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full load and does so richly: balance must cover distinct requested market count before querying (a non-deducting check), billing counts distinct returned markets, empty data costs zero, missing metrics return null, missing dates are not filled, results are chronological, US-only, and the leading sample is reselected each month-end so membership changes are not a fixed cohort. It even warns that means use different denominators and that zero values participate.

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?

Content is front-loaded with Function and Use cases, then example and constraints, which is good structure and nearly every sentence adds operational value. The long 'Migration from the previous history response' table, however, is mostly reader-migration guidance that is tangential to selecting and calling the tool in a fresh session, adding bulk that a new agent does not need.

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 multi-param, billed, time-series analytics tool, the description covers the key behaviors an agent needs: marketplace scope, date semantics, sample selection logic, null handling, empty-response shape (data=[]), billing precheck, and return ordering. Because an output schema exists, it does not need to restate return values, and the extra response-shape notes are bonus rather than gaps.

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, but the description adds a runnable example and, importantly, documents legacy argument names (categoryId/startDate/endDate/byRevenue100) that are normalized to the canonical categoryIds/dateFrom/dateTo/revenueTop100. It also clarifies 'each category is analyzed independently; product coverage can include or exclude descendants,' reinforcing the includeDescendantCategoryProducts semantics beyond the schema.

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 Function section states a specific verb and resource: 'Return monthly historical profiles of category markets' and enumerates the metrics (Listing counts, sales totals, sample means for price, rating, ratings count, unit sales, revenue). This clearly distinguishes it from snapshot siblings like openapi_v2_markets_profile and from openapi_v2_products_history, which operates on products not categories.

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?

The Use cases section gives concrete contexts (tracking counts/sales/revenue across snapshots, comparing market size across months for seasonality/trend research) and the Data range section excludes new-product and distribution history. It stops short of explicitly naming an alternative sibling (e.g., 'use markets_profile for the current snapshot') or stating hard when-not-to-use conditions beyond those exclusions.

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