get_serp_results
Retrieve search engine results pages (SERPs) by querying popular engines like Google, Bing, Yahoo, or DuckDuckGo. Specify country, engine, and pages to gather SERP data for SEO analysis or research.
Instructions
Get search engine results
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | The country to search from. Default: us | us |
| pages_number | No | The number of pages to search (1-30). Default: 1 | |
| query | Yes | The query to search | |
| search_engine | No | The search engine to use (google, bing, yahoo, duckduckgo). Default: google |
Implementation Reference
- index.js:324-354 (registration)Tool registration in listTools handler, defining name, description, and input schema for get_serp_results.{ name: 'get_serp_results', description: 'Get search engine results', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'The query to search', }, search_engine: { type: 'string', description: 'The search engine to use (google, bing, yahoo, duckduckgo). Default: google', default: 'google', }, country: { type: 'string', description: 'The country to search from. Default: us', default: 'us', }, pages_number: { type: 'integer', description: 'The number of pages to search (1-30). Default: 1', default: 1, minimum: 1, maximum: 30, }, }, required: ['query'], }, },
- index.js:658-659 (handler)Handler implementation in the switch statement of handleToolCall method, which proxies the tool arguments to the FetchSERP API endpoint '/api/v1/serp'.case 'get_serp_results': return await this.makeRequest('/api/v1/serp', 'GET', args, null, token);
- index.js:565-613 (helper)Shared helper method used by all tools, including get_serp_results, to make authenticated HTTP requests to the FetchSERP API.async makeRequest(endpoint, method = 'GET', params = {}, body = null, token = null) { const fetchserpToken = token || process.env.FETCHSERP_API_TOKEN; if (!fetchserpToken) { throw new McpError( ErrorCode.InvalidRequest, 'FETCHSERP_API_TOKEN is required' ); } const url = new URL(`${API_BASE_URL}${endpoint}`); // Add query parameters for GET requests if (method === 'GET' && Object.keys(params).length > 0) { Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { if (Array.isArray(value)) { value.forEach(v => url.searchParams.append(`${key}[]`, v)); } else { url.searchParams.append(key, value.toString()); } } }); } const fetchOptions = { method, headers: { 'Authorization': `Bearer ${fetchserpToken}`, 'Content-Type': 'application/json', }, }; if (body && method !== 'GET') { fetchOptions.body = JSON.stringify(body); } const response = await fetch(url.toString(), fetchOptions); if (!response.ok) { const errorText = await response.text(); throw new McpError( ErrorCode.InternalError, `API request failed: ${response.status} ${response.statusText} - ${errorText}` ); } return await response.json(); }