Skip to main content
Glama

search_multi_city

Search for multi-city flight itineraries with multiple segments, specifying cabin class, passenger count, and connection preferences.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
segmentsYesFlight segments for multi-city trip
cabinClassYesCabin class
adultsNoNumber of adult passengers
maxConnectionsNoMaximum number of connections

Implementation Reference

  • The main handler function that implements the search_multi_city tool logic: builds flight slices from input segments and creates an offer request via DuffelClient.
    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; }
  • Zod schema defining the input parameters for the search_multi_city tool.
    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/server.ts:140-142 (registration)
    Registration of the search_multi_city tool on the MCP server, linking name, schema, and handler.
    server.tool( 'search_multi_city', multiCityRequestSchema.shape,
  • Supporting schema for individual flight segments used in multiCityRequestSchema.segments.
    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>;
  • Helper function createSlice used in the handler to construct Duffel API slice objects from segment data.
    createSlice( origin: string, destination: string, date: string, departureTime?: TimeSpec, arrivalTime?: TimeSpec ): Slice { const slice: Slice = { origin, destination, departure_date: date, departure_time: { from: '00:00', to: '23:59' }, arrival_time: { from: '00:00', to: '23:59' } }; if (departureTime) { slice.departure_time = { from: departureTime.fromTime, to: departureTime.toTime }; } if (arrivalTime) { slice.arrival_time = { from: arrivalTime.fromTime, to: arrivalTime.toTime }; } return slice; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AkekaratP/flights-mcp-ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server