Skip to main content
Glama

Nova Amazon MCP Server

query_inventory

Read-only

Current FBA inventory / stock health per SKU, per ASIN or per stock region — the dedicated source (same as the app's stock page), so quantities and days-of-inventory match the dashboard. Answers: what's about to run out (oosRiskFlag / low daysOfInventory), dead stock (withoutSales=true), reorder priorities (low projectedDaysOfInventory), how much stock is on hand, and whether a merchant-fulfilled (FBM) backup exists. Each row has totalFbaAvailable, totalFbaIncoming (= shipped + receiving), totalFbaInventory (= available + fcTransfer + reserved), afnReservedQuantity, fcTransferQuantity (units moving between Amazon FCs), totalFbaSellable (= available + fcTransfer, Amazon's On-hand and the daysOfInventory base, as Amazon's On-hand days of supply), salesVelocity (units/day, 30d), daysOfInventory, projectedDaysOfInventory (= sellable + reserved + inbound + the AWD stock and the units inbound to AWD when the product has AWD data, ÷ velocity: the Inventory page's « Days of supply · after inbound », Amazon's Total days of supply basis), oosRiskFlag (under 35 of those days), totalUnits30d, plus AMAZON'S INVENTORY STATES (the Manage FBA Inventory report's own columns): totalFbaInboundWorking (shipment plans created, nothing shipped: units still at the seller), totalFbaInboundShipped, totalFbaInboundReceiving, totalFbaUnsellable (Amazon's Unfulfillable: damaged, defective, expired — never sells), totalFbaResearching (misplaced units Amazon is confirming, 60 days at most), totalFbaSupply (Amazon's Total inventory supply for FBA = available + fcTransfer + reserved + unsellable + researching, the page's Total at Amazon), inboundUnits (the inbound the includeWorking switch shapes) and unitCog (the COGS per unit in the answer's currency, the organization's primary currency unless you pass currency: the SKU's own, or on an ASIN row the average weighted by sellable units over the SKUs that have one; null = none) with unitCogSkus / unitCogSkusWithCog / unitCogUnitsWithCog (the SKUs behind the row, those priced, the sellable units they hold: read unitCog as partial when they differ), plus the FBM block: fbmAvailable (the quantity the seller declares on the SKU's FBM listing, active or not; null = no FBM listing; fbmIsPlaceholder flags ≥10k sentinels such as 99999), fbmListingStatus ('Active'; or, with includeInactiveFbm=true only, 'Inactive' when Amazon has suppressed every FBM listing of the row while units stay declared: fbmAvailable shows them, fbmListedQuantity counts them 0, so name the listing inactive before reading its units as stock for sale; null = no FBM listing. By default an inactive listing is not a listing of the read: its fbm* figures are null on the row and an FBM-only inactive SKU is not listed, as on the Inventory page unless the seller switches « Include inactive » on), fbmAvailablePoolGlobal (the SKU's quantity once across regions — a seller declares ONE quantity that every marketplace repeats), fbmListedQuantity (the FBM listed quantity, rule B 2026-10-23: the PRODUCT's declared quantity once per ASIN, read at the seller's home marketplace (the one where it keeps the most active FBM listings) since 2026-10-24: the largest over the product's SKUs there, 0 when the product is listed there with no active listing, and only for a product not listed there the largest over its other SKUs and regions; carried on one row and 0 on the product's other rows, so it is the one to total across SKUs and regions: a seller lists one product under several SKUs with the same figure on each, and summing them counted its warehouse once per SKU; an ASIN row's fbmAvailable is the largest of its SKUs in that region, never their sum), fbmListedStockValue (it × the latest COGS of its SKU), fbmSalesVelocity, fbmStockValue (in currency, like unitCog), fulfillmentChannel ('MFN' = an FBM-only SKU), plus the SUBSCRIBE & SAVE block from the daily offer snapshot: snsOffers / snsIneligibleOffers (the SKU's S&S offers in the region, and every one of them that is not ELIGIBLE, SUSPENDED included: an INELIGIBLE offer's subscriptions are cancelled, while a SUSPENDED offer is one Amazon has suspended from Subscribe & Save, and its existing subscriptions still count in Amazon's figures, so in snsActiveSubscriptions and the forecasts too; what Amazon does with their deliveries is not established, so state the suspension, never a consequence; query_subscribe_and_save section offers tells the two apart), snsActiveSubscriptions, snsForecastUnits30d / 60d / 90d (Amazon's projected subscriber deliveries — the demand a restock has to serve, to read next to daysOfInventory), snsDeliveries30dAtRisk (Amazon's at-risk count never includes a suspended offer), snsSnapshotDate; null = no S&S offer on that SKU (≠ 0 = an offer without subscribers). The rest of the block, from the offers themselves (null = no offer, or not built yet): snsEligibility, the row's state over its offers, the one rule of every Subscribe & Save surface (SUSPENDED when a suspended offer carries subscribers; else ELIGIBLE when an offer is ELIGIBLE or REPLENISHMENT_ONLY_ORDERING; else SUSPENDED when an offer is suspended at all; else INELIGIBLE when every offer is; at the ASIN grain over EVERY offer of the ASIN in the region, a SKU row over its own), snsSuspendedOffers and snsSuspendedOffersWithSubscribers (the suspended offers behind the row, and those of them that carry subscribers: an ELIGIBLE row with '1 suspended offer, no subscribers' is the difference), snsDeliveries30dPausedNonBuyable, snsDeliveries30dPausedPricing and snsDeliveries30dLowInventoryRisk (snsDeliveries30dAtRisk by Amazon's condition, in units: PAUSED because the offer is not buyable or for pricing, AT RISK still scheduled but threatened by low inventory; the three add up to snsDeliveries30dAtRisk), snsSellerFundedBaseDiscountMinPct / MaxPct and snsSellerFundedTieredDiscountMinPct / MaxPct (the discount the seller funds on the offers, in %, Amazon's base and tiered discounts: the lowest and the highest over the offers, equal when they agree, null when Amazon reported none); and in metadata, with includeReorder=true, snsPresent (any active subscription on the accounts and stock regions of the read, product filters aside; absent = not known) and snsUnstocked (the subscriptions on products with no stock row, and how many products). By default every figure is FBA-only and FBM-only SKUs are not listed; pass includeFbm=true to count the FBM stock in daysOfInventory / oosRiskFlag / the velocity and to list FBM-only SKUs — the 'days before a TOTAL stockout, FBM backup included' view. ⚠️ The non-*Pool quantities are per-SKU and MUST NOT be summed across SKUs (a shared FNSKU pool would double-count); use the *Pool columns when totalling. The answer carries currency, the code unitCog and fbmStockValue are in; page with limit and offset (pagination.total counts the rows). Tip: sortBy="daysOfInventory", sortOrder="asc" to surface what runs out first; sortBy="fulfillmentChannel", sortOrder="desc" lists the FBM-only SKUs first, then FBA SKUs that also carry an FBM listing (needs includeFbm=true for FBM-only SKUs to be listed at all). REPLENISHMENT (includeReorder=true): each row gains the reorder block — externalStock (units the seller holds outside Amazon, own warehouse / 3PL, per stock region; null = never entered), onOrderUnits / nextExpectedAt (open supplier orders), the resolved lead times and targets (leadTimeProductionDays, leadTimeToWarehouseDays, leadTimeTransitDays, targetDaysAmazon, targetDaysExternal, the inputs get_setup domain=stock reports), coverageWithExternal and coverageTotal (days of cover once the external stock, then the open orders, are shipped in), and recommendedOrderQty = max(0, salesVelocity × (lead times + targets) − everything already in the pipeline), rounded up to casePackQty, and priced as freight by recommendedOrderWeightKg / recommendedOrderVolumeCbm (kg and m³, from the package Amazon measured for the ASIN — packageWeightKg / packageVolumeCbm per unit; null when never measured, never 0); recoStatus says why it is null ('params_missing': the seller has not entered lead times / targets — nothing is assumed; 'no_velocity'; 'narf_echo'). needsReorder=true keeps the products to order now; paramsMissing=true the ones with no parameters. Attributes of the (region, ASIN): identical on every SKU of an ASIN, never sum them across SKUs. STOCK LOCATIONS (groupBy='stockRegion'): the Inventory page's "Stock locations" tiles instead of rows: one tile per stock region (territory) in data, and totals, the All locations tile. Each tile carries the units at Amazon by Amazon's states, deduplicated so that they add up across territories (a stock shared by several SKUs counts once, a NARF echo zero): unitsSellable (available + FC transfer, the units at Amazon the tile shows), unitsAvailable, unitsIncoming (shipped + receiving), unitsInboundWorking (shipment plans created, nothing shipped), unitsUnsellable, unitsResearching, unitsSupply (Amazon's total inventory supply, the page's Total at Amazon) and unitsFbm (the FBM listed quantity: what the seller declares on its FBM listings, counted once per product, read at the seller's home marketplace (the largest over the product's SKUs there; a product not listed there takes the largest over its other SKUs), in the territory of that row; declared, not counted by Amazon, so never in the totals nor in the shares); contribution (the territory's share of the sellable units, in %; the FBM listed quantity never enters it, whatever includeFbm); productCount (the products holding stock there); atRiskCount (the products flagged oosRiskFlag there, short even once the inbound lands: not additive across territories, All locations counts each product once); stockValue (Stock value = the sellable units × the latest COGS per unit, 0 without a COGS) and fbmStockValue (the FBM listed quantity × the latest COGS of its SKU), both in the answer's currency; and valuation, the stock at cost state by state that the tile's Stock value opens on (2026-10-22): { units, value } for sellable (= stockValue), reserved, inbound (shipped + receiving), unfulfillable, researching, awdOnhand, awdInbound, warehouse (the warehouse / 3PL counts at the product's COGS per unit; null without includeReorder) and fbm, each at the latest COGS per unit in currency, with unpricedUnits, the units no COGS prices, which no value counts. With includeReorder=true every tile adds unitsExternal (At warehouse / 3PL), unitsOnOrder (On order), needsReorderCount (the products to order now) and recommendedOrderUnits (Units to order). Every switch and filter of the rows applies, so the tiles describe the rows the same call lists; sortBy, sortOrder, limit and offset do not apply to tiles. stockRegions keeps the tiles of those territories, while totals stays All locations: the page's summary never narrows on a territory. VENDOR CENTRAL (1P): this tool reads Seller Central stock only; a call whose accounts all sell through Vendor Central is refused, since the stock at Amazon is then Amazon's: read it with query_metrics, channels=['VENDOR'], and the metrics whose basis is 'stock' in list_metrics.

Input Schema

NameRequiredDescriptionDefault
qNoText search, the page's search box: the SKU, the ASIN or the product name contains it (case-insensitive).
skusNo
tagsNo"Your Filters" tag IDS from list_tags (manual custom tags or predefined segmentations, Brand included) — a tag NAME is rejected.
asinsNo
limitNo
offsetNoRow offset for pagination (default 0): read past the first `limit` rows.
reasonNoOne sentence, ALWAYS IN ENGLISH (regardless of the conversation language), on WHY you are making this call — the user question or your analytical goal. Recorded so the seller can see how their data is used.
sortByNoField to rank by.
groupByNo'sku' (default) = a row per stock region × SKU; 'asin' = a row per stock region × ASIN, its SKUs folded; 'stockRegion' = the page's Stock locations tiles, one per stock region plus `totals` (All locations), units deduplicated so they add up across territories (see STOCK LOCATIONS).
accountsNoRestrict to a subset of your own seller account IDs (from list_accounts). Omit to include all your accounts. A brand/account name is accepted and resolved to its id when it matches one of your accounts unambiguously; a label that carries the id ("Brand (A1B2C3D4E5F6G)") resolves to that id.
currencyNoThe currency of the amounts of the answer: one of the organization's configured codes, its primary or any of its secondary currencies (e.g. "USD"). Omit for the organization's PRIMARY currency, never your display currency. Any other code is refused. The answer's `currency` names the currency served.
sortOrderNodesc (default) = highest first; asc = lowest first.
includeFbmNotrue = count the merchant-fulfilled (FBM) stock in daysOfInventory / oosRiskFlag / salesVelocity and list FBM-only SKUs; default false = FBA-only figures (the fbm* columns are returned either way).
oosRiskFlagNotrue = only items flagged at out-of-stock risk: under 35 days of supply after inbound (AWD included when the product has AWD data), the page's « Still short after inbound ».
marketplacesNoThe marketplaces of the read: country codes (US, DE), domains (amazon.de) or marketplace ids, as list_accounts gives them for each account. Keeps the stock that SERVES them, the page's rule: a row held in the marketplace's region, or selling there by an active offer while the product holds no stock of its own in that region (a UK row selling to Germany by EFN); the figures stay the region's, never split by country. Omit for every marketplace.
needsReorderNotrue = only products with recommendedOrderQty > 0 (products without parameters have no recommendation and never match).
stockRegionsNoStock region codes, as the rows spell them ('USA', 'EU_FBA', 'UK', 'Canada'…; 'US', 'EU', 'GB' are accepted).
withoutSalesNotrue = only stock that is NOT selling (dead stock).
paramsMissingNotrue = only products whose five reorder parameters do not all resolve (nothing typed, and a territory the fleet has no default for).
includeReorderNotrue = add the replenishment block (external stock, open supplier orders, resolved lead times / targets, coverage past Amazon, recommendedOrderQty). Switched on automatically by needsReorder / paramsMissing / a reorder sort.
includeWorkingNotrue = count Amazon's Working inbound units (shipment plans created but not shipped, still at the seller) in inboundUnits, projectedDaysOfInventory, oosRiskFlag and the reorder supply, as Amazon's own Total days of supply does; default false = inbound is shipped + receiving only (totalFbaInboundWorking is returned either way).
coverageTotalMaxNoKeep rows whose coverageTotal (days of supply once the warehouse / 3PL stock and the open orders are shipped in) is at most this. Switches includeReorder on; a row with neither a count nor an order has no coverageTotal and never matches.
daysOfInventoryMaxNoKeep rows with days-of-inventory <= this (e.g. <=14 = running out soon).
daysOfInventoryMinNoKeep rows with days-of-inventory >= this.
includeInactiveFbmNotrue = list the FBM listings Amazon has set to Inactive while units stay declared (with includeFbm): an FBM-only inactive SKU becomes a row, fbmListingStatus reads 'Inactive' and fbmAvailable shows the declared units, which fbmListedQuantity counts 0. Default false = the Inventory page's default: an inactive listing is not a listing of the read, its fbm* figures are null on the row and an FBM-only inactive SKU is not listed.
daysUntilReorderMaxNoKeep rows whose daysUntilReorder (the days left before the order must be placed; negative = already late) is at most this: 14 = to order within two weeks, 0 with needsReorder=true = the page's Late chip. Switches includeReorder on; a product without a recommendation never matches.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / groupBy / description
      Previous value: -"Report per SKU (default) or per stock region."New value: +"'sku' (default) = a row per stock region × SKU; 'asin' = a row per stock region × ASIN, its SKUs folded; 'stockRegion' = the page's Stock locations tiles, one per stock region plus `totals` (All locations), units deduplicated so they add up across territories (see STOCK LOCATIONS)."
    • changedInput schema / properties / groupBy / enum
      Previous value: -[
      -  "sku",
      -  "stockRegion"
      -]New value: +[
      +  "sku",
      +  "asin",
      +  "stockRegion"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Far beyond the readOnlyHint annotation, it discloses defaults (FBA-only figures, FBM-only SKUs hidden, inactive listings excluded), automatic switch-on of includeReorder, per-SKU non-additivity for non-*Pool columns, currency resolution rules, the Vendor Central refusal, and what groupBy='stockRegion' returns. These are exactly the behaviors an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is well front-loaded, but the body is a several-thousand-word run-on of nested parentheticals that an agent cannot scan or retrieve from reliably. Valuable content is buried (the ⚠️ sum warning, the includeFbm behavior, the tiles caveat) inside dense field enumerations that belong in a reference doc, not a tool description.

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?

With 26 optional parameters, no output schema, and three grouping modes, this tool needs heavy contextual support, and the description covers defaults, conventions, edge cases, and cross-tool routing. Nothing an agent needs in order to call it correctly appears to be 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 already 88%, so the baseline is 3; the description earns more by explaining interactions the schema cannot — that needsReorder/paramsMissing/reorder sorts auto-enable includeReorder, that includeWorking changes inboundUnits and projections, that sortBy/limit/offset do not apply to stockRegion tiles, and that stockRegions narrows tiles but not totals. Much of the field-by-field prose duplicates what the schema already says.

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 first clause states a specific resource and scope ("Current FBA inventory / stock health per SKU, per ASIN or per stock region") and names itself as the authoritative source matching the app's stock page. An agent can tell instantly that this is the inventory-read tool and not a worksheet importer or a general metrics query.

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?

It gives concrete routing: use this for FBA stock health, use query_metrics with channels=['VENDOR'] for 1P accounts (which are refused here), and query_subscribe_and_save to distinguish S&S offer states. It also supplies actionable sort recipes (daysOfInventory asc, fulfillmentChannel desc). It does not distinguish itself from siblings like get_stock_worksheet or query_inbound_shipments, so a 4 rather than 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.