Skip to main content
Glama

Homejourney Singapore property listings

Server Details

Search, read and compare Singapore property listings and book home services, with no account.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4/5.0

Scored across 15 tools

Disambiguation4/5

The set separates discovery, detail retrieval, comparison, rendering, guides, agents, services, and checkout, and descriptions give clear routing cues. However, generic `search` vs `search_listings`, and `fetch` vs `get_listing_details`, are close enough that a host could misselect them.

Naming Consistency4/5

All names use snake_case and mostly verb_noun, with predictable `search_*` and `get_*` families. The bare `fetch` and generic `search` are minor deviations, and `check_landed_purchase_eligibility` is long but still readable.

Tool Count4/5

15 tools sit at the top of the recommended range but map to real sub-workflows: listings, guides, agents, services, checkout, rendering, and eligibility. The breadth across property search and service payments is slightly heavy, but no single tool looks purely redundant.

Completeness3/5

Discovery and detail workflows are well covered, but the surface has dead ends: owner onboarding references a missing `create_listing_draft`, signed-in service booking references missing `create_service_booking`, and `compare_listings` mentions missing `list_saved_properties`. There are also no create/update/delete tools for listings, so end-to-end lifecycle coverage is incomplete.

Available Tools

15 tools
check_landed_purchase_eligibilityCheck who may buy a landed homeA
Read-only
Inspect

Use this when a buyer asks whether they may buy a landed home in Singapore (terrace, semi-detached, detached or bungalow, cluster or townhouse, Good Class Bungalow), or before a PR or foreigner asks to view a landed listing. It applies the Residential Property Act as SLA states it: citizens may buy any landed home; PRs need SLA approval, which SLA gives case by case to PRs of at least 5 years, and the Ministry of Law has approved no foreign buyer for a Good Class Bungalow since 2021; a foreigner who is not a PR is not approved for landed homes; and anyone may buy a condominium unit or a strata landed house within an approved condominium. Pass the buyer's residency and a listing_id from search_listings, or property_kind. A landed listing does not always record its house type, and never whether it is strata within a condominium, so pass property_kind too when the user knows it; whether it is in a Good Class Bungalow area comes from its location. Returns allowed, needs_sla_approval or not_allowed, the reason, the next step and SLA links. Always give the user the disclaimer: it is general information, not legal advice. Needs no sign-in and stores nothing about the buyer.

NameRequiredDescriptionDefault
gcb_areaNoWhether the land is in a Good Class Bungalow area. Leave out when not known: a landed listing_id's own coordinates answer it.
residencyYesThe buyer's residency: citizen (Singapore citizen), permanent_resident (Singapore PR) or foreigner (neither). With joint buyers, check each one.
listing_idNoA Homejourney listing id, such as one from search_listings.
years_as_prNoFor a PR: their whole years as a PR, when they say.
property_kindNoterrace, semi_detached, detached (bungalow), strata_landed (a cluster house or townhouse outside an approved condominium), strata_landed_in_condo (a strata landed house within an approved condominium), vacant_land, condo_unit, or landed when the type is not known. Overrides the listing’s.

Output Schema

NameRequiredDescription
linksNoSLA pages to cite.
reasonNoWhy, in plain words. Give it to the user.
listingNoThe listing checked, when listing_id was given and it is live.
outcomeNoallowed: no SLA approval needed; needs_sla_approval: the buyer must apply to SLA first; not_allowed: SLA does not approve this buyer for this home. Absent with resultReason.
headlineNo
nextStepNo
checkedOnNoThe date the rules were read from SLA.
residencyYes
disclaimerNoAlways show it: general information, not legal advice.
propertyKindNoThe kind checked. landed means a landed listing, which records neither its house type nor its title.
resultReasonNoSet instead of an outcome when the listing is not live, or is an HDB flat or another home this check does not cover.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds substantial context beyond that: the Residential Property Act rules, the allowed/needs_sla_approval/not_allowed outcomes, next-step guidance, SLA links, the required disclaimer, and that it needs no sign-in and stores nothing about the buyer.

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 description is front-loaded with the use case and legal rules, then moves to parameter guidance and return values. It is dense but structured, and the legal detail and disclaimer are necessary for this tool rather than filler.

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

Completeness5/5

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

An output schema exists and annotations cover the safety profile, yet the description still supplies the legal context, limitations, return statuses, next step and disclaimer needed for a complex eligibility check. Nothing essential for correct invocation appears to be missing.

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 description coverage is 100%, so the baseline is 3. The description adds useful meaning beyond the schema: listing_id or property_kind can be supplied, property_kind overrides the listing, landed listings may omit house type and never record strata-within-condo status, and GCB area comes from the listing's location.

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 and resource: checking whether a buyer may buy a landed home in Singapore, and enumerates the property types covered. It also distinguishes itself from search_listings by explaining that listing_id comes from that sibling tool.

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?

Explicitly says when to use it: when a buyer asks whether they may buy a landed home, or before a PR or foreigner asks to view a landed listing. It gives prerequisites such as residency and listing_id or property_kind, but does not state when not to use it or name an alternative eligibility tool.

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

compare_listingsCompare Homejourney listingsA
Read-only
Inspect

Use this after search_listings or list_saved_properties when the user wants two to six Homejourney listings compared side by side. Pass their listing_ids (a saved home's property_id), and optionally the user criteria: budget, bedrooms, bathrooms, preferred districts or MRT stations, the longest acceptable walk to the MRT, the fewest years of lease that must remain, and must-have features. Returns the listings ranked against those criteria, each with its score out of 100 (null when no criterion given can be judged) and the points it earns on each criterion, the reasons it fits, its tradeoffs and any missing data, plus price, size, nearest MRT, nearby schools, the nearest childcare centres and preschools and, for an HDB flat, the lease left on its block. Never returns owner or agent contact details. To show the result as a card, pass it to render_shortlist.

NameRequiredDescriptionDefault
hostNoThe AI app making this call, such as chatgpt or claude. It records where the request came from; it is not the listing owner or agent.
criteriaNo
listing_idsYes
host_reference_idNo

Output Schema

NameRequiredDescription
dataYes
nextStepsNoSuggestions for what the user usually does next, best first. Each names the tool to call or the page to open; none is taken without the user asking, and a tool that writes still needs their confirmation.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/openWorld annotations: it discloses the ranking behavior, that scores are out of 100 and null when no criterion can be judged, that reasons, tradeoffs and missing data come back, and an explicit privacy constraint that owner or agent contact details are never returned.

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 the usage condition and the input, which is the right order. The return-value sentence is very long and dense, but every clause carries information an agent would otherwise have to discover.

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

Completeness5/5

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

For a comparison tool with nested criteria and a privacy-sensitive domain, the definition covers input provenance, ranking semantics, null handling, and the rendering handoff. Nothing needed to call it correctly is missing, even though an output schema exists.

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 only 25%, and the description compensates by enumerating most criteria (budget, bedrooms, bathrooms, districts, MRT stations, max walk, min lease, must-have features) and clarifying that a saved home's property_id belongs in listing_ids. It leaves several nested fields unexplained (query, commute_note, listing_type, property_type, subletting_types) and says nothing about host or host_reference_id.

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 and resource ('compared side by side' for two to six Homejourney listings) and names the upstream tools that produce the inputs, so it is clearly distinguished from search_listings and get_listing_details.

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 says when to use it ('after search_listings or list_saved_properties when the user wants two to six listings compared'), names the alternatives, and gives the downstream handoff ('pass it to render_shortlist' for a card).

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

fetchFetch Homejourney listingA
Read-only
Inspect

Fetch one Homejourney listing or guide by the ID that search returned, for deep-research and citation hosts. Returns the listing text, without owner or agent contact details, or the whole text of the guide, with its Homejourney URL for citations. After search_listings, use get_listing_details instead.

NameRequiredDescriptionDefault
idYes

Output Schema

NameRequiredDescription
idYes
urlYes
textYes
titleYes
metadataNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, non-destructive, closed-world, so the safety profile is covered; the description adds genuinely new behavior: listing text is returned with owner/agent contact details stripped, guide text is returned whole with a Homejourney URL for citations. That redaction and citation-output disclosure is exactly the kind of context annotations cannot carry. It says nothing about failure modes for an unknown ID.

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?

Three compact sentences, front-loaded with the core action and immediately followed by what comes back. The 'for deep-research and citation hosts' clause is dense but earns its place by scoping the audience. No filler or repetition of the title.

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?

With an output schema present, the description needn't detail return shape, and it wisely focuses on the redaction and citation-URL properties instead. Combined with the sibling routing note, an agent has enough to call it correctly; only ID-format disambiguation between listing and guide is missing.

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 coverage is 0% and the single `id` property has no description, so the description must carry the load. It does establish provenance ('the ID that search returned'), which is useful, but it never clarifies whether listing and guide IDs share a namespace or format, which matters because one parameter serves both resource types.

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

Purpose4/5

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

States a specific verb (fetch) and resource (a Homejourney listing or guide) plus the keying mechanism (the ID that search returned), and names a sibling to avoid. The only ambiguity is that one tool serves two resource types, but the description makes that duality explicit rather than hiding it.

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?

Gives a clear usage context (deep-research and citation hosts) and an explicit exclusion with the alternative named: 'After search_listings, use get_listing_details instead.' It does not say when to pick this over search_guides/get_listing_details for guide content specifically, so it stops short of full when/when-not coverage.

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

get_guest_service_checkout_statusGet guest service checkout statusA
Read-only
Inspect

Use the opaque status token returned by prepare_guest_service_checkout to check card approval, provider, completion, and payment state. Returns no contact or address details.

NameRequiredDescriptionDefault
status_tokenYes

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful disclosure that no contact or address details are returned, which is a real behavioral constraint beyond the annotations, though polling/expiry behavior of the token is not mentioned.

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?

One compact sentence that front-loads the precondition and the returned fields, followed by a short disclosure. Every clause earns its place with no filler.

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

Completeness5/5

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

With an output schema present, the description need not enumerate return structure; it only needs to establish the token source and privacy boundary. Those are covered, so nothing an agent needs to invoke this correctly is missing.

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 0% for the single parameter, so the description must compensate. It identifies the parameter as an opaque token and points to its producer, giving essential meaning. It does not restate the length bounds or format, but 'opaque' plus the origin tool is sufficient for correct use.

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 (check) and resource (checkout status via an opaque status token), and enumerates exactly what is returned: card approval, provider, completion, and payment state. It ties itself to the sibling prepare_guest_service_checkout, making the pairing unambiguous.

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?

Explicitly identifies the precondition — the token must come from prepare_guest_service_checkout — which tells the agent when this tool is callable. It does not name an alternative status tool or state exclusions, so it falls short of a full 5.

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

get_listing_detailsGet Homejourney listing detailsA
Read-only
Inspect

Use this after search_listings when the user wants the full details of one Homejourney listing, such as its description, size, tenure, furnishing, availability, nearest MRT, nearby schools, the MRT stations open or under construction, primary schools by 1 km and 2 km band, secondary schools, supermarkets, hawker centres, CHAS clinics, parks, malls, bus stops with their bus numbers, and childcare centres and preschools near it, and Homejourney link. For an owner listing, including a flat its owner lists on HDB Flat Portal, it adds reportUrl, where the user reports a wrong, misleading or scam listing to Homejourney. For an HDB rental, tenantEligibility says who may rent it: the 6-month minimum, the pass a non-citizen needs and, for a whole flat, the HDB non-citizen quota with a link to the HDB quota checker; use it when the user is a PR or a foreigner. Never returns owner or agent contact details.

NameRequiredDescriptionDefault
listing_idYes

Output Schema

NameRequiredDescription
dataYes
nextStepsNoSuggestions for what the user usually does next, best first. Each names the tool to call or the page to open; none is taken without the user asking, and a tool that writes still needs their confirmation.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond readOnlyHint and non-destructive annotations, the description discloses substantial behavior: it lists the returned detail categories, conditional reportUrl for owner listings, tenantEligibility for HDB rentals, and the privacy constraint that owner/agent contact details are never returned. This gives the agent useful expectations about output and constraints.

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

Conciseness3/5

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

The description is front-loaded with the when-to-use instruction, which is good. However, it is a single very long sentence with an exhaustive enumeration of amenities and conditional fields, making it harder to scan than necessary. Much of the detail could be structured more tightly.

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

Completeness5/5

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

Given the tool returns rich listing details and has an output schema, the description still provides enough context about special cases: owner listings, HDB rentals, tenant eligibility, and privacy limits. It covers the complexity of the tool without leaving major behavioral gaps.

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 0% for listing_id, so the description should compensate. It implies the identifier comes from search_listings and refers to one listing, but it does not explicitly explain the listing_id parameter or its UUID format. Minimum viable given the single obvious parameter.

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 description states a specific verb and resource: get full details of one Homejourney listing. It distinguishes this from search_listings by saying to use it after search_listings for a single listing, and the enumerated detail fields make the scope unambiguous.

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 gives clear usage context: use after search_listings when the user wants full details of one listing. It also gives conditional guidance for owner listings and HDB rentals, including tenantEligibility for PR or foreign users. It does not explicitly state when not to use it or name other alternatives beyond search_listings.

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

get_owner_listing_checklistGet the Homejourney owner listing checklistA
Read-only
Inspect

Use this first when an owner wants to sell or rent out their own home on Homejourney, before asking them anything. Returns every field to collect (required or optional, allowed values, examples, which apply only to HDB, condo, landed or rentals), the photo rules, where to order a floor plan, the HDB and URA letting rules (rentalRules) to check with a landlord before collecting the rental details, with the HDB ones in ruleGroups by what is let (the whole flat, rooms, or every HDB rental), and the steps in order: the agent saves the details with create_listing_draft, then the owner adds photos or confirms the ones you add, verifies with Singpass, joins Homejourney Pro and publishes. Ask the owner for all required fields in one message. Needs no sign-in.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already establish a safe, read-only, closed-world operation. The description adds substantial behavioral context beyond annotations: no sign-in is needed, the response includes rules and examples, and it outlines the downstream sequence involving create_listing_draft, photo confirmation, Singpass verification, Pro enrollment, and publishing.

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 description is front-loaded with the key trigger phrase and then systematically lists response contents and workflow steps. It is dense and somewhat long with nested parentheticals, but most clauses carry useful information for an agent preparing to collect owner details.

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

Completeness5/5

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

There is no output schema, so the description must explain the return payload, and it does so thoroughly: fields, requiredness, allowed values, examples, property-type constraints, photo rules, floor plan source, and rental rule groupings. It also covers invocation timing, no-auth behavior, and the broader publishing workflow.

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?

The tool takes zero parameters, so parameter semantics are inherently minimal. The description appropriately spends no time explaining nonexistent inputs and instead focuses on what the no-argument call returns and how to use it.

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 description states a specific verb and resource: it returns the owner listing checklist for Homejourney. It enumerates exactly what the checklist contains (required/optional fields, allowed values, photo rules, floor plan ordering, HDB/URA rental rules, ordered workflow), making it clearly distinguishable from search/render/list-detail siblings.

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 gives an explicit invocation condition: use this first when an owner wants to sell or rent out their own home, before asking them anything. It also instructs the agent to ask for all required fields in one message. It does not name or exclude alternative tools, so it stops short of a full when/when-not/alternatives statement.

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

prepare_guest_service_checkoutPrepare guest service checkoutAInspect

Use this for new customer bookings from an external agent, whether the customer already has a Homejourney account or not. After the customer confirms the selected provider package, the exact price, schedule, address, customer-provided email and mobile number, and contact consent, it returns one branded Homejourney review-and-authorization link. No OTP is required. The customer saves a card there for the exact booking, or chooses PayNow. Tell the customer: "Nothing is charged or held now. We charge your card, or send a PayNow request, after the job is done." The booking appears in the Homejourney account of the customer once they sign in with the same verified email or WhatsApp number. When someone else lets the technician in, such as a tenant, add them as onsite_contact.

NameRequiredDescriptionDefault
hostYesThe AI app making this call, such as chatgpt or claude. It records where the request came from; it is not the listing owner or agent.
extrasNoOptional extras from the quote's availableExtras, each id once with a quantity up to its maxQuantity. Each is charged at the operator's price and leaves the visit's length and start as quoted.
confirmedYes
base_priceNo
provider_idNoThe chosen package's providerId from search_services.
total_priceNo
consent_textNo
price_sourceYesThe chosen package's priceSource from search_services.
service_typeYes
customer_infoYes
property_sizeNoHome size, for an offering priced by home size. A quote without it names the sizes the provider prices.
onsite_contactNoOptional. The person at the address who lets the technician in when the customer won't be there, such as a landlord's tenant. Only the business assigned to the job sees it, until the job closes; the customer still gets every update and the charge. Send it only after the customer confirms that person agreed to be contacted.
scheduled_dateYes
singapore_timeYesExact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range.
discount_amountNo
idempotency_keyYes
number_of_hoursNoHours booked, for an offering priced per hour. The provider may charge a minimum number of hours.
number_of_unitsNo
service_detailsYesThe chosen package's serviceId from search_services, such as leak-repair. Put the customer's own words in issue_description.
host_reference_idNo
issue_descriptionNo
service_frequencyNoone-time
catalog_version_idYesThe chosen package's catalogVersionId from search_services.
consent_to_contactYes
platform_unit_countNoRetired: Homejourney no longer offers its own catalog prices, so a launch_guide selection is refused. Leave it out.
provider_package_idNoThe chosen package's providerPackageId from search_services.
special_instructionsNo

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior5/5

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

The annotations declare a non-read-only, non-destructive, open-world operation, and the description adds substantive behavior beyond that: no OTP is required, it returns an authorization link, nothing is charged or held at this stage, charging happens after the job, the booking appears in the customer's account after sign-in with the same verified email or WhatsApp number, and onsite_contact is visible only to the assigned business until the job closes. These details materially supplement the annotations without contradicting them.

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 description is front-loaded with the use case and then packs necessary behavioral and customer-script details into one paragraph. It is longer than typical but mostly earns its length; the only structural weakness is that it is a single dense block rather than clearly separated prerequisites and behavior.

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 complex 27-parameter booking mutation with annotations and an output schema, the description covers the central flow, payment timing, account behavior, and onsite contact well. It still leaves the agent to infer the sibling-tool workflow, such as search_services or quote_service_booking, and several parameter meanings, so it is not fully complete.

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 only 44% across 27 parameters, so the description must compensate. It explains some important semantics, including customer confirmation, price, schedule, address, contact consent, and onsite_contact, but it leaves many required fields such as idempotency_key, service_type, confirmed, and the package identifiers largely to the schema or inference.

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

Purpose4/5

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

The description opens with a specific directive, 'Use this for new customer bookings from an external agent,' and states that it returns 'one branded Homejourney review-and-authorization link,' so the operation is clear. It does not explicitly differentiate itself from sibling tools such as quote_service_booking or get_guest_service_checkout_status, so it falls short of a 5.

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 gives a clear trigger: use after the customer confirms the selected provider package, exact price, schedule, address, customer-provided email and mobile number, and contact consent. It does not state when not to use it or name alternatives such as search_services or quote_service_booking for obtaining package details.

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

quote_service_bookingQuote a Homejourney service bookingA
Read-only
Inspect

Use this after search_services with the selected provider and package identifiers. Returns the exact server-revalidated price before confirmation and does not create a booking row. A quote needs no name, email, or phone. A provider package also returns the assignment deadline, after which an unaccepted booking is cancelled at no charge; it needs an exact start at least 2 hours away. An operator price quoted with the service address also returns slots, the open arrival times there on scheduled_date with the total for each; book one of those times. Without the address no time is checked, and the quote leads with requested_time_open: unknown. When none is open, slotsUnavailableReason says whether the address has no postal code, the postal code matches no address, or the provider does not serve it; otherwise quote another date. availableExtras lists the extras the provider sells with the job, such as sofa steaming; quote again with the ones the customer wants in extras to get the total with them, and book with the same extras. A package named for a unit count ("3 wall units") is refused for another number_of_units with reason package_unit_count; quote the package for the asked count instead. Other refusals say what to change: start_too_soon names the first open start after the window when the quote has the service address and asks for the address otherwise, price_changed the new price, invalid_catalog_version the current catalog_version_id, and quote_required means the package cannot be booked on Homejourney.

NameRequiredDescriptionDefault
extrasNoOptional extras from the quote's availableExtras, each id once with a quantity up to its maxQuantity. Each is charged at the operator's price and leaves the visit's length and start as quoted.
base_priceNo
provider_idNoThe chosen package's providerId from search_services.
total_priceNo
price_sourceYesThe chosen package's priceSource from search_services.
service_typeYes
customer_infoNoOptional. The service address (pickup_address for moving), only to list the open arrival times of an operator price.
property_sizeNoHome size, for an offering priced by home size. A quote without it names the sizes the provider prices.
scheduled_dateYes
singapore_timeYesExact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range.
discount_amountNo
number_of_hoursNoHours booked, for an offering priced per hour. The provider may charge a minimum number of hours.
number_of_unitsNo
service_detailsYesThe chosen package's serviceId from search_services, such as leak-repair. Put the customer's own words in issue_description.
issue_descriptionNo
service_frequencyNoone-time
catalog_version_idYesThe chosen package's catalogVersionId from search_services.
platform_unit_countNoRetired: Homejourney no longer offers its own catalog prices, so a launch_guide selection is refused. Leave it out.
provider_package_idNoThe chosen package's providerPackageId from search_services.
special_instructionsNo

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/non-destructive annotations: it says no booking row is created, no contact details are needed, an unaccepted booking is cancelled without charge, an exact start at least two hours away is required, and slots are only returned when the address is supplied. It also enumerates refusal reason codes and what each means.

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 description is front-loaded with the purpose and the no-booking-row guarantee, then proceeds through slot, extras, and refusal rules. It is dense but nearly every sentence carries a behavioral rule; a bulleted structure would improve scanability without changing the content.

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

Completeness5/5

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

Given 20 parameters, nested customer_info, an output schema, and multiple conditional modes (package vs operator price, address present vs absent), the description covers the important decision points and failure modes. The output schema relieved it of explaining return values, and nothing critical is missing for correct invocation.

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 55%, and the description compensates substantially by explaining the conditional role of the address, the extras re-quote flow, the package unit-count refusal, and the two-hour start constraint. Some parameters, such as price fields, service_frequency, and discount_amount, are still left to the schema, so it is strong but not exhaustive.

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 and resource ('quote' a 'service booking'), and immediately distinguishes it from search_services and booking creation ('does not create a booking row'). An agent can tell what the tool returns (server-revalidated price) 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 says to use it after search_services with selected provider and package identifiers, and names when to supply the address (only to list operator arrival times), when to quote again with extras, and when to quote another package or date. The alternatives and conditions are stated rather than implied.

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

render_listing_detailRender Homejourney listing detailA
Read-only
Inspect

Show one Homejourney listing as a visual card with its photos, key details and a button to open it on Homejourney. Use this when the user wants to look at one listing. Never shows owner or agent contact details.

NameRequiredDescriptionDefault
listing_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely non-obvious behavioral context: it will never surface owner or agent contact details, which tells the agent what content to expect and what the card deliberately omits.

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?

Three short sentences, front-loaded with what is rendered, then when to use it, then a constraint. No filler, though the usage sentence is thin relative to the space it occupies.

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 one-parameter render tool with no output schema, the description covers what gets displayed and a key privacy constraint. It lacks only edge-case behavior such as what happens with an invalid or expired listing_id.

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?

The single listing_id parameter has 0% schema description coverage, but its name and uuid format are largely self-describing. The description adds nothing about the parameter (e.g., where to obtain a valid ID), so it neither compensates nor misleads.

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

Purpose4/5

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

States a concrete verb and resource — renders one Homejourney listing as a visual card with photos, details, and an open button. The 'visual card' framing separates it from the data-oriented sibling get_listing_details, though the description never names that sibling explicitly.

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

Usage Guidelines3/5

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

"Use this when the user wants to look at one listing" gives a usable trigger condition, but with siblings like get_listing_details, render_shortlist, and compare_listings present, it offers no contrast or exclusion to help disambiguate a pure-data fetch from a UI render.

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

render_shortlistRender Homejourney shortlistA
Read-only
Inspect

Show a comparison that compare_listings returned as a visual shortlist card. Use this after compare_listings when the host can display app cards; pass the comparison unchanged.

NameRequiredDescriptionDefault
rankingNo
listingsYes
comparedAtNo
canonicalUrlsNo
criteriaSummaryNo
missingDataNotesNo
sameHomeListingIdsNo
unavailableListingIdsNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the comparison should be passed unchanged and that the result is a visual card for hosts that can display app cards, but it does not describe validation behavior, failure modes, or exactly what rendering produces.

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?

The description is two tight sentences, front-loading the purpose and then the usage condition. Every phrase earns its place, with no redundant restatement of the title.

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

Completeness2/5

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

The tool has a large, complex input schema with 8 parameters and no output schema, while the description gives only high-level context. It says the result is a visual shortlist card and that the comparison should be passed unchanged, but it does not compensate for the lack of parameter descriptions or clarify what rendering returns.

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

Parameters2/5

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

Schema description coverage is 0% across 8 parameters, so the schema provides field names but no semantic explanations. The description only says to pass the comparison unchanged, which helps avoid transforming the input, but it does not explain required listings, ranking, comparedAt, criteriaSummary, or other parameters.

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 description states a specific verb and resource: it shows a comparison returned by compare_listings as a visual shortlist card. It clearly distinguishes rendering from computing by naming compare_listings as the producer and telling the agent to pass its comparison unchanged.

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 gives a clear usage condition: use this after compare_listings when the host can display app cards. That is strong sequencing guidance, though it does not explicitly state when not to use it or name a fallback alternative for hosts that cannot display app cards.

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

search_agentsLook up a property agentA
Read-only
Inspect

Use this when someone asks about a Singapore property agent (salesperson) by name or CEA registration number, such as R028241G, including an agent asking what Homejourney shows about them, or wants agents who work in an area or at an agency. The query searches names and CEA numbers only: for agents in an area, such as an HDB seller in Tampines, pass area, alone or with agency. Returns matching agents on CEA's register with their agency, CEA number, Homejourney listing count and public profile URL; with an area, agents with the most CEA-recorded deals there in the last three years come first, then those with the latest deal, each with their sales and rentals there and their latest deal month. Pass deal_type sale for a seller or buyer, so agents rank by their sales there, or rental for a landlord or tenant; without it every deal counts, and most HDB agent deals are rentals. Pass property_type to rank them by their deals in one kind of home there, such as landed for a landed home seller in D10. For a CEA number, or a name only one agent matches, it also returns the profile: transactions CEA records for them, their top areas and their public Homejourney listings, whose ids get_listing_details reads. Never returns contact details; send the user to the profile URL. Needs no sign-in.

NameRequiredDescriptionDefault
areaNoAn HDB town (TAMPINES, ANG MO KIO) or private district (D01 to D28), or a place a district names, such as Orchard; lists agents with CEA-recorded transactions there.
limitNo
queryNoThe agent's name, or their CEA registration number. Never an area or agency.
agencyNoThe agency's full name as CEA registers it, in any case, such as PropNex Realty Pte. Ltd. (a match's agency), or a featured agency's short name, such as PropNex, ERA or Huttons.
deal_typeNoWith an area: rank its agents by their sales there (sale: for a seller or buyer) or their rentals there (rental: for a landlord or tenant). Leave out to count every deal.
property_typeNoWith an area: count only the agents' CEA-recorded deals in that kind of home there (hdb, condo, ec for executive condominiums, or landed for landed and strata landed houses). Leave out to count every kind.

Output Schema

NameRequiredDescription
areaNoThe area the agents are filtered by: the area input, or the query when it names only an area and no agent.
dataYes
totalYes
agencyNoThe agency the agents are filtered by, from its full CEA name or a featured agency short name such as PropNex.
profileNoThe full profile; present when the query is a CEA number or one agent matches.
dealTypeNoWith an area: the kind of deal that ordered its agents. Absent when every deal counted.
directoryUrlYes
propertyTypeNoWith an area: the kind of home whose deals ordered its agents. Absent when every kind counted.
resultReasonNoSet when no agent matches, or the area is not an HDB town or private district.
queryNamesAreaNoAn area the query names. Without a matching area, the query was searched as agent names, not as that area.
areaRecentTotalNoWith an area: how many of `total` have a deal there since areaDeals.since. The rest dealt there only before it and come last.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnlyHint true, destructiveHint false); the description adds behavior beyond them: ranking order with an area (most CEA-recorded deals in the last three years, then latest deal), what the profile payload contains, that listing ids feed get_listing_details, that contact details are never returned, and that no sign-in is required.

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 use case is front-loaded and every clause maps to a real decision point, but the single dense paragraph runs long and mixes retrieval scope, ranking, and return shape in one block. Slightly tighter segmentation would read faster.

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

Completeness5/5

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

For a 6-parameter, multi-mode search with an output schema, the description covers trigger, mode selection, ranking semantics, return contents, downstream linkage and the no-contact-details constraint. Nothing an agent needs to call it correctly is missing.

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 already 83%, so the schema carries most parameter documentation. The description still adds meaning the schema does not: the sale-vs-rental ranking tradeoff, the parenthetical that 'most HDB agent deals are rentals', and the concrete landed/D10 example for property_type.

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?

Names a specific verb and resource — searching Singapore property agents by name or CEA registration number — and extends it to area/agency lookups. It is clearly distinct from siblings like search_listings, search_guides and get_listing_details, which are referenced only as downstream consumers.

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 frames the trigger ('when someone asks about a Singapore property agent... including an agent asking what Homejourney shows about them') and gives conditional guidance: pass area alone or with agency for area lookups, pass deal_type for seller/buyer vs landlord/tenant, pass property_type for one home kind. It also states what happens when these are omitted ('without it every deal counts').

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

search_guidesSearch Homejourney guidesA
Read-only
Inspect

Use this when someone asks how buying, selling, renting or letting a home in Singapore works: grants and eligibility, BTO and resale, stamp duty, loans and down payments, the MOP, tenancy agreements, or renting out a flat or room. Also use it when a property agent asks how Homejourney works for agents: co-broking and CEA rules, verifying with Singpass, listing for clients, and viewing requests. Also use it when someone asks how to manage their Homejourney account: changing the sign-in email, resetting the password, verifying the email, or editing the profile. Returns Homejourney's reviewed guides and help articles that match, each with its URL, a short answer, who it is for (no persona means everyone), whether it has a calculator, and the date it was last checked. Cite the URL and its date. Filter with persona (buyer, seller, renter, landlord, foreigner or agent); leave query empty to list every guide for that persona. Needs no sign-in.

NameRequiredDescriptionDefault
limitNo
queryNo
personaNo

Output Schema

NameRequiredDescription
dataYes
totalYes
catalogUrlYes
guidesHubUrlYes
resultReasonNoWhy the search found no guide; absent when it found guides.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context beyond that: it requires no sign-in and specifies the return payload shape (URL, short answer, audience, calculator flag, last-checked date) plus an instruction to cite the URL and date.

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

Conciseness3/5

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

The trigger guidance is front-loaded, which is good, but the repeated 'Also use it when...' construction makes the middle dense and list-heavy, and the return-field and citation details could be tightened. Every element is relevant, but the prose is longer than needed for the decision it supports.

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

Completeness5/5

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

An output schema exists, so the description's return-value summary is a bonus rather than a necessity, and the trigger conditions, persona semantics, and auth expectation are all present. An agent has everything needed to decide when to call it and how to construct a valid call.

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 0%, so the description must carry parameter meaning. It does explain persona (enumerating buyer, seller, renter, landlord, foreigner, agent) and query (empty means list everything for that persona), but limit — its default of 5 and maximum of 25 — is never mentioned, leaving one of three parameters undocumented.

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 description states a specific verb (search) and resource (Homejourney guides/help articles), then enumerates the exact topic domains covered: grants and eligibility, BTO and resale, stamp duty, loans, MOP, tenancy, agent operations, and account management. This clearly separates it from siblings like search_listings and search_agents, which target different resource types.

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?

Three explicit 'use this when' clauses give concrete trigger scenarios across consumer, agent, and account domains, plus a clear instruction to leave query empty to list all guides for a persona. It lacks an explicit 'when not to use' or a named alternative for overlapping needs, keeping it just below top marks.

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

search_listingsSearch Homejourney listingsA
Read-only
Inspect

Primary listing-discovery tool for homes in Singapore. Use this when the user asks what properties are available, or describes a home to buy or rent by area, MRT station, school, budget, bedrooms, flat type or other criteria. Omit query for a broad availability request; query is full-text search over project, title, address and description. pagination.total is the exact number of matching listings; the listings one agent has at one address or in one development on a page come back as one result whose listingCluster names the others. Returns summaries of active, published Homejourney listings that may be shown in AI assistants: price, size, address, nearest MRT, nearby schools, a Homejourney link and a link to book a viewing, but never the owner or agent contact details.

NameRequiredDescriptionDefault
pageNo
sortNonewest is the recommended order; listed_newest is strictly by listing date.newest
limitNo
queryNo
townsNoHDB towns, URA planning areas or URA regions the listing lies in, such as "Tampines", "Bukit Timah" or "East". A region (Central, East, North, North-East, West) covers all its planning areas.
schoolNoA school's full MOE name, such as "Tao Nan School". Matches homes that list it among their nearby schools; each result's searchedSchool gives its distance. Use for "near a school" or Primary 1 searches.
tenureNo
psf_maxNoPrice per square foot in SGD.
psf_minNoPrice per square foot in SGD.
bedroomsNo
districtNo
size_maxNoFloor area in square feet.
size_minNoFloor area in square feet.
districtsNoSingapore postal districts, such as "D09" or "15".
listed_byNoWho lists the home. owner keeps homes their owners list: on Homejourney, or on HDB Flat Portal without an agent. agent keeps every other home. pagination.total counts only these homes.
mrt_linesNoMRT or LRT lines; a listing matches when its nearest station is on one. Combines with mrt_stations as 'near any'.
price_maxNo
price_minNo
furnishingNoThe furnishing the renter wants. Matches homes stated as this, and homes that state no furnishing.
bedrooms_minNo
listing_typeNo
mrt_stationsNoNearest MRT station names, such as "Orchard" or "Tanjong Pagar".
pets_allowedNotrue for a renter with a pet. Leaves out homes that say no pets; homes that state no pet policy still match, so confirm it with the lister.
project_nameNoExact condominium or development name.
bathrooms_minNo
property_typeNoOne of HDB, Condominium, Executive Condominium, Landed. Common words such as Condo, EC, Apartment, HDB flat or Bungalow are read as these.
available_fromNoThe renter's move-in date. Matches homes available on or before it, and homes that state no date.
bedroom_countsNoExact bedroom counts to match, such as [2, 3]; 0 is a studio. Combines with bedrooms_min, so [0] plus bedrooms_min 5 means studio or 5+.
hdb_flat_typesNoHDB flat types, such as "4-room" or "executive".
reachable_onlyNoOnly homes whose owner or agent can be reached now: a viewing request reaches the owner or a Homejourney agent, or the lister takes WhatsApp. Leaves out homes whose agent is not on Homejourney yet and has no verified WhatsApp number. pagination.total counts only these homes.
bathroom_countsNoExact bathroom counts to match; combines with bathrooms_min.
subletting_typeNo
listed_within_daysNo
utilities_includedNotrue for a renter who wants utilities in the rent. Leaves out homes that say utilities are extra; homes that do not say still match, so confirm it with the lister.
lease_duration_monthsNoThe renter's lease length in months. Matches homes whose minimum lease is at most this, and homes that state no minimum.
max_school_distance_kmNoKeeps homes within this many km of a school, such as 1 or 2 for the Primary 1 bands. With school, the limit applies to that school, and each result's searchedSchool.distanceKm gives its distance.
messages_on_homejourneyNoOnly homes whose host reads Homejourney messages: start_listing_conversation reaches the listing's Homejourney agent, else its owner, so the user's viewing can be arranged in a Homejourney thread. Leaves out homes reached only by a viewing request or WhatsApp. pagination.total counts only these homes.
min_remaining_lease_yearsNoFewest whole years of lease that must remain, as compare_listings reads it: an HDB flat's block lease, or a condo, EC or landed home's land lease. Freehold and 999-year homes always match; homes whose lease left is not known are left out, and leaseFilter.leaseUnknown counts them. pagination.total counts only the matches.

Output Schema

NameRequiredDescription
dataYes
featuredNoLabelled Pro listings matching the search, on page 1 only.
nextStepsNoSuggestions for what the user usually does next, best first. Each names the tool to call or the page to open; none is taken without the user asking, and a tool that writes still needs their confirmation.
paginationYes
leaseFilterNoHow min_remaining_lease_years narrowed the search.
matchedTermNo
roomMatchesNoRooms that match when no whole unit does.
featuredNoteNo
resultReasonNoWhy the search found no listing, or that it searched a corrected term.
unappliedIntentNoWords in query that an explicit filter replaced; those words were not searched.
continuedClustersNoThis page's listings in a listingCluster that the previous page already shows, which data leaves out: listingId is one of its listings on that page, listingIds are this page's listings in it.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful behavior beyond that: results are limited to active, published listings, contacts are never returned, pagination.total is exact, and clustered listings at one address return as one result with listingCluster naming the others. Those are real additions, but return-format detail overlaps with the existing output schema.

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 and when-to-use, then result semantics. Mostly efficient, but the clustering sentence ("the listings one agent has at one address or in one development on a page come back as one result...") is tangled, and the returns clause runs long and would read better split.

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 38-param search tool, the description covers the highest-risk unknowns: what a result set represents, that contacts are withheld, and that total is exact. An output schema exists so return shape need not be restated, and per-filter meaning is delegated to schema descriptions; the main remaining gap is pagination/limit behavior guidance.

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

Parameters2/5

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

With 38 parameters at 66% schema coverage, many filters are documented only in the schema. The description adds semantics for exactly one: query is full-text over project, title, address and description, which the schema leaves undefined. Everything else it says (total counts, clustering) concerns results, not parameter meaning, so it does little to close 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?

States a specific verb and resource plus scope: "Primary listing-discovery tool for homes in Singapore", and enumerates the criteria (area, MRT, school, budget, bedrooms, flat type). The word "primary" and "listing-discovery" carve out its role against detail/compare siblings such as get_listing_details and compare_listings.

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?

Gives an explicit trigger: "Use this when the user asks what properties are available, or describes a home to buy or rent by ... criteria", plus a rule for the query param ("Omit query for a broad availability request"). It does not name the alternative tools for narrower needs (e.g. detail fetch or comparison), so exclusions are implicit rather than stated.

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

search_servicesSearch Homejourney servicesA
Read-only
Inspect

Use this to find active Homejourney services. Each result carries the provider, package, catalogue version, and price required for quoting and checkout. Every result sells under its provider's own name and logo (soldUnder "provider"): a large operator's at its own published price, a small shop's at Homejourney's standard price; priceSetBy says which. A service can list both. Booking saves a card. Booked signed in with create_service_booking: "Nothing is charged now. We hold the amount once the provider accepts, and charge it after the job is done." Booked with prepare_guest_service_checkout: "Nothing is charged or held now. We charge your card, or send a PayNow request, after the job is done." For a service priced by home size, such as move-in cleaning, pass the home's floor_area_sqft, hdb_flat_type or bedrooms to get each provider's one package for that home; noPackageForHomeSize names providers with none. For aircon, pass unit_type and units (or say them in the query, as in "2 wall units") to get each provider's one package for those units; noPackageForUnits names providers with none. A search for an architect, engineer or builder, or about extending, adding a storey or attic, or rebuilding a landed house, also returns landedWorks: whether the plan is likely A&A or reconstruction, its approvals and how to record the owner's request.

NameRequiredDescriptionDefault
pageNo
limitNo
queryNo
unitsNoHow many aircon units; read from the query ("3 units") when left out.
bedroomsNoBedrooms, matched only where a package or the home gives no floor area.
unit_typeNoThe aircon unit type; read from the query ("2 wall units") when left out. Asks for aircon, so other trades are left out unless service_type is set.
provider_idNo
service_typeNo
hdb_flat_typeNoThe HDB flat type, matched by its usual floor area.
floor_area_sqftNoThe home's floor area in sq ft; it outranks hdb_flat_type.

Output Schema

NameRequiredDescription
dataYes
paginationYes
landedWorksNoPresent when the search asks for an architect, engineer or builder, or about extending, adding a storey or attic, or rebuilding a landed house: each plan with whether it is likely A&A or reconstruction and its approvals, the firms needed, the planning controls by house type, how to check the plot on URA SPACE, nextStep (record_service_interest with service_type and the plan serviceId), the guide URL and its URA and BCA sources. General information: the owner's Qualified Person confirms what the plot allows.
resultReasonNoWhy a search found no service; absent when it found services.
noPackageForUnitsNoProviders that price the service by aircon unit type or count but sell no package for the units asked about.
noPackageForHomeSizeNoProviders that price the service by home size but sell no package for the home asked about.
supportedServiceTypesYes
unsupportedCategoryPolicyYes

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnly/openWorld annotations: explains soldUnder and priceSetBy semantics, the dual pricing model (large operator vs. small shop), that booking saves a card, and the precise charge/hold timing for both checkout paths. It also discloses fallback diagnostics (noPackageForHomeSize, noPackageForUnits) and the conditional landedWorks block. No contradiction with readOnlyHint=true.

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

Conciseness3/5

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

Purpose and result shape are front-loaded, but the middle section embeds verbatim booking/checkout charge copy that belongs to sibling tools and dilutes the search framing. The aircon and home-size rules are useful, yet the paragraph is dense and would benefit from tighter separation.

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 10-parameter search with an output schema, it covers the ambiguous enumerable params, the query-text inference behavior, and the extra landedWorks return. Pagination/filter params (page, limit, provider_id, service_type) and any result-shape caveats are left to the schema, which is acceptable given an output schema exists.

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 only 50% schema coverage, the description carries real weight: it explains how floor_area_sqft outranks hdb_flat_type in practice, how unit_type/units/bedrooms are matched or inferred from the query string, and why unit_type narrows the trade. page, limit, provider_id and service_type remain unexplained, so it doesn't cover everything.

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

Purpose4/5

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

Opens with a specific verb+resource: 'find active Homejourney services,' which is distinguishable from search_listings, search_agents and search_guides by resource alone. It never explicitly contrasts itself with those siblings, so the differentiation is implicit rather than stated.

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?

Gives concrete conditional rules: pass floor_area_sqft/hdb_flat_type/bedrooms for home-size pricing, unit_type+units for aircon, and notes that these can be inferred from the query text. It also maps outcomes to create_service_booking vs. prepare_guest_service_checkout. It stops short of explicit when-not-to-use guidance or naming non-booking siblings like quote_service_booking.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedcheck_landed_purchase_eligibility2 fields changed
      • changedInput schema / properties / gcb_area / description
        Previous value: -"Whether the land is in a Good Class Bungalow area. Leave out when not known."New value: +"Whether the land is in a Good Class Bungalow area. Leave out when not known: a landed listing_id's own coordinates answer it."
      • addedOutput schema / properties / listing / properties / gcbArea
        Added value: +{
        +  "description": "The URA Good Class Bungalow area a landed listing stands in, from its coordinates; null outside every area. The answer already uses it unless gcb_area was passed.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcompare_listings1 field changed
      • addedOutput schema / properties / data / properties / listings / items / properties / gcbArea
        Added value: +{
        +  "description": "Details only: the URA Good Class Bungalow area a landed home stands in, from its location, such as Kilburn Estate; null outside every area. The Ministry of Law has approved no foreign buyer, PRs included, for one since 2021.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_listing_details1 field changed
      • addedOutput schema / properties / data / properties / gcbArea
        Added value: +{
        +  "description": "Details only: the URA Good Class Bungalow area a landed home stands in, from its location, such as Kilburn Estate; null outside every area. The Ministry of Law has approved no foreign buyer, PRs included, for one since 2021.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsearch_listings2 fields changed
      • addedOutput schema / properties / data / items / properties / gcbArea
        Added value: +{
        +  "description": "Details only: the URA Good Class Bungalow area a landed home stands in, from its location, such as Kilburn Estate; null outside every area. The Ministry of Law has approved no foreign buyer, PRs included, for one since 2021.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / featured / items / properties / gcbArea
        Added value: +{
        +  "description": "Details only: the URA Good Class Bungalow area a landed home stands in, from its location, such as Kilburn Estate; null outside every area. The Ministry of Law has approved no foreign buyer, PRs included, for one since 2021.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  2. 1 tool update
    • Addedcheck_landed_purchase_eligibility
  3. 1 tool update
    • Changedsearch_services1 field changed
      • addedOutput schema / properties / landedWorks
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Present when the search asks for an architect, engineer or builder, or about extending, adding a storey or attic, or rebuilding a landed house: each plan with whether it is likely A&A or reconstruction and its approvals, the firms needed, the planning controls by house type, how to check the plot on URA SPACE, nextStep (record_service_interest with service_type and the plan serviceId), the guide URL and its URA and BCA sources. General information: the owner's Qualified Person confirms what the plot allows.",
        +  "type": "object"
        +}
  4. 6 tool updates
    • Changedcompare_listings1 field changed
      • addedOutput schema / properties / data / properties / listings / items / properties / financing
        Added value: +{
        +  "description": "Details only, for a sale listing: the financing figures its web page shows at the asking price and lease, for a Singapore citizen's first home with no other loans. primary is the bank loan; options adds the HDB loan for an HDB flat when its lease allows one. grossIncomeNeeded is the monthly income a loan needs under incomeLimitLabel (MSR for an HDB flat, else TDSR) at stressRatePct. buyerStampDuty, legalFees and totalUpfront (down payment, BSD and legal fees, no ABSD) are in S$. buyerAge is the youngest buyer's age assumed; estimate_mortgage_options takes another age or residency. Null for a rental.",
        +  "properties": {
        +    "buyerAge": {
        +      "type": "integer"
        +    },
        +    "buyerStampDuty": {
        +      "type": "number"
        +    },
        +    "cpfUsagePct": {
        +      "type": "number"
        +    },
        +    "legalFees": {
        +      "type": "number"
        +    },
        +    "options": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "primary": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "remainingLeaseYears": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "totalUpfront": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "primary",
        +    "totalUpfront"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedget_listing_details1 field changed
      • addedOutput schema / properties / data / properties / financing
        Added value: +{
        +  "description": "Details only, for a sale listing: the financing figures its web page shows at the asking price and lease, for a Singapore citizen's first home with no other loans. primary is the bank loan; options adds the HDB loan for an HDB flat when its lease allows one. grossIncomeNeeded is the monthly income a loan needs under incomeLimitLabel (MSR for an HDB flat, else TDSR) at stressRatePct. buyerStampDuty, legalFees and totalUpfront (down payment, BSD and legal fees, no ABSD) are in S$. buyerAge is the youngest buyer's age assumed; estimate_mortgage_options takes another age or residency. Null for a rental.",
        +  "properties": {
        +    "buyerAge": {
        +      "type": "integer"
        +    },
        +    "buyerStampDuty": {
        +      "type": "number"
        +    },
        +    "cpfUsagePct": {
        +      "type": "number"
        +    },
        +    "legalFees": {
        +      "type": "number"
        +    },
        +    "options": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "primary": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "remainingLeaseYears": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "totalUpfront": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "primary",
        +    "totalUpfront"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedsearch_agents1 field changed
      • changedOutput schema / properties / profile / properties / agentNextStep / description
        Previous value: -"For the agent themselves: how to verify with Singpass to get their viewing requests and add a photo, bio and languages. Null once they claimed the profile."New value: +"For the agent themselves: how to verify with Singpass to get their viewing requests and add a photo, bio and languages, and, when other portals send listings under their CEA number, that they can then take those over for free and fix them. Null once they claimed the profile."
    • Changedsearch_guides2 fields changed
      • changedInput schema / properties / persona / enum
        Previous value: -[
        -  "buyer",
        -  "seller",
        -  "renter",
        -  "landlord",
        -  "agent"
        -]New value: +[
        +  "buyer",
        +  "seller",
        +  "renter",
        +  "landlord",
        +  "foreigner",
        +  "agent"
        +]
      • changedOutput schema / properties / data / items / properties / personas / items / enum
        Previous value: -[
        -  "buyer",
        -  "seller",
        -  "renter",
        -  "landlord",
        -  "agent"
        -]New value: +[
        +  "buyer",
        +  "seller",
        +  "renter",
        +  "landlord",
        +  "foreigner",
        +  "agent"
        +]
    • Changedsearch_listings2 fields changed
      • addedOutput schema / properties / data / items / properties / financing
        Added value: +{
        +  "description": "Details only, for a sale listing: the financing figures its web page shows at the asking price and lease, for a Singapore citizen's first home with no other loans. primary is the bank loan; options adds the HDB loan for an HDB flat when its lease allows one. grossIncomeNeeded is the monthly income a loan needs under incomeLimitLabel (MSR for an HDB flat, else TDSR) at stressRatePct. buyerStampDuty, legalFees and totalUpfront (down payment, BSD and legal fees, no ABSD) are in S$. buyerAge is the youngest buyer's age assumed; estimate_mortgage_options takes another age or residency. Null for a rental.",
        +  "properties": {
        +    "buyerAge": {
        +      "type": "integer"
        +    },
        +    "buyerStampDuty": {
        +      "type": "number"
        +    },
        +    "cpfUsagePct": {
        +      "type": "number"
        +    },
        +    "legalFees": {
        +      "type": "number"
        +    },
        +    "options": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "primary": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "remainingLeaseYears": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "totalUpfront": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "primary",
        +    "totalUpfront"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / featured / items / properties / financing
        Added value: +{
        +  "description": "Details only, for a sale listing: the financing figures its web page shows at the asking price and lease, for a Singapore citizen's first home with no other loans. primary is the bank loan; options adds the HDB loan for an HDB flat when its lease allows one. grossIncomeNeeded is the monthly income a loan needs under incomeLimitLabel (MSR for an HDB flat, else TDSR) at stressRatePct. buyerStampDuty, legalFees and totalUpfront (down payment, BSD and legal fees, no ABSD) are in S$. buyerAge is the youngest buyer's age assumed; estimate_mortgage_options takes another age or residency. Null for a rental.",
        +  "properties": {
        +    "buyerAge": {
        +      "type": "integer"
        +    },
        +    "buyerStampDuty": {
        +      "type": "number"
        +    },
        +    "cpfUsagePct": {
        +      "type": "number"
        +    },
        +    "legalFees": {
        +      "type": "number"
        +    },
        +    "options": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "primary": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "remainingLeaseYears": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "totalUpfront": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "primary",
        +    "totalUpfront"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedsearch_services1 field changed
      • changedInput schema / properties / unit_type / description
        Previous value: -"The aircon unit type; read from the query (\"2 wall units\") when left out."New value: +"The aircon unit type; read from the query (\"2 wall units\") when left out. Asks for aircon, so other trades are left out unless service_type is set."
  5. 1 tool update
    • Changedsearch_services3 fields changed
      • addedInput schema / properties / unit_type
        Added value: +{
        +  "description": "The aircon unit type; read from the query (\"2 wall units\") when left out.",
        +  "enum": [
        +    "wall",
        +    "window",
        +    "ceiling",
        +    "ducted",
        +    "portable"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / units
        Added value: +{
        +  "description": "How many aircon units; read from the query (\"3 units\") when left out.",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / noPackageForUnits
        Added value: +{
        +  "description": "Providers that price the service by aircon unit type or count but sell no package for the units asked about.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  6. 3 tool updates
    • Changedcompare_listings1 field changed
      • addedOutput schema / properties / data / properties / listings / items / properties / requestedListing
        Added value: +{
        +  "description": "Details and compare: the id asked for when it is one portal's listing of this home, such as an agent's own listing from search_agents, which Homejourney shows as this listing (id). platform and price are that portal's; sourceAgents names each portal's agent. Use id for viewings and saves.",
        +  "properties": {
        +    "id": {
        +      "format": "uuid",
        +      "type": "string"
        +    },
        +    "platform": {
        +      "type": "string"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_listing_details1 field changed
      • addedOutput schema / properties / data / properties / requestedListing
        Added value: +{
        +  "description": "Details and compare: the id asked for when it is one portal's listing of this home, such as an agent's own listing from search_agents, which Homejourney shows as this listing (id). platform and price are that portal's; sourceAgents names each portal's agent. Use id for viewings and saves.",
        +  "properties": {
        +    "id": {
        +      "format": "uuid",
        +      "type": "string"
        +    },
        +    "platform": {
        +      "type": "string"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsearch_listings2 fields changed
      • addedOutput schema / properties / data / items / properties / requestedListing
        Added value: +{
        +  "description": "Details and compare: the id asked for when it is one portal's listing of this home, such as an agent's own listing from search_agents, which Homejourney shows as this listing (id). platform and price are that portal's; sourceAgents names each portal's agent. Use id for viewings and saves.",
        +  "properties": {
        +    "id": {
        +      "format": "uuid",
        +      "type": "string"
        +    },
        +    "platform": {
        +      "type": "string"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / featured / items / properties / requestedListing
        Added value: +{
        +  "description": "Details and compare: the id asked for when it is one portal's listing of this home, such as an agent's own listing from search_agents, which Homejourney shows as this listing (id). platform and price are that portal's; sourceAgents names each portal's agent. Use id for viewings and saves.",
        +  "properties": {
        +    "id": {
        +      "format": "uuid",
        +      "type": "string"
        +    },
        +    "platform": {
        +      "type": "string"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Verified Singapore property, tax, affordability, salary, and location data for AI agents. 17 MCP tools, x402 micropayments, source provenance on every response. Singapore live now, more markets coming. Categories: Finance, Real Estate, Data, Singapore, x402, Payments, Government Data
    17
    -
  • A
    license
    A
    quality
    D
    maintenance
    Search comparable property sales across 16 global markets with 43M+ government-sourced transactions. Tools: search comps by location, get area statistics and trends, list available markets. Covers UK, France, Singapore, NYC, Chicago, Dubai, and 10 more cities.
    3
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Unofficial MCP server that exposes PropertyGuru Singapore & Malaysia property listing search as MCP tools, returning detailed listing data without an API key.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources