# Otodom MCP

> Polish property on Otodom.pl: flats, houses, rooms, plots, commercial to buy or rent; offer details.

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

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

## Connection (mcpServers)

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


## Trust

- hygiene: 80
- liveness: 97
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-93% +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`: 2 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: otodom_search (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); otodom_offer (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- pass `tools.token_cost`: about 1,797 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: 2, about 1,797 tokens to load them all
- tool set hash: be24c6d8f4ab29af0d79db45678c5fee
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.wondel/otodom.svg)](https://protogrid.dev/servers/ai.wondel/otodom)
- 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/otodom/mcp (streamable-http, auth none, reachable true, uptime30d 0.9318182)

## Packages

_none_

## Tools (2)

- `otodom_offer`: Full details of one otodom.pl listing (or a developer's project page): price, czynsz (rent_extra) and deposit (PLN), price per m², area and plot area, rooms, floor and the building's floor count, year built, building type and material, heating, ownership, condition, windows, energy certificate, availability date, market, address with district and coordinates, seller type and agency name, amenities/equipment as `features`, every other stated attribute in `details`, the full description and photo URLs. Contact phone numbers are not returned. For a development project, `development` gives its unit count, area range and completion date. Get the slug from otodom_search. Fetched live from otodom.pl (typically 0.3–1 s via direct fetch; ~5–10 s when it falls back to an unblocker). Result: { source, fetchedAt, offer: { id, slug, url, title, status, type, transaction, kind, market, price, rent_extra, deposit, price_per_m2, currency, price_on_request, area_m2, plot_area_m2, rooms, floor, floors_in_building, year_built, building_type, building_material, heating, ownership, condition, windows, energy_certificate, available_from, address, location_id, geo, seller_type, agency_name, agency_url, date_created, date_modified, features, details, description, photos, development? } }. Codes such as heating 'urban' (district heating) or condition 'ready_to_use' are Otodom's own. A removed listing is an error that says so.
- `otodom_search`: Search property listings on otodom.pl, Poland's largest real-estate portal: flats, studios, houses, rooms, plots, commercial premises, warehouses, garages and developers' new projects, for sale or for rent. Filter by place (a city, 'city district', town, village or voivodeship, resolved by Otodom's own location search), price, area, rooms, private-owner vs agency listings and primary/secondary market; sort by newest, price or area. Returns one results page (24 by default) with each listing's price, czynsz, price per m², area, rooms, floor, place, seller type and link; pass a listing's `slug` to otodom_offer for full details. Fetched live from otodom.pl (typically 0.3–1 s via direct fetch; ~5–10 s when it falls back to an unblocker). Result shape: { source, fetchedAt, query, search_url, heading, resolved_location, other_locations?, total_count, page, page_size, total_pages, count, listings: [...], note?, warning? } — the list key is `listings`; `total_count` counts matches across all pages (use `page` for more). Each listing: { id, slug, url, title, kind, price, rent_extra, price_per_m2, currency, price_on_request, area_m2, plot_area_m2, rooms, floor, location, street, district, city, region, location_id, seller_type, agency_name, features, is_promoted, date_created, image, photos_count, description, development? }. Prices are numbers in PLN: for rentals `price` is the monthly rent, and `rent_extra` is the monthly administrative fee (czynsz) paid on top (stated on sales too); `price` is null with price_on_request true when the advertiser hides it. `floor` is 'ground', '1'…'10', '10+', 'basement' or 'attic'. `kind` is 'new_development' for a developer's project (its units' ranges in `development`), else 'listing'; `seller_type` is private | agency | developer. `resolved_location` says which place was searched — check it; `other_locations` lists other matches for the name (pass one's `id` as `location`). An empty match answers count: 0 with a `note` saying why and what to change — that is a successful result, not an error.
