OLX.pl classifieds in every category: property, cars, electronics, jobs, free items; offer details.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Find the category_id for olx_search. Without arguments: OLX's 19 top-level categories. With parent_id: that category's sub-categories (instant, from a snapshot of OLX's category tree). With query: which categories the offers matching those words fall in, with live offer counts, largest first — the quickest way to pick a category for a search term (e.g. 'iphone 13' → Smartfony i telefony komórkowe > iPhone). Result: { source, parent, query?, total_count?, count, categories: [{ id, name, path, has_children, count? }] } — `path` is the full Polish name trail ('Nieruchomości > Mieszkania > Wynajem').
Search words; returns the categories their offers fall in, with counts (one live request).
Force a fresh fetch and bypass this server's result cache (5 min). Default false.
List this category's sub-categories (e.g. 3 = Nieruchomości). With query: scope the counts to it.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http olx https://mcp.wondel.ai/olx/mcp
Find the category_id for olx_search. Without arguments: OLX's 19 top-level categories. With parent_id: that category's sub-categories (instant, from a snapshot of OLX's category tree). With query: which categories the offers matching those words fall in, with live offer counts, largest first — the quickest way to pick a category for a search term (e.g. 'iphone 13' → Smartfony i telefony komórkowe > iPhone). Result: { source, parent, query?, total_count?, count, categories: [{ id, name, path, has_children, count? }] } — `path` is the full Polish name trail ('Nieruchomości > Mieszkania > Wynajem').
| Argument | Type | Description |
|---|---|---|
| query | string | Search words; returns the categories their offers fall in, with counts (one live request). |
| no_cache | boolean | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
| parent_id | integer | List this category's sub-categories (e.g. 3 = Nieruchomości). With query: scope the counts to it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Search words; returns the categories their offers fall in, with counts (one live request)."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
},
"parent_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "List this category's sub-categories (e.g. 3 = Nieruchomości). With query: scope the counts to it.",
"exclusiveMinimum": 0
}
}
}Full details of one OLX.pl offer: price (or salary for a job), every attribute with its Polish name and value (area, rooms, rent, condition, model, year, mileage…), the full description, all photo URLs, location (city, district, voivodeship, map coordinates — often approximate), seller type and public name (company, or the first name a private seller shows), posting/refresh/expiry times, OLX delivery availability, and the original otodom.pl link for partner property listings. No contact details. Fetched live from OLX.pl's public API (typically well under 1 s; a few seconds when it falls back to an unblocker). Result: { source, fetchedAt, offer: { id, url, title, status, category_id, category, price, salary?, area_m2?, rooms?, params: [{ key, name, value }], description, location: { city, city_id, district, district_id, region, region_id, lat, lon, approximate }, seller: { type, name, member_since }, created_time, refreshed_time, valid_to_time, promotion, olx_delivery, photos, external_url } }.
| Argument | Type | Description |
|---|---|---|
| id* | any | The offer's numeric id (e.g. 1100381308) or its OLX URL (…-CID3-ID1ct5rC.html), as returned by olx_search. |
| no_cache | boolean | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
],
"description": "The offer's numeric id (e.g. 1100381308) or its OLX URL (…-CID3-ID1ct5rC.html), as returned by olx_search."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
}
}
}Search offers on OLX.pl, Poland's largest classifieds site, across every category: flats and houses for rent or sale, cars and parts, phones and electronics, furniture, clothes, jobs, services, free items. Filter by words, category, place (city or district, with a radius) or voivodeship, price range, new/used, private vs business seller, and any category-specific attribute via `filters`. Common category_id values: Nieruchomości 3 (flats for rent 15, flats for sale 14, houses for rent 20, houses for sale 18, rooms 11, plots 709), Motoryzacja 5 (passenger cars 84, motorcycles 81, car parts 82), Elektronika 99 (smartphones 1839, laptops 1199, TVs 1849, game consoles 1604), Dom i Ogród 628 (furniture 565), Moda 87, Dla Dzieci 88, Sport i Hobby 767 (bicycles 461), Zwierzęta 103, Praca 4 (jobs), Usługi 4371, Oddam za darmo 1151 (free items). olx_categories lists the full tree and shows which categories a query's offers fall in. Pass an offer's `id` to olx_offer for the full description, all photos and map location. Fetched live from OLX.pl's public API (typically well under 1 s; a few seconds when it falls back to an unblocker). Result shape: { source, fetchedAt, query, resolved_location, total_count, offset, limit, next_offset, count, offers: [...], note? } — the list key is `offers`; `total_count` counts all matches, but OLX pages through only the first 1000 (pass `next_offset` as `offset` for more). Each offer: { id, url, title, price: { value, currency, negotiable, type, label, per?, previous_value? } | null, salary?, area_m2?, rooms?, params, city, district, region, category_id, category, seller_type, promoted, created_time, refreshed_time, photo, photos_count, description, external_url? }. `price.value` is a number in `currency` (PLN) or null when there is no amount. `price.type`: 'price' = the asking price (`negotiable` when the seller accepts offers; for flat/house rentals the monthly rent), 'arranged' (to be agreed) with value null, 'budget' = the advertiser's budget rather than an asking price, 'free' = giveaway with value 0, 'exchange' = swap with value null — so never read a missing amount as 0 PLN. `per` ('hour' | 'day' | 'night' | 'week' | 'month') marks a rate, e.g. equipment rented at 150 PLN per day — the value is then not a total. `previous_value` appears after a price drop. Jobs carry `salary` { from, to, currency, period, gross } instead of a price. `params` maps each attribute's key to its Polish display label (e.g. { state: 'Używane', m: '44,60 m²', rooms: '2 pokoje' }) — the keys are what `filters` use. `description` is a short excerpt; contact details are never included. An empty match answers count: 0 with a `note` saying why and what to change — a successful result, not an error.
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Results per call, 1–50. Default 20. |
| query | string | Search words, matched loosely against titles and descriptions. Polish terms work best ('rower górski', 'kawalerka', 'iphone 13 pro'). Omit to browse a category/place. |
| offset | integer | Skip this many results (0–1000; OLX pages through the first 1000 only). Default 0. |
| region | string | Voivodeship. Alone: search the whole voivodeship. With location: picks among same-name places. |
| filters | object | Category-specific OLX filters (requires category_id). Keys come from an offer's `params` keys: 'filter_float_<key>:from' / ':to' for numbers, 'filter_enum_<key>' for choices (value or list of option keys). Examples — flats: { 'filter_float_m:from': 40, 'filter_float_m:to': 60, 'filter_enum_rooms': ['two', 'three'], 'filter_enum_furniture': 'yes' }; cars (84): { 'filter_float_year:from': 2018, 'filter_float_milage:to': 100000, 'filter_enum_petrol': 'diesel' }. OLX rejects a key the category does not have. |
| sort_by | string | 'relevance', 'newest' (most recently posted or refreshed first), 'price_asc' (cheapest first) or 'price_desc'. Default: OLX's own ordering. |
| location | string | Polish name of a city, town or village, optionally followed by a district: 'Kraków', 'Warszawa Mokotów', 'Gdańsk Wrzeszcz'. English names ('Warsaw') are not recognised; a partial name returns suggestions. Same-name villages: add region to choose. |
| no_cache | boolean | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
| price_to | number | Maximum price in PLN (monthly rent for rentals). |
| condition | string | Item condition (Stan) — goods categories only (electronics, fashion, home…). |
| owner_type | string | 'private' = private individuals only; 'business' = companies/agencies only. |
| price_from | number | Minimum price in PLN (monthly rent for rentals). |
| category_id | integer | OLX category id (see the list above or olx_categories), e.g. 15 = flats for rent. |
| distance_km | integer | Also include offers within this radius of location, in km (OLX offers 2, 5, 10, 15, 30, 50, 75, 100). |
| include_promoted | boolean | Also return OLX's paid top-ad slots (flagged promoted: true). They repeat across pages and ignore sort_by, so they are left out by default. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Results per call, 1–50. Default 20."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Search words, matched loosely against titles and descriptions. Polish terms work best ('rower górski', 'kawalerka', 'iphone 13 pro'). Omit to browse a category/place."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Skip this many results (0–1000; OLX pages through the first 1000 only). Default 0."
},
"region": {
"enum": [
"dolnoslaskie",
"kujawsko-pomorskie",
"lubelskie",
"lubuskie",
"lodzkie",
"malopolskie",
"mazowieckie",
"opolskie",
"podkarpackie",
"podlaskie",
"pomorskie",
"slaskie",
"swietokrzyskie",
"warminsko-mazurskie",
"wielkopolskie",
"zachodniopomorskie"
],
"type": "string",
"description": "Voivodeship. Alone: search the whole voivodeship. With location: picks among same-name places."
},
"filters": {
"type": "object",
"description": "Category-specific OLX filters (requires category_id). Keys come from an offer's `params` keys: 'filter_float_<key>:from' / ':to' for numbers, 'filter_enum_<key>' for choices (value or list of option keys). Examples — flats: { 'filter_float_m:from': 40, 'filter_float_m:to': 60, 'filter_enum_rooms': ['two', 'three'], 'filter_enum_furniture': 'yes' }; cars (84): { 'filter_float_year:from': 2018, 'filter_float_milage:to': 100000, 'filter_enum_petrol': 'diesel' }. OLX rejects a key the category does not have.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
}
]
}
}
]
}
},
"sort_by": {
"enum": [
"relevance",
"newest",
"price_asc",
"price_desc"
],
"type": "string",
"description": "'relevance', 'newest' (most recently posted or refreshed first), 'price_asc' (cheapest first) or 'price_desc'. Default: OLX's own ordering."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Polish name of a city, town or village, optionally followed by a district: 'Kraków', 'Warszawa Mokotów', 'Gdańsk Wrzeszcz'. English names ('Warsaw') are not recognised; a partial name returns suggestions. Same-name villages: add region to choose."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
},
"price_to": {
"type": "number",
"minimum": 0,
"description": "Maximum price in PLN (monthly rent for rentals)."
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"description": "Item condition (Stan) — goods categories only (electronics, fashion, home…)."
},
"owner_type": {
"enum": [
"private",
"business"
],
"type": "string",
"description": "'private' = private individuals only; 'business' = companies/agencies only."
},
"price_from": {
"type": "number",
"minimum": 0,
"description": "Minimum price in PLN (monthly rent for rentals)."
},
"category_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "OLX category id (see the list above or olx_categories), e.g. 15 = flats for rent.",
"exclusiveMinimum": 0
},
"distance_km": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Also include offers within this radius of location, in km (OLX offers 2, 5, 10, 15, 30, 50, 75, 100)."
},
"include_promoted": {
"type": "boolean",
"description": "Also return OLX's paid top-ad slots (flagged promoted: true). They repeat across pages and ignore sort_by, so they are left out by default."
}
}
}