← Back to all apps
Kleinanzeigen logo

Kleinanzeigen

Open in ChatGPT →

Overview

Tools Available2
Developerkleinanzeigen.de GmbH
CategoryShopping

Kleinanzeigen: Buy & Sell

Available Tools

Kleinanzeigen provides 2 tools that can be used to interact with its services.

Get Category Reference

get_category_reference
Full Description

Return the category/attribute reference line for a given category hint.

Use this BEFORE search_ads whenever you plan to set category or attributes. Input can be a broad category in English or German (cars, phones, apartments, jobs, etc.). The response includes the exact CategoryName and allowed attribute values to use.

Parameters

Required
categorystring

Broad category hint in English or German (cars, phones, apartments, jobs, etc.).

Optional
maxSuggestionsinteger

Max suggestions when no exact category match is found.

Default: 3

Search Ads

search_ads
Full Description

Search Kleinanzeigen listings in Germany.

HARD RULE: NEVER call search_ads without calling get_category_reference first, unless you explicitly set allowGeneric=true.

HARD RULE: Call MCP tools directly (get_category_reference, search_ads). Do NOT call api_tool or any /KA/link wrapper paths.

IMPORTANT RULES: 1. You may use up to TWO tool calls per user request:

  • First call get_category_reference if you need category/attributes.
  • Then call search_ads once with the resolved category/attributes.
  • Do not call search_ads more than once for the same user request.

2. MULTILINGUAL SEARCH

  • CRITICAL: Kleinanzeigen has both German and English listings.
  • For generic nouns (apartment, couch, musician, bicycle, etc.), ALWAYS use queries array with BOTH German AND English terms.
  • This performs OR search - finds listings in either language.
  • WRONG: {"query":"Musiker musician"} <- AND search, returns 0 results
  • RIGHT: {"queries":["Musiker","musician"]} <- OR search, finds all
  • Keep brand names as-is: "iPhone 14 Pro", "PlayStation 5", "BMW" (same in all languages)

2b. USER ALTERNATIVES (or/oder)

  • CRITICAL: When user mentions alternatives like "256 or 512 GB", "rot oder blau", "3 or 4 rooms":
    • If the user uses "or" / "oder" between alternatives, use queries to represent each alternative as a separate OR search.
    • If the user uses "and" / "und", keep the terms together (AND) in query and/or attributes (do NOT split into queries).
    • WRONG: {"query":"iPhone 15 256GB 512GB"} <- AND search, finds nothing
    • RIGHT: {"queries":["iPhone 15 256GB","iPhone 15 512GB"]} <- OR search, finds both variants
    • Works WITH attributes: {"queries":["iPhone 15 256GB","iPhone 15 512GB"],"category":"phones","attributes":{"art":"apple"}}
    • If you use queries, omit query (each entry must be self-contained).
    • If user mixes OR + AND (e.g., "256 or 512 AND white"), duplicate the shared AND terms into each queries[] entry.

3. Search EXACTLY what the user asked for - do not expand or modify criteria.

  • If user says "3 rooms", search for exactly 3 rooms, not 3-6 rooms.
  • If user says "under 10000 euros", use maxPrice=10000, not 15000.
  • If user says "less than 50000 km", use km=[;50000], not a higher value.

4. Prefer structured attributes for filters WHEN possible, but do not invent values.

  • Use ONLY valid values from get_category_reference (do not invent values).
  • Translate user-friendly filter terms to the valid enum values (e.g., "automatic" -> "automatik").
  • If the user mentions a product name that implies a brand/model, map it to the listed value

(e.g., "iPhone" -> art=apple in Handy_Telekom).

  • If the user mentions a value that is not listed/recognized (e.g., trim/variant like "Shelby", "GTI", "AMG"),

DO NOT pass it as an attribute value (it will be ignored). Put it into query (or into each queries[] entry) instead.

  • When using attributes, you may use query OR queries. Use queries for OR variants (multilingual synonyms or "X or Y");

if you use queries, omit query and make each entry self-contained. 5. For vehicle brands/models (cars AND motorcycles), use attributes marke/modell ONLY when you can map to valid values.

  • modell must be a single valid model code (e.g., mustang, mustang_mach_e), not a free-form phrase.
  • Example: "Mustang Shelby" -> {"category":"cars","query":"shelby","attributes":{"marke":"ford","modell":"mustang"}}

6. For apartments, ALWAYS use zimmer/wohnflaeche attributes for rooms/size filters. 7. Category selection:

  • Only set category when the user explicitly mentions the domain/category (cars, motorcycles, apartments, phones, furniture, etc.) OR when required to apply attributes.
  • For specific named products/brands/models, call get_category_reference and set the broad category if it exists.
  • NEVER guess narrow subcategories (e.g. "konsolen", "wohnzimmer"). If you set category, use broad categories only.
  • If unsure, omit category rather than guessing.
  • Safe broad categories: cars, motorcycles, apartments, houses, electronics, phones, computers, laptops, bikes, furniture, jobs, fashion, pets.

8. If you include attributes, you MUST also set category (attributes are category-specific and won't work without it). 9. BEFORE calling search_ads, call get_category_reference when you plan to use category/attributes. 10. When using category/attributes, include categoryRefId from get_category_reference in search_ads. 11. If get_category_reference returns no suitable category, you may call search_ads without category but MUST set allowGeneric=true. 12. Include userText (verbatim user request) in search_ads so the server can recover typos/synonyms.

HARD RULE (repeat): NEVER call search_ads without get_category_reference unless allowGeneric=true.

Examples:

  • "musician jobs" -> {"queries":["Musiker","musician"],"category":"jobs"}
  • "apartment in Berlin" -> {"queries":["Wohnung","apartment"],"location":"Berlin"}
  • "used couch" -> {"queries":["Sofa","Couch","couch"]}
  • "bicycle for kids" -> {"queries":["Kinderfahrrad","Fahrrad Kinder","kids bike"]}
  • "electric cars in Berlin" -> {"category":"cars","location":"Berlin","attributes":{"fuel":"elektro"}}
  • "BMW diesel" -> {"category":"cars","attributes":{"fuel":"diesel","marke":"bmw"}}
  • "Ford Mustang Shelby" -> {"category":"cars","query":"shelby","attributes":{"marke":"ford","modell":"mustang"}}
  • "3 room apartment 50-80 sqm" -> {"category":"apartments","attributes":{"zimmer":"3","wohnflaeche":"[50;80]"}}
  • "PlayStation 5" -> {"query":"PlayStation 5"}
  • "iPhone 14 Pro" -> {"query":"iPhone 14 Pro"}
  • "cars under 10000" -> {"category":"cars","maxPrice":10000}
  • "iPhone 15 with 256 or 512 GB" -> {"queries":["iPhone 15 256GB","iPhone 15 512GB"],"category":"phones"}
  • "red or blue BMW" -> {"queries":["BMW rot","BMW blau"],"category":"cars"}
  • "3 or 4 room apartment" -> {"queries":["3 Zimmer Wohnung","4 Zimmer Wohnung"],"category":"apartments"}

Parameters

Optional
allowGenericboolean

Set to true only if get_category_reference could not find a suitable category.

Default: False
attributesobject

Category-specific filters. Use ONLY values listed in the category/attribute reference for select attributes (do not invent values). If a value is not listed/recognized, omit that attribute and put the term in `query` (or in each `queries[]` entry) instead. If an attribute is listed as `=[many]`, do not use it as an attribute; keep the user value in `query` (or in each `queries[]` entry). For numeric attributes (km, year, etc.), use range syntax: '[;100000]' = less than, '[50000;]' = more than, '[min;max]' = between. For boolean attributes, use 'true' to enable the filter.

categorystring

Category (e.g., 'cars', 'phones', 'bikes', 'furniture').

categoryRefIdinteger

Category reference id returned by get_category_reference.

limitinteger

Number of results (default 25).

Default: 25
locationstring

City in Germany (e.g., 'Berlin', 'Munich'). Omit for all Germany.

maxPriceinteger

Maximum price in EUR.

minPriceinteger

Minimum price in EUR.

queriesarray

OR search: multiple query variants. Use for: (1) user alternatives like '256 or 512 GB' -> ['iPhone 256GB','iPhone 512GB'], (2) multilingual terms -> ['Wohnung','apartment'], (3) batch variants -> ['iPhone 12','iPhone 13']. Works WITH attributes for filtered OR search. Do NOT use `queries` for AND (and/und) constraints; keep those in `query`/`attributes`. If you use `queries`, omit `query` and make each entry self-contained.

querystring

Free text search keywords. Use for specific items like 'iPhone 14 Pro', and for extra details/variants that are not valid attribute values (e.g., 'Shelby', 'GTI', 'AMG'). For OR alternatives (or/oder) or multilingual variants, use `queries` instead.

userTextstring

Verbatim user request. Include this so the server can recover typos/synonyms.