{"id":838,"name":"CarGene","description":"Japanese car genealogy with sources. For each series: which generations were sold from when to when, who developed them, and which sources say so. Read-only. Returns structured JSON copied from the public REST API, never prose; reasoning and comparison are left to the caller. Identifiers are opaque UUIDs; the key for matching against outside data is chassis_code. An empty list means 'not researched yet', never 'none'. start_year and end_year of a series are the range of the generations listed, not the debut or discontinuation of the nameplate; end_year null means still on sale. Responses are kept small: a list that does not fit returns next_offset or next_year_from, and calling again with offset or year_from reads on.","card_url":"https://car-gene.com/.well-known/agent-card.json","endpoint":"https://api.car-gene.com/a2a","protocol_version":"1.0","first_seen":"2026-10-07T09:21:33.325454+00:00","last_verified":"2026-10-07T09:27:57.274923+00:00","card":{"name":"CarGene","skills":[{"id":"search_vehicles","name":"Search vehicles","tags":["genealogy","search"],"examples":["AE86","スカイライン","GT-R","{\"skill\": \"search_vehicles\", \"query\": \"カローラ\"}"],"inputModes":["application/json","text/plain"],"description":"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. Send a data part {\"skill\": \"search_vehicles\", \"query\": \"<name or chassis code>\"}, or a plain text part whose whole text is the query. Add \"offset\" to read on.","outputModes":["application/json"]},{"id":"get_vehicle","name":"Get a series with its generations","tags":["genealogy","generations","engineers","sources"],"examples":["{\"skill\": \"get_vehicle\", \"series_id\": \"<uuid from search_vehicles>\"}"],"inputModes":["application/json"],"description":"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. Send {\"skill\": \"get_vehicle\", \"series_id\": \"<uuid>\"} or {\"skill\": \"get_vehicle\", \"model_id\": \"<uuid>\"}.","outputModes":["application/json"]},{"id":"get_vehicle_relationships","name":"Get relationships between generations","tags":["genealogy","relations","succession","siblings"],"examples":["{\"skill\": \"get_vehicle_relationships\", \"model_id\": \"<uuid from search_vehicles>\"}"],"inputModes":["application/json"],"description":"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. Send {\"skill\": \"get_vehicle_relationships\", \"series_id\": \"<uuid>\"} or a model_id. Add \"offset\" to read on.","outputModes":["application/json"]},{"id":"get_sales_figures","name":"Get sales figures","tags":["sales","figures","sources"],"examples":["{\"skill\": \"get_sales_figures\", \"series_id\": \"<uuid from search_vehicles>\"}"],"inputModes":["application/json"],"description":"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. Send {\"skill\": \"get_sales_figures\", \"series_id\": \"<uuid>\"} or a model_id. Add \"region_code\" and \"year_from\" to read a region year by year.","outputModes":["application/json"]}],"version":"0.1.0","provider":{"url":"https://car-gene.com/","organization":"CarGene"},"description":"Japanese car genealogy with sources. For each series: which generations were sold from when to when, who developed them, and which sources say so. Read-only. Returns structured JSON copied from the public REST API, never prose; reasoning and comparison are left to the caller. Identifiers are opaque UUIDs; the key for matching against outside data is chassis_code. An empty list means 'not researched yet', never 'none'. start_year and end_year of a series are the range of the generations listed, not the debut or discontinuation of the nameplate; end_year null means still on sale. Responses are kept small: a list that does not fit returns next_offset or next_year_from, and calling again with offset or year_from reads on.","capabilities":{"streaming":false,"extendedAgentCard":false,"pushNotifications":false},"documentationUrl":"https://car-gene.com/llms.txt","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json"],"supportedInterfaces":[{"url":"https://api.car-gene.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"}]},"signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-10-07T09:27:57.274923+00:00","source_name":"Global A2A Registry","source_url":"https://api.a2a-registry.org/public/agents","last_check":{"checked_at":"2026-10-07T09:27:57.274923+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"skills":[{"skill_id":"get_vehicle","name":"Get a series with its generations","description":"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. Send {\"skill\": \"get_vehicle\", \"series_id\": \"<uuid>\"} or {\"skill\": \"get_vehicle\", \"model_id\": \"<uuid>\"}.","tags":["genealogy","generations","engineers","sources"]},{"skill_id":"get_vehicle_relationships","name":"Get relationships between generations","description":"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. Send {\"skill\": \"get_vehicle_relationships\", \"series_id\": \"<uuid>\"} or a model_id. Add \"offset\" to read on.","tags":["genealogy","relations","succession","siblings"]},{"skill_id":"get_sales_figures","name":"Get sales figures","description":"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. Send {\"skill\": \"get_sales_figures\", \"series_id\": \"<uuid>\"} or a model_id. Add \"region_code\" and \"year_from\" to read a region year by year.","tags":["sales","figures","sources"]},{"skill_id":"search_vehicles","name":"Search vehicles","description":"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. Send a data part {\"skill\": \"search_vehicles\", \"query\": \"<name or chassis code>\"}, or a plain text part whose whole text is the query. Add \"offset\" to read on.","tags":["genealogy","search"]}],"relationships":[]}