Skip to main content
Glama

PropertyList: Spanish Property MLS

Autocomplete location

autocomplete_location
Read-onlyIdempotent

Look up property areas (city, suburb, urbanisation, or a group of areas such as a region or a coast) by free-text name. Returns up to 10 matches with id, name, type, the parent province/city and the number of listings, biggest first, so a group that covers a whole region (e.g. 'Region of Murcia') comes before the city of the same name. A country or region name (Portugal, Algarve) is answered by the group of that name, never by villages that only share its letters. Each match names the municipality it sits in, which tells apart places that share a name (El Limonar in Mijas, Málaga and in Torrevieja, Alicante). Use this to resolve place names before calling search_properties, especially for common spellings like 'Nueva Andalucia' (vs 'Nueva Andalucía') or 'Marbella old town', and pass the chosen id to search_properties as location_id.

Input Schema

NameRequiredDescriptionDefault
queryYesFree-text place name. 2+ characters.
provincesNoOptional comma-separated province ids to scope the search.
search_typeNoMarket the listing counts and the ranking are for. Defaults to 'for-sale'.

Output Schema

NameRequiredDescriptionDefault
matchesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / matches / items / properties / municipality
      Added value: +{
      +  "description": "The municipality it is part of; absent when we cannot place it, never guessed.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / municipality_code
      Added value: +{
      +  "description": "INE code of that municipality.",
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / search_type
      Added value: +{
      +  "description": "Market the listing counts and the ranking are for. Defaults to 'for-sale'.",
      +  "enum": [
      +    "for-sale",
      +    "for-rent",
      +    "holiday-rentals"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "matches": {
      +      "items": {
      +        "properties": {
      +          "areas_in_group": {
      +            "description": "For a group: how many areas it is made of.",
      +            "type": "integer"
      +          },
      +          "id": {
      +            "description": "Area id: pass it to search_properties as location_id.",
      +            "type": "integer"
      +          },
      +          "kind": {
      +            "description": "The raw area level, kept for existing callers; read type instead.",
      +            "type": [
      +              "string",
      +              "integer"
      +            ]
      +          },
      +          "listings": {
      +            "description": "Live listings in it for the search_type asked for.",
      +            "type": "integer"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "parent": {
      +            "description": "The area this one sits in.",
      +            "type": "string"
      +          },
      +          "province": {
      +            "type": "string"
      +          },
      +          "type": {
      +            "description": "What kind of place it is; a group is a region or a coast made of other areas.",
      +            "enum": [
      +              "city",
      +              "suburb",
      +              "urbanisation",
      +              "group",
      +              "area"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "type",
      +          "listings"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "matches"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/openWorld safety, and the description adds genuine behavior beyond them: max 10 results, ordering 'biggest first', the rule that a group covering a region precedes a same-named city, the exact-name matching rule for country/region queries, and municipality-based disambiguation of duplicate names. These ranking and matching semantics are not derivable from annotations or 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 return shape, then usage, then routing guidance — good ordering. Some sentences (the two disambiguation examples) overlap in intent and could be trimmed slightly, but each carries distinct information.

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?

Output schema exists so return-field enumeration is optional, and annotations cover the safety profile; the description still supplies the ordering rules, matching behavior, and downstream integration with search_properties that an agent needs to call and use the tool correctly. Nothing material 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 100%, so the baseline is 3; the description adds that the count and ranking depend on the market, which implicitly explains the meaning of search_type, and clarifies query as a place name rather than a free-form search string. It does not elaborate on the provinces parameter, so it falls short of full semantic coverage.

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 — looking up property areas (city, suburb, urbanisation, region/coast groups) by free-text name — and defines the scope, including the different area types returned. An agent can immediately distinguish this resolver from search_properties in the sibling list.

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: resolve place names before calling search_properties, pass the chosen id as location_id, and calls out common spelling cases ('Nueva Andalucia' vs 'Nueva Andalucía'). The alternative tool and the hand-off contract are both named.

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