get_serp_html
Extract HTML content from search engine results pages (SERPs) for specific queries, search engines, and countries using the FetchSERP MCP Server.
Instructions
Get search engine results with HTML content
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:661-662 (handler)Handler implementation for the 'get_serp_html' tool. It calls the shared makeRequest method with the specific API endpoint '/api/v1/serp_html'.case 'get_serp_html': return await this.makeRequest('/api/v1/serp_html', 'GET', args, null, token);
- index.js:358-384 (schema)Input schema defining parameters for the 'get_serp_html' tool: query (required), search_engine, country, pages_number.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:355-385 (registration)Registration of the 'get_serp_html' tool in the ListTools response, including name, description, and input schema.{ name: 'get_serp_html', description: 'Get search engine results with HTML content', 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:565-613 (helper)Shared helper method that performs authenticated HTTP requests to the FetchSERP API using node-fetch, used by all tools including get_serp_html.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(); }