Skip to main content
Glama
karnameh-mcp

karnameh-mcp

by sepehr071

Search used-car ads

kn_cars
Read-onlyIdempotent

Search used-car ads by brand, model, city, price, year and mileage to find listings matching specific criteria.

Instructions

Search Karnameh's used-car ads by brand, model, city, price, year and mileage.

Prices are asking prices in Toman. Pass an ad's id to kn_car for the full ad.

Input Schema

NameRequiredDescriptionDefault
cityNoCity slug from kn_cities, e.g. tehran.
sortNoOrder.newest
brandNoEnglish slug (peugeot) or Persian brand. See kn_brands.
limitNoAds to return.
modelNoModel within the brand, e.g. 206 or Corolla, or Persian.
queryNoPersian free text, e.g. 'پژو 206'.
offsetNoAds to skip.
max_yearNoNewest year, Persian or Gregorian.
min_yearNoOldest year, Persian (1398) or Gregorian.
max_priceNoMaximum price, Toman.
min_priceNoMinimum price, Toman.
max_usage_kmNoMaximum odometer, km.
inspected_onlyNoOnly inspected ads.
installments_onlyNoOnly ads with instalments.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed39 schema fields changedv0.2.0
    • removedInput schema / properties / brand / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / brand / description
      Previous value: -"Brand name, English slug (peugeot, kia, toyota) or Persian (پژو). See kn_brands."New value: +"English slug (peugeot) or Persian brand. See kn_brands."
    • addedInput schema / properties / brand / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / city / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / city / description
      Previous value: -"City slug from kn_cities, e.g. tehran, karaj, mashhad."New value: +"City slug from kn_cities, e.g. tehran."
    • addedInput schema / properties / city / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / inspected_only / description
      Previous value: -"Only ads with a Karnameh expert inspection report."New value: +"Only inspected ads."
    • changedInput schema / properties / installments_only / description
      Previous value: -"Only ads that can be bought in instalments."New value: +"Only ads with instalments."
    • changedInput schema / properties / limit / description
      Previous value: -"How many ads to return (1-50)."New value: +"Ads to return."
    • removedInput schema / properties / max_price / anyOf
      Removed value: -[
      -  {
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / max_price / description
      Previous value: -"Maximum price in Toman."New value: +"Maximum price, Toman."
    • addedInput schema / properties / max_price / minimum
      Added value: +0
    • addedInput schema / properties / max_price / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / max_usage_km / anyOf
      Removed value: -[
      -  {
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / max_usage_km / description
      Previous value: -"Maximum odometer reading in km."New value: +"Maximum odometer, km."
    • addedInput schema / properties / max_usage_km / minimum
      Added value: +0
    • addedInput schema / properties / max_usage_km / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / max_year / anyOf
      Removed value: -[
      -  {
      -    "maximum": 2100,
      -    "minimum": 1300,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / max_year / description
      Previous value: -"Newest model year, Persian or Gregorian."New value: +"Newest year, Persian or Gregorian."
    • addedInput schema / properties / max_year / maximum
      Added value: +2100
    • addedInput schema / properties / max_year / minimum
      Added value: +1300
    • addedInput schema / properties / max_year / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / min_price / anyOf
      Removed value: -[
      -  {
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / min_price / description
      Previous value: -"Minimum price in Toman, e.g. 1000000000 for one billion."New value: +"Minimum price, Toman."
    • addedInput schema / properties / min_price / minimum
      Added value: +0
    • addedInput schema / properties / min_price / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / min_year / anyOf
      Removed value: -[
      -  {
      -    "maximum": 2100,
      -    "minimum": 1300,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / min_year / description
      Previous value: -"Oldest model year, Persian (1398) or Gregorian (2019)."New value: +"Oldest year, Persian (1398) or Gregorian."
    • addedInput schema / properties / min_year / maximum
      Added value: +2100
    • addedInput schema / properties / min_year / minimum
      Added value: +1300
    • addedInput schema / properties / min_year / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / model / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / model / description
      Previous value: -"Model name within the brand, e.g. 206 or Corolla (English as listed by kn_brands) or Persian."New value: +"Model within the brand, e.g. 206 or Corolla, or Persian."
    • addedInput schema / properties / model / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / offset / description
      Previous value: -"Skip this many ads (paging)."New value: +"Ads to skip."
    • removedInput schema / properties / query / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / query / description
      Previous value: -"Free text in Persian, e.g. 'سمند' or 'پژو 206'. Use brand/model for exact filters."New value: +"Persian free text, e.g. 'پژو 206'."
    • addedInput schema / properties / query / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / sort / description
      Previous value: -"Result order."New value: +"Order."
  2. First observedv0.1.1

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuine context the annotations do not: values are asking prices denominated in Toman, and results are ad stubs that hand off to kn_car via id. It does not discuss pagination semantics or result-set behavior, keeping it below a 5.

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?

Two short sentences, front-loaded with the core action and ending with the handoff instruction. Every clause carries information; nothing is redundant padding.

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

Completeness4/5

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

For a 14-parameter filter tool with no output schema, the description plus a fully documented schema is sufficient to call it correctly, and the kn_car handoff implies the returned shape (ads carrying an id). Minor gap: no note on the default sort/newest ordering or how offset/limit combine for result paging.

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%, so every one of the 14 parameters is already documented, including format hints like Persian/Gregorian years and slug sources (kn_cities, kn_brands). The description only re-lists a subset of facets, adding no syntax or semantic detail beyond the schema. Baseline 3 applies.

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?

States a specific verb and resource ("Search Karnameh's used-car ads") and names the filterable facets (brand, model, city, price, year, mileage). It explicitly distinguishes itself from sibling kn_car, which returns the full ad for a given id.

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

Usage Guidelines4/5

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

Clear usage context: this is the discovery/listing step, and "Pass an ad's `id` to kn_car for the full ad" names the correct next tool. It lacks explicit exclusions (e.g. when to use kn_specs_search or kn_price_list instead of ad search), so it stops short of full when/when-not guidance.

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