Skip to main content
Glama

KentekenKompas

compare_vehicle_models

Read-onlyIdempotent

Read one stored sourceModelKey-to-targetModelKey relation, not a generated comparison. Returns model keys, relationType/meaning and rationale, with evidence, sources and citations. Preserve classification and limitations; do not strengthen the stored claims. Only DIRECT_ALTERNATIVE denotes a direct alternative. Existing models need not have a relation; the reverse direction is a separate lookup. Use get_model_context for one model and its peers, or search_vehicle_knowledge to discover keys. Unknown model returns MODEL_NOT_FOUND; self/missing relation returns COMPARISON_NOT_AVAILABLE. Public read-only access; no knowledge writes. Calls consume rate limits.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceModelKeyYesRequired exact canonical model key whose stored outgoing peer relation is read. 1–200 lowercase ASCII letters/digits in single-hyphen-separated groups, e.g. volkswagen-golf; exact match, direction matters. Use get_model_context to discover peers.
targetModelKeyYesRequired exact canonical key of the target in the source model's stored peers. 1–200 lowercase ASCII letters/digits in single-hyphen-separated groups; exact match, must differ from sourceModelKey. Existence of two models does not guarantee a relation.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYesTool-specific successful result. Search returns an array (possibly empty); exact tools return the requested record or projection. Tool errors use a separate isError envelope.
sourcesYesResolved public SOURCE/SOURCE_GROUP records supporting this result. Search may leave this empty; use get_source_context for a discovered source ID.
coverageNoAvailable coverage metadata; incomplete or absent coverage is not an assurance of complete knowledge. Preserve limitations.
evidenceYesExposed evidence references with classifications and source IDs. May be empty (including search); not proof that knowledge has no provenance.
freshnessYesAvailable freshness metadata. Distinguish dataAsOf, sourceCheckedAt, editorialReviewedAt and generatedAt; missing fields do not mean current.
citationUrlNoHuman-readable KentekenKompas citation URL for this record/context; distinct from an original sourceUrl and a kk:// resource identity.
limitationsYesExplicit scope and interpretation limits to preserve in client answers. Empty does not certify complete coverage.
schemaVersionYesTransport envelope contract kk-api-v1; distinct from the nested knowledge schema, knowledgeVersion and server version.
knowledgeVersionYesActive knowledge release identifier from its manifest; not the API contract or MCP/registry server version.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed31 schema fields changed
    • addedInput schema / properties / sourceModelKey / description
      Added value: +"Required exact canonical model key whose stored outgoing peer relation is read. 1–200 lowercase ASCII letters/digits in single-hyphen-separated groups, e.g. volkswagen-golf; exact match, direction matters. Use get_model_context to discover peers."
    • addedInput schema / properties / targetModelKey / description
      Added value: +"Required exact canonical key of the target in the source model's stored peers. 1–200 lowercase ASCII letters/digits in single-hyphen-separated groups; exact match, must differ from sourceModelKey. Existence of two models does not guarantee a relation."
    • addedOutput schema / properties / citationUrl / description
      Added value: +"Human-readable KentekenKompas citation URL for this record/context; distinct from an original sourceUrl and a kk:// resource identity."
    • addedOutput schema / properties / coverage / description
      Added value: +"Available coverage metadata; incomplete or absent coverage is not an assurance of complete knowledge. Preserve limitations."
    • addedOutput schema / properties / data / description
      Added value: +"Tool-specific successful result. Search returns an array (possibly empty); exact tools return the requested record or projection. Tool errors use a separate isError envelope."
    • addedOutput schema / properties / data / properties / citationUrl / description
      Added value: +"Human-readable KentekenKompas citation URL for this record/context; distinct from an original sourceUrl and a kk:// resource identity."
    • addedOutput schema / properties / data / properties / classification / description
      Added value: +"Knowledge classification: OFFICIAL, reproducibly DERIVED, or EDITORIAL. Preserve this label; it is not a confidence score."
    • addedOutput schema / properties / data / properties / importantDifference / description
      Added value: +"Optional published difference between these models; absent means not supplied."
    • addedOutput schema / properties / data / properties / label / description
      Added value: +"Human-readable label supplied by the knowledge record."
    • addedOutput schema / properties / data / properties / limitations / description
      Added value: +"Explicit scope and interpretation limits to preserve in client answers. Empty does not certify complete coverage."
    • addedOutput schema / properties / data / properties / rationale / description
      Added value: +"Published semantic rationale when supplied, otherwise the stored reasons; not newly generated explanation."
    • addedOutput schema / properties / data / properties / reasons / description
      Added value: +"Published reasons for the stored comparison relation."
    • addedOutput schema / properties / data / properties / relationMeaning / description
      Added value: +"Human-readable interpretation of the stored relationType."
    • addedOutput schema / properties / data / properties / relationType / description
      Added value: +"Stored relation kind. CONTROL_MODEL, POWERTRAIN_CONTRAST and CROSS_BODY_COMPARISON must not be called direct alternatives."
    • addedOutput schema / properties / data / properties / sourceModelKey / description
      Added value: +"Canonical source model key of the directed stored comparison relation."
    • addedOutput schema / properties / data / properties / targetModelKey / description
      Added value: +"Canonical target model key of the directed stored comparison relation."
    • addedOutput schema / properties / evidence / description
      Added value: +"Exposed evidence references with classifications and source IDs. May be empty (including search); not proof that knowledge has no provenance."
    • addedOutput schema / properties / evidence / items / properties / classification / description
      Added value: +"Knowledge classification: OFFICIAL, reproducibly DERIVED, or EDITORIAL. Preserve this label; it is not a confidence score."
    • addedOutput schema / properties / evidence / items / properties / evidenceId / description
      Added value: +"Identifier of a cited evidence reference; resolve its sourceIds for provenance, not as a confidence score."
    • addedOutput schema / properties / evidence / items / properties / sourceIds / description
      Added value: +"Opaque IDs of supporting public sources or source groups. An empty array means no references exposed here, not proof of completeness."
    • addedOutput schema / properties / evidence / items / properties / sourceIds / items / description
      Added value: +"Opaque public SOURCE or SOURCE_GROUP ID, 1–200 characters; lowercase ASCII letters/digits with dot, colon or hyphen separators as specified by the pattern. Copy exactly from sources or search; never split or reconstruct composite-looking IDs."
    • addedOutput schema / properties / freshness / description
      Added value: +"Available freshness metadata. Distinguish dataAsOf, sourceCheckedAt, editorialReviewedAt and generatedAt; missing fields do not mean current."
    • addedOutput schema / properties / freshness / properties / dataAsOf / description
      Added value: +"Optional date/time to which the underlying data relates; absent means not supplied, not current."
    • addedOutput schema / properties / freshness / properties / editorialReviewedAt / description
      Added value: +"Optional date/time of editorial review; does not certify that all underlying data was refreshed."
    • addedOutput schema / properties / freshness / properties / generatedAt / description
      Added value: +"Timestamp of generation. At envelope level this is the active manifest's generatedAt, not a source refresh or publication date."
    • addedOutput schema / properties / freshness / properties / sourceCheckedAt / description
      Added value: +"Optional date/time when the source was checked, not necessarily the date the data describes."
    • addedOutput schema / properties / knowledgeVersion / description
      Added value: +"Active knowledge release identifier from its manifest; not the API contract or MCP/registry server version."
    • addedOutput schema / properties / limitations / description
      Added value: +"Explicit scope and interpretation limits to preserve in client answers. Empty does not certify complete coverage."
    • addedOutput schema / properties / schemaVersion / description
      Added value: +"Transport envelope contract kk-api-v1; distinct from the nested knowledge schema, knowledgeVersion and server version."
    • addedOutput schema / properties / sources / description
      Added value: +"Resolved public SOURCE/SOURCE_GROUP records supporting this result. Search may leave this empty; use get_source_context for a discovered source ID."
    • changedOutput schema / properties / sources / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "category": {
      -        "enum": [
      -          "OFFICIAL_PRIMARY_DATA",
      -          "OFFICIAL_GUIDANCE",
      -          "PRIMARY_NON_GOVERNMENT",
      -          "REPUTABLE_EDITORIAL",
      -          "BACKGROUND_REFERENCE",
      -          "KENTEKENKOMPAS_DERIVED",
      -          "KENTEKENKOMPAS_EDITORIAL"
      -        ],
      -        "type": "string"
      -      },
      -      "citationUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "freshness": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "kind": {
      -        "const": "SOURCE",
      -        "type": "string"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "limitations": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "sourceId": {
      -        "maxLength": 200,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      -        "type": "string"
      -      },
      -      "sourceUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "visibility": {
      -        "const": "PUBLIC",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "sourceId",
      -      "kind",
      -      "visibility",
      -      "label",
      -      "category",
      -      "citationUrl",
      -      "sourceUrl",
      -      "freshness",
      -      "limitations"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "category": {
      -        "enum": [
      -          "OFFICIAL_PRIMARY_DATA",
      -          "OFFICIAL_GUIDANCE",
      -          "PRIMARY_NON_GOVERNMENT",
      -          "REPUTABLE_EDITORIAL",
      -          "BACKGROUND_REFERENCE",
      -          "KENTEKENKOMPAS_DERIVED",
      -          "KENTEKENKOMPAS_EDITORIAL"
      -        ],
      -        "type": "string"
      -      },
      -      "citationUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "citationUrls": {
      -        "items": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "freshness": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "kind": {
      -        "const": "SOURCE_GROUP",
      -        "type": "string"
      -      },
      -      "label": {
      -        "type": "string"
      -      },
      -      "limitations": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "memberOrderMeaning": {
      -        "type": "string"
      -      },
      -      "memberSourceIds": {
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "sourceId": {
      -        "maxLength": 200,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      -        "type": "string"
      -      },
      -      "visibility": {
      -        "const": "PUBLIC",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "sourceId",
      -      "kind",
      -      "visibility",
      -      "label",
      -      "category",
      -      "citationUrl",
      -      "description",
      -      "memberSourceIds",
      -      "memberOrderMeaning",
      -      "citationUrls",
      -      "freshness",
      -      "limitations"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "category": {
      +        "description": "Detailed provenance category. Keep it distinct from the coarser OFFICIAL/DERIVED/EDITORIAL classification.",
      +        "enum": [
      +          "OFFICIAL_PRIMARY_DATA",
      +          "OFFICIAL_GUIDANCE",
      +          "PRIMARY_NON_GOVERNMENT",
      +          "REPUTABLE_EDITORIAL",
      +          "BACKGROUND_REFERENCE",
      +          "KENTEKENKOMPAS_DERIVED",
      +          "KENTEKENKOMPAS_EDITORIAL"
      +        ],
      +        "type": "string"
      +      },
      +      "citationUrl": {
      +        "description": "Human-readable KentekenKompas citation URL for this record/context; distinct from an original sourceUrl and a kk:// resource identity.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "freshness": {
      +        "additionalProperties": {},
      +        "description": "Available freshness metadata. Distinguish dataAsOf, sourceCheckedAt, editorialReviewedAt and generatedAt; missing fields do not mean current.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "kind": {
      +        "const": "SOURCE",
      +        "description": "Discriminator: SOURCE is one public source; SOURCE_GROUP is an explicit grouped provenance record.",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Human-readable label supplied by the knowledge record.",
      +        "type": "string"
      +      },
      +      "limitations": {
      +        "description": "Explicit scope and interpretation limits to preserve in client answers. Empty does not certify complete coverage.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "sourceId": {
      +        "description": "Opaque public SOURCE or SOURCE_GROUP ID, 1–200 characters; lowercase ASCII letters/digits with dot, colon or hyphen separators as specified by the pattern. Copy exactly from sources or search; never split or reconstruct composite-looking IDs.",
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      +        "type": "string"
      +      },
      +      "sourceUrl": {
      +        "description": "Original public source URL for a SOURCE record; distinct from the KentekenKompas explanation URL.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "visibility": {
      +        "const": "PUBLIC",
      +        "description": "PUBLIC marks provenance permitted in the public knowledge contract.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "sourceId",
      +      "kind",
      +      "visibility",
      +      "label",
      +      "category",
      +      "citationUrl",
      +      "sourceUrl",
      +      "freshness",
      +      "limitations"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "category": {
      +        "description": "Detailed provenance category. Keep it distinct from the coarser OFFICIAL/DERIVED/EDITORIAL classification.",
      +        "enum": [
      +          "OFFICIAL_PRIMARY_DATA",
      +          "OFFICIAL_GUIDANCE",
      +          "PRIMARY_NON_GOVERNMENT",
      +          "REPUTABLE_EDITORIAL",
      +          "BACKGROUND_REFERENCE",
      +          "KENTEKENKOMPAS_DERIVED",
      +          "KENTEKENKOMPAS_EDITORIAL"
      +        ],
      +        "type": "string"
      +      },
      +      "citationUrl": {
      +        "description": "Human-readable KentekenKompas citation URL for this record/context; distinct from an original sourceUrl and a kk:// resource identity.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "citationUrls": {
      +        "description": "Human-readable citation links associated with the group; not its members' sourceUrl fields.",
      +        "items": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "Public explanation of the source group's purpose and composition.",
      +        "type": "string"
      +      },
      +      "freshness": {
      +        "additionalProperties": {},
      +        "description": "Available freshness metadata. Distinguish dataAsOf, sourceCheckedAt, editorialReviewedAt and generatedAt; missing fields do not mean current.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "kind": {
      +        "const": "SOURCE_GROUP",
      +        "description": "Discriminator: SOURCE is one public source; SOURCE_GROUP is an explicit grouped provenance record.",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Human-readable label supplied by the knowledge record.",
      +        "type": "string"
      +      },
      +      "limitations": {
      +        "description": "Explicit scope and interpretation limits to preserve in client answers. Empty does not certify complete coverage.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "memberOrderMeaning": {
      +        "description": "Explanation of whether/how member ordering matters; do not infer ranking or chronology.",
      +        "type": "string"
      +      },
      +      "memberSourceIds": {
      +        "description": "Explicit, non-empty list of source IDs belonging to this group; use these rather than splitting the group's opaque sourceId.",
      +        "items": {
      +          "description": "Opaque public SOURCE or SOURCE_GROUP ID, 1–200 characters; lowercase ASCII letters/digits with dot, colon or hyphen separators as specified by the pattern. Copy exactly from sources or search; never split or reconstruct composite-looking IDs.",
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "sourceId": {
      +        "description": "Opaque public SOURCE or SOURCE_GROUP ID, 1–200 characters; lowercase ASCII letters/digits with dot, colon or hyphen separators as specified by the pattern. Copy exactly from sources or search; never split or reconstruct composite-looking IDs.",
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:[.:-][a-z0-9-]+)*$",
      +        "type": "string"
      +      },
      +      "visibility": {
      +        "const": "PUBLIC",
      +        "description": "PUBLIC marks provenance permitted in the public knowledge contract.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "sourceId",
      +      "kind",
      +      "visibility",
      +      "label",
      +      "category",
      +      "citationUrl",
      +      "description",
      +      "memberSourceIds",
      +      "memberOrderMeaning",
      +      "citationUrls",
      +      "freshness",
      +      "limitations"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive. The description adds significant extra behavior: no knowledge writes, rate-limit consumption, exact error codes (MODEL_NOT_FOUND, COMPARISON_NOT_AVAILABLE), and the instruction not to strengthen stored claims. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: core purpose, return content, behavioral constraints, alternative tools, error conditions, and access implications. The key differentiator ('not a generated comparison') is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a two-parameter lookup tool: purpose, relation semantics, error cases, sibling routing, access rights, rate limits, and output content are all covered. An output schema exists, so return-value structure does not need to be restated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents exact canonical keys, directionality, and the no-guaranteed-relation caveat. The description reinforces these concepts but does not add much parameter-specific meaning beyond what the schema provides, so the high-coverage baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Read one stored sourceModelKey-to-targetModelKey relation', and immediately clarifies it is not a generated comparison. This distinguishes it from any hypothetical comparison tool and from the sibling lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit alternatives are given: use get_model_context for one model and its peers, or search_vehicle_knowledge to discover keys. It also clearly states that only DIRECT_ALTERNATIVE denotes a direct alternative and that the reverse direction is a separate lookup, leaving no ambiguity about when or how to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources