Voxhouses (Portugal)
Server Details
Property listings in Portugal: search, market stats, comparables, neighbourhoods.
- Status
- Healthy
- Uptime
- 99.1% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
TDQS
Scored across 7 tools
The three search tools (structural, semantic, and comparables) share a surface but their descriptions draw sharp, actionable boundaries and even explain how to combine them. The one residual overlap is get_market_stats vs search_neighbourhoods, both of which return median price per m² for an area, so an 'is this area expensive' question could land on either.
All seven tools are snake_case with a clear verb_noun shape (search_*, get_*, find_*). The only length outlier, search_properties_by_description, is a natural extension of the search_properties stem rather than a convention break.
Seven tools is well within the sweet spot and each covers a distinct research step: discover, describe, inspect, compare, benchmark, contextualise, and understand. Nothing looks redundant or bolted on.
The lifecycle from discovery (search variants) through inspection (detail) to benchmarking (stats, neighbourhoods) and education (articles) is covered, which is complete for a read-only aggregator. Minor gaps: no way to fetch a single article or neighbourhood guide in full, and no saved-search or listing-alert operation.
Available Tools
7 toolsfind_similar_propertiesARead-onlyIdempotentInspect
Given one listing, find comparable ones: same operation and area, similar typology, floor area and price. Use this when the user likes a property but wants alternatives — 'find me something similar', 'the same but cheaper', 'what else is there in this area'. Pass maxPrice for the cheaper case; without it, comparables are drawn from a band around the reference price. Comparability is by location, typology, area and price, not by text similarity: it answers 'is this well priced for what it is', which a keyword search cannot.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug of the reference listing, as returned by search_properties or get_property_detail. | |
| limit | No | Maximum number of comparables (default 6, max 20). | |
| maxPrice | No | Optional budget ceiling, in the market currency. Use it for 'similar but cheaper'; it overrides the default band around the reference price. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Comparables returned. |
| market | Yes | |
| currency | No | |
| reference | Yes | The listing the comparables are measured against, echoed back for the comparison. |
| properties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behaviour. The description adds meaningful behavioural context: comparables are drawn from a band around the reference price unless maxPrice overrides it, and the tool answers a pricing-adequacy question rather than a textual-match question. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: it states the core function first, then usage examples, then the crucial distinction from text search. Every sentence adds information needed to invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, full schema coverage, and an output schema, the description covers the key decisions an agent must make: when to call it, what makes properties comparable, and how maxPrice changes behaviour. The output schema handles return-value documentation, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is well described in the schema. The description adds extra semantics for maxPrice ('overrides the default band', 'similar but cheaper') and clarifies slug as the reference listing. This is above baseline but not dramatically richer than the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Given one listing, find comparable ones' and defines comparability dimensions (operation, area, typology, floor area, price). It also explicitly distinguishes itself from text-similarity search, so an agent can tell it apart from search_properties_by_description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use the tool with user-intent examples like 'find me something similar' and 'the same but cheaper'. It also explains the maxPrice behaviour for the cheaper case and explicitly contrasts with keyword search, which is a clear when-to-use versus alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_statsARead-onlyIdempotentInspect
Get price statistics for a slice of the Portugal property market: how many listings match, the median price, the p25–p75 range, the median price per m² and a breakdown by typology. Use this when the user asks what something costs, whether an asking price is fair, or how two areas compare — instead of listing individual properties. Takes the same filters as search_properties and describes exactly the set that tool would return, so the two never disagree. Reports medians and quartiles rather than averages, because property prices have a long right tail and a single luxury listing moves an average. Call once per area to compare areas.
| Name | Required | Description | Default |
|---|---|---|---|
| minArea | No | Minimum floor area in m². Matches either the gross or the useful area, whichever the source published. Only matches listings that published an area. | |
| location | No | Location: district, municipality, neighbourhood, town or postal-code prefix (e.g. Lisbon, Cascais, Chiado, 2750). Not a free-text keyword search — words that are not places (e.g. 'sea view') will not match. | |
| priceMax | No | Maximum price, in the market currency. Note: listings advertised 'price on request' have no price and are excluded by either price bound. | |
| priceMin | No | Minimum price, in the market currency. | |
| typology | No | Normalised typology code (T0, T1, T2, T3…), where the number is the count of bedrooms. Used in every market, including the German and Polish ones. Matched exactly; pass an array to match several. The buckets `T0–T1` and `T4+` are also accepted. | |
| condition | No | State of repair, or an array of states. Only matches listings whose source published it. | |
| operation | No | buy = for sale, rent = to let. Defaults to buy; a listing is one or the other, so call twice to cover both. | |
| energyClass | No | Energy certificate class. Selects the whole band the class belongs to: A+/A, B/B-, C, or D-and-below. Only matches listings that carry a certificate. | |
| minBathrooms | No | Minimum number of bathrooms. Only matches listings whose source published a bathroom count. | |
| propertyType | No | Property type, or an array of types. Omit to search all types. `farm` covers rural estates (quintas); `building` is a whole apartment block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Listings matching the filters, with or without a published price. |
| price | No | Price distribution, in percentiles. null when no matching listing publishes a price. There is deliberately no min or max: listings come from third-party sources and the extremes are set by data errors, not by the market. |
| market | Yes | |
| priced | Yes | Subset with a published price — the base of every figure below. A large gap to `count` means many listings in this slice are 'price on request'. |
| currency | Yes | |
| operation | Yes | |
| byTypology | Yes | Up to 6 most represented typologies, each with its own median. |
| pricePerM2Median | No | Median price per m² among listings that published both a price and an area. Best figure for comparing areas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety bar is low; the description nonetheless adds real substance — the guarantee that the tool describes exactly the result set search_properties would return, and the median/quartile methodology rationale. It stops short of covering edge behavior such as what a slice with zero matches reports, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return payload, then usage, then the consistency guarantee and methodology note — each sentence contributes a distinct fact. The median-versus-average sentence justifies a design choice an agent might otherwise question, so it earns its place rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, zero-required aggregate tool with a full output schema, the description supplies what structured fields cannot: intent routing, the sibling equivalence guarantee, and the one-call-per-area pattern. Return values are described at a level that complements rather than duplicates the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries per-parameter meaning; the description adds a semantic anchor by declaring the filter set identical to search_properties, which tells the agent the two tools partition the same data consistently. It adds no parameter-specific detail beyond that, which is acceptable given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get price statistics for a slice of the Portugal property market') and enumerates exactly what is returned: match count, median, p25–p75, median price per m², typology breakdown. It also explicitly distinguishes itself from the sibling that lists individual properties, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ('what something costs', 'whether an asking price is fair', 'how two areas compare') and an explicit exclusion ('instead of listing individual properties'), naming search_properties as the alternative. It closes the loop with per-call guidance ('Call once per area to compare areas'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_detailARead-onlyIdempotentInspect
Get the complete record of one listing in Portugal by its slug. Use this after search_properties when the user asks about a specific property: full description, features, photos, energy rating, condition, floor, year built, seller and the original source URL to cite.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Unique listing slug, as returned by search_properties. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Canonical listing page on this market's domain. |
| slug | Yes | Stable identifier; use it in get_property_detail. |
| floor | No | |
| phone | No | Advertiser phone when published at the source. |
| price | No | null means the source does not publish a price (on request). |
| title | Yes | |
| photos | No | Up to 5 image URLs. |
| source | No | Portal or agency site the listing came from; null when published directly with us. |
| bedrooms | No | |
| currency | No | ISO 4217 code of this market. |
| district | No | District or region. |
| elevator | No | |
| features | No | Amenities as published by the source (Portuguese labels). |
| landArea | No | Plot area in m²; relevant for houses, land and farms. |
| lastSeen | Yes | ISO 8601 date we last confirmed the listing at the source. |
| typology | No | T-notation typology (T0…T6+); empty when unknown. |
| verified | No | Advertiser identity verified by us. |
| bathrooms | No | |
| condition | No | |
| firstSeen | Yes | ISO 8601 date the listing was first published. |
| houseArea | No | Gross floor area in m². |
| operation | Yes | comprar = for sale, arrendar = to let. |
| sourceUrl | Yes | Original listing URL at the source. Cite this alongside url. |
| updatedAt | No | ISO 8601 date the record last changed on our side. |
| yearBuilt | No | |
| priceLabel | No | Formatted price for display; empty when price is null. |
| pricePerM2 | No | |
| sellerName | No | |
| usefulArea | No | Net/usable floor area in m². |
| description | No | |
| energyClass | No | |
| orientation | No | |
| municipality | No | Municipality (LAU) name. |
| propertyType | No | Property type; the same token accepted by the propertyType filter. |
| neighbourhood | No | Neighbourhood, when the source located the listing precisely enough. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety/repeatability is covered. The description adds useful context about what the record contains (photos, energy rating, seller, source URL) but doesn't disclose any additional behavioral traits such as error cases or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and followed by a useful usage condition. The field list is compact and earns its place by telling the agent what to expect in the returned record.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with a full output schema and annotations, the description covers what remains important: when to call it, what it returns, and how it relates to search_properties. No critical missing context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already described as 'Unique listing slug, as returned by search_properties.' The description reinforces that the slug comes from search_properties but adds no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Get') and a precise resource: the complete record of one listing in Portugal by slug. The description also distinguishes this from search-oriented siblings by naming search_properties as the prerequisite and clarifying this is for a specific property.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance: use after search_properties when the user asks about a specific property. It doesn't enumerate when-not-to-use alternatives like find_similar_properties or search_properties_by_description, but the stated condition is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articlesARead-onlyIdempotentInspect
Search editorial articles about the property market in Portugal: buying and renting guides, market analysis and practical advice. Use this when the user asks how something works — mortgages, contracts, taxes, the buying process — rather than asking for listings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 5, max 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| articles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context by specifying the kind of content returned (editorial, educational articles) and the intent-driven use case, going beyond what the annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The core subject and scope are front-loaded, and the usage guidance follows immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one optional parameter, strong annotations, and an output schema exist, so the description covers most needs. The only minor gap is that the schema exposes no search-query parameter, and the description does not explicitly explain how the search topic is derived from the conversation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, limit, is fully described in the schema with default and maximum values, so schema coverage is 100%. The description does not need to restate it, and it adds no parameter-level detail, which is acceptable given the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search editorial articles' and narrows the domain to the Portuguese property market, including buying/renting guides, market analysis, and practical advice. This clearly separates it from sibling tools that search properties, neighbourhoods, or market stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition: 'Use this when the user asks how something works — mortgages, contracts, taxes, the buying process'. It also states what it is not for: 'rather than asking for listings', which routes agents away from listing-focused sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_neighbourhoodsARead-onlyIdempotentInspect
Search neighbourhood and municipality guides for Portugal, with median price per m² for buying and renting, price trend and an editorial summary. Use this when the user asks where to live or where to buy, or wants to compare areas, instead of asking for individual listings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 8, max 20). | |
| query | No | Neighbourhood, municipality or district (e.g. Cascais, Príncipe Real). Omit to list all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| market | Yes | |
| neighbourhoods | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is established. The description adds behavioral context by disclosing exactly what kind of content the search returns, including price trends and editorial summaries, which helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states what the tool returns, and the second gives clear usage guidance, making the most important information immediately accessible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the annotations cover safety, the schema covers both parameters, and an output schema exists, the description is complete enough for an agent to select and invoke this tool correctly. It covers the tool's purpose, return content, and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters fully, including examples and defaults. The description reinforces the intended use but adds no additional parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Search' plus the resource 'neighbourhood and municipality guides for Portugal' is specific, and the description adds concrete output details: median price per m², price trend, and editorial summary. It also distinguishes itself from sibling tools by explicitly saying it is for area comparison rather than individual listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: when the user asks where to live or buy, or wants to compare areas. It gives a when-not signal ('instead of asking for individual listings'), though it does not name the specific sibling tool to use in that alternative case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_propertiesARead-onlyIdempotentInspect
Search current residential, rural and commercial real-estate listings for sale or rent in Portugal. Use this whenever the user wants to find, compare or explore properties — by location, budget, typology, property type, condition or energy rating. Returns price, price per m², typology, areas, neighbourhood, source and a citable listing URL, plus total: the exact number of listings matching the filters, which makes this tool usable to answer 'how many' questions. Listings are aggregated from portals and agency sites and refreshed continuously; each result carries the date it was last checked at the source. Sources publish uneven detail: filtering on an attribute silently excludes listings that omit it, so prefer the broadest filters that answer the question and report total as a floor, not a census.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. Use it with `total` to walk through a large result set. | |
| sort | No | Result order. Default `recent` (most recently published first). | |
| limit | No | Results per page (default 10, max 20). | |
| minArea | No | Minimum floor area in m². Matches either the gross or the useful area, whichever the source published. Only matches listings that published an area. | |
| location | No | Location: district, municipality, neighbourhood, town or postal-code prefix (e.g. Lisbon, Cascais, Chiado, 2750). Not a free-text keyword search — words that are not places (e.g. 'sea view') will not match. | |
| priceMax | No | Maximum price, in the market currency. Note: listings advertised 'price on request' have no price and are excluded by either price bound. | |
| priceMin | No | Minimum price, in the market currency. | |
| typology | No | Normalised typology code (T0, T1, T2, T3…), where the number is the count of bedrooms. Used in every market, including the German and Polish ones. Matched exactly; pass an array to match several. The buckets `T0–T1` and `T4+` are also accepted. | |
| condition | No | State of repair, or an array of states. Only matches listings whose source published it. | |
| operation | No | buy = for sale, rent = to let. Defaults to buy; a listing is one or the other, so call twice to cover both. | |
| energyClass | No | Energy certificate class. Selects the whole band the class belongs to: A+/A, B/B-, C, or D-and-below. Only matches listings that carry a certificate. | |
| minBathrooms | No | Minimum number of bathrooms. Only matches listings whose source published a bathroom count. | |
| propertyType | No | Property type, or an array of types. Omit to search all types. `farm` covers rural estates (quintas); `building` is a whole apartment block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| shown | No | Listings returned on this page. |
| total | Yes | Exact number of listings in this market matching the filters, across all pages. |
| market | Yes | ISO country code of this market. |
| hasMore | Yes | true when further pages are available. |
| currency | No | |
| pageSize | No | |
| operation | No | The operation actually searched (comprar = for sale, arrendar = to let). |
| properties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description adds substantial non-annotation context: listings are aggregated from portals and agencies and refreshed continuously, each result carries a last-checked date, and sources publish uneven detail so filters silently drop listings. The 'total is a floor, not a census' caveat is exactly the kind of trap an agent would otherwise fall into.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability is front-loaded in the first sentence, and the caveat about uneven source data is placed at the end where it reads as a caution. It is on the long side for a description and the filter enumeration in sentence two partially repeats the schema, but almost every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, zero-required search tool with an output schema present, the description supplies precisely what structured fields cannot: what the results mean, where the data comes from, how fresh it is, and how to interpret `total`. Nothing needed to invoke or interpret the call correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents every parameter, so the baseline is 3. The description earns an extra point by adding cross-parameter behaviour: `total` can be combined with page to walk a large result set and answers 'how many' questions, and operation must be called twice to cover buy and rent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — searching residential, rural and commercial listings for sale or rent in Portugal — and enumerates the dimensions it can filter on. It stops short of naming how it differs from the near-identical sibling search_properties_by_description, so an agent must infer that distinction itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear trigger ('whenever the user wants to find, compare or explore properties') and gives two concrete operating instructions: call twice for buy vs rent, and prefer the broadest filters because filtering silently excludes listings that omit an attribute. It never explicitly says when NOT to use it or names an alternative sibling, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_properties_by_descriptionARead-onlyIdempotentInspect
Search Portugal listings by describing the property in plain language, matched against listing text by meaning rather than keywords. Use this for wants that are not filter fields — 'a renovated loft with exposed brick', 'quiet, lots of natural light, close to a school', 'a ruin to restore with a sea view'. Prefer search_properties when the request is entirely structural (typology, budget, location), and this tool when it is descriptive; combine both by passing structural filters here too, which are applied as hard constraints while the description only ranks. Results are ordered by relevance, so total is the number matching the structural filters, not the number that fit the description.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 10, max 20). | |
| minArea | No | Minimum floor area in m². Matches either the gross or the useful area, whichever the source published. Only matches listings that published an area. | |
| location | No | Location: district, municipality, neighbourhood, town or postal-code prefix (e.g. Lisbon, Cascais, Chiado, 2750). Not a free-text keyword search — words that are not places (e.g. 'sea view') will not match. | |
| priceMax | No | Maximum price, in the market currency. Note: listings advertised 'price on request' have no price and are excluded by either price bound. | |
| priceMin | No | Minimum price, in the market currency. | |
| typology | No | A single exact typology code (T0, T1, T2…), where the number is the count of bedrooms. Buckets are not accepted here. | |
| operation | No | buy = for sale, rent = to let. Defaults to buy; a listing is one or the other, so call twice to cover both. | |
| description | Yes | What the user is looking for, in their own words. Full phrases work better than keywords. Pass the qualities here and the hard limits in the other arguments. | |
| propertyType | No | A single property type. Unlike search_properties, this tool takes one, not a list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| shown | Yes | |
| total | Yes | Listings matching the structural filters. The description narrows the ranking, not this count. |
| market | Yes | |
| currency | No | |
| properties | Yes | Ordered by relevance to the description, most relevant first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description reveals important behavior: semantic matching, structural filters applied as hard constraints while description only ranks, and relevance-based ordering. It also clarifies the meaning of `total`, which could otherwise mislead callers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core purpose, usage examples, sibling differentiation, combination guidance, and a key output-semantics caveat. It is front-loaded with the most important information first and avoids repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, sibling overlap, and the presence of an output schema, the description covers all essential decision points: when to use it, how to combine filters, what the ranking behavior is, and what `total` means. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema already documents all parameters, the description adds crucial semantics: the description text is a ranking signal, not a filter; structural filters constrain results; operation defaults to buy and must be called twice to cover both; propertyType is singular here unlike search_properties. This goes well beyond the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), resource ('Portugal listings'), and method ('describing the property in plain language... matched by meaning rather than keywords'). It clearly distinguishes itself from search_properties by contrasting structural vs descriptive queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use this tool: for wants that are not filter fields, with concrete examples. It also names the alternative (search_properties) for structural requests and explains how to combine both by passing structural filters here as hard constraints.
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.
2 tool updates
- Changed
get_market_stats1 field changed- changed
Input schema / properties / energyClass / enumPrevious value: -[ - "A+", - "A", - "B", - "B-", - "C", - "D", - "E", - "F" -]New value: +[ + "A++", + "A+", + "A", + "B", + "B-", + "C", + "D", + "E", + "F", + "G", + "H" +]
- Changed
search_properties1 field changed- changed
Input schema / properties / energyClass / enumPrevious value: -[ - "A+", - "A", - "B", - "B-", - "C", - "D", - "E", - "F" -]New value: +[ + "A++", + "A+", + "A", + "B", + "B-", + "C", + "D", + "E", + "F", + "G", + "H" +]
7 tool updates
- First observed
find_similar_properties - First observed
get_market_stats - First observed
get_property_detail - First observed
search_articles - First observed
search_neighbourhoods - First observed
search_properties - First observed
search_properties_by_description
Related MCP Connectors
Search public property listings in Portugal, compare homes and read INE housing statistics.
Portugal real estate search — 224,000+ listings, commute times and market prices
Job listings in Portugal: search, salary statistics, comparables and companies.
First-party Spanish and Portuguese property listings with notary-verified prices.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables users to calculate Portuguese property purchase costs (IMT, stamp duty, deed/registration) and query annual IMI rates and costs for all 308 municipalities, with sourced figures.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to calculate Portuguese property purchase costs (IMT and stamp duty) and look up annual IMI property tax rates and costs for all 308 municipalities, with sources and year.MIT
- AlicenseAqualityDmaintenanceSearch 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.34MIT
- AlicenseAqualityBmaintenanceUnified UK property search across major portals with deduplication and open-data enrichment, enabling natural-language queries for listings, sold prices, EPC, crime, schools, and market stats.10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.