search_multi_city
Search for multi-city flight itineraries with multiple segments, cabin class preferences, and passenger details using Duffel API integration.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| segments | Yes | Flight segments for multi-city trip | |
| cabinClass | Yes | Cabin class | |
| adults | No | Number of adult passengers | |
| maxConnections | No | Maximum number of connections |
Implementation Reference
- src/server.ts:143-179 (handler)Executes the search_multi_city tool by building flight slices from input segments and requesting offers from the Duffel flight client.async (params: MultiCityRequest) => { try { const slices = []; // Build slices from segments for (const segment of params.segments) { slices.push(flightClient.createSlice( segment.origin, segment.destination, segment.departureDate )); } // Create the offer request with a longer timeout for multi-city const response = await flightClient.createOfferRequest({ slices, cabin_class: params.cabinClass, adult_count: params.adults, max_connections: params.maxConnections, return_offers: true, supplier_timeout: 30000 // 30 seconds }); return { content: [ { type: 'text', text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error(`Error searching multi-city flights: ${error}`); throw error; } }
- src/server.ts:140-180 (registration)Registers the 'search_multi_city' tool with MCP server using the schema and handler function.server.tool( 'search_multi_city', multiCityRequestSchema.shape, async (params: MultiCityRequest) => { try { const slices = []; // Build slices from segments for (const segment of params.segments) { slices.push(flightClient.createSlice( segment.origin, segment.destination, segment.departureDate )); } // Create the offer request with a longer timeout for multi-city const response = await flightClient.createOfferRequest({ slices, cabin_class: params.cabinClass, adult_count: params.adults, max_connections: params.maxConnections, return_offers: true, supplier_timeout: 30000 // 30 seconds }); return { content: [ { type: 'text', text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error(`Error searching multi-city flights: ${error}`); throw error; } } );
- src/models/flightSearch.ts:43-50 (schema)Defines the input schema for search_multi_city using Zod, including array of flight segments.export const multiCityRequestSchema = z.object({ segments: z.array(flightSegmentSchema).min(2).describe('Flight segments for multi-city trip'), cabinClass: z.enum(['economy', 'premium_economy', 'business', 'first']).describe('Cabin class'), adults: z.number().min(1).default(1).describe('Number of adult passengers'), maxConnections: z.number().optional().describe('Maximum number of connections') }); export type MultiCityRequest = z.infer<typeof multiCityRequestSchema>;
- src/models/flightSearch.ts:13-19 (schema)Schema for individual flight segments used in multi-city requests.export const flightSegmentSchema = z.object({ origin: z.string().describe('Origin airport or city IATA code (e.g., SFO, NYC)'), destination: z.string().describe('Destination airport or city IATA code (e.g., LAX, LHR)'), departureDate: z.string().describe('Departure date in YYYY-MM-DD format') }); export type FlightSegment = z.infer<typeof flightSegmentSchema>;