Skip to main content
Glama
lianshuang-photo

SearchAPI MCP Server

search_google

Search Google web results with customizable parameters for location, language, time periods, and result filtering.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qYes搜索查询
deviceNo设备类型desktop
locationNo位置
uuleNo位置编码
google_domainNoGoogle域名google.com
glNo地理位置us
hlNo语言en
lrNo语言限制
crNo国家限制
nfprNo不进行拼写检查0
filterNo过滤结果1
safeNo安全搜索off
time_periodNo时间段
time_period_minNo最小时间段
time_period_maxNo最大时间段
numNo结果数量10
pageNo页码1

Implementation Reference

  • Executes the search_google tool by building parameters with engine 'google', adding optional params, calling makeSearchapiRequest, and returning JSON-formatted results.
    async (args) => {
      const params = {
        engine: 'google',
        q: args.q
      };
      
      // 添加可选参数
      const optionalParams = [
        'device', 'location', 'uule', 'google_domain', 'gl', 'hl', 'lr', 'cr',
        'nfpr', 'filter', 'safe', 'time_period', 'time_period_min', 'time_period_max',
        'num', 'page'
      ];
      
      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 using Zod for validating parameters of the search_google tool, including required query and various optional search modifiers.
    {
      q: z.string().describe('搜索查询'),
      device: z.string().default('desktop').describe('设备类型'),
      location: z.string().optional().describe('位置'),
      uule: z.string().optional().describe('位置编码'),
      google_domain: z.string().default('google.com').describe('Google域名'),
      gl: z.string().default('us').describe('地理位置'),
      hl: z.string().default('en').describe('语言'),
      lr: z.string().optional().describe('语言限制'),
      cr: z.string().optional().describe('国家限制'),
      nfpr: z.string().default('0').describe('不进行拼写检查'),
      filter: z.string().default('1').describe('过滤结果'),
      safe: z.string().default('off').describe('安全搜索'),
      time_period: z.string().optional().describe('时间段'),
      time_period_min: z.string().optional().describe('最小时间段'),
      time_period_max: z.string().optional().describe('最大时间段'),
      num: z.string().default('10').describe('结果数量'),
      page: z.string().default('1').describe('页码')
    },
  • src/index.js:576-620 (registration)
    Registers the search_google tool with MCP server using server.tool(name, inputSchema, handlerFn).
      'search_google',
      {
        q: z.string().describe('搜索查询'),
        device: z.string().default('desktop').describe('设备类型'),
        location: z.string().optional().describe('位置'),
        uule: z.string().optional().describe('位置编码'),
        google_domain: z.string().default('google.com').describe('Google域名'),
        gl: z.string().default('us').describe('地理位置'),
        hl: z.string().default('en').describe('语言'),
        lr: z.string().optional().describe('语言限制'),
        cr: z.string().optional().describe('国家限制'),
        nfpr: z.string().default('0').describe('不进行拼写检查'),
        filter: z.string().default('1').describe('过滤结果'),
        safe: z.string().default('off').describe('安全搜索'),
        time_period: z.string().optional().describe('时间段'),
        time_period_min: z.string().optional().describe('最小时间段'),
        time_period_max: z.string().optional().describe('最大时间段'),
        num: z.string().default('10').describe('结果数量'),
        page: z.string().default('1').describe('页码')
      },
      async (args) => {
        const params = {
          engine: 'google',
          q: args.q
        };
        
        // 添加可选参数
        const optionalParams = [
          'device', 'location', 'uule', 'google_domain', 'gl', 'hl', 'lr', 'cr',
          'nfpr', 'filter', 'safe', 'time_period', 'time_period_min', 'time_period_max',
          'num', 'page'
        ];
        
        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 helper function that sends requests to searchapi.io API, adds API key, handles timeouts and errors, used by all search tools including search_google.
    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