Skip to main content
Glama

Saved watches

dv_watch

Save a Divar search as a local watch and check it on demand to get only ads posted since the last check, without any push or notifications.

Instructions

Save a search and later get only the ads that appeared since the last check; stored in a local file, nothing is pushed.

create takes the search arguments of dv_search (validated once, then stored with the current time as the mark). check runs dv_new_since for the watch and moves the mark to the newest ad it returned, so the next check shows only newer ads; it does not run by itself: call it from a schedule or when asked. The file is ~/.divar-mcp/state.json (override with DIVAR_MCP_STATE); it holds only your searches. Next: dv_post for a new ad.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoCity name or id; several comma-separated, e.g. 'تهران', 'mashhad', 'تهران,کرج'.تهران
nameNocreate: a label for you, e.g. 'cheap Pride in Karaj'.
limitNocheck: max new ads per watch.
queryNoFree text in title or description, e.g. 'پراید 111'.
actionYes'create' saves a search, 'check' returns the ads newer than the last check and moves the mark, 'list' shows the saved searches, 'delete' removes one.
excludeNoDrop ads whose title has any of these words.
filtersNoOther category filters (keys from dv_filters): {'size': {'min': 80, 'max': 120}, 'rooms': ['دو'], 'parking': true}. Unknown keys are returned in `ignored`.
categoryNoCategory slug or Persian name, e.g. 'light' (cars), 'apartment-sell', 'apartment-rent', 'mobile-phones'.
keywordsNoWords that must all be in the title.
watch_idNocheck / delete: the id from 'create' or 'list'. check without it checks every watch.
districtsNoNeighbourhood names or ids in the one city, e.g. ['ونک'].
max_priceNoToman; monthly rent in rent categories.
min_priceNoToman; monthly rent in rent categories.
brand_modelNoVehicles, phones: brand/model, e.g. ['پژو 206'].

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already covering safety (readOnlyHint=false, openWorldHint=true), the description adds substantial non-obvious behavior: state is a local file at ~/.divar-mcp/state.json, overridable via DIVAR_MCP_STATE, holds only the caller's searches, nothing is pushed, and check mutates the mark so the next call shows only newer ads. That is exactly the kind of hidden-state disclosure annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then action semantics, then state location, then next-step routing — a sensible ordering with no filler. Slightly dense and the mid-paragraph line breaks are arbitrary, but every sentence carries needed information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, nested-object, mutation-and-read hybrid with no output schema, the description covers the create/check lifecycle, persistence model and follow-up tool. list and delete are left to the schema, which is acceptable given 100% coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning by tying `create` params to dv_search's argument set and clarifying the mark semantics of `check` (watch_id omitted = check all). It stops short of explaining several action-specific params, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (save a search, then get only ads that appeared since the last check) and immediately distinguishes itself from siblings by naming dv_search, dv_new_since and dv_post. An agent knows this is a persistent watchlist, not a one-shot search, without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes usage: `create` reuses dv_search arguments, `check` runs dv_new_since and advances the mark, and check 'does not run by itself: call it from a schedule or when asked'. It also names the follow-up tool (dv_post for a new ad), so the when-and-what-next is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.