Inventory aging and demand-to-supply intelligence. Triggers: "what should I stock", "what's selling in my area", "market demand analysis", "aging inventory alert", "turn rate by segment", "slow movers on my lot", "inventory analysis", "demand vs supply ratio", "what to buy at auction", "floor plan optimization", "new vs used mix", "days on market by model", data-driven stocking decisions, inventory aging analysis, demand-to-supply intelligence.
From marketcheck-cowork-pluginnpx claudepluginhub marketcheckhub/marketcheck-cowork-pluginThis skill uses the workspace's default tool permissions.
references/outcomes.mdProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Calculates TAM/SAM/SOM using top-down, bottom-up, and value theory methodologies for market sizing, revenue estimation, and startup validation.
Turn sold market data and live supply counts into actionable stocking recommendations. Replace gut-instinct buying with demand-to-supply ratios, aging alerts, turn-rate benchmarks, and optimal new-vs-used mix targets.
→ Full procedure: read _references/profile-loading.md
Parse marketcheck-profile.md → extract: dealer_id, dealer_type, franchise_brands, zip/postcode, state/region, country, dom_aging_threshold. If missing: tell user to run /onboarding.
Country routing: US = all tools. UK = search_uk_active_cars only. get_sold_summary NOT available — skip Market Demand Snapshot, D/S Ratio, Turn Rate, New vs Used Mix. Only Aging Inventory Alert works for UK. → Full matrix: _references/country-routing.md
→ Agent contracts (lot-scanner, lot-pricer): read _references/agent-contracts.md
Confirm: "Using profile: [dealer.name], [State/Region], [Country]"
The following fields are loaded from the dealer profile. Only ask if no profile exists:
state for US, region for UK)Do not guess dealer IDs or locations. If the profile has dealer_id: null, ask before running lot-level workflows (Aging Inventory Alert, Category Gap).
seller_type=dealer is hardcoded in supply queries — this intentionally excludes private sellers and auction listings to give an accurate dealer-competitive supply count.get_sold_summary which is US-only. Inform UK dealers immediately.make|0|50|2 means "facet on make, offset 0, up to 50 buckets, minimum 2 documents per bucket." The min_count of 2 filters out singleton listings.dealer_id: null blocks lot-level workflows — Aging Inventory Alert and Category Gap require a dealer_id. If the profile has dealer_id: null, ask before running these workflows.2026-01-01 to 2026-01-31).Understand what is actually selling in the user's market before making any stocking decisions.
Call mcp__marketcheck__get_sold_summary with:
date_from: first day of the target month (e.g. 2026-01-01)date_to: last day of the target month (e.g. 2026-01-31)state: user's 2-letter state codedealer_type: user's dealer type (Franchise or Independent)ranking_dimensions: make,modelranking_measure: sold_countranking_order: desctop_n: 20Call mcp__marketcheck__get_sold_summary with the same date and location filters, but:
ranking_dimensions: body_typeranking_measure: sold_countranking_order: desctop_n: 10Present results as two ranked tables:
Highlight any body type or model where the user's franchise brand appears in the top 5, and flag segments where it does not appear (potential conquest or gap opportunities).
Compare what the market is buying against what dealers currently have listed. Vehicles with high demand and low supply represent stocking opportunities.
Call mcp__marketcheck__get_sold_summary with:
date_from / date_to: most recent full monthstate: user's statedealer_type: user's dealer typeranking_dimensions: make,modelranking_measure: sold_countranking_order: desctop_n: 30Call mcp__marketcheck__search_active_cars with:
state: user's state (or zip + radius if provided)car_type: used (or new based on user focus)seller_type: dealerdealer_type: user's dealer typefacets: make|0|50|2,model|0|50|2rows: 0 (we only need facet counts, not individual listings)For each of the top 30 sold make/model combinations, look up the active supply count from the facet results.
Calculate Demand-to-Supply Ratio = Sold Count (monthly) / Active Supply Count.
Present a single table sorted by demand-to-supply ratio descending:
Identify units on the dealer's lot that have exceeded healthy DOM thresholds and assess their current market value.
Multi-agent approach: Use the lot-scanner and lot-pricer agents for complete, paginated results.
Step 1 — Pull aged inventory (paginated):
Use the Agent tool to spawn the marketcheck-cowork-plugin:lot-scanner agent with this prompt:
Pull aging inventory for dealer_id=[dealer_id], country=[country], car_type=used, sort_by=dom, sort_order=desc, dom_range=[dom_aging_threshold]-999. Paginate through all results.
This ensures ALL aged units are captured, not just the first 25.
Step 2 — Price aged units (US only):
After lot-scanner returns, use the Agent tool to spawn the marketcheck-cowork-plugin:lot-pricer agent with this prompt:
Price these aging vehicles: [pass vehicle list from lot-scanner]. zip=[zip], dealer_type=[dealer_type], floor_plan_per_day=[floor_plan_per_day], aging_threshold=[dom_aging_threshold].
UK dealers: Price inline using comp medians from search_uk_active_cars.
lot-scanner returned pagination_status=complete — if partial, warn user in outputlot-pricer returned pricing for all passed VINs — if some failed, note count in outputpredicted_price = $0 or null in pricing outputStep 3 — Build the report from lot-pricer output:
Build an Aging Inventory Report table:
Summarize total aged inventory exposure:
Benchmark how quickly different vehicle segments move in the local market to inform category-level stocking.
Call mcp__marketcheck__get_sold_summary with:
date_from / date_to: most recent full monthstate: user's statedealer_type: user's dealer typeranking_dimensions: body_typeranking_measure: average_days_on_marketranking_order: asctop_n: 10Call mcp__marketcheck__get_sold_summary with:
ranking_dimensions: make,modelranking_measure: average_days_on_marketranking_order: asctop_n: 10Also call with ranking_order: desc and top_n: 10 to get the slowest turning models.
Present three tables:
Provide a recommendation: "Focus acquisition on segments with Avg DOM < X days (market median). Avoid over-stocking in segments where Avg DOM exceeds Y days unless priced aggressively."
Determine the optimal new-to-used inventory ratio based on what the market is actually absorbing.
Call mcp__marketcheck__get_sold_summary with:
date_from / date_to: most recent full monthstate: user's stateinventory_type: Newranking_dimensions: makeranking_measure: sold_countranking_order: desctop_n: 10Call mcp__marketcheck__get_sold_summary with same filters but:
inventory_type: UsedCall mcp__marketcheck__search_active_cars for current supply:
state: user's statecar_type: newseller_type: dealerfacets: make|0|30|2rows: 0Repeat with car_type: used.
Calculate:
Present as:
→ After assembling results, read references/outcomes.md to frame recommendations with quantified business impact, KPI benchmarks, and action-to-outcome guidance.