Data-driven stocking and aging analysis. 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", stocking decisions, inventory aging analysis, demand-to-supply intelligence.
From dealernpx claudepluginhub marketcheckhub/marketcheck-cowork-plugin --plugin dealerThis skill uses the workspace's default tool permissions.
Provides 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.
Date anchor: Today's date comes from the
# currentDatesystem context. Compute ALL relative dates from it. Example: if today = 2026-03-14, then "prior month" = 2026-02-01 to 2026-02-28, "current month" (most recent complete) = February 2026, "three months ago" = December 2025. Never use training-data dates.
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.
Load the marketcheck-profile.md project memory file if exists. Extract: dealer_id, web_domain (source), dealer_type, franchise_brands, zip/postcode, state/region, country, dom_aging_threshold. Also extract: default_inventory_type from preferences ("used" | "new" | "both"; default "used" if not set). Apply as car_type and inventory_type in all calls. Override if user explicitly states otherwise. Never mix new and used data in the same report section. If missing, ask minimum fields. US: search_active_cars, get_sold_summary, predict_price_with_comparables. UK: search_uk_active_cars, search_uk_recent_cars only — skip Market Demand, Turn Rate, New vs Used Mix, D/S Ratio workflows; only Aging Inventory Alert works. Confirm: "Using profile: [dealer.name], [State], [Country]"
Dealer (owner, GM, used car manager) needing data-driven stocking decisions, aging analysis, and demand-to-supply intelligence.
| Auto | Field | Notes |
|---|---|---|
| Auto | Location, dealer_id, web_domain (source), franchise_brands, dealer_type | Profile |
| Ask if unclear | Timeframe (default: last full month), inventory type (New/Used/Both) |
For lot-level workflows (Aging Inventory Alert, Category Gap): use dealer_id first; if null, use web_domain as source parameter; if both null, ask the user.
Understand what is actually selling in the user's market before making any stocking decisions.
Call mcp__marketcheck__get_sold_summary with:
date_from / date_to: target month first-to-last daystate: user's 2-letter state codedealer_type: user's dealer type (Franchise or Independent)ranking_dimensions: make,modelranking_measure: sold_countranking_order: desctop_n: 20
→ Extract only: per make/model — sold_count, average_sale_price, average_days_on_market. Discard full response.Call mcp__marketcheck__get_sold_summary with the same date and location filters, but:
ranking_dimensions: body_typeranking_measure: sold_countranking_order: desctop_n: 10
→ Extract only: per body_type — sold_count, share %. Discard full response.Present 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: 30
→ Extract only: per make/model — sold_count. Discard full response.Call 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
→ Extract only: per make/model — active count from facets. Discard full response.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 dealer:lot-scanner agent with this prompt:
Pull aging inventory for dealer_id=[dealer_id] (or source=[web_domain] if dealer_id unavailable), 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 dealer: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.
Step 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: 10
→ Extract only: per body_type — average_days_on_market, sold_count. Discard full response.Call mcp__marketcheck__get_sold_summary with:
ranking_dimensions: make,modelranking_measure: average_days_on_marketranking_order: asctop_n: 10
→ Extract only: per make/model — average_days_on_market, sold_count. Discard full response.Also call with ranking_order: desc and top_n: 10 to get the slowest turning models.
→ Extract only: per make/model — average_days_on_market, sold_count. Discard full response.
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: 10
→ Extract only: per make — sold_count. Discard full response.Call mcp__marketcheck__get_sold_summary with same filters but:
inventory_type: Used
→ Extract only: per make — sold_count. Discard full response.Call mcp__marketcheck__search_active_cars for current supply:
state: user's statecar_type: new, seller_type: dealer, facets: make|0|30|2, rows: 0
→ Extract only: per make — active count from facets. Discard full response.Repeat with car_type: used.
→ Extract only: per make — active count from facets. Discard full response.
Calculate:
Present as:
Present: headline number (e.g., D/S ratio or aged unit count), data tables with key metrics (max 10-20 rows), UNDER-SUPPLIED/BALANCED/OVER-SUPPLIED labels, dollar impact estimates, and 3 specific actionable items. Cite data period in every output.