search_google_flights
Search for flight options on Google Flights by specifying departure, destination, dates, and travel preferences to find available itineraries.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| departure_id | Yes | 出发地ID | |
| arrival_id | Yes | 目的地ID | |
| outbound_date | Yes | 出发日期 | |
| flight_type | No | 航班类型 | round_trip |
| return_date | No | 返程日期 | |
| gl | No | 地理位置 | |
| hl | No | 语言 | |
| currency | No | 货币 | |
| travel_class | No | 舱位等级 | |
| stops | No | 中转次数 | |
| sort_by | No | 排序方式 | |
| adults | No | 成人数量 | |
| children | No | 儿童数量 | |
| multi_city_json | No | 多城市行程JSON | |
| show_cheapest_flights | No | 显示最便宜航班 | |
| show_hidden_flights | No | 显示隐藏航班 | |
| max_price | No | 最高价格 | |
| carry_on_bags | No | 随身行李 | |
| checked_bags | No | 托运行李 | |
| included_airlines | No | 包含的航空公司 | |
| excluded_airlines | No | 排除的航空公司 | |
| outbound_times | No | 出发时间范围 | |
| return_times | No | 返程时间范围 | |
| emissions | No | 排放量 | |
| included_connecting_airports | No | 包含的中转机场 | |
| excluded_connecting_airports | No | 排除的中转机场 | |
| layover_duration_min | No | 最短中转时间 | |
| layover_duration_max | No | 最长中转时间 | |
| max_flight_duration | No | 最长飞行时间 | |
| separate_tickets | No | 分开的机票 | |
| infants_in_seat | No | 占座婴儿数量 | |
| infants_on_lap | No | 不占座婴儿数量 | |
| departure_token | No | 出发令牌 | |
| booking_token | No | 预订令牌 |
Implementation Reference
- src/index.js:123-173 (handler)The handler function for the search_google_flights tool. It constructs the request parameters for the 'google_flights' engine based on input args, handles validation for different flight types (multi_city, round_trip, one_way), adds optional parameters dynamically, calls the makeSearchapiRequest helper, and returns the API response as formatted JSON text content.const params = { engine: 'google_flights', flight_type: args.flight_type }; // 处理flight_type不同情况下的必填参数 if (args.flight_type === 'multi_city') { if (!args.multi_city_json) { return { content: [{ type: 'text', text: JSON.stringify({ error: '多城市行程需要"multi_city_json"参数' }) }], isError: true }; } params.multi_city_json = args.multi_city_json; } else { params.departure_id = args.departure_id; params.arrival_id = args.arrival_id; params.outbound_date = args.outbound_date; if (args.flight_type === 'round_trip') { if (!args.return_date) { return { content: [{ type: 'text', text: JSON.stringify({ error: '往返行程需要"return_date"参数' }) }], isError: true }; } params.return_date = args.return_date; } } // 添加其他可选参数 const optionalParams = [ 'gl', 'hl', 'currency', 'travel_class', 'stops', 'sort_by', 'adults', 'children', 'show_cheapest_flights', 'show_hidden_flights', 'max_price', 'carry_on_bags', 'checked_bags', 'included_airlines', 'excluded_airlines', 'outbound_times', 'return_times', 'emissions', 'included_connecting_airports', 'excluded_connecting_airports', 'layover_duration_min', 'layover_duration_max', 'max_flight_duration', 'separate_tickets', 'infants_in_seat', 'infants_on_lap', 'departure_token', 'booking_token' ]; for (const key of optionalParams) { if (args[key] !== undefined) { params[key] = args[key]; } } const result = await makeSearchapiRequest(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; }
- src/index.js:86-122 (schema)Zod schema defining the input validation for the search_google_flights tool, with required parameters like departure_id, arrival_id, outbound_date, and numerous optional parameters for customizing flight searches.{ departure_id: z.string().describe('出发地ID'), arrival_id: z.string().describe('目的地ID'), outbound_date: z.string().describe('出发日期'), flight_type: z.string().default('round_trip').describe('航班类型'), return_date: z.string().optional().describe('返程日期'), gl: z.string().optional().describe('地理位置'), hl: z.string().optional().describe('语言'), currency: z.string().optional().describe('货币'), travel_class: z.string().optional().describe('舱位等级'), stops: z.string().optional().describe('中转次数'), sort_by: z.string().optional().describe('排序方式'), adults: z.string().optional().describe('成人数量'), children: z.string().optional().describe('儿童数量'), multi_city_json: z.string().optional().describe('多城市行程JSON'), show_cheapest_flights: z.string().optional().describe('显示最便宜航班'), show_hidden_flights: z.string().optional().describe('显示隐藏航班'), max_price: z.string().optional().describe('最高价格'), carry_on_bags: z.string().optional().describe('随身行李'), checked_bags: z.string().optional().describe('托运行李'), included_airlines: z.string().optional().describe('包含的航空公司'), excluded_airlines: z.string().optional().describe('排除的航空公司'), outbound_times: z.string().optional().describe('出发时间范围'), return_times: z.string().optional().describe('返程时间范围'), emissions: z.string().optional().describe('排放量'), included_connecting_airports: z.string().optional().describe('包含的中转机场'), excluded_connecting_airports: z.string().optional().describe('排除的中转机场'), layover_duration_min: z.string().optional().describe('最短中转时间'), layover_duration_max: z.string().optional().describe('最长中转时间'), max_flight_duration: z.string().optional().describe('最长飞行时间'), separate_tickets: z.string().optional().describe('分开的机票'), infants_in_seat: z.string().optional().describe('占座婴儿数量'), infants_on_lap: z.string().optional().describe('不占座婴儿数量'), departure_token: z.string().optional().describe('出发令牌'), booking_token: z.string().optional().describe('预订令牌') }, async (args) => {
- src/index.js:84-174 (registration)The MCP server.tool call that registers the search_google_flights tool, specifying its name, input schema, and handler function.server.tool( 'search_google_flights', { departure_id: z.string().describe('出发地ID'), arrival_id: z.string().describe('目的地ID'), outbound_date: z.string().describe('出发日期'), flight_type: z.string().default('round_trip').describe('航班类型'), return_date: z.string().optional().describe('返程日期'), gl: z.string().optional().describe('地理位置'), hl: z.string().optional().describe('语言'), currency: z.string().optional().describe('货币'), travel_class: z.string().optional().describe('舱位等级'), stops: z.string().optional().describe('中转次数'), sort_by: z.string().optional().describe('排序方式'), adults: z.string().optional().describe('成人数量'), children: z.string().optional().describe('儿童数量'), multi_city_json: z.string().optional().describe('多城市行程JSON'), show_cheapest_flights: z.string().optional().describe('显示最便宜航班'), show_hidden_flights: z.string().optional().describe('显示隐藏航班'), max_price: z.string().optional().describe('最高价格'), carry_on_bags: z.string().optional().describe('随身行李'), checked_bags: z.string().optional().describe('托运行李'), included_airlines: z.string().optional().describe('包含的航空公司'), excluded_airlines: z.string().optional().describe('排除的航空公司'), outbound_times: z.string().optional().describe('出发时间范围'), return_times: z.string().optional().describe('返程时间范围'), emissions: z.string().optional().describe('排放量'), included_connecting_airports: z.string().optional().describe('包含的中转机场'), excluded_connecting_airports: z.string().optional().describe('排除的中转机场'), layover_duration_min: z.string().optional().describe('最短中转时间'), layover_duration_max: z.string().optional().describe('最长中转时间'), max_flight_duration: z.string().optional().describe('最长飞行时间'), separate_tickets: z.string().optional().describe('分开的机票'), infants_in_seat: z.string().optional().describe('占座婴儿数量'), infants_on_lap: z.string().optional().describe('不占座婴儿数量'), departure_token: z.string().optional().describe('出发令牌'), booking_token: z.string().optional().describe('预订令牌') }, async (args) => { const params = { engine: 'google_flights', flight_type: args.flight_type }; // 处理flight_type不同情况下的必填参数 if (args.flight_type === 'multi_city') { if (!args.multi_city_json) { return { content: [{ type: 'text', text: JSON.stringify({ error: '多城市行程需要"multi_city_json"参数' }) }], isError: true }; } params.multi_city_json = args.multi_city_json; } else { params.departure_id = args.departure_id; params.arrival_id = args.arrival_id; params.outbound_date = args.outbound_date; if (args.flight_type === 'round_trip') { if (!args.return_date) { return { content: [{ type: 'text', text: JSON.stringify({ error: '往返行程需要"return_date"参数' }) }], isError: true }; } params.return_date = args.return_date; } } // 添加其他可选参数 const optionalParams = [ 'gl', 'hl', 'currency', 'travel_class', 'stops', 'sort_by', 'adults', 'children', 'show_cheapest_flights', 'show_hidden_flights', 'max_price', 'carry_on_bags', 'checked_bags', 'included_airlines', 'excluded_airlines', 'outbound_times', 'return_times', 'emissions', 'included_connecting_airports', 'excluded_connecting_airports', 'layover_duration_min', 'layover_duration_max', 'max_flight_duration', 'separate_tickets', 'infants_in_seat', 'infants_on_lap', 'departure_token', 'booking_token' ]; for (const key of optionalParams) { if (args[key] !== undefined) { params[key] = args[key]; } } const result = await makeSearchapiRequest(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } );
- src/index.js:29-57 (helper)Shared helper function used by search_google_flights (and other tools) to make HTTP requests to the searchapi.io API, automatically adds the API key from env, handles timeouts and errors gracefully, returning data or error object.async function makeSearchapiRequest(params) { // 确保API Key被添加到参数中 params.api_key = SEARCHAPI_API_KEY; try { const response = await axios.get(SEARCHAPI_URL, { params, timeout: 30000 // 30秒超时 }); return response.data; } catch (error) { let errorDetail = null; if (error.response) { try { errorDetail = error.response.data; } catch (e) { errorDetail = error.response.statusText; } } const errorMessage = `调用searchapi.io时出错: ${error.message}`; if (errorDetail) { return { error: `${errorMessage}, 详情: ${JSON.stringify(errorDetail)}` }; } return { error: errorMessage }; } }