Skip to main content
Glama

PropertyList: Spanish Property MLS

Find properties by description

find_properties_by_description
Read-onlyIdempotent

Match Spanish properties from a free-form description of what the user wants. Best for vague, conditional, or lifestyle-heavy briefs ("3-bed near a good international school, flexible on budget if there's a sea view"). The matcher translates the brief into one to three parallel structured searches across PropertyList's full MLS, then merges and ranks the results. Returns up to 9 listings with match scores and an explanation of how the brief was interpreted (and what couldn't be resolved). Features in the brief are filters too: a private pool, a communal pool, a sea view, a garden, a garage and the like. Commercial premises are matched too (an office, a local, a bar, a warehouse, a traspaso), never mixed with homes.

Works without an API key up to a daily allowance per user (allowance.daily_answers in the result; briefs that find nothing do not count). An API key has its own, larger allowance. When the allowance is used up the call returns an error naming the limit; search_properties stays available for structured queries.

Input Schema

NameRequiredDescriptionDefault
briefYesPlain-English (or Spanish) description of what the user is looking for. 10-500 chars.
languageNoen

Output Schema

NameRequiredDescriptionDefault
errorNo
billedNo
limitsNo
summaryNo
allowanceNo
propertiesYes
unresolvedNo
interpretationNoHow the brief was read, one pill per constraint.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / limits
      Added value: +{
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  2. Changed2 schema fields changed
    • addedOutput schema / properties / properties / items / properties / photo
      Added value: +{
      +  "description": "Absolute https URL of the main photo.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / properties / items / properties / url
      Added value: +{
      +  "description": "Absolute https URL of the listing on PropertyList.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed6 schema fields changed
    • addedOutput schema / properties / allowance
      Added value: +{
      +  "properties": {
      +    "answers_left_today": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "counted_per": {
      +      "type": "string"
      +    },
      +    "daily_answers": {
      +      "type": "integer"
      +    },
      +    "resets": {
      +      "type": "string"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / interpretation / description
      Added value: +"How the brief was read, one pill per constraint."
    • changedOutput schema / properties / interpretation / type
      Previous value: -[
      -  "object",
      -  "null"
      -]New value: +[
      +  "array",
      +  "null"
      +]
    • addedOutput schema / properties / properties / items / properties / location / description
      Added value: +"\"Suburb, City\"."
    • changedOutput schema / properties / properties / items / properties / location / type
      Previous value: -"object"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / properties / items / properties / title / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  4. Changed2 schema fields changed
    • addedOutput schema / properties / billed
      Added value: +{
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / error
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / language / enum
      Previous value: -[
      -  "en",
      -  "es"
      -]New value: +[
      +  "en",
      +  "es",
      +  "de",
      +  "fr",
      +  "it",
      +  "nl",
      +  "pt",
      +  "bg",
      +  "el",
      +  "da",
      +  "sv",
      +  "no",
      +  "fi",
      +  "pl",
      +  "ru"
      +]
  6. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations cover safety (readOnly, non-destructive, idempotent) but the description adds the traits that matter operationally: a daily free allowance without an API key, that empty results don't consume it, the specific error when exhausted, a cap of 9 listings, and that commercial premises are never mixed with homes. That is real behavioral disclosure beyond the annotations.

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 purpose and the qualifying brief type before mechanism and quota details. It runs long, and the commercial-premises sentence and the parenthetical quota note are slightly tangential, but nearly every sentence carries information an agent needs.

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?

An output schema exists, so return-format explanation is not required, and the description still covers scope, ranking, quota, and failure behavior. The one real hole is the undescribed language parameter, which leaves the agent guessing about a non-default input.

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 coverage is only 50%: 'brief' is documented in the schema, but the 'language' enum parameter has no description anywhere. The description never mentions language handling, so it fails to compensate for the gap, and its notes on features-as-filters describe matching behavior rather than parameter syntax.

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 (match Spanish properties from a free-form description) plus the mechanism (translate into 1-3 parallel structured searches over the full MLS, merge and rank). It also implicitly differentiates from search_properties by naming that sibling as the structured alternative, so an agent can pick without opening a 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 when to use it (vague, conditional, lifestyle-heavy briefs, with a concrete example) and names the alternative for the other case: search_properties for structured queries. The fallback when the allowance is exhausted is stated, so the agent knows exactly what to do when this tool errors.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources