Skip to main content
Glama
lianshuang-photo

SearchAPI MCP Server

search_google_hotels

Search for hotels on Google with filters for dates, location, price, amenities, and ratings to find accommodations matching specific travel needs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qYes搜索查询
check_in_dateYes入住日期
check_out_dateYes退房日期
glNo地理位置
hlNo语言
currencyNo货币
property_typeNo物业类型
sort_byNo排序方式
price_minNo最低价格
price_maxNo最高价格
property_typesNo物业类型列表
amenitiesNo设施
ratingNo评分
free_cancellationNo免费取消
special_offersNo特别优惠
for_displaced_individualsNo为流离失所的个人
eco_certifiedNo生态认证
hotel_classNo酒店等级
brandsNo品牌
bedroomsNo卧室数量
bathroomsNo浴室数量
adultsNo成人数量
children_agesNo儿童年龄
next_page_tokenNo下一页令牌

Implementation Reference

  • Handler function for 'search_google_hotels' tool. Constructs parameters including required 'q', 'check_in_date', 'check_out_date' and optional params, calls shared makeSearchapiRequest with engine 'google_hotels', 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) }]
      };
    }
  • Input schema for 'search_google_hotels' tool defined using Zod (z.string()). Includes required fields q, check_in_date, check_out_date and many 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:177-232 (registration)
    Registration of the 'search_google_hotels' tool using server.tool(), providing 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) }]
        };
      }
    );
  • Shared utility function that performs the actual HTTP request to searchapi.io API using axios, adds API key, handles timeouts and errors gracefully.
    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 };
      }
    }

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/lianshuang-photo/searchapi-mcp-nodejs'

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