Skip to main content
Glama

Search doctors

pz_search_doctors
Read-onlyIdempotent

Search Iranian doctors, hospitals, or clinics by city, specialty, name, gender, degree, and visit type. Get ratings, insurances, and free appointment slots to compare and book via profile link.

Instructions

Search doctors (or hospitals and clinics) by city, specialty, name, visit type, gender and degree, sorted and paged.

Doctor cards carry slug, url, image, rating, insurances, first free in-person and online slots, online_visit (only when offered, price in Toman) and the ids the slot tools need (a missing service_id comes from pz_doctor). Next: pz_doctor, or pz_free_days / pz_free_slots.

Input Schema

NameRequiredDescriptionDefault
cityNoCity slug from pz_suggest, e.g. 'tehran'; 'ir' = all of Iran (best for online visits and names).ir
pageNo1-based page number.
sortNo'earliest' = nearest free slot first (drops doctors without free slots).best
textNoPersian text: doctor name ('هدیه جباری'), disease or center.
limitNoResults per page (the site caps it at 50).
degreeNoAcademic degree, e.g. 'فوق تخصص' (subspecialist).
genderNoDoctor's gender.
center_idNoOnly doctors of one hospital or clinic: its center_id from pz_center, e.g. '204'.
specialtyNoSpecialty slug from pz_suggest: a group ('cardiovascular') or an expertise ('exp-cardiovascular-diseases').
work_timeNoWorks in that part of the day.
visit_typeNo'online' = online visit, 'in_person' = office booking.any
centers_onlyNoList hospitals and clinics of the city instead of doctors (ignores specialty).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed22 schema fields changedv0.3.0
    • changedInput schema / properties / center_id / description
      Previous value: -"Only doctors of one hospital or clinic: its center_id from pz_center or a center result, e.g. '204'."New value: +"Only doctors of one hospital or clinic: its center_id from pz_center, e.g. '204'."
    • removedInput schema / properties / center_id / title
      Removed value: -"Center Id"
    • removedInput schema / properties / centers_only / title
      Removed value: -"Centers Only"
    • changedInput schema / properties / city / description
      Previous value: -"English city slug from pz_suggest, e.g. 'tehran', 'isfahan', 'mashhad'; 'ir' = all of Iran (best for online visits and name searches)."New value: +"City slug from pz_suggest, e.g. 'tehran'; 'ir' = all of Iran (best for online visits and names)."
    • removedInput schema / properties / city / title
      Removed value: -"City"
    • changedInput schema / properties / degree / description
      Previous value: -"Academic degree, e.g. 'فوق تخصص' (subspecialist), 'متخصص' (specialist), 'فلوشیپ' (fellowship)."New value: +"Academic degree, e.g. 'فوق تخصص' (subspecialist)."
    • removedInput schema / properties / degree / title
      Removed value: -"Degree"
    • removedInput schema / properties / gender / title
      Removed value: -"Gender"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / page / title
      Removed value: -"Page"
    • changedInput schema / properties / sort / description
      Previous value: -"Order. 'earliest' = nearest free appointment first (drops doctors without free slots); 'cheapest_online' = cheapest online visit first."New value: +"'earliest' = nearest free slot first (drops doctors without free slots)."
    • removedInput schema / properties / sort / title
      Removed value: -"Sort"
    • changedInput schema / properties / specialty / description
      Previous value: -"Specialty slug from pz_suggest: a group ('cardiovascular', 'dermatology', 'general-practitioner') or an expertise ('exp-cardiovascular-diseases')."New value: +"Specialty slug from pz_suggest: a group ('cardiovascular') or an expertise ('exp-cardiovascular-diseases')."
    • removedInput schema / properties / specialty / title
      Removed value: -"Specialty"
    • changedInput schema / properties / text / description
      Previous value: -"Free text in Persian: a doctor's name ('هدیه جباری'), a disease or a center, e.g. 'آزمایشگاه'."New value: +"Persian text: doctor name ('هدیه جباری'), disease or center."
    • removedInput schema / properties / text / title
      Removed value: -"Text"
    • changedInput schema / properties / visit_type / description
      Previous value: -"'online' = doctors with an online visit (phone or messenger), 'in_person' = office booking."New value: +"'online' = online visit, 'in_person' = office booking."
    • removedInput schema / properties / visit_type / title
      Removed value: -"Visit Type"
    • changedInput schema / properties / work_time / description
      Previous value: -"Doctor works in that part of the day."New value: +"Works in that part of the day."
    • removedInput schema / properties / work_time / title
      Removed value: -"Work Time"
    • removedInput schema / title
      Removed value: -"pz_search_doctorsArguments"
    • changedOutput schema / (root)
      Previous value: -{
      -  "additionalProperties": true,
      -  "title": "pz_search_doctorsDictOutput",
      -  "type": "object"
      -}New value: +null
  2. First observedv0.1.0

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely new behavioral context by enumerating the returned doctor-card fields — slug, url, image, rating, insurances, first free in-person/online slots — and noting that online_visit appears only when offered with price in Toman, which matters because there is no output schema. It does not mention rate limits or pagination behavior.

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?

The opening sentence is front-loaded with verb, resource and facets, and the follow-up routing line is compact. The middle sentence listing card fields is dense but each field earns its place given the absence of an output 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 12-parameter, all-optional search tool with no output schema, the description covers the filter surface, the return shape, and the next-step tools, which is close to sufficient. Minor gaps remain around paging/sorting semantics and total-result behavior, but those are largely covered by the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already fully documented in the schema itself. The description only restates the facet list and the service_id dependency, adding no syntax or format detail beyond what the schema provides; the baseline of 3 applies.

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?

The first sentence gives a specific verb (Search) plus resource (doctors) and enumerates the exact filter facets — city, specialty, name, visit type, gender, degree — including the alternate mode (hospitals and clinics). It also names the sibling tools this feeds into (pz_doctor, pz_free_days, pz_free_slots), so an agent can place it in the pipeline 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 Guidelines4/5

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

It supplies concrete routing context: 'Next: pz_doctor, or pz_free_days / pz_free_slots,' and the conditional 'a missing service_id comes from pz_doctor.' That tells the agent when to follow up, though it never states when to prefer an alternative (e.g. pz_first_available) or when not to use this search.

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