get_flight_option_details
Retrieve detailed flight information including segments, pricing, and baggage details for a specific flight option from search results.
Instructions
Retrieve detailed information about a specific flight option from the search results. This tool provides detailed information about a flight option, including its segments, price, baggage info. It is useful for getting more granular information about a specific flight option.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| search_id | Yes | Search ID from the previous search_flights tool. | |
| offer_id | Yes | Offer ID of the flight option for which to request a booking link. |
Implementation Reference
- src/flights-mcp/main.py:193-212 (handler)The primary handler function for the 'get_flight_option_details' tool, decorated with @mcp.tool which registers it. Retrieves cached search results by search_id, finds the specific proposal by offer_id using get_proposal_by_id, and returns detailed description via get_full_description. Includes inline schema via Pydantic Field descriptions.@mcp.tool(description="Retrieve detailed information about a specific flight option from the search results. " \ "This tool provides detailed information about a flight option, including its segments, price, baggage info. " \ "It is useful for getting more granular information about a specific flight option.") def get_flight_option_details( search_id: str = Field(..., description="Search ID from the previous search_flights tool."), offer_id: str = Field(..., description="Offer ID of the flight option for which to request a booking link."), ) -> Dict[str, Any]: """Get detailed information about a specific flight option from the search results.""" batch = search_results_cache.get(search_id) if not batch: raise ToolError(f"No search results found for search_id: {search_id}. " \ "It may have expired after 10 minutes. " \ "Please perform a search first using the `search_flights` tool.") proposal = batch.get_proposal_by_id(offer_id) if not proposal: raise ToolError(f"No flight details found for offer_id: {offer_id} in search_id: {search_id}.") return proposal.get_full_description()
- src/flights-mcp/proposal.py:511-515 (helper)Helper method on ProposalsBatchModel to find and return the Proposal instance matching the offer_id (stored as 'sign'). Called directly from the tool handler.def get_proposal_by_id(self, proposal_id: str) -> Optional[Proposal]: for proposal in self.proposals: if proposal.sign == proposal_id: return proposal return None
- src/flights-mcp/proposal.py:289-315 (helper)Helper method on Proposal class that generates comprehensive string description of the flight option, including detailed flights, layovers, agency prices, baggage, etc. Returned directly by the tool handler.def get_full_description(self) -> str: description_parts = [self.get_short_description(include_cheapest_price=False, include_aircraft=True)] if self.is_charter: description_parts.append("* This is a charter flight.") description_parts.append(f"* This ticket is offered by {len(self.terms)} agencies with the following terms:") for term_id, terms in self.terms.items(): agency = self.batch_ref.gates_info.get(term_id) if agency: description_parts.append(f"* Agency {agency.label} (internal agency ID: {term_id})") else: description_parts.append(f"* Agency (internal agency ID: {term_id})") description_parts.append(f" * **Price:** {terms.price} {terms.currency.upper()} " \ f"(in user currency: {convert_unified_price_to_user(terms.unified_price, self.batch_ref.currency)} {self.batch_ref.currency.upper()})") description_parts.append(f" * Baggage info:") for segment_idx, segment in enumerate(self.segment): for flight_idx, flight in enumerate(segment.flight): baggage = terms.flights_baggage[segment_idx][flight_idx] handbag = terms.flights_handbags[segment_idx][flight_idx] description_parts.append(f" * Flight {flight.get_full_flight_number()}: \n" \ f" * {parse_baggage_string(baggage)} \n" \ f" * {parse_carry_on_string(handbag)}") if self.tags: description_parts.append(f"* Tags: {', '.join(self.tags)}") return "\n".join(description_parts)
- src/flights-mcp/main.py:26-29 (helper)TTLCache instance used across tools to store search results (ProposalsBatchModel) temporarily for 10 minutes, accessed by search_id in get_flight_option_details.search_results_cache = TTLCache( maxsize=10000, # Maximum number of cached items ttl=10 * 60, # Time to live for each cached item (10 minutes) )