OLX MCP
Server Details
OLX.pl classifieds in every category: property, cars, electronics, jobs, free items; offer details.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
The three tools have clearly distinct purposes: category tree lookup, offer search, and single-offer details. Descriptions explicitly cross-reference each other (e.g., olx_categories finds category_id for olx_search), leaving no ambiguity.
All tool names follow a consistent olx_ + noun pattern (olx_categories, olx_offer, olx_search) with uniform snake_case. The convention is predictable and easy to remember.
Three tools are exactly what a read-only classifieds search integration needs: browse categories, search offers, and inspect individual offers. Each tool earns its place without redundancy.
The surface covers the full read-only lifecycle: find a category, search offers with filtering and pagination, and retrieve full details for a specific offer. No essential operation is missing for the stated search-and-browse purpose.
Available Tools
3 toolsolx_categoriesBrowse OLX.pl categoriesAInspect
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').
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search words; returns the categories their offers fall in, with counts (one live request). | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. | |
| parent_id | No | List this category's sub-categories (e.g. 3 = Nieruchomości). With query: scope the counts to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does substantial disclosure: parent_id results come instantly from a snapshot, query mode makes one live request, counts are live, and results are sorted largest first. It also documents the response shape, though it does not cover error behavior, permissions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, opening with the tool's purpose and then covering each mode and the result shape. Given the absence of an output schema, including the result format earns its place rather than being redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter browse tool with no output schema and no annotations, the description covers the missing context well: all operating modes, data freshness trade-offs, ordering, and the returned fields. An agent has enough information to invoke it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: no arguments returns 19 top-level categories, parent_id lists sub-categories, and query returns categories with live offer counts ordered largest first. It also explains that path is a full Polish name trail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and goal: finding a category_id for olx_search. It distinguishes all three modes of operation and names the sibling tool it feeds into, so an agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to call without arguments, with parent_id, and with query, including why the query mode is useful: it is the quickest way to pick a category for a search term. This gives clear mode-selection guidance and ties the tool to olx_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
olx_offerGet one OLX.pl offerAInspect
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 } }.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The offer's numeric id (e.g. 1100381308) or its OLX URL (…-CID3-ID1ct5rC.html), as returned by olx_search. | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does well: it discloses the live public-API fetch, typical latency and an unblocker fallback path, that coordinates are 'often approximate', that contact details are excluded, and that the price field becomes salary for job offers. It stops short of describing failure behavior (expired/removed offers, invalid ids).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the returned-field inventory and fetch characteristics. The dense semicolon-chained field list is long but every clause adds information, and the explicit result shape matters since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no annotations and no output schema, the description supplies the field inventory, fetch timing and the caveat about approximate coordinates, so an agent knows what it will get. The main omission is error/empty-result behavior for stale or nonexistent offer ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with id (numeric or OLX URL) and no_cache both documented in the schema, so the baseline is 3. The description adds nothing about either parameter — the URL-vs-numeric id flexibility is stated only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Full details of one OLX.pl offer') and enumerates exactly what is returned: price/salary, attributes with Polish names, description, photos, location, seller, timestamps, delivery, external link. This is unmistakably distinct from the listing-oriented siblings olx_search and olx_categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Full details of one... offer' suggests calling it after a search to expand a single result, and the schema's id description points to olx_search. But the description itself never states when to use this versus olx_search, nor what to do when the id is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
olx_searchSearch OLX.pl classifiedsAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per call, 1–50. Default 20. | |
| query | No | 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 | No | Skip this many results (0–1000; OLX pages through the first 1000 only). Default 0. | |
| region | No | Voivodeship. Alone: search the whole voivodeship. With location: picks among same-name places. | |
| filters | No | 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 | No | 'relevance', 'newest' (most recently posted or refreshed first), 'price_asc' (cheapest first) or 'price_desc'. Default: OLX's own ordering. | |
| location | No | 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 | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. | |
| price_to | No | Maximum price in PLN (monthly rent for rentals). | |
| condition | No | Item condition (Stan) — goods categories only (electronics, fashion, home…). | |
| owner_type | No | 'private' = private individuals only; 'business' = companies/agencies only. | |
| price_from | No | Minimum price in PLN (monthly rent for rentals). | |
| category_id | No | OLX category id (see the list above or olx_categories), e.g. 15 = flats for rent. | |
| distance_km | No | Also include offers within this radius of location, in km (OLX offers 2, 5, 10, 15, 30, 50, 75, 100). | |
| include_promoted | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | Yes | |
| limit | Yes | |
| query | Yes | |
| offers | Yes | |
| offset | Yes | |
| source | Yes | |
| fetchedAt | Yes | |
| next_offset | No | |
| total_count | No | |
| resolved_location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses typical latency, unblocker fallback, the 1000-result paging limit, default exclusion of promoted ads, and that empty matches are successful results with a note. It also explains price-type semantics so missing values are never misread as 0 PLN.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and category IDs, but then becomes a dense wall that duplicates output-shape and per-offer field documentation already covered by the output schema. Those details are behaviorally informative but make the description longer than necessary for tool selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter search tool with nested filters and an output schema, the description covers everything an agent needs: category taxonomy, filter construction, pagination behavior, price semantics, seller/condition constraints, and empty-result handling. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds useful meaning by listing common category_id values and explaining that filter keys derive from an offer's `params` keys. The filters schema itself contains examples, so the added value is real but partially overlapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (OLX.pl classifieds) and enumerates supported categories and filters. It distinguishes itself from siblings by naming olx_categories for the taxonomy and olx_offer for full offer details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use olx_categories for the full tree and category distribution, and pass an offer's id to olx_offer for descriptions, photos, and map location. It also explains when to omit the query to browse a category/place and how to handle empty results as successful answers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
olx_categories - First observed
olx_offer - First observed
olx_search
Related MCP Connectors
Polish property on Otodom.pl: flats, houses, rooms, plots, commercial to buy or rent; offer details.
21Polish property listings on nieruchomosci-online.pl: flats, houses, plots, premises to buy or rent.
21Polish property on Gratka.pl/Morizon.pl (one database): flats, houses, plots, premises, buy or rent.
41Ukrainian classifieds: search ads, shops and online booking; post ads and run your business
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for OLX marketplace. Enables AI assistants to search listings, get offer details, track prices over time, and compare offers across OLX Poland and other supported countries.63 npm4MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to search and retrieve detailed classified listings, including specifications, images, and seller info, from OLX India.29 npm2MIT

cenogram-mcp-serverofficial
AlicenseAqualityAmaintenance7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices30105 npm1MIT- AlicenseAqualityCmaintenanceEnables searching and retrieving details from OLX classifieds across multiple domains (Portugal, Poland, Bulgaria, Romania, Ukraine) using browser automation.263 npm28MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.