search_google_hotels
Find and compare hotels on Google Maps using specific criteria like check-in/out dates, price range, amenities, and ratings. Tailor results by location, language, and preferences for a personalized booking experience.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | 成人数量 | |
| amenities | No | 设施 | |
| bathrooms | No | 浴室数量 | |
| bedrooms | No | 卧室数量 | |
| brands | No | 品牌 | |
| check_in_date | Yes | 入住日期 | |
| check_out_date | Yes | 退房日期 | |
| children_ages | No | 儿童年龄 | |
| currency | No | 货币 | |
| eco_certified | No | 生态认证 | |
| for_displaced_individuals | No | 为流离失所的个人 | |
| free_cancellation | No | 免费取消 | |
| gl | No | 地理位置 | |
| hl | No | 语言 | |
| hotel_class | No | 酒店等级 | |
| next_page_token | No | 下一页令牌 | |
| price_max | No | 最高价格 | |
| price_min | No | 最低价格 | |
| property_type | No | 物业类型 | |
| property_types | No | 物业类型列表 | |
| q | Yes | 搜索查询 | |
| rating | No | 评分 | |
| sort_by | No | 排序方式 | |
| special_offers | No | 特别优惠 |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"adults": {
"description": "成人数量",
"type": "string"
},
"amenities": {
"description": "设施",
"type": "string"
},
"bathrooms": {
"description": "浴室数量",
"type": "string"
},
"bedrooms": {
"description": "卧室数量",
"type": "string"
},
"brands": {
"description": "品牌",
"type": "string"
},
"check_in_date": {
"description": "入住日期",
"type": "string"
},
"check_out_date": {
"description": "退房日期",
"type": "string"
},
"children_ages": {
"description": "儿童年龄",
"type": "string"
},
"currency": {
"description": "货币",
"type": "string"
},
"eco_certified": {
"description": "生态认证",
"type": "string"
},
"for_displaced_individuals": {
"description": "为流离失所的个人",
"type": "string"
},
"free_cancellation": {
"description": "免费取消",
"type": "string"
},
"gl": {
"description": "地理位置",
"type": "string"
},
"hl": {
"description": "语言",
"type": "string"
},
"hotel_class": {
"description": "酒店等级",
"type": "string"
},
"next_page_token": {
"description": "下一页令牌",
"type": "string"
},
"price_max": {
"description": "最高价格",
"type": "string"
},
"price_min": {
"description": "最低价格",
"type": "string"
},
"property_type": {
"description": "物业类型",
"type": "string"
},
"property_types": {
"description": "物业类型列表",
"type": "string"
},
"q": {
"description": "搜索查询",
"type": "string"
},
"rating": {
"description": "评分",
"type": "string"
},
"sort_by": {
"description": "排序方式",
"type": "string"
},
"special_offers": {
"description": "特别优惠",
"type": "string"
}
},
"required": [
"q",
"check_in_date",
"check_out_date"
],
"type": "object"
}
Implementation Reference
- src/index.js:177-232 (registration)Registration of the MCP tool 'search_google_hotels' using server.tool(), which includes the tool name, input schema, and inline handler function.server.tool( 'search_google_hotels', { q: z.string().describe('搜索查询'), check_in_date: z.string().describe('入住日期'), check_out_date: z.string().describe('退房日期'), gl: z.string().optional().describe('地理位置'), hl: z.string().optional().describe('语言'), currency: z.string().optional().describe('货币'), property_type: z.string().optional().describe('物业类型'), sort_by: z.string().optional().describe('排序方式'), price_min: z.string().optional().describe('最低价格'), price_max: z.string().optional().describe('最高价格'), property_types: z.string().optional().describe('物业类型列表'), amenities: z.string().optional().describe('设施'), rating: z.string().optional().describe('评分'), free_cancellation: z.string().optional().describe('免费取消'), special_offers: z.string().optional().describe('特别优惠'), for_displaced_individuals: z.string().optional().describe('为流离失所的个人'), eco_certified: z.string().optional().describe('生态认证'), hotel_class: z.string().optional().describe('酒店等级'), brands: z.string().optional().describe('品牌'), bedrooms: z.string().optional().describe('卧室数量'), bathrooms: z.string().optional().describe('浴室数量'), adults: z.string().optional().describe('成人数量'), children_ages: z.string().optional().describe('儿童年龄'), next_page_token: z.string().optional().describe('下一页令牌') }, async (args) => { const params = { engine: 'google_hotels', q: args.q, check_in_date: args.check_in_date, check_out_date: args.check_out_date }; // 添加可选参数 const optionalParams = [ 'gl', 'hl', 'currency', 'property_type', 'sort_by', 'price_min', 'price_max', 'property_types', 'amenities', 'rating', 'free_cancellation', 'special_offers', 'for_displaced_individuals', 'eco_certified', 'hotel_class', 'brands', 'bedrooms', 'bathrooms', 'adults', 'children_ages', 'next_page_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:205-231 (handler)Handler function that builds the API parameters for google_hotels engine, adds optional params, calls the shared makeSearchapiRequest helper, and returns JSON stringified result.async (args) => { const params = { engine: 'google_hotels', q: args.q, check_in_date: args.check_in_date, check_out_date: args.check_out_date }; // 添加可选参数 const optionalParams = [ 'gl', 'hl', 'currency', 'property_type', 'sort_by', 'price_min', 'price_max', 'property_types', 'amenities', 'rating', 'free_cancellation', 'special_offers', 'for_displaced_individuals', 'eco_certified', 'hotel_class', 'brands', 'bedrooms', 'bathrooms', 'adults', 'children_ages', 'next_page_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:179-204 (schema)Zod schema defining input parameters for the tool, including required q, check_in_date, check_out_date and various optional filters.{ q: z.string().describe('搜索查询'), check_in_date: z.string().describe('入住日期'), check_out_date: z.string().describe('退房日期'), gl: z.string().optional().describe('地理位置'), hl: z.string().optional().describe('语言'), currency: z.string().optional().describe('货币'), property_type: z.string().optional().describe('物业类型'), sort_by: z.string().optional().describe('排序方式'), price_min: z.string().optional().describe('最低价格'), price_max: z.string().optional().describe('最高价格'), property_types: z.string().optional().describe('物业类型列表'), amenities: z.string().optional().describe('设施'), rating: z.string().optional().describe('评分'), free_cancellation: z.string().optional().describe('免费取消'), special_offers: z.string().optional().describe('特别优惠'), for_displaced_individuals: z.string().optional().describe('为流离失所的个人'), eco_certified: z.string().optional().describe('生态认证'), hotel_class: z.string().optional().describe('酒店等级'), brands: z.string().optional().describe('品牌'), bedrooms: z.string().optional().describe('卧室数量'), bathrooms: z.string().optional().describe('浴室数量'), adults: z.string().optional().describe('成人数量'), children_ages: z.string().optional().describe('儿童年龄'), next_page_token: z.string().optional().describe('下一页令牌') },
- src/index.js:29-57 (helper)Shared helper function used by all search tools to make HTTP requests to searchapi.io, handle API key, timeout, and errors.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 }; } }