# OLX MCP

> OLX.pl classifieds in every category: property, cars, electronics, jobs, free items; offer details.

- name: ai.wondel/olx
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 87/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.wondel%2Folx
- tools: https://api.protogrid.dev/v1/servers/ai.wondel%2Folx/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "olx": {
      "type": "http",
      "url": "https://mcp.wondel.ai/olx/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-12d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 87/100 (good)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 3600000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 69 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: olx_offer (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); olx_categories (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); olx_search (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- pass `tools.token_cost`: about 2,216 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 2,216 tokens to load them all
- tool set hash: cc6b5e79817cf82919a7bded1e05e178
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.wondel/olx.svg)](https://protogrid.dev/servers/ai.wondel/olx)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.wondel.ai/olx/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (3)

- `olx_categories`: 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').
- `olx_offer`: 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 } }.
- `olx_search`: 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.
