Skip to main content
Glama

Search a destination's listings by name

destination_listings
Read-onlyIdempotent

Find places to stay, eat and visit in a named destination by text, category, area or tags. Every query word matches, in any order; each business appears once (also_listed_as) with a snippet and map_url, so call it again with listing_id for the full text. An unknown filter value's reason lists the valid ones.

Input Schema

NameRequiredDescriptionDefault
areaNoArea name or slug; destination_overview lists them.
tagsNoTag slugs; only listings carrying ALL are returned.
limitNoMaximum number of items to return.
queryNoWords matched in any order against listing names, descriptions, tags and categories.
cursorNoNumber of items to skip; pass `next_cursor` from the previous page.
categoryNoCategory name or slug; destination_overview lists them.
languageNoLanguage code (e.g. 'en', 'es'); defaults to the destination's.
radius_kmNoSearch radius in km around near_listing_id; a larger value is reduced to the server maximum.
listing_idNoOne listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools, whose answer carries its booking link.
destinationYesDestination name or slug, e.g. 'Los Cabos'; list_cities names them.
near_listing_idNoA listing id; returns listings within radius_km, nearest first, each with distance_km.

Output Schema

NameRequiredDescriptionDefault
itemNo
itemsNo
reasonNo
sampleNo
sourceNo
statusYes
paginationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / listing_id / description
      Previous value: -"One listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools and book via its booking link."New value: +"One listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools, whose answer carries its booking link."
  2. Changed49 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / area / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / area / description
      Previous value: -"Area slug from destination_facets."New value: +"Area name or slug; destination_overview lists them."
    • addedInput schema / properties / area / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / category / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / category / description
      Previous value: -"Category slug from destination_facets."New value: +"Category name or slug; destination_overview lists them."
    • addedInput schema / properties / category / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedInput schema / properties / destination / description
      Previous value: -"Destination name or slug; call search_destinations to discover one."New value: +"Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
    • addedInput schema / properties / destination / maxLength
      Added value: +256
    • removedInput schema / properties / language / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / language / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedInput schema / properties / listing_id
      Added value: +{
      +  "default": null,
      +  "description": "One listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools and book via its booking link.",
      +  "maxLength": 256,
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedInput schema / properties / near_listing_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / near_listing_id / description
      Previous value: -"A listing id; returns listings within radius_km, nearest first."New value: +"A listing id; returns listings within radius_km, nearest first, each with distance_km."
    • addedInput schema / properties / near_listing_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / query / anyOf
      Removed value: -[
      -  {
      -    "maxLength": 256,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / query / description
      Previous value: -"Text to match listing names/descriptions."New value: +"Words matched in any order against listing names, descriptions, tags and categories."
    • addedInput schema / properties / query / maxLength
      Added value: +256
    • addedInput schema / properties / query / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / radius_km / anyOf
      Removed value: -[
      -  {
      -    "maximum": 50,
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / radius_km / maximum
      Added value: +50
    • addedInput schema / properties / radius_km / minimum
      Added value: +0
    • addedInput schema / properties / radius_km / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / item / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / item / default
      Removed value: -null
    • removedOutput schema / properties / item / title
      Removed value: -"Item"
    • addedOutput schema / properties / item / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / items / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / items / default
      Removed value: -null
    • removedOutput schema / properties / items / title
      Removed value: -"Items"
    • addedOutput schema / properties / items / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedOutput schema / properties / pagination / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "The page a paginated read actually served (FR-13, INV-8).\n\n``next_cursor`` is ``None`` both at the end of the results and when the next\ncursor would exceed ``max_public_cursor`` — in either case there is no\nfurther page a caller can legally request.",
      -    "properties": {
      -      "cursor": {
      -        "title": "Cursor",
      -        "type": "integer"
      -      },
      -      "limit": {
      -        "title": "Limit",
      -        "type": "integer"
      -      },
      -      "next_cursor": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "title": "Next Cursor"
      -      },
      -      "total": {
      -        "title": "Total",
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "limit",
      -      "cursor",
      -      "total"
      -    ],
      -    "title": "Pagination",
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / pagination / default
      Removed value: -null
    • addedOutput schema / properties / pagination / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / reason / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / reason / default
      Removed value: -null
    • removedOutput schema / properties / reason / title
      Removed value: -"Reason"
    • addedOutput schema / properties / reason / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / sample / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / sample / default
      Removed value: -null
    • removedOutput schema / properties / sample / title
      Removed value: -"Sample"
    • addedOutput schema / properties / sample / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / source / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / source / description
      Removed value: -"FR-13: which approved revision an answer was read from, and how fresh.\n\n``source`` is ``approved-content-revision:<id>`` for every read that answers\nfrom one venue, and the literal ``directory`` for the two cross-venue reads,\nwhich have no single revision to cite."
    • removedOutput schema / properties / source / properties
      Removed value: -{
      -  "approved_at": {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "default": null,
      -    "title": "Approved At"
      -  },
      -  "content_version": {
      -    "title": "Content Version",
      -    "type": "integer"
      -  },
      -  "powered_by": {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ],
      -    "default": null,
      -    "title": "Powered By"
      -  },
      -  "source": {
      -    "title": "Source",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / source / required
      Removed value: -[
      -  "content_version",
      -  "source"
      -]
    • removedOutput schema / properties / source / title
      Removed value: -"SourceReference"
    • removedOutput schema / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / title
      Removed value: -"PublicResponse"
  3. Changed5 schema fields changed
    • changedInput schema / properties / query / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 256,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / radius_km / anyOf
      Previous value: -[
      -  {
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 50,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / radius_km / description
      Previous value: -"Search radius in km around near_listing_id."New value: +"Search radius in km around near_listing_id; a larger value is reduced to the server maximum."
    • addedInput schema / properties / tags / maxItems
      Added value: +8
    • addedOutput schema / properties / sample
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sample"
      +}
  4. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: deduplication ('each business appears once (also_listed_as)'), what a result row contains (snippet, map_url), and that error responses enumerate valid filter values. It stops short of describing pagination or result-set size behavior.

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?

Three tight sentences, no filler, and the core purpose plus match semantics are front-loaded before the follow-up-call and error notes. Every clause carries operational information.

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 explain return values, yet it still sketches the row shape (snippet, map_url, also_listed_as). For an 11-parameter tool it covers search semantics, dedup, and error handling well; the remaining gap is sibling routing guidance, which matters given five overlapping search tools.

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 still adds real meaning the schema leaves ambiguous: 'Every query word matches, in any order' pins down AND semantics for the multi-word query, and the listing_id re-call path clarifies that this is a detail-retrieval mode rather than a filter combination.

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 and resource with scope: 'Find places to stay, eat and visit in a named destination by text, category, area or tags.' An agent immediately knows this is a destination-scoped listing search. It does not, however, name or distinguish itself from plausible siblings like search_venues, search, or destination_overview, which an agent may hesitate between.

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?

The description gives a clear follow-up path ('call it again with listing_id for the full text') and hints at error recovery ('an unknown filter value's reason lists the valid ones'). It does not say when this tool should be chosen over search_venues or destination_overview, nor what preconditions (e.g. needing a destination slug from list_cities) apply, so usage is only implied.

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