Live search of apartment rentals in any Romanian city, town or commune (storia, publi24, lajumate).
Ask your AI to find you a flat to rent in Romania — any city, town or commune.
An MCP server (and a CLI) that searches storia.ro, publi24.ro and lajumate.ro live, merges the results, removes duplicates and non-rentals, and reads the ad text for the things the site filters don't give you: heating type, parking, private owner vs agency, and walking distance to a place you care about.
Works with Claude (Code & Desktop), Cursor, VS Code, Windsurf, Gemini CLI, Codex and any other MCP client. Also usable as a plain CLI.
"Find me a 2-room flat in Cluj under 500 €, own boiler, with parking, max 20 minutes on foot from UMF."
$ kira search Brasov --rooms 2 --max-price 500 --heating centrala_proprie --limit 3
Brașov, Brașov — 10 matching, showing 3
storia: ok (74 fetched, 374 on site)
publi24: ok (24 fetched)
lajumate: ok (56 fetched, 382 on site)
1. Studio Maurer Villas partial mobilat
500 EUR | 2 cam | 45 mp | heating: centrala_proprie | parking: included
Tractorul, Brasov, Brasov
https://www.storia.ro/ro/oferta/studio-maurer-villas-partial-mobilat-IDIPoX
2. Apartament pe 2 niveluri, 62 mp, zona Faget-Tractorul
400 EUR | 2 cam | 62 mp | heating: centrala_proprie
...
Romanian rental sites each cover part of the market, their filters are thin, and the details that decide a viewing — centrală proprie or termoficare? is the parking spot included or "posibilitate de parcare în zonă"? — live in free text. kira-mcp does the tab-juggling and the reading, so an agent can answer the question you actually asked.
cluj,
tg mures, buc), ambiguous names resolved (Floresti, Prahova).also_listed_on).centrala_proprie / termoficare), parking (included,
likely_included, area_possible, none), rooms, surface, floor, street.
When a filter needs it, the full ad is read, not just the snippet.near="UMF"), geocoded with
OpenStreetMap, with a Google Maps directions link.search_parking).kira-mcp runs through uv, which downloads it and its Python on first use. Nothing else to install.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"curl -LsSf https://astral.sh/uv/install.sh | shClose and reopen the terminal, then check: uvx --version.
claude mcp add kira -s user -- uvx kira-rentals-mcp
Check with claude mcp list → kira: ... ✓ Connected.
claude_desktop_config.json).{
"mcpServers": {
"kira": {
"command": "uvx",
"args": ["kira-rentals-mcp"]
}
}
}
If it says the server failed, use the full path of uvx as command
(where uvx on Windows, which uvx on macOS — e.g.
C:\Users\you\.local\bin\uvx.exe).
Same JSON as Claude Desktop, in ~/.cursor/mcp.json,
~/.codeium/windsurf/mcp_config.json or ~/.gemini/settings.json.
.vscode/mcp.json in your workspace:
{
"servers": {
"kira": {
"type": "stdio",
"command": "uvx",
"args": ["kira-rentals-mcp"]
}
}
}
~/.codex/config.toml:
[mcp_servers.kira]
command = "uvx"
args = ["kira-rentals-mcp"]
uvx kira-rentals-mcp --transport streamable-http --port 8000
serves MCP at http://localhost:8000/mcp.
Just talk to it, in English or Romanian:
The first call takes a few extra seconds while uv downloads the package.
skills/romania-rentals/
into your skills folder (e.g. ~/.claude/skills/). It teaches the agent
when to search and how to read the results, via the MCP tools or the CLI.| Tool | What it does |
|---|---|
search_rentals | Search one locality. Filters: min_price, max_price (EUR/month), rooms, heating, parking, owner_only, keywords, near + max_walk_minutes, sort (newest, price_asc, price_desc, distance), limit. |
get_listing_details | Full description, photos, heating/parking with confidence, for one ad URL. |
search_parking | Parking spots / garages for rent in a locality. |
find_locality | Resolve an ambiguous or misspelled place name; lists candidates with county. |
All tools are read-only. Every result carries the original ad URL.
uvx --from kira-rentals-mcp kira search "Cluj-Napoca" --rooms 2 --max-price 500 --near UMF --max-walk 20 --sort distance
kira search Iasi --heating centrala_proprie --parking included likely_included
kira listing https://www.storia.ro/ro/oferta/...
kira parking Brasov --max-price 80
kira find Floresti
kira --json search Sibiu # machine-readable
| Env var | Default | |
|---|---|---|
KIRA_RON_PER_EUR | 5.0 | Exchange rate for RON prices. |
KIRA_REQUEST_DELAY | 1.2 | Seconds between requests to the same site. |
KIRA_USER_AGENT | kira-mcp/<version> (+repo url) | |
KIRA_CACHE_DIR | OS cache dir | Where geocoding results are cached. |
| Site | Status |
|---|---|
| storia.ro | ✅ server-side price/room filters, pagination |
| publi24.ro | ✅ newest page per search |
| lajumate.ro | ✅ pagination |
| olx.ro | ❌ blocks automated access (HTTP 403) |
| imobiliare.ro | ❌ blocks automated access (HTTP 403) |
kira-mcp does not try to get around a site that blocks it. Results are therefore a large share of the market, not all of it — the tool says so in every response.
Be a good citizen. kira-mcp identifies itself, waits between requests, caches pages for 10 minutes, fetches only what one search needs and returns links back to the sites. It is meant for personal flat-hunting, not bulk harvesting. Check each site's terms before using it for anything else.
Distances are estimates (straight line × 1.3, walking 4.7 km/h). They use the
location the poster entered; an ad with only a neighbourhood gets a
district-precision distance, an ad with neither is listed without one.
git clone https://github.com/Cezart3/kira-mcp && cd kira-mcp
uv sync --group dev
uv run pytest # offline, against synthetic fixtures
KIRA_LIVE=1 uv run pytest -m live # against the real sites
uv run ruff check .
The locality list is rebuilt with uv run python scripts/build_localities.py.
Site parsers live in src/kira_mcp/sites/. Adding a site = one class with
search_rentals and fetch_detail; see sites/base.py.
MIT © 2026 Cezar Tocaciu
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx kira-rentals-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-cezart3-kira-mcp": {
"command": "uvx",
"args": [
"kira-rentals-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencekira-rentals-mcppypiKira — Romanian rentals works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.