Skip to main content
Glama

Dorit

Save as the Dorit search

save_search

Prepares this search as the user's saved Dorit search, so Dorit alerts them on WhatsApp to new matching listings. It saves nothing by itself: Dorit sends the user a WhatsApp message showing the search, and their tap on its save button saves it. Takes search_listings' criteria (without sort, paging, tags or keywords) and REPLACES the saved search's criteria with exactly these, so to change one thing, call get_saved_search first and send its criteria with the change. Call it when the user asks to save or change their Dorit search or alerts, or accepts your offer to; never on your own initiative, and never from a scheduled task the user did not ask to change their search.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "max_price": "<max_price>",
      "context": "<context>",
      "llm_model": "<llm_model>"
    },
    "name": "save_search"
  }
}

Input Schema

NameRequiredDescriptionDefault
citiesNoCities, localities or regional groups by name in Hebrew, English or Russian, or by slug ("תל אביב", "Tel Aviv", "tel-aviv", "עמק חפר"). A group covers every settlement in it. Omit when neighborhoods or search_area already say where.
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
max_sqmNo
min_sqmNo
featuresNotrue requires the feature; false excludes it; omitted does not filter. elevator=true means an elevator or a low floor (see max_floor_without_elevator).
llm_modelYesThe exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.
max_floorNo
max_priceYesHighest price: monthly rent, or the total for sale. Required, as Dorit needs a budget to alert on.
max_roomsNo
min_floorNo
min_priceNo
min_roomsNoIsraeli room count (whole or half rooms; a living room counts).
roommatesNoexclusive = only rooms in shared flats; excluded (default) = whole apartments only.
search_idNoThe saved search to rewrite, from get_saved_search. Defaults to the primary search; a renter with none gets their first.
handover_byNoSale only: latest handover month, YYYY-MM.
nice_to_haveNoFeatures the renter would like without requiring them: alerts still come without them, and a listing that has one is marked as a plus. no_brokerage here means "rather no fee". A flag goes either here or in features, never both.
neighborhoodsNoNeighborhoods, named areas of a city ("הצפון הישן", "מערב ראשון לציון"), landmarks or housing projects, by name, slug or the ids coverage and find_neighborhoods_near return. A neighborhood inside a listed city narrows that city to it; one in another city is added to the search.
property_typesNoAsset types: apartment, unit, garden, house, twofamily, penthouse, duplex. Omit for all.
entrance_monthsNoRent only: acceptable move-in months, YYYY-MM. A listing naming no month is treated as available now or within the month.
transaction_typeNorent (monthly ILS) or sale (total ILS). Sale is open in fewer cities.rent
exclude_neighborhoodsNo
max_floor_without_elevatorNoHighest acceptable floor when the building has no elevator; above it an elevator is required. Same as features.elevator=true with this walk-up limit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, it discloses two non-obvious behaviors an agent would otherwise get wrong: the call does not itself save anything (a WhatsApp confirmation with a user tap completes it), and it REPLACES the saved criteria wholesale rather than merging. That replacement warning is essential given destructiveHint=false, since an agent could otherwise assume an additive patch and silently drop the user's existing criteria.

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

Conciseness5/5

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

Front-loaded with what the tool does, then the mechanics, then the replacement rule, then the call conditions. Despite three dense clauses, every sentence carries an operational fact and none restates the name, title, or schema.

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 22-parameter mutation with nested objects and no output schema, the description covers the write model, replacement semantics, and call conditions well. The one gap is the return side: it never says what comes back (a confirmation prompt handle, a status, an instruction to relay to the user), which matters because no output schema exists to answer that.

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?

With 68% schema coverage and 22 parameters, the description adds real meaning by declaring the parameter set is search_listings' criteria minus sort, paging, tags and keywords, which tells the agent how to assemble the payload. It does not add anything for the sparsely documented params (max_sqm, max_floor, exclude_neighborhoods), so it stops short of compensating for the remaining coverage gap.

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?

"Prepares this search as the user's saved Dorit search" states a specific verb and resource, and immediately scopes it against the sibling read tool ("takes search_listings' criteria") and the alternative workflow ("call get_saved_search first"). An agent can distinguish save_search from get_saved_search and search_listings without opening any 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?

It gives both positive triggers ("when the user asks to save or change their Dorit search or alerts, or accepts your offer to") and explicit exclusions ("never on your own initiative, and never from a scheduled task the user did not ask to change"). It also names the read-modify-write alternative for the narrow single-change case, so the routing decision is fully specified.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources