zameen-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZAMEEN_MCP_HOME | No | Override the default data directory (~/.zameen-mcp/) where watches, session state, and chrome profile are stored. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_propertiesA | Search Zameen.com property listings and return normalized JSON cards. Use city names like "islamabad", "lahore", "karachi". purpose: sale|rent. property_type: homes|houses|flats|plots|commercial|rooms. Badge filters (verified_only, agent_tier e.g. "titanium", exclude_promoted, max_price_pkr) apply AFTER parsing over up to 3 result pages - these can express things Zameen's own UI cannot (e.g. verified listings only). min_beds/min_area_marla/keywords/sort are native site filters. limit is clamped to 1..50 and echoed back in filters_applied. Example: search_properties(city="lahore", purpose="sale", property_type="houses", min_beds=4, verified_only=True, agent_tier="titanium", max_price_pkr=200000000). |
| get_listing_detailsA | Fetch full details for ONE Zameen.com property listing. Accepts a full Property URL or a bare numeric listing id such as "54646556". Read-only; never contacts the agent or modifies anything. |
| list_supported_citiesA | List verified city slugs and property types usable by search_properties. |
| add_watchA | Create a named local watchlist from search criteria (stored on disk). Watches are re-checked later with check_watch; 'seed_with_current' runs the search once now so only NEW listings get reported in future checks. Nothing is saved to your Zameen account — this is a local file. |
| check_watchA | Re-run a saved watch's search and report NEW listings since last check. Read-only against Zameen; the only state kept is the local id list. |
| remove_watchB | Delete a local watchlist by name. |
| list_watchesA | List local watchlists with their criteria and last-check times. |
| draft_agent_messageA | Draft (NOT send) a polite inquiry message to a listing's agent. Fetches the listing's details and composes a ready-to-send text for you to paste into WhatsApp/email or read out on a call. This tool NEVER sends anything to anyone — contacting the agent is deliberately a human action. |
| account_statusA | Report whether an authenticated Zameen session is loaded. Auth is optional: searches work anonymously; a session (created via 'python -m zameen_mcp.login') rides your cookies for personalized pages. No password is ever stored by this server. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: search, detail retrieval, watchlist management, message drafting, and account status. There is no meaningful overlap between tools that would cause an agent to select the wrong one.
Most tools follow a consistent verb_noun pattern (list_watches, search_properties, add_watch, check_watch). account_status is a minor deviation since it is a noun phrase rather than get_account_status, but it is still clear and predictable.
Nine tools is well within the ideal range for a real estate search and watchlist server. Each tool earns its place and the set is neither bloated nor too thin.
The tool surface covers search, listing details, watchlist CRUD (minus an update operation), contact drafting, and account status. Missing update_watch is workable since users can remove and re-add, and sending messages is intentionally left to humans.