Skip to main content
Glama

Sorted Travel

render_recommended_destinations

Read-onlyIdempotent

Render the destination recommendations carousel.

Always call get_recommended_destinations first for a new search, then pass its destinations (and related fields) here. For a follow-up that narrows an existing list, call only this tool with the filtered destinations. Do not invent destination cards.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
monthsNoMonths from the recommendation result.
statusNoResult status. Usually OK.OK
messageNoOptional status message for empty or error states.
currencyNoCurrency code from the recommendation result.USD
total_cntNoTotal match count from the recommendation result.
destinationsYesDestination cards from get_recommended_destinations. Pass the full list, or a filtered subset for follow-ups such as cheapest or visa-free.
discover_urlNoDiscover URL from the recommendation result.
source_location_codeNoDeparture IATA from the recommendation result `from` field.LHR
selected_month_indexesNoSelected month indexes from the recommendation result.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
fromNoDeparture IATA airport code.LHR
monthsNoTravel months from the recommendation result.
statusYesResult status. Usually OK.
messageNoOptional status message for empty or error states.
currencyNoCurrency code for prices.USD
total_cntNoTotal match count from the recommendation result.
destinationsYesDestination cards shown in the carousel.
discover_urlNoDiscover page URL for the same search.
selected_month_indexesNoSelected month indexes from the recommendation result.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Structured content returned by render_recommended_destinations.",
      +  "properties": {
      +    "currency": {
      +      "default": "USD",
      +      "description": "Currency code for prices.",
      +      "title": "Currency",
      +      "type": "string"
      +    },
      +    "destinations": {
      +      "description": "Destination cards shown in the carousel.",
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "title": "Destinations",
      +      "type": "array"
      +    },
      +    "discover_url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Discover page URL for the same search.",
      +      "title": "Discover Url"
      +    },
      +    "from": {
      +      "default": "LHR",
      +      "description": "Departure IATA airport code.",
      +      "title": "From",
      +      "type": "string"
      +    },
      +    "message": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Optional status message for empty or error states.",
      +      "title": "Message"
      +    },
      +    "months": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Travel months from the recommendation result.",
      +      "title": "Months"
      +    },
      +    "selected_month_indexes": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "integer"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Selected month indexes from the recommendation result.",
      +      "title": "Selected Month Indexes"
      +    },
      +    "status": {
      +      "description": "Result status. Usually OK.",
      +      "title": "Status",
      +      "type": "string"
      +    },
      +    "total_cnt": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Total match count from the recommendation result.",
      +      "title": "Total Cnt"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "destinations"
      +  ],
      +  "title": "RecommendationsRenderOutput",
      +  "type": "object"
      +}
  2. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint), so the description only needs to add behavior beyond that. It adds the critical constraint that destination data must come from get_recommended_destinations, and that filtering is allowed. This is useful context, though it doesn't describe the rendering mechanics or error behavior. Since annotations carry the safety profile, a 4 is appropriate.

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 concise sentences with zero waste. The purpose is front-loaded, then usage guidance, then a clear prohibition. Every sentence earns its place without redundancy.

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 render tool with 9 parameters but only 1 required, and an output schema present, the description covers the key flow: when to call, what to pass, and that filtered subsets are acceptable for follow-ups. It doesn't explain return values, but the output schema likely covers that. The prerequisite call and data-source constraint are clearly stated, making it sufficiently complete for correct invocation.

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 100%, so each parameter already has a clear description (e.g., 'Months from the recommendation result'). The description adds little beyond the schema—only the flow note about passing 'related fields' from the previous call, which is already implied by the schema descriptions. Baseline 3 is correct because the schema does the heavy lifting.

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 clearly states the tool's purpose: 'Render the destination recommendations carousel.' It also clarifies the relationship with get_recommended_destinations, distinguishing it from sibling render tools like render_destination_info and render_destination_weather. The verb 'render' plus the specific resource is unambiguous.

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 instructs when to use this tool: 'Always call get_recommended_destinations first for a new search, then pass its destinations... For a follow-up that narrows an existing list, call only this tool.' It also states a negative constraint: 'Do not invent destination cards.' This gives clear routing vs. alternatives.

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