shab-mcp
<!-- mcp-name: io.github.mohamadreza-rezaei/shab-mcp -->
# shab-mcp
Unofficial **read-only** [MCP](https://modelcontextprotocol.io/) server for [Shab](https://www.shab.ir), Iran's short-term rental marketplace.
Search destinations and stays, inspect photos and reviews, and get a Toman price quote. Nothing here can log in, book or pay — tools return a `listing_url` so the user finishes on shab.ir.
## Install
You need [uv](https://docs.astral.sh/uv/).
```bash
uvx shab-mcp
```
### Claude Code
```bash
claude mcp add shab -- uvx shab-mcp
```
### Cursor / VS Code
```json
{
"mcpServers": {
"shab": {
"command": "uvx",
"args": ["shab-mcp"]
}
}
}
```
Optional: set `SHAB_MCP_PROXY` to an HTTP(S) proxy (system proxy env vars are ignored).
## Tools
| Tool | Purpose |
|------|---------|
| `sh_search_destinations` | Resolve a Persian place name |
| `sh_list_search_filters` | Amenity codes for search |
| `sh_search_accommodations` | Search stays (Toman prices) |
| `sh_get_accommodation` | Stay details + `listing_url` |
| `sh_get_accommodation_photos` | Photo URLs |
| `sh_get_accommodation_reviews` | Guest reviews (untrusted text) |
| `sh_list_neighbourhoods` | Neighbourhoods by city |
| `sh_get_similar_accommodations` | Similar stays |
| `sh_count_accommodations` | Count matches |
| `sh_get_landing_tehran` | Tehran landing filters |
| `sh_check_availability` | Free nights + price quote |
| `sh_listing_url` | Public booking page URL |
Dates are Gregorian `YYYY-MM-DD`. Prices are **Toman**.
## Develop
```bash
uv sync --group dev
uv run ruff check .
uv run pytest -q
```
Live API tests (optional): `uv run pytest -m live -q`.
## License
MIT. Shab and shab.ir are trademarks of their owners; used here for identification only.
TDQS
Scored across 12 tools
Each tool maps to a distinct resource or action: search vs. count vs. get detail vs. photos vs. reviews vs. similar vs. availability vs. booking URL. The only mild overlap is between sh_list_search_filters and sh_get_landing_tehran, which both surface filter/category metadata, and sh_count_accommodations vs sh_search_accommodations share filters but differ clearly in output.
All tools share a consistent `sh_` prefix and follow a verb_noun pattern (list_, get_, search_, count_, check_). Minor deviations: `sh_listing_url` is a noun-only name rather than an action, and `sh_get_landing_tehran` embeds a specific city, which breaks the otherwise generic pattern.
Twelve tools is well within the sweet spot, and each earns its place by covering a distinct step of the stay-search flow (resolve destination → filter/discover → search/count → detail/photos/reviews/similar → availability → booking link). No redundant or filler tools are present.
The surface covers the full discovery-to-booking-handoff lifecycle, including search, detail sub-resources, availability quoting, and the external booking URL; booking itself is intentionally delegated to shab.ir. Minor gaps: no geo/coordinate or map data, and the landing/category tool is hardcoded to Tehran, so other cities rely solely on sh_search_destinations.