rental-scraper-mcp
MCP server for scraping Italian rental/sale property listings from multiple real estate portals (Immobiliare.it, Casa.it, and extensible to others) using Camoufox (anti-detection browser) and BeautifulSoup. Plugin architecture — each site is a self-contained adapter with its own URL templates, query param mappings, and CSS selector chains. Use this skill whenever the user wants to search for apartments, houses, or properties in Italy, scrape real estate listings, compare rental prices across Italian cities, or extract property data from Italian portals. Triggers on mentions of immobiliare, casa.it, Italian rentals, affitto, vendita, apartment hunting in Italy, or property scraping.
The English summary is being prepared. Showing the original description.
See how to installFiles included (128)
- SKILL.md2.5 KB
- .env.example2.8 KB
- .gitignore543 B
- .planning/codebase/ARCHITECTURE.md8.0 KB
- .planning/codebase/CONCERNS.md15.8 KB
- .planning/codebase/CONVENTIONS.md8.4 KB
- .planning/codebase/INTEGRATIONS.md5.3 KB
- .planning/codebase/STACK.md4.1 KB
- .planning/codebase/STRUCTURE.md12.3 KB
- .planning/codebase/TESTING.md10.1 KB
- .planning/config.json310 B
- .planning/phases/01-browser-reliability/01-01-PLAN.md6.1 KB
- .planning/phases/01-browser-reliability/01-01-SUMMARY.md1.2 KB
- .planning/phases/01-browser-reliability/01-01-VERIFICATION.md2.8 KB
- .planning/phases/01-browser-reliability/01-RESEARCH.md6.4 KB
- .planning/phases/01-browser-reliability/01-VALIDATION.md1.9 KB
- .planning/phases/02-job-runner-reliability/02-01-PLAN.md11.8 KB
- .planning/phases/02-job-runner-reliability/02-01-SUMMARY.md3.2 KB
- .planning/phases/02-job-runner-reliability/02-RESEARCH.md16.7 KB
- .planning/phases/02-job-runner-reliability/02-VALIDATION.md2.1 KB
- .planning/phases/02-job-runner-reliability/02-VERIFICATION.md5.0 KB
- .planning/phases/03-llm-scoring-observability/03-01-PLAN.md22.2 KB
- .planning/phases/03-llm-scoring-observability/03-01-SUMMARY.md6.0 KB
- .planning/phases/03-llm-scoring-observability/03-RESEARCH.md23.8 KB
- .planning/phases/03-llm-scoring-observability/03-VALIDATION.md2.5 KB
- .planning/phases/04-notion-fail-fast/04-01-PLAN.md14.0 KB
- .planning/phases/04-notion-fail-fast/04-CONTEXT.md3.5 KB
- .planning/phases/04-notion-fail-fast/04-RESEARCH.md14.3 KB
- .planning/phases/04-notion-fail-fast/04-VALIDATION.md1.9 KB
- .planning/PROJECT.md3.8 KB
- .planning/quick/1-env-var-check/PLAN.md659 B
- .planning/quick/1-env-var-check/SUMMARY.md639 B
- .planning/REQUIREMENTS.md3.5 KB
- .planning/ROADMAP.md4.7 KB
- .planning/STATE.md3.1 KB
- config/default_areas_casa.txt204 B
- config/default_areas_idealista.txt298 B
- config/default_areas_immobiliare.txt245 B
- config/default_areas.txt337 B
- data/.gitkeep0 B
- data/app.db-journal0 B
- docker-compose.yml665 B
- docs/2026-03-14-dashboard-improvements-implementation.md3.6 KB
- docs/running-locally.md6.4 KB
- docs/screenshots/.gitkeep0 B
- docs/screenshots/listings.png516.2 KB
- docs/screenshots/monitor.png259.5 KB
- docs/screenshots/search-configs.png240.7 KB
- docs/screenshots/site-settings.png332.7 KB
- docs/screenshots/stats.png255.7 KB
- docs/superpowers/handoff/2026-03-14-streamlit-docker-handoff.md31.8 KB
- docs/superpowers/plans/2026-03-14-dashboard-improvements.md20.8 KB
- docs/superpowers/plans/2026-03-14-langgraph-analysis-notion-push.md43.7 KB
- docs/superpowers/plans/2026-03-14-readme-docs-update.md25.8 KB
- docs/superpowers/plans/2026-03-14-streamlit-docker-platform.md60.0 KB
- docs/superpowers/plans/2026-03-15-notion-push-on-demand.md19.2 KB
- docs/superpowers/plans/2026-03-16-uv-migration.md17.9 KB
- docs/superpowers/specs/2026-03-14-dashboard-improvements-design.md11.3 KB
- docs/superpowers/specs/2026-03-14-langgraph-analysis-notion-push-design.md12.1 KB
- docs/superpowers/specs/2026-03-14-readme-docs-update-design.md6.9 KB
- docs/superpowers/specs/2026-03-14-streamlit-docker-frontend-design.md13.6 KB
- docs/superpowers/specs/2026-03-15-notion-push-on-demand-design.md5.8 KB
- docs/superpowers/specs/2026-03-16-uv-migration-design.md3.4 KB
- LICENSE1.0 KB
- mcp_config_example.json174 B
- preferences.txt562 B
- pyproject.toml1.0 KB
- pytest.ini46 B
- README.md15.3 KB
- scrape_multiple_areas_casa.sh5.0 KB
- scrape_multiple_areas_idealista.sh4.1 KB
- scrape_multiple_areas.sh5.0 KB
- scripts/process_listings.py4.7 KB
- src/apt_scrape/__init__.py218 B
- src/apt_scrape/analysis.py15.2 KB
- src/apt_scrape/cli.py18.8 KB
- src/apt_scrape/devctl.py6.1 KB
- src/apt_scrape/enrichment.py8.9 KB
- src/apt_scrape/export.py3.1 KB
- src/apt_scrape/notion_push.py14.5 KB
- src/apt_scrape/server.py35.4 KB
- src/apt_scrape/sites/__init__.py5.1 KB
- src/apt_scrape/sites/base.py30.7 KB
- src/apt_scrape/sites/casa.py3.6 KB
- src/apt_scrape/sites/configs/casa.yaml3.5 KB
- src/apt_scrape/sites/configs/idealista.yaml4.0 KB
- src/apt_scrape/sites/configs/immobiliare.yaml3.5 KB
- src/apt_scrape/sites/idealista.py9.8 KB
- src/apt_scrape/sites/immobiliare.py10.9 KB
- src/backend/__init__.py0 B
- src/backend/db.py5.9 KB
- src/backend/Dockerfile834 B
- src/backend/main.py1.2 KB
- src/backend/routers/__init__.py0 B
- src/backend/routers/configs.py4.1 KB
- src/backend/routers/jobs.py4.4 KB
- src/backend/routers/listings.py4.4 KB
- src/backend/routers/preferences.py957 B
- src/backend/routers/sites.py5.9 KB
- src/backend/runner.py12.5 KB
- src/backend/scheduler.py3.6 KB
- src/frontend/api.py1.9 KB
- src/frontend/app.py2.2 KB
- src/frontend/Dockerfile385 B
- src/frontend/pages/1_Search_Configs.py11.4 KB
- src/frontend/pages/2_Monitor.py5.9 KB
- src/frontend/pages/3_Preferences.py1.1 KB
- src/frontend/pages/4_Listings.py6.7 KB
- src/frontend/pages/5_Site_Settings.py7.4 KB
- src/frontend/pages/6_Stats.py5.0 KB
- templates/new_site_adapter.py5.2 KB
- tests/__init__.py0 B
- tests/backend/__init__.py0 B
- tests/backend/test_configs.py2.9 KB
- tests/backend/test_db.py2.9 KB
- tests/backend/test_jobs.py1.6 KB
- tests/backend/test_listings.py5.4 KB
- tests/backend/test_main.py304 B
- tests/backend/test_preferences.py1021 B
- tests/backend/test_runner.py3.9 KB
- tests/backend/test_scheduler.py2.1 KB
- tests/backend/test_server.py4.3 KB
- tests/backend/test_sites.py2.5 KB
- tests/test_analysis.py7.1 KB
- tests/test_cli_push.py3.7 KB
- tests/test_immobiliare.py15.0 KB
- tests/test_notion_push.py8.5 KB
- uv.lock780.3 KB
SKILL.md (original)
Review the instructions the agent will receive before you install.
Rental Scraper MCP Server
A local MCP server (stdio transport) that scrapes Italian real estate listings using Camoufox for anti-bot evasion and BeautifulSoup for HTML parsing.
Architecture
rental-scraper-mcp/
├── server.py # Thin MCP shell — tools + browser manager
├── cli.py # Standalone CLI (search, detail, dump, sites)
├── sites/
│ ├── __init__.py # Adapter registry (auto-discovery, lookup)
│ ├── base.py # Abstract SiteAdapter + SiteConfig + SelectorGroup
│ ├── immobiliare.py # Immobiliare.it adapter
│ ├── casa.py # Casa.it adapter
│ └── _template.py # Copy this to add a new site
├── requirements.txt
└── mcp_config_example.json
Plugin System
Each site is a SiteAdapter subclass with a SiteConfig dataclass. The config holds:
- URL template + query param mappings (how filters become URL parameters)
- CSS selector chains with fallbacks (how HTML becomes structured data)
- Property type / operation slug mappings
- Wait selectors for the stealth browser
To add a new site: copy sites/_template.py, fill in the config, register in sites/__init__.py.
Tools
| Tool | Description |
|---|---|
rental_search_listings | Search with filters → structured listing summaries |
rental_get_listing_detail | Fetch one listing URL → full detail extraction |
rental_list_sites | Show all registered site adapters |
rental_dump_page | Dump raw HTML for debugging selectors |
Setup
pip install -r requirements.txt
camoufox fetch
Claude Code
{
"mcpServers": {
"rental-scraper": {
"command": "python",
"args": ["server.py"],
"cwd": "/path/to/rental-scraper-mcp"
}
}
}
Reviews
No reviews yet. Tell others what you thought.
Comments
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.