Skip to content

MarketCheck API

by marketcheck.com · remote · no sign-in to list tools · v1.2.0 · published by com.marketcheck

MarketCheck automotive data: search US/UK listings, predict prices, decode VINs, market history.

Changes · 1

13 tools: 1 change things and 12 only read.

Scanned Oct 21, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http api https://developers.marketcheck.com/api/mcp

Findings

Matches of fixed checks, with the text they matched.

3 info
  • The description is 3,321 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...rt from listing results. When unsure which the user means, default to dos_active."

    What this check looks for
  • The description is 3,367 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...rt from listing results. When unsure which the user means, default to dos_active."

    What this check looks for
  • The description is 5,617 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...422 names the offending parameter and how to fix it; correct the call and retry."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Changes things 1Claude Code: ask
  • predict_price_with_comparablesPredict car price along with comparable vehicles in the market.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Predict car price along with comparable vehicles in the market. This provides predicted price, MSRP along with active set comparables to help understand market positioning and competitive pricing.

    Annotations the server declares

    • title: Predict Vehicle Price with Comparables
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 12Claude Code: allow
  • decode_vin_neovinGet vehicle specifications from NeoVIN decoder by VIN.No findings

    Why it is in this group

    • The description's first verb is "get": a word for reading.
    Description, as the server wrote it
    Get vehicle specifications from NeoVIN decoder by VIN. Get the basic information on specifications for a car identified by a valid VIN from NeoVIN decoder. This provides detailed vehicle specifications including trim, engine, transmission, features, options, MSRP information, and more comprehensive data than standard VIN decoders.

    Annotations the server declares

    • title: Decode VIN with NeoVIN
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_car_historyGet a car's online listing history by VIN.No findings

    Why it is in this group

    • The name "get_car_history" says "get": a word for reading.
    Description, as the server wrote it
    Get a car's online listing history by VIN. The history API returns online listing history for a car identified by its VIN. History listings are sorted in the descending order of the listing date / last seen date.

    Annotations the server declares

    • title: Get Vehicle Listing History by VIN
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_server_infoGet information about the server.No findings

    Why it is in this group

    • The name "get_server_info" says "get": a word for reading.
    Description, as the server wrote it
    Get information about the server. Returns: Server capabilities as a dict (serialized by the transport layer)

    Annotations the server declares

    • title: Get Server Information
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_sold_summaryMonthly sold-vehicle statistics for US franchise and independent dealers: how many sold, at what advertised prices, how fast, where, ranked however you ask.1 finding

    Why it is in this group

    • The name "get_sold_summary" says "get": a word for reading.

    Findings

    • Info

      The description is 5,617 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...422 names the offending parameter and how to fix it; correct the call and retry."

      What this check looks for
    Description, as the server wrote it
    Monthly sold-vehicle statistics for US franchise and independent dealers: how many sold, at what advertised prices, how fast, where, ranked however you ask. A "sale" is inferred (a listing left a dealer site and met MarketCheck's sold rules); prices are advertised asking prices, not transaction prices. History starts January 2021 and runs through the last complete month. No auction, private-party, UK or Canada data. Required: - inventory_type: new, used, certified, or all (all pools new and used into one row; add inventory_type to ranking_dimensions to split them). There is no default. Dates: - date_from / date_to: YYYY-MM-DD; date_from is the first day of a month, date_to the last day of a month (inclusive). Send both or neither; at most one year apart. Omit both for the last complete month. A same-month year-over-year comparison (e.g. July vs July) is more than a year, so make two calls. Geography (summary_by, default state): - summary_by=national for ONE ranking of the whole country. Use it for any "in America"/"nationally" question. Never add up per-state rankings: a make only appears in a state's rows when it makes that state's top_n, so the sum undercounts. - summary_by=state or city_state for rankings within each state or city. - state / city filters take comma-separated lists (OR). There is no ZIP or metro filter. Filters (comma-separated lists are OR; text matching is case-insensitive): - dealer_type: franchise, independent, or all. - dealership_group_name: exact group name(s), e.g. "Lithia Motors Inc.". Don't guess names: look them up with search_dealerships (field mc_dealership_group_name). An unknown name returns a 422. One name contains a comma ("Americas Car-mart, Inc."), so send it alone. - source: the website the sold listing was found on, e.g. carmax.com. For one dealer (rooftop), pass its inventory_url from search_dealerships / search_dealers. Finding a dealer or dealership group (use the dealer directory, never guess): - One dealer's sales: search_dealerships (or search_dealers) by name, city, state or zip, then call this tool with source=<inventory_url>. This also works for dealers that belong to no group, which is most sales. - A whole group's sales: take mc_dealership_group_name from search_dealerships and pass it as dealership_group_name. Only about 38% of sales carry a group, so ranking by dealership_group_name leaves the rest out. - Several rooftops at once: source takes a comma-separated list of inventory_urls. - make, model, trim, body_type, body_subtype, powertrain_type (Combustion, HEV, MHEV, BEV, PHEV, FCEV, EREV), drivetrain (4WD, FWD, RWD; there is no AWD), transmission (Automatic, CVT, Manual), base_exterior_color, base_interior_color, msrp_label, fuel_type_category (ice, ev, hybrid, unknown, other). - year: model year(s), e.g. 2024 or 2020,2022. year_range: inclusive, e.g. 2020-2024, 2020- or -2024. Use year or year_range, not both. - miles_range: inclusive odometer range, e.g. 0-60000, 60000-. Ranking: - ranking_dimensions: comma-separated fields to group and rank by (default make,model,body_type). Valid: year, make, model, trim, body_type, body_subtype, drivetrain, transmission, powertrain_type, fuel_type_category, base_exterior_color, base_interior_color, msrp_label, dealership_group_name, source, inventory_type; or none for a single market total. state is not a dimension: use summary_by. - ranking_measure (default sold_count): sold_count, price_over_msrp_percentage, price_over_mc_msrp_percentage, or a dotted statistic: price.mean, price.sum, price.p50 (median price), dom_active.mean (average days on market), dom_active.p50, dos_active.mean, miles.mean, msrp.mean, and others listed in the valid-values error. - ranking_order: desc (default) or asc. - top_n: rows kept per group (per month and geography), not per response. Default 10. - limit: total rows returned, 1 to 20000 (default 20000). Check `truncated` in the response: true means the limit cut rows. Measure filters remove whole groups after the statistics are computed, leaving the numbers in the remaining rows unchanged (the vehicle filters above act on vehicles, before statistics). Each takes a number with an optional >, <, >=, <= or = prefix, e.g. ">=30": - sold_count, price_over_msrp_percentage, price_over_mc_msrp_percentage. - min_sold_count: shorthand for sold_count >= n. - measure_filters: dotted statistics, e.g. {"price.mean": ">20000", "dom_active.mean": "<45"}. average_sale_price is now price.mean, total_sale_price is price.sum, average_days_on_market is dom_active.mean. - By default measure filters apply AFTER rank and top_n (ranks can read 1, 3, 7), so a floor with the default top_n of 10 often returns no rows. Either raise top_n (e.g. 100000) or set rank_after_filters=true to filter first. - Ascending rankings: ranking_order=asc alone returns thousands of ties at the minimum (everything that sold once). Pair it with a floor, e.g. ranking_measure=dom_active.mean, ranking_order=asc, min_sold_count=30, top_n=100000. Response: `data` rows carry month, the grouping fields, rank, sold_count and nested statistics (price, miles, dom_active, dos_active, msrp, mc_msrp with count, mean and percentiles) plus price_over_msrp_percentage. `result_count`, `truncated`, `warnings` and `applied` (the defaults and date window the API actually used) come back unchanged. The service scales to zero when idle: the first call after a quiet period can take about 9 seconds. Errors: a 422 names the offending parameter and how to fix it; correct the call and retry.

    Annotations the server declares

    • title: Get Sold Vehicle Market Summary
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_active_carsSearch for cars in the United States and Canada market with comprehensive filters.1 finding

    Why it is in this group

    • The name "search_active_cars" says "search": a word for reading.

    Findings

    • Info

      The description is 3,321 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...rt from listing results. When unsure which the user means, default to dos_active."

      What this check looks for
    Description, as the server wrote it
    Search for cars in the United States and Canada market with comprehensive filters. This endpoint allows searching market vehicles that are up for sale in US and Canadian market right now. This endpoint serves only dealer listings. Carfax fields: `carfax_1_owner`, `carfax_clean_title` and other `carfax_*` values are incomplete in this dataset and are not supported as filters, facets or stats. They should not be used to describe ownership or title history. Filtering categorical fields (two steps). Field values in this API are not canonical English (e.g. fuel_type="Hybrid" is wrong; the actual value is "HEV" or "Electric / Unleaded"). Skipping step 1 leads to silent zero-result responses. STEP 1 — discover valid values: call this tool with only the `facets` parameter (and an optional location filter), rows=1, no other filters set. STEP 2 — filter for real: re-call with the exact strings returned in step 1. For instance, to filter cars by powertrain in New York: STEP 1 call: search_active_cars(facets="powertrain_type", rows=1, state="NY") -> returns {"powertrain_type": [{"item": "HEV", "count": 18058}, {"item": "PHEV", "count": 6004}, ...]} STEP 2 call: search_active_cars(powertrain_type="HEV,PHEV", state="NY") Fields that REQUIRE step 1 before being used as filters: powertrain_type, fuel_type, trim, body_type, drivetrain, transmission, make, model, exterior_color, interior_color. WRONG: search_active_cars(fuel_type="Hybrid") # silent zero-result CORRECT: search_active_cars(facets="fuel_type", rows=1) # discover valid values first then: search_active_cars(fuel_type="Electric / Unleaded") DEALER FILTERING: When any of dealer_id, source, mc_website_id, mc_dealer_id, mc_location_id, mc_rooftop_id, mc_dealership_group_id, mc_dealership_group_name, mc_sub_dealership_group_id, mc_sub_dealership_group_name, or mc_category are provided, this tool automatically routes to the Dealer Inventory Syndication API (GET /dealerships/inventory) instead of the standard inventory search API for optimized dealer-specific inventory retrieval. Use search_past_90_days for expired/sold dealer inventory analysis. STALENESS METRICS — dos_active vs dom_active (read before answering "how long has this car been for sale" questions): - dos_active (Days on Site): days this listing has been active at the CURRENT dealer. Answers "how long has THIS DEALER been trying to sell this car." DEFAULT: use dos_active for stale-inventory and "how long has it been listed" questions (e.g. finding dealers with stale inventory in an area). - dom_active (Days on Market): cumulative days the VEHICLE has been actively listed for sale across all dealers — it survives dealer-to-dealer transfers. Use only when the question is about the vehicle's total market exposure, e.g. evaluating a car at auction or in a dealer trade: a car showing dos_active=15 at the current store may show dom_active=60 because it has been passed around dealers for two months. This rule applies to choosing filter params (dos_active_range vs dom_active_range), sort_by values, and which field to read and report from listing results. When unsure which the user means, default to dos_active.

    Annotations the server declares

    • title: Search Active US/Canada Vehicle Listings
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_dealersSearch the legacy MarketCheck dealer directory (one-website-per-dealer model).No findings

    Why it is in this group

    • The name "search_dealers" says "search": a word for reading.
    Description, as the server wrote it
    Search the legacy MarketCheck dealer directory (one-website-per-dealer model). search_dealerships is recommended for new use cases. This endpoint is being phased out; use it only when you specifically need legacy `dealer_id`-style records or the `listing_count_range` inventory-size filter, which is not available on the dealerships endpoint. For get_sold_summary, a dealer's inventory_url here is its `source` value. This endpoint has no dealership-group field; use search_dealerships for group names. Geospatial: pass (latitude AND longitude) OR zip, plus radius (miles, max 7000). Pagination: rows default 10, max 50; start default 0; (start * rows) cannot exceed 10000.

    Annotations the server declares

    • title: Search US/Canada Dealer Directory (Legacy)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_dealershipsSearch the MarketCheck dealership directory (current, multi-rooftop, group-aware).No findings

    Why it is in this group

    • The name "search_dealerships" says "search": a word for reading.
    Description, as the server wrote it
    Search the MarketCheck dealership directory (current, multi-rooftop, group-aware). Use this for "who/where is the dealer?" lookups. For inventory, use search_active_cars. Recommended over search_dealers unless legacy `dealer_id`-style results are needed. This is also the lookup for get_sold_summary (sold-vehicle statistics): - A dealer's (rooftop's) sales: pass its inventory_url as get_sold_summary `source`. Several rooftops: comma-separated inventory_urls. - A dealership group's sales: pass mc_dealership_group_name as get_sold_summary `dealership_group_name`. Filter here with mc_dealership_group_name to list a group's rooftops. Geospatial: pass (latitude AND longitude) OR zip, plus radius (miles, max 7000). mc_category values: Dealer, Retailer, Dealership Group, Aggregator, Marketing, Financing. Pagination: rows default 10, max 50; start default 0; (start * rows) cannot exceed 10000.

    Annotations the server declares

    • title: Search US/Canada Dealership Directory
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_oem_incentivesSearch for OEM (manufacturer) incentive offers across all brands.No findings

    Why it is in this group

    • The name "search_oem_incentives" says "search": a word for reading.
    Description, as the server wrote it
    Search for OEM (manufacturer) incentive offers across all brands. Searches for rebates, financing deals, and lease specials with 50+ filter parameters. Use this when searching across multiple OEMs or doing broad searches.

    Annotations the server declares

    • title: Search OEM Incentive Offers
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_oem_incentives_by_zipSearch for incentives from a specific manufacturer in a location.No findings

    Why it is in this group

    • The name "search_oem_incentives_by_zip" says "search": a word for reading.
    Description, as the server wrote it
    Search for incentives from a specific manufacturer in a location. Optimized for finding all available incentives from a specific OEM in a geographic area. Automatically converts ZIP to MSA code for regional relevance. Use this when you know both the manufacturer and location.

    Annotations the server declares

    • title: Search OEM Incentive Offers by ZIP
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_past_90_daysSearch for recent car inventory (EXPIRED/SOLD listings from last 90 days) with comprehensive filters following Marketcheck API structure.1 finding

    Why it is in this group

    • The name "search_past_90_days" says "search": a word for reading.

    Findings

    • Info

      The description is 3,367 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...rt from listing results. When unsure which the user means, default to dos_active."

      What this check looks for
    Description, as the server wrote it
    Search for recent car inventory (EXPIRED/SOLD listings from last 90 days) with comprehensive filters following Marketcheck API structure. Scope: this endpoint serves only expired/sold listings from the last 90 days for US and CA (Canada) markets, not active listings. For currently active listings, use the search_active_cars tool instead. Carfax fields: `carfax_1_owner`, `carfax_clean_title` and other `carfax_*` values are incomplete in this dataset and are not supported as filters, facets or stats. They should not be used to describe ownership or title history. Tip: before filtering by specific field values (make, model, trim, body_type, fuel_type, etc.), use the 'facets' parameter to discover available values in the API. Field values may be represented differently than expected. For example: - Use facets="make,model,trim,body_type" to see all available options - This prevents filtering errors due to incorrect field value assumptions - Facets show actual data distribution and available filter options VIN vs Listing ID Disclaimer: - A single VIN can have multiple listings, each with a unique listing ID - Listing ID changes when there are changes in price or miles of the listing - When expired=false is set, it shows listings for VINs that are currently active in the market (not sold yet), but the specific listing is expired. The latest/current listing for that VIN is present in the active search API - This endpoint shows historical listing data (expired listing IDs) for market analysis, not current inventory This endpoint is designed for analytical use cases including: - Historical market analysis of sold vehicles - Sold vehicle pricing trends and patterns - Days on market analysis for expired listings - Dealer inventory turnover and sales analysis - Market intelligence from recently sold inventory Key use cases: - Analyze recent sales trends and pricing - Get sold/expired listings for market intelligence - Calculate average market prices from recent inventory - Track dealer inventory turnover patterns Due to performance reasons, this endpoint is more restrictive than active search: - Does not accept facets, stats and range_facets in a single call - Requires one of: city, state, zip, (latitude+longitude+radius), source, or dealer_id - For geo queries, radius cannot be greater than 100 miles - Charged at higher rates than active search endpoint STALENESS METRICS — dos_active vs dom_active (read before answering "how long was this car for sale" questions): - dos_active (Days on Site): days the listing was active at the CURRENT dealer. Answers "how long did THIS DEALER try to sell this car." DEFAULT: use dos_active for stale-inventory and "how long was it listed" questions. - dom_active (Days on Market): cumulative days the VEHICLE was actively listed across all dealers — it survives dealer-to-dealer transfers. Use only when the question is about the vehicle's total market exposure, e.g. evaluating a car at auction or in a dealer trade: a car showing dos_active=15 at the current store may show dom_active=60 because it was passed around dealers for two months. This rule applies to choosing filter params (dos_active_range vs dom_active_range), sort_by values, and which field to read and report from listing results. When unsure which the user means, default to dos_active.

    Annotations the server declares

    • title: Search US Expired Listings (Past 90 Days)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_uk_active_carsSearch for active cars in the UK market.No findings

    Why it is in this group

    • The name "search_uk_active_cars" says "search": a word for reading.
    Description, as the server wrote it
    Search for active cars in the UK market. This tool searches for currently active car listings in the UK using the Marketcheck API. It supports comprehensive filtering by location, vehicle specifications, price, and more. Includes all parameters supported by the /search/car/uk/active endpoint. Carfax fields: `carfax_1_owner`, `carfax_clean_title` and other `carfax_*` values are incomplete in this dataset and are not supported as filters, facets or stats. They should not be used to describe ownership or title history. Tip: before filtering by specific field values (make, model, trim, body_type, fuel_type, etc.), use the 'facets' parameter to discover available values in the API. Field values may be represented differently than expected. For example: - Use facets="make,model,trim,body_type" to see all available options - This prevents filtering errors due to incorrect field value assumptions - Facets show actual data distribution and available filter options STALENESS METRICS — dos_active vs dom_active (read before answering "how long has this car been for sale" questions): - dos_active (Days on Site): days this listing has been active at the CURRENT dealer. Answers "how long has THIS DEALER been trying to sell this car." DEFAULT: use dos_active for stale-inventory and "how long has it been listed" questions. - dom_active (Days on Market): cumulative days the VEHICLE has been actively listed for sale across all dealers — it survives dealer-to-dealer transfers. Use only when the question is about the vehicle's total market exposure, e.g. evaluating a car at auction or in a dealer trade: a car showing dos_active=15 at the current store may show dom_active=60 because it has been passed around dealers for two months. This rule applies to choosing filter params (dos_active_range vs dom_active_range), sort_by values, and which field to read and report from listing results. When unsure which the user means, default to dos_active.

    Annotations the server declares

    • title: Search Active UK Vehicle Listings
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_uk_recent_carsSearch for recent/expired cars in the UK market (last 90 days).No findings

    Why it is in this group

    • The name "search_uk_recent_cars" says "search": a word for reading.
    Description, as the server wrote it
    Search for recent/expired cars in the UK market (last 90 days). This tool searches recent inventory data for expired/sold listings only. It does not include active listings - use search_uk_active_cars for current inventory. Carfax fields: `carfax_1_owner`, `carfax_clean_title` and other `carfax_*` values are incomplete in this dataset and are not supported as filters, facets or stats. They should not be used to describe ownership or title history. Tip: before filtering by specific field values (make, model, trim, body_type, fuel_type, etc.), use the 'facets' parameter to discover available values in the API. Field values may be represented differently than expected. For example: - Use facets="make,model,trim,body_type" to see all available options - This prevents filtering errors due to incorrect field value assumptions - Facets show actual data distribution and available filter options STALENESS METRICS — dos_active vs dom_active (read before answering "how long was this car for sale" questions): - dos_active (Days on Site): days the listing was active at the CURRENT dealer. Answers "how long did THIS DEALER try to sell this car." DEFAULT: use dos_active for stale-inventory and "how long was it listed" questions. - dom_active (Days on Market): cumulative days the VEHICLE was actively listed across all dealers — it survives dealer-to-dealer transfers. Use only when the question is about the vehicle's total market exposure, e.g. evaluating a car at auction or in a dealer trade: a car showing dos_active=15 at the current store may show dom_active=60 because it was passed around dealers for two months. This rule applies to choosing filter params (dos_active_range vs dom_active_range), sort_by values, and which field to read and report from listing results. When unsure which the user means, default to dos_active.

    Annotations the server declares

    • title: Search UK Expired Listings (Past 90 Days)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http api https://developers.marketcheck.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__api__search_active_cars",
      "mcp__api__search_past_90_days",
      "mcp__api__get_car_history",
      "mcp__api__decode_vin_neovin",
      "mcp__api__get_server_info",
      "mcp__api__search_uk_active_cars",
      "mcp__api__search_uk_recent_cars",
      "mcp__api__get_sold_summary",
      "mcp__api__search_oem_incentives",
      "mcp__api__search_oem_incentives_by_zip",
      "mcp__api__search_dealerships",
      "mcp__api__search_dealers"
    ],
    "ask": [
      "mcp__api__predict_price_with_comparables"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as api. Review it before you use it.