MCP Server

CarGene

com.car-gene/genealogy
Science & Engineering Public & reachable MCP 2025-11-25

What this MCP does

Provides sourced automotive series genealogy, model generations, relationships, and regional sales figures.

get_sales_figures
Get sales figures
Get the sales figures of a series. Without region_code it returns the overview {series_id, url, region_totals, lifetime, coverage, regions}; with region_code it returns that region year by year {series_id, url, region_code, region_totals, coverage, cells, figures, next_year_from}. region_totals sum years within one country only, so never add across countries or add a parent region to its children. lifetime rows are cumulative or per-generation totals that must not be added to the grid. With a model_id, region_totals and lifetime are those of that generation; otherwise region_totals are the series totals and lifetime is the whole series. coverage rows are the blanks that were checked and found empty, with the reason; a region with coverage rows and no figures was researched, not skipped. regions lists the region codes that have figures or checked blanks, with the first and last year; pass one of them as region_code, since any other code is an error. cells are the grid a figure may be summed into, one per series, country, calendar year and metric; a null units on a cell means the sources disagree, never zero sold. figures are the rows as published, each with units, the source's own wording, the period, source_url and a verbatim source_excerpt; match them to cells by region_code, year and metric. A model_id narrows figures to that generation, while cells stay series-wide because allocating a year to a generation needs the whole series. Years are cut to fit the response size, never splitting a year; when next_year_from is not null, call again with year_from set to it. An empty list means not researched yet, never zero.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {'model_id': {'type': 'string', 'description': 'Generation (model) id (a UUID from search_vehicles). Takes precedence over series_id when both are given.'}, 'series_id': {'type': 'string', 'description': 'Series id (a UUID from search_vehicles).'}, 'year_from': {'type': 'integer', 'minimum': 0, 'description': 'First calendar year to return for region_code; pass next_year_from from the previous response. Omit to start from the earliest year.'}, 'region_code': {'type': 'string', 'description': 'A region code from regions in the overview, such as JP (upper case, as listed). Omit to get the overview.'}}, 'description': 'Pass exactly one of series_id or model_id.', 'additionalProperties': False}
get_vehicle
Get a series with its generations
Get one series with the list of its generations (models) and the cited sources, and with a model_id also that generation in detail. Returns {series, maker, models, sources}, plus model when a model_id is given. Each entry in models has id, name, chassis_code, start_year, end_year (null = still on sale), description, source_url and its public page url; the list is always the whole series. model is the named generation with drivetrains, displacements (engine displacement in cc, one row per engine), and engineers (each with role_name, source_url citing the person's own career, and link_source_url citing that person's work on this very generation; a null link_source_url means not researched yet, so do not read source_url as evidence for this generation). sources are the cited references for the descriptions (url, title, publisher, accessed_on, and model_id: null for the series overview, otherwise the generation whose description it supports); a generation's own sources come only with its model_id. For the engineers or specs of several generations, call once per model_id. An empty drivetrains, displacements, engineers, or sources list means not researched yet, never none. Unknown ids are an error, not an empty result.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {'model_id': {'type': 'string', 'description': 'Generation (model) id (a UUID from search_vehicles). Takes precedence over series_id when both are given.'}, 'series_id': {'type': 'string', 'description': 'Series id (a UUID from search_vehicles).'}}, 'description': 'Pass exactly one of series_id or model_id.', 'additionalProperties': False}
get_vehicle_relationships
Get relationships between generations
Get the relationships between generations (succession, sibling, derivation, spiritual successor). A series_id returns the relations of the whole series; a model_id returns only the relations that have that generation at either end. Returns {series_id, url, total, relations, next_offset}, plus model_id when given: each relation has kind and kind_name, kind_directed, from_model and to_model (each with id, name, chassis_code, start_year, end_year, series_name and public page url), and where the source requires one, source_url with the verbatim source_excerpt; rationale is filled for spiritual successors. When kind_directed is false the two ends are interchangeable, so treat the relation as belonging to both generations. Relations are cut to fit the response size; when next_offset is not null, call again with offset set to it. An empty relations list means not researched yet, never that the car has no relatives.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {'offset': {'type': 'integer', 'minimum': 0, 'description': 'Where to start in the list; pass next_offset from the previous response. Omit to start from the beginning.'}, 'model_id': {'type': 'string', 'description': 'Generation (model) id (a UUID from search_vehicles). Takes precedence over series_id when both are given.'}, 'series_id': {'type': 'string', 'description': 'Series id (a UUID from search_vehicles).'}}, 'description': 'Pass exactly one of series_id or model_id.', 'additionalProperties': False}
search_vehicles
Search vehicles
Find series by name, maker name, or a generation's chassis code. Series names match by normalized substring (width, case, kana), maker names by prefix, chassis codes by substring of the code as written (a slash-joined code is one string, not split). Returns {query, total, hits: [{series, maker, matched_models}], next_offset} where each series and model carries its public page url; pass the ids in the hits to the other skills. Hits are ranked and cut to fit the response size; when next_offset is not null, call again with offset set to it for the rest. Empty hits means nothing matched the query.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Series name, maker name, or chassis code. Width, case, hiragana/katakana, long vowel marks and hyphens are normalized away before matching.'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Where to start in the list; pass next_offset from the previous response. Omit to start from the beginning.'}}, 'additionalProperties': False}
Changed
get_sales_figures
Sept. 28, 2026, 2:40 a.m.
Changed
get_vehicle_relationships
Sept. 28, 2026, 2:40 a.m.
Changed
get_vehicle
Sept. 28, 2026, 2:40 a.m.
Changed
search_vehicles
Sept. 28, 2026, 2:40 a.m.
Changed
get_sales_figures
Sept. 26, 2026, 2:40 a.m.
Changed
get_vehicle_relationships
Sept. 26, 2026, 2:40 a.m.
Changed
get_vehicle
Sept. 26, 2026, 2:40 a.m.
Changed
search_vehicles
Sept. 26, 2026, 2:40 a.m.
Added
get_sales_figures
Sept. 24, 2026, 2:40 a.m.
Added
get_vehicle_relationships
Sept. 24, 2026, 2:40 a.m.
Added
get_vehicle
Sept. 24, 2026, 2:40 a.m.
Added
search_vehicles
Sept. 24, 2026, 2:40 a.m.