Paytm Travel
Server Details
Discover and compare live Paytm flights and buses by fare, schedule, operator, stops, and amenities.
- Status
- Healthy
- Uptime
- 100.0% over 28 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Most tools have clearly distinct roles (search vs. calendar vs. details vs. review), and the descriptions go to great lengths to separate them. However, get_fare_family (which fare to buy) and get_flight_details (multi-fare upsell comparison plus policies) both operate on one flight's offer_token and both surface fare-family info, which is a plausible source of misselection.
Eight of ten tools follow a consistent verb_noun pattern (search_flights, search_buses, get_flight_details, get_fare_family, get_flight_review, get_bus_details, combine_roundtrip_fare, get_bus_ai_summaries). The two noun-only names (fare_calendar, relay_pulse_batch) are minor deviations but still readable and not confusing.
Ten tools is well-scoped for a flight-and-bus search/compare server. Each earns its place: two searches, their detail/summary companions, three flight fare/policy/review steps, one round-trip fare combiner, and one analytics relay.
The flight and bus lifecycle is largely covered: search, fare calendar, fare selection, detail/policy, review, round-trip combination, and handoff to Paytm Checkin for booking. Gaps are minor (e.g. no multi-city or explicit passenger/pricing utilities), and the intentional absence of in-chat booking is an explicit design choice rather than a dead end.
Available Tools
10 toolscombine_roundtrip_fareCombine round-trip fareARead-onlyIdempotentInspect
Computes the combined round-trip fare for a chosen onward + return flight pair, reprices it, and returns the total plus a Paytm booking link. Used by the flight results card when both legs are selected.
| Name | Required | Description | Default |
|---|---|---|---|
| onward_offer_token | Yes | ||
| return_offer_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| taxes | No | |
| currency | No | |
| bookingUrl | No | |
| checkinUrl | No | |
| onwardBase | No | |
| returnBase | No | |
| displayFare | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds non-obvious behavior beyond that: the fare is repriced server-side and the response includes a Paytm booking link, which an agent would not infer from annotations alone.
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 compact sentences, with the core action and output front-loaded in the first. The second sentence is caller-oriented context rather than agent guidance, so it earns slightly less than a fully front-loaded description would.
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?
With an output schema present, return values need not be enumerated, and annotations carry the safety semantics. What remains thin is token sourcing and pairing constraints, but for a two-parameter read tool this is close to sufficient.
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 0% for two required token parameters, so the description must compensate. It partially does, mapping the tokens to an 'onward + return flight pair', but never explains token provenance, format, or that the two must belong to the same itinerary — leaving a real gap.
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 ('Computes the combined round-trip fare for a chosen onward + return flight pair'), plus two secondary behaviors (repricing, returning a total and booking link). This is clearly distinct from sibling tools like fare_calendar, get_fare_family, and search_flights without needing to name them.
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 a clear triggering condition: 'Used by the flight results card when both legs are selected,' which tells the agent the tool only applies once both an onward and a return leg exist. It does not name alternatives or state when NOT to use it (e.g., one-way itineraries), so it falls short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fare_calendarFare calendarARead-onlyIdempotentInspect
Shows a Paytm fare calendar: the cheapest flight fare for every date in a range, so the traveller can spot the cheapest days to fly. Supports date-range queries and round trips. Origin and destination are IATA codes (e.g. DEL, BOM, DXB) and dates are ISO (YYYY-MM-DD). It answers cheapest dates/days and lists no individual flights; requests to show or find flights are served by search_flights. For a short window, the calendar is designed to appear below the search_flights card (sort_by='cheapest' on a date in that window) for the same route.
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | economy | premium economy | business | first. | economy |
| adults | No | Adult travellers (default 1). | |
| origin | Yes | Origin IATA code, e.g. "DEL". | |
| infants | No | Infant travellers (default 0). | |
| children | No | Child travellers (default 0). | |
| end_date | Yes | Last date of the range, YYYY-MM-DD. | |
| trip_type | No | "oneway" or "roundtrip" (roundtrip also returns the return leg). | oneway |
| start_date | Yes | First date of the range, YYYY-MM-DD. | |
| destination | Yes | Destination IATA code, e.g. "DXB". |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | No | |
| onward | No | |
| return | No | |
| search | Yes | |
| cheapest | No | |
| currency | No | |
| holidays | No | |
| disclaimer | No |
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 profile is covered. The description adds substantive behavior beyond that: the result is fare-per-date rather than flight listings, and roundtrip also returns the return leg. It omits any range limits, caching/pricing freshness, or pagination behavior, so it is strong but not exhaustive.
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-loads what the tool returns, then formats, then routing to search_flights. The trailing sentence about the card placement is longer than needed and partly decorative, but it does encode real routing context 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?
An output schema exists, so return-value documentation is not required, and the description covers purpose, formats, trip types and the sibling alternative. What's missing is operational context such as any maximum range length or fare-freshness caveats, which matter for a date-range calendar query.
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 parameters are already documented, and the schema itself supplies the IATA examples (DEL, DXB) and YYYY-MM-DD format. The description restates those conventions rather than adding new semantics (e.g. whether cabin affects which cheapest fare is returned, or how trip_type pairs with start/end dates). Baseline 3 is appropriate.
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 ('shows a Paytm fare calendar: the cheapest flight fare for every date in a range') and explicitly disambiguates from the closest sibling by saying it 'lists no individual flights; requests to show or find flights are served by search_flights.' An agent can route correctly 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 explicit when-to-use ('spot the cheapest days to fly', cheapest *dates/days*) and when-not ('requests to show or find flights are served by search_flights'), plus the alternative. It even explains the intended UI relationship to the search_flights card, which tells the agent when a calendar result is expected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_ai_summariesGet bus AI summariesARead-onlyIdempotentInspect
Builds one differentiating line for each bus on the results card, from the search payload already fetched (no bus-details calls), using Azure OpenAI inside this server. An empty line is valid when nothing stands out. Used by the bus results card after it renders; it renders no card of its own. It prefers the search_context that search_buses returned, so no second search is needed, and re-fetches the route only when that handoff is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| cards | Yes | ||
| source | Yes | ||
| sort_by | No | recommended | |
| bus_type | No | ||
| max_price | No | ||
| operators | No | ||
| time_slot | No | ||
| trip_refs | Yes | ||
| min_rating | No | ||
| destination | Yes | ||
| depart_after | No | ||
| depart_before | No | ||
| paytm_assured | No | ||
| boarding_point | No | ||
| search_context | No | ||
| source_city_id | No | ||
| destination_city_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| summaries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: it runs an Azure OpenAI call inside the server, makes no bus-details calls, tolerates an empty line, and only re-fetches the route when the search_context handoff is absent. It does not mention latency, token cost, or failure behavior of the LLM call.
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 the core action and kept to three dense sentences, with the search_context handoff highlighted. There is mild redundancy between 'from the search payload already fetched (no bus-details calls)' and the later statement that no second search is needed.
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?
An output schema exists, so return values need no explanation, and the description covers the call flow and dependency ordering well. For an 18-parameter tool, however, it leaves the input contract almost entirely undocumented, which is a meaningful completeness gap even if it is not the description's only job.
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 0% across 18 parameters, so the description must carry the burden and largely does not. It only illuminates search_context (the preferred handoff from search_buses); required inputs like trip_refs, cards, source, destination, date, and the many filter parameters are left entirely unexplained in both schema and description.
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 precise verb and resource: it builds one differentiating summary line per bus for the results card, using Azure OpenAI inside the server. It also distinguishes itself from siblings by noting it renders no card of its own and that it consumes search_buses output rather than making its own searches.
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 a clear call context ('used by the bus results card after it renders') and a preference rule ('prefers the search_context that search_buses returned, so no second search is needed'), plus the fallback condition ('re-fetches the route only when that handoff is missing'). It stops short of stating explicit exclusions or when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bus_detailsGet bus detailsARead-onlyIdempotentInspect
Shows the Bus Details sheet for one trip from search_buses: amenities (iconified), pickup and dropping points with times, cancellation-policy slabs, rating, and a Book on Paytm Checkin CTA. This is the source for amenities, boarding/dropping points, cancellation policy, or details for a specific bus, including a tap on a bus card in the widget. The tripRef from the card is enough, without a new search_buses call. Required: trip_ref, the opaque tripRef from the prior search_buses card, matched exactly. Optional: summary (the card's AI summary line) and booking_url (the card's Paytm hand-off link). No seat map or payment in chat — booking continues on Paytm Checkin.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | No | Optional AI summary line already shown on the card, so the details sheet shows the same line. | |
| trip_ref | Yes | Opaque trip token from search_buses (`tripRef` on each card). | |
| booking_url | No | Optional Paytm Checkin seat URL from the search card (dweb). | |
| booking_deeplink | No | Optional H5/mweb/app deeplink (`paytmtr://bus-seat`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rating | No | |
| busType | No | |
| summary | No | |
| tripRef | Yes | |
| currency | No | |
| operator | No | |
| amenities | No | |
| seatsLeft | No | |
| bookingUrl | No | |
| ratingCount | No | |
| boardingPoints | No | |
| droppingPoints | No | |
| bookingDeeplink | No | |
| cancellationNote | No | |
| ratingCountLabel | No | |
| cancellationPolicy | No | |
| cancellationSummary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: what the sheet contains, that booking/payment and seat maps are deliberately excluded, and that a Checkin hand-off link is involved. It stops short of describing pagination or latency, but the safety-critical surface is well covered.
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 the resource and its contents, then usage, then required/optional params. Every sentence carries information, though the middle sentence is dense enough that a reader must parse several clauses to extract the routing rule.
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?
With an output schema present, return values need not be explained, and the description still covers contents, required/optional inputs, and scope exclusions. It is nearly complete for invocation; the only omission is any mention of the booking_deeplink parameter, which the schema carries on its own.
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 baseline is 3, but the description adds meaning the schema does not: trip_ref must be 'the opaque tripRef from the prior search_buses card, matched exactly,' and it frames summary and booking_url by their origin on the card. It omits booking_deeplink entirely, though the schema documents it.
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 ('Shows the Bus Details sheet for one trip from search_buses') and enumerates the payload it surfaces: amenities, pickup/dropping points, cancellation slabs, rating, CTA. It explicitly positions itself relative to search_buses, so an agent can distinguish it from the search sibling 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?
Names the trigger conditions ('source for amenities, boarding/dropping points, cancellation policy, or details for a specific bus, including a tap on a bus card in the widget') and rules out an unnecessary alternative call ('The tripRef from the card is enough, without a new search_buses call'). It also bounds scope with 'No seat map or payment in chat — booking continues on Paytm Checkin'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fare_familyGet fare familyARead-onlyIdempotentInspect
Fare family / branded fare selector for ONE specific flight. Returns every fare the airline sells on that flight (Saver, Flexi, Flexi Plus, ...) with a single recommended pick and the reasons for it, scored on concrete rupee benefit per rupee of premium. It answers which fare to pick, fare families, branded fares, fare types, 'what do I get for more', or a comparison of fare options for a flight already chosen, typically straight after search_flights or when the traveller taps the fare CTA in the results widget. Policy detail (baggage, cancellation, reschedule) comes from get_flight_details instead. Input: that flight's offer_token from search_flights (plus return_offer_token for a round trip). TWO FORMS ARE VALID and the tool accepts either: the long signed token, or the SHORT REFERENCE from the same flight's offerRef field (about 30 characters, e.g. 'AkJMUkRFTGUJAABFEAAhRs3JWXw'). A short value is NOT a mistake and not an internal id: the widget's Book action deliberately passes the short form so a 400-character token stays out of the conversation, and it goes in as offer_token as given. Values are matched exactly, character for character: a retyped, abbreviated or merged value fails, the onward value is not valid for the return leg, and a round trip needs BOTH. They expire; a rejected value needs a fresh search_flights, not an old value. The selector's Continue (or a request to review / book the fare on screen) leads to get_flight_review: that follow-up arrives as a new user turn naming the offer_token and the selected fare's price, which are exactly get_flight_review's arguments, so the review page renders as its own card. The identifiers in hand are enough without a new search. One result covers every fare on that flight, so later questions about that flight's fares are answerable from it. A repeat call for the same flight re-renders the same widget above the answer; only a different flight needs a new call.
| Name | Required | Description | Default |
|---|---|---|---|
| offer_token | Yes | Offer token from search_flights — either the long signed token or the flight's short `offerRef`. Both resolve to the same offer. | |
| return_offer_token | No | Optional return-leg token for a round trip, in either of the same two forms. |
Output Schema
| Name | Required | Description |
|---|---|---|
| legs | No | |
| cabin | No | |
| fares | No | |
| origin | No | |
| heading | No | |
| currency | No | |
| tripType | No | |
| fareCount | No | |
| requestId | No | |
| offerToken | No | |
| solutionId | No | |
| compareRows | No | |
| destination | No | |
| flightNumber | No | |
| pairBookingUrls | No | |
| recommendedFare | No | |
| recommendedIndex | No | |
| returnOfferToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give read-only/idempotent/openWorld=false, and the description layers on traits those annotations cannot express: token expiry, exact character-for-character matching, that a retyped or merged value fails, that a short offerRef is legitimate rather than an error or internal id, that a round trip requires BOTH tokens, and that errors require a fresh search_flights. This is materially more than the structured fields provide.
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?
Purpose and the two accepted token forms are front-loaded, and most sentences carry non-obvious operational detail. It is long for a two-parameter tool and has some redundancy, re-explaining the short-token rationale in two separate places, but it avoids boilerplate and every paragraph adds usable guidance.
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?
An output schema exists, so return-shape explanation is not owed. The description covers the remaining agent-facing gaps: how to obtain and pass the input, error/expiry recovery, the handoff to get_flight_review with the exact argument mapping, and that one result answers later fare questions about that flight.
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 both properties already document the long-token/short-offerRef duality, so the baseline is 3. The description still adds operational meaning the schema does not: the short form is deliberate widget behavior (not a mistake), values are matched exactly, and return_offer_token is mandatory for round trips even though the schema marks it optional with an empty default.
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 first sentence names a concrete verb and scope ('Fare family / branded fare selector for ONE specific flight') and the description enumerates the exact user phrasings it answers (fare families, branded fares, 'what do I get for more'). It explicitly contrasts itself with get_flight_details (policy detail) and get_flight_review (continuation), so an agent can separate it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Timing is stated precisely: 'typically straight after search_flights or when the traveller taps the fare CTA in the results widget', with a named exclusion ('Policy detail ... comes from get_flight_details instead') and a named follow-on ('Continue ... leads to get_flight_review'). It also says when NOT to re-call: 'A repeat call for the same flight re-renders the same widget ... only a different flight needs a new call.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flight_detailsGet flight detailsARead-onlyIdempotentInspect
Fare options and travel policies for one flight. Renders the Flight Details panel: multi-fare upsell comparison (Saver, Flexi, etc.) plus baggage, cancellation, and reschedule tabs. This is the source for flight details, fare options, upsell fares, baggage allowance, cancellation fees, reschedule fees, or policies for a specific flight, including right after search_flights or when the traveller taps Fare options in the widget. The search_flights summary carries none of these, and the identifiers it returned are enough without a new search. Input: offer_token for the chosen flight, listed in the prior search_flights summary and structured_content. Either form is valid: the long signed token, or that flight's short offerRef (about 30 characters). A short value is valid input, not an internal id. A round trip also takes return_offer_token. Values are matched exactly, character for character: a retyped, abbreviated or merged value fails, and the onward value is not valid for the return leg. They expire; a rejected value needs a fresh search.
| Name | Required | Description | Default |
|---|---|---|---|
| offer_token | Yes | Offer token from search_flights — either the long signed token or the flight's short `offerRef`. Both resolve to the same offer. | |
| return_offer_token | No | Optional return-leg token for a round trip, in either of the same two forms. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fares | No | |
| header | No | |
| onward | No | |
| origin | No | |
| return | No | |
| airline | No | |
| logoUrl | No | |
| currency | No | |
| provider | No | |
| tripType | No | |
| minirules | No | |
| bookingUrl | No | |
| checkinUrl | No | |
| offerToken | No | |
| originCity | No | |
| airlineName | No | |
| destination | No | |
| featureRows | No | |
| flightNumber | No | |
| destinationCity | No |
TDQS
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 goes further by disclosing value-validation behavior that annotations cannot express: exact character-for-character matching, expiry, rejection requiring a fresh search, and that an onward token is invalid for the return leg. This is genuinely additive, though it omits any rate-limit or error-response detail.
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 usage before the input rules, and each sentence carries distinct information (contents, triggers, token forms, failure modes, expiry). It is dense and slightly long, but the only mild redundancy is restating that the search summary lacks these 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?
With an output schema present the description need not explain return values, and it instead covers what the schema cannot: when to call, which token forms are valid, round-trip handling, and expiry behavior. Nothing an agent needs to invoke this correctly 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% so the baseline is 3, but the description adds real meaning beyond the schema: the short `offerRef` is ~30 characters, a short value is a legitimate input rather than an internal id, the two tokens resolve identically, and matching is exact so retyped or merged values fail. This clarifies the accepted value forms in ways the schema description only gestures at.
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+resource ('Fare options and travel policies for one flight') and enumerates the concrete contents (multi-fare upsell, baggage, cancellation, reschedule tabs). It also explicitly separates itself from search_flights by noting the summary 'carries none of these', 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 explicit trigger conditions: right after search_flights, or when the traveller taps Fare options in the widget, and states the identifiers already returned are enough without a new search. It effectively names search_flights as the prerequisite alternative rather than leaving it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flight_reviewGet flight reviewARead-onlyIdempotentInspect
Shows the Paytm flight details / review page for a selected fare: itinerary summary, fare breakdown (base, taxes, total), refundability, and a Book on Paytm Checkin link. The review call refreshes the fare before handoff. It is the step between choosing a fare and booking: requests to continue, review, see flight details for a chosen fare, or book after picking a fare in get_fare_family land here, including the fare-family Continue CTA, which posts a new user turn naming this tool. The review page comes before any handoff to Paytm. Input: offer_token from search_flights / get_fare_family (the long signed token or that flight's short offerRef; a short value is valid, not an internal id), matched exactly. A round trip also takes return_offer_token. Optional: price and fare_name of the branded fare the traveller picked (and return_price / return_fare_name on a round trip), used verbatim when the widget or the user named them, so review reprices THAT product (Saver vs Flexi have different Paytm ids). A review / continue / book request that names no fare or price still works from the offer_token already in hand, with price omitted: the tool fetches the recommended (best-value) fare from the fare family and reviews that. The total comes from this call, so no new search or fare-family call is needed to settle on a fare.
| Name | Required | Description | Default |
|---|---|---|---|
| price | No | Selected onward fare in INR from the fare-family Continue tap. Omit when the user asked to review without picking a fare — the tool then uses the recommended branded fare. | |
| fare_name | No | Optional branded-fare name (Saver, Flexi, …) as a second match key when price is missing or no longer live. | |
| trip_type | No | "oneway" (default) or "roundtrip". Set automatically when return_offer_token is present. | oneway |
| offer_token | Yes | Offer token from search_flights / get_fare_family — either the long signed token or the short `offerRef`. | |
| return_price | No | Selected return fare in INR (round trip only). | |
| return_fare_name | No | Optional return-leg fare name. | |
| return_offer_token | No | Optional return-leg token for a round trip. |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | No | |
| cabin | No | |
| notes | No | |
| stops | No | |
| taxes | No | |
| total | No | |
| origin | No | |
| return | No | |
| airline | No | |
| logoUrl | No | |
| currency | No | |
| duration | No | |
| fareName | No | |
| perAdult | No | |
| tripType | No | |
| fareClass | No | |
| arriveTime | No | |
| bookingUrl | No | |
| checkinUrl | No | |
| departDate | No | |
| departTime | No | |
| inclusions | No | |
| originCity | No | |
| refundable | No | |
| taxBreakUp | No | |
| airlineCode | No | |
| destination | No | |
| flightNumber | No | |
| stopAirports | No | |
| convenienceFee | No | |
| refundableText | No | |
| returnFareName | No | |
| arriveDayOffset | No | |
| destinationCity | No | |
| handBaggageOnly | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is already met. The description adds real behavioral context beyond that: the review call refreshes the fare before handoff, the total originates from this call, and the review page always precedes the Paytm handoff. It stops short of describing latency or failure modes, so 4 rather than 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?
Leads with what the page shows, then usage, then parameters — well front-loaded and dense with non-redundant facts. It is long, and the handoff-ordering point ('review page comes before any handoff') overlaps with the earlier 'refreshes the fare before handoff' sentence, costing it a point.
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 7-param tool with an output schema and full annotation coverage, the description supplies everything else an agent needs: workflow position, token semantics, the recommended-fare fallback, and round-trip handling. Return values can be left to 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?
Despite 100% schema coverage, the description adds meaning the schema does not: offer_token may be the long signed token or the short offerRef and "a short value is valid, not an internal id", it must be matched exactly, and omitting price makes the tool fetch the recommended best-value fare. It also explains price/fare_name are used verbatim and that Saver vs Flexi map to different Paytm ids.
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?
Specific verb+resource: shows the flight details/review page for a selected fare, and enumerates what it renders (itinerary, fare breakdown, refundability, Book link). It explicitly positions itself relative to siblings (after get_fare_family, before Paytm handoff), so an agent can distinguish it from get_flight_details and get_fare_family without opening any 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?
Names the exact triggering utterances ("continue, review, see flight details for a chosen fare, or book after picking a fare") and the fare-family Continue CTA that lands here. It also states what is NOT needed (no new search or fare-family call to settle on a fare), giving both when-to-use and when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relay_pulse_batchRelay Pulse batchBInspect
Sends the results cards' interaction analytics to Paytm's first-party Signal ingest. The cards' analytics script calls this because the card sandbox cannot reach that ingest on its own. The server chooses the ingest endpoint and accepts a Signal analytics batch.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| headers | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds genuine context beyond that: the relay mechanism, the sandbox limitation, and that the server selects the ingest endpoint. However, it says nothing about auth, retries, what happens on failure, or why the operation is non-idempotent, which matters for a write tool.
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?
Three compact sentences that are front-loaded with the core action and rationale. Nothing is padded, though the final clause about the server choosing the endpoint and accepting a batch is slightly redundant with the opening.
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?
An output schema exists, so return values need not be explained. But this is a non-idempotent write tool with an opaque string body and an undefined headers object at 0% schema coverage, and the description does not close that gap. It is minimally sufficient for an agent that already knows the Signal batch format, but not self-contained.
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 0% for both required parameters. The phrase 'accepts a Signal analytics batch' loosely maps 'body' to the batch payload, but gives no format, encoding, or structure detail. The 'headers' parameter is entirely unexplained, and its role (auth, content type) is left to inference.
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 gives a specific verb and resource: it 'sends the results cards' interaction analytics to Paytm's first-party Signal ingest.' It also explains the relay rationale (the card sandbox cannot reach the ingest), so an agent can tell this is a telemetry proxy rather than a search tool. It does not explicitly contrast with any sibling, but the sibling set (flight/bus search tools) is unrelated, so differentiation is moot.
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?
Usage is only implied: 'The cards' analytics script calls this' suggests it is invoked by the analytics script rather than directly by an agent. There is no explicit statement of when to call it, prerequisites, or what to do instead. Adequate context but no actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_busesSearch busesARead-onlyIdempotentInspect
Searches live Paytm bus routes and shows an interactive results card (operator, bus type, timings, rating, seats left, price). One-way, domestic, search only -- no seat selection or booking happens in chat. REQUIRED ARGS (same posture as search_flights): source, destination, and date are ALL mandatory. source/destination are free-text city names (e.g. 'Bengaluru', 'Hyderabad'); date is YYYY-MM-DD. There is no default date. The search runs for a date the traveller gave; a relative date they actually said ('tomorrow', 'next Friday') resolves to YYYY-MM-DD. When the date, source or destination is missing, the request is incomplete and the missing value comes from the traveller: a guessed today, tomorrow or weekend searches a day they did not ask for. With all three present, the traveller sees results only once the search runs. CITY DISAMBIGUATION: many Indian city names are ambiguous (e.g. 'Aurangabad' matches cities in Maharashtra, Bihar, Uttar Pradesh and West Bengal). An ambiguous name returns needsDisambiguation=true with sourceCityOptions / destinationCityOptions instead of a guess; the traveller picks one, and the search runs again with the chosen source_city_id / destination_city_id plus the original free-text source/destination. Filters: bus_type is 'AC' or 'Non-AC' when the traveller only named climate ('ac buses', 'non ac'), and a full type ('AC Sleeper', 'AC Semi-Sleeper', 'AC Seater', 'Non-AC Sleeper', 'Non-AC Semi-Sleeper', 'Non-AC Seater') only when they named a berth; a berth they did not name narrows the search wrongly. time_slot (early_morning 00:00-06:00, morning 06:00-12:00, afternoon 12:00-18:00, evening 18:00-24:00; no night slot), depart_after/depart_before (an hour or "HH:MM"; depart_before is exclusive, so 4-7 AM is 04:00 to 07:00, not 08:00). A window that crosses midnight is not one call. operators (list of operator names), max_price, min_rating, paytm_assured, boarding_point (matches by area name across all boarding points). Sort: recommended (default) | cheapest | fastest | earliest | rating. Invalid filter values are rejected with an error rather than silently ignored. Ratings below 15 reviews are not shown -- a missing rating means 'not enough reviews yet', not a bad bus. Named filters are sent to the Paytm wrapper (e.g. AC → is_ac) and the matching buses are shown. When those filters match nothing, the result says so; dropping the filters is the traveller's call, since an unfiltered search opens a second results card for the same query. Refining the search (only AC, cheaper, leaving after 9pm, better rated, etc.) is a new search with the changed filters and the same route and date, answered with new results rather than a pointer to the widget's chips. This tool lists a per-trip Paytm Checkin seat-layout URL as the dweb booking link (bookingUrl) and a matching seat deeplink for mweb/app (bookingDeeplink) -- there is no in-chat seat selection or payment; the traveller completes booking on Paytm Checkin. Questions about amenities, boarding/dropping points, or cancellation for a specific bus (or a tap on a card) are answered by get_bus_details with that card's tripRef, without a new search.
AI CARD SUMMARIES: the bus-search widget loads its one-line AI summaries itself (skeleton footers, then text or remove), so the results card is complete without another tool. Amenities and ratings come only from Paytm's data.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Travel date as YYYY-MM-DD. Mandatory — do not invent a date if the traveller omitted it; ask them first. | |
| source | Yes | Departure city name, e.g. "Bengaluru". | |
| sort_by | No | recommended | cheapest | fastest | earliest | rating. | recommended |
| bus_type | No | "AC" or "Non-AC" when the traveller only named climate, or a full type ("AC Sleeper", "AC Semi-Sleeper", "AC Seater", "Non-AC Sleeper", "Non-AC Semi-Sleeper", "Non-AC Seater"). | |
| max_price | No | Budget cap in INR (per traveller, starting fare). | |
| operators | No | Restrict to these operator names. | |
| time_slot | No | early_morning [00:00, 06:00) | morning [06:00, 12:00) | afternoon [12:00, 18:00) | evening [18:00, 24:00). "early morning" is accepted. "night" is rejected. There is no overnight slot. | |
| min_rating | No | Minimum star rating (buses with under 15 ratings are excluded from this filter -- their rating isn't shown either). | |
| destination | Yes | Arrival city name, e.g. "Hyderabad". | |
| depart_after | No | Earliest departure, e.g. 18 or "18:00" (inclusive). 7, "7", and "07:00" are the same instant. | |
| depart_before | No | Exclusive end, e.g. 7 or "07:30". "4–7 AM" is depart_after="04:00", depart_before="07:00". "00:00" means the end of this day. A window whose end is earlier than its start (22:00 to 04:00) is rejected; this search does not cross midnight. | |
| paytm_assured | No | Only Paytm Assured buses. | |
| boarding_point | No | Restrict to buses with a matching boarding-point area. | |
| source_city_id | No | Resolved Paytm city id for source -- only pass this after a prior call returned needsDisambiguation with sourceCityOptions, using the id the traveller picked. | |
| destination_city_id | No | Same, for destination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| buses | No | |
| search | Yes | |
| currency | No | |
| followups | No | |
| moreBuses | No | |
| sortRanks | No | |
| summaries | No | |
| disclaimer | No | |
| summariesPending | No | |
| sourceCityOptions | No | |
| totalBeforeFilter | No | |
| serverProcessingMs | No | |
| needsDisambiguation | No | |
| destinationCityOptions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description layers substantial extra behavior on top: ambiguity returns needsDisambiguation with city options instead of a guess, invalid filters are rejected rather than ignored, ratings under 15 reviews are hidden not negative, filters that match nothing open a second results card, and booking happens off-chat via bookingUrl/bookingDeeplink.
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?
Purpose and scope are front-loaded, and most sentences carry operational rules. It is nonetheless a dense block with some repetition (the no-booking constraint is stated twice, and city-disambiguation is restated at length), which costs it the top mark.
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?
An output schema exists so return values need no prose, and the description still covers the tricky edge cases: disambiguation re-call with source_city_id/destination_city_id, filter rejection, empty-filter results, and where booking completes. Nothing an agent needs to invoke correctly 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?
With 100% schema coverage the baseline is 3, but the description adds decision rules the schema does not encode -- notably that bus_type should stay at climate level unless the traveller named a berth ('a berth they did not name narrows the search wrongly') and the exclusive end / no-midnight-crossing semantics for departure windows.
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?
Opens with a specific verb+resource ('Searches live Paytm bus routes') and enumerates the result-card contents, plus an explicit scope statement ('One-way, domestic, search only -- no seat selection or booking'). It is clearly distinguishable from siblings like search_flights (same posture, different domain) and get_bus_details (per-trip questions).
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?
Explicitly routes the agent: get_bus_details answers per-bus amenities/boarding/cancellation questions 'without a new search', while refining filters is 'a new search with the changed filters and the same route and date'. It also states the mandatory-args precondition and that missing values must come from the traveller, not a guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsSearch flightsARead-onlyIdempotentInspect
Searches live flights on Paytm and shows an interactive results card (airlines, logos, timings, stops, fares). Origin and destination are IATA codes (e.g. DEL, BOM, DXB) and dates are ISO (YYYY-MM-DD). A round trip uses trip_type='round_trip' with return_date. Filters: non_stop, airlines, max_price, time_slot, refundable; sort_by: best, cheapest or fastest. This is the tool for requests to show, find or list flights (e.g. 'cheapest flights next weekend', 'flights this Saturday', 'show me flights HYD to BLR'); fare_calendar on its own covers cheapest dates and lists no flights. It needs one concrete departure date: a relative date the traveller stated ('tomorrow', 'next Friday') resolves to YYYY-MM-DD for the call, and the traveller sees results only once the search runs. TIME WINDOWS: time_slot is one same-day bucket (early_morning 00:00-06:00, morning 06:00-12:00, afternoon 12:00-18:00, evening 18:00-24:00; there is no night slot) and applies to the OUTBOUND leg only. A narrower ask than a bucket ('between 6 and 9 am', 'after 9pm', 'around 6:30') maps to depart_after / depart_before (an hour or "HH:MM"; depart_before is exclusive, so 4-7 AM is 04:00 to 07:00). A window that crosses midnight is not one call. The RETURN leg of a round trip uses return_time_slot and return_depart_after / return_depart_before, so 'leave 6-9am, come back 7-10pm' is depart_after=6, depart_before=9, return_depart_after=19, return_depart_before=22. A bucket wider than a stated window is an approximation, and the traveller is told when one is used. AIRPORTS: results contain only the exact airports requested. Nearby-airport options (e.g. DXN Noida or HDO Hindon for DEL, NMI for BOM, AUH/SHJ for DXB) are excluded server-side and counted in search.excludedAlternateAirports, which matters when the traveller might want them; each flight is from the airport it actually uses, not from a nearby city. BUDGET: for a round trip, max_price is the COMBINED both-legs total, not per leg (search.maxPriceScope confirms which). Every applied filter is echoed under structured_content.search (timeSlot, returnTimeSlot, departAfter/Before, returnDepartAfter/Before, maxPrice, airlines, refundable), so whether a constraint was met, or could not be, is readable from the result. Invalid filter values are rejected with an error rather than silently ignored. Domestic round trips come back only as schedule-valid pairs (no overlap between legs, and ≥2 hours between onward arrival and return departure), to be compared on the traveller's preferences (price, airline, timing). International round trips come back as Paytm's pre-stitched combinations; free onward×return mixes are not valid itineraries. Refining the current results (morning/evening/afternoon departures, non-stop only, fastest, refundable) is a new search with the changed filters and the same route, date and passengers; cheaper dates come from fare_calendar. The card's suggestion chips send exactly such a request as a new turn, so a refine request is answered with new results rather than text suggestions or a pointer to the chips. For a short window (a weekend or a few days), the results card for one concrete date in that window (the Sunday or last day when none is preferred), sorted cheapest, is designed to appear above fare_calendar for the same window: search first, calendar second. Results carry summary fares only, without branded fare families or baggage/cancellation/reschedule policies. Those are keyed by the signed offerToken in this result: get_fare_family answers WHICH FARE to buy (fare families, Saver vs Flexi, what more money buys); get_flight_details answers POLICY (baggage, cancellation, reschedule rules).
| Name | Required | Description | Default |
|---|---|---|---|
| cabin | No | economy | premium economy | business | first (default economy). | economy |
| origin | Yes | Departure IATA code, e.g. "DEL". | |
| infants | No | Number of infant travellers (default 0). | |
| sort_by | No | best | cheapest | fastest (default cheapest). | cheapest |
| airlines | No | Restrict to these airline names or codes, e.g. ["IndiGo","6E"]. | |
| children | No | Number of child travellers (default 0). | |
| non_stop | No | Only non-stop flights. | |
| max_price | No | Budget cap in INR. For one_way this is the per-flight fare; for round_trip it is the COMBINED both-legs total. | |
| time_slot | No | OUTBOUND departure bucket: early_morning [00:00, 06:00) | morning [06:00, 12:00) | afternoon [12:00, 18:00) | evening [18:00, 24:00). Applies to the outbound leg only. "early morning" is accepted. "night" is rejected. An unrecognised value is rejected, not ignored. | |
| trip_type | No | "one_way" or "round_trip" (round_trip needs return_date). | one_way |
| passengers | No | Number of adult travellers (default 1). | |
| refundable | No | Only refundable fares. | |
| destination | Yes | Arrival IATA code, e.g. "DXB". | |
| return_date | No | Return date YYYY-MM-DD (required for round_trip). | |
| depart_after | No | Earliest outbound departure hour, e.g. 6 or "06:00" (inclusive). Use with depart_before for a narrow window that the coarse time_slot buckets cannot express. | |
| depart_before | No | Exclusive end — "09:00" means the last acceptable departure is 08:59. 9 and "09:00" are the same instant. "09:30" keeps 09:15. A window whose end is earlier than its start is rejected; this search does not cross midnight. | |
| departure_date | Yes | Outbound date as YYYY-MM-DD. | |
| return_time_slot | No | Same buckets, for the RETURN leg of a round trip. Omit to leave the return leg unfiltered by time. | |
| return_depart_after | No | Earliest RETURN departure hour, e.g. "19:00". | |
| return_depart_before | No | Latest RETURN departure hour, exclusive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| search | Yes | |
| flights | Yes | |
| currency | No | |
| followups | No | |
| sortRanks | No | |
| disclaimer | No | |
| flightPairs | No | |
| moreFlights | No | |
| returnFlights | No | |
| serverProcessingMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantive behavior: nearby airports excluded server-side and counted in search.excludedAlternateAirports, invalid filter values rejected with an error, round-trip pair validity rules (no overlap, ≥2h buffer), international itineraries only as pre-stitched combos, and that every filter is echoed in structured_content.search.
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-loads purpose and filters before deep sections, and nearly every sentence carries actionable constraint detail (buckets, airports, budget, refinement). It is nonetheless very long and could be tightened, with some redundancy between the schema descriptions and the prose transport of the same rules.
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?
Output schema exists, so return values need not be restated; the description instead covers the complex behaviors an agent needs — date resolution, time-window mapping, airport exclusion, budget scope, and refinement semantics. Nothing material for correct invocation 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% (baseline 3), but the description adds real meaning beyond it: time_slot buckets with no night slot and outbound-only scope, depart_before exclusivity with worked examples, midnight-crossing rule, return-leg equivalents, and that max_price is the COMBINED both-legs total on round trips.
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?
Opens with a specific verb+resource+output: 'Searches live flights on Paytm and shows an interactive results card (airlines, logos, timings, stops, fares).' It explicitly claims the 'show/find/list flights' intent and distinguishes itself from fare_calendar, get_fare_family, and get_flight_details, so an agent can route without opening sibling schemas.
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 trigger phrasing ('show me flights HYD to BLR'), an explicit exclusion ('fare_calendar on its own covers cheapest dates and lists no flights'), and named alternatives for fare-family and policy questions. It also states that refining results is a new search with changed filters, not a pointer to suggestion chips.
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.
1 tool update
- Changed
relay_pulse_batch5 fields changed- removed
Input schema / properties / methodRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / urlRemoved value: -{ - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "url", - "method", - "headers", - "body" -]New value: +[ + "headers", + "body" +] - removed
Output schema / properties / bodyRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Body" -} - removed
Output schema / properties / headersRemoved value: -{ - "additionalProperties": true, - "title": "Headers", - "type": "object" -}
4 tool updates
- Removed
apply_bus_summaries - Changed
fare_calendar1 field changed- changed
Input schema / properties / origin / descriptionPrevious value: -"Origin IATA code, e.g. \"DEL\". (Renamed from `source` on\n2026-07-25 so both flight tools use the same word for the same\nthing; `search_flights` has always called it `origin`.)"New value: +"Origin IATA code, e.g. \"DEL\"."
- Changed
get_bus_details1 field changed- changed
Input schema / properties / summary / descriptionPrevious value: -"Optional AI summary line already shown on the card footer —\nforwarded so the details sheet can show the same line (Figma)."New value: +"Optional AI summary line already shown on the card, so the\ndetails sheet shows the same line."
- Changed
get_fare_family1 field changed- changed
Input schema / properties / offer_token / descriptionPrevious value: -"Offer token from search_flights — either the long signed\ntoken or the flight's short `offerRef`. Both resolve to the same\noffer; the widget's Book action sends the short form so a\n400-character token never travels through the conversation."New value: +"Offer token from search_flights — either the long signed\ntoken or the flight's short `offerRef`. Both resolve to the same\noffer."
11 tool updates
- First observed
apply_bus_summaries - First observed
combine_roundtrip_fare - First observed
fare_calendar - First observed
get_bus_ai_summaries - First observed
get_bus_details - First observed
get_fare_family - First observed
get_flight_details - First observed
get_flight_review - First observed
relay_pulse_batch - First observed
search_buses - First observed
search_flights
Related MCP Connectors
Plan intercity journeys in India by train, flight or both, with a fare for every travel class.
Free, no-login flight search with real-time pricing from multiple airlines.
Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts.
Live hotel and flight prices compared across Booking.com, Agoda, Trip.com and Traveloka, in USD.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables multi-modal travel planning for India, aggregating flights, trains, buses, cabs, and personal vehicles across 117 cities with multi-leg routing and weighted scoring.2 npmApache 2.0
- AlicenseAqualityAmaintenanceEnables users to find, compare, and plan hotel stays across India around railway stations, airports, bus terminals, landmarks, localities, or coordinates, merging live prices with road distance and drive times, and supporting multi-stop stay planning.8Apache 2.0
- FlicenseNot gradedqualityBmaintenanceSearch flights, compare prices, check visas, look up airports, get travel advisories through a single endpoint.-
- AlicenseBqualityAmaintenanceOfficial MCP server for MAQAMI, a hotel and flight booking platform with 3M+ hotels. Search live hotel rates and flights, look up places, airports and hotel details, then prebook and book. Remote Streamable HTTP endpoint, no API key required.4186 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.