Skip to main content
Glama
marcopesani

serper-search-scrape-mcp-server

scrape

Extract webpage content including text, metadata, and optional markdown formatting for data collection and analysis.

Instructions

Tool to scrape a webpage and retrieve the text and, optionally, the markdown content. It will retrieve also the JSON-LD metadata and the head metadata.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the webpage to scrape.
includeMarkdownNoWhether to include markdown content.

Implementation Reference

  • Primary MCP server handler for the 'scrape' tool call. Extracts URL and includeMarkdown parameters, invokes the searchTools.scrape method, and returns the result as JSON text content.
    case "scrape": {
      const url = request.params.arguments?.url as string;
      const includeMarkdown = request.params.arguments
        ?.includeMarkdown as boolean;
      const result = await searchTools.scrape({ url, includeMarkdown });
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(result, null, 2),
          },
        ],
      };
    }
  • src/index.ts:144-162 (registration)
    Registration of the 'scrape' tool in the ListToolsRequestSchema handler, including name, description, and input schema validation.
      name: "scrape",
      description:
        "Tool to scrape a webpage and retrieve the text and, optionally, the markdown content. It will retrieve also the JSON-LD metadata and the head metadata.",
      inputSchema: {
        type: "object",
        properties: {
          url: {
            type: "string",
            description: "The URL of the webpage to scrape.",
          },
          includeMarkdown: {
            type: "boolean",
            description: "Whether to include markdown content.",
            default: false,
          },
        },
        required: ["url"],
      },
    },
  • TypeScript interface defining input parameters for scrape operation (matches MCP schema).
    export interface IScrapeParams {
      url: string;
      includeMarkdown?: boolean;
    }
  • Helper method in SerperSearchTools class that wraps the SerperClient.scrape call with error handling; invoked by MCP handler.
    async scrape(params: IScrapeParams): Promise<IScrapeResult> {
      try {
        const result = await this.serperClient.scrape(params);
        return result;
      } catch (error) {
        throw new Error(`SearchTool: failed to scrape. ${error}`);
      }
    }
  • Core implementation of scrape in SerperClient: makes HTTP POST to scrape.serper.dev API with params, handles response and errors.
    async scrape(params: IScrapeParams): Promise<IScrapeResult> {
      if (!params.url) {
        throw new Error("URL is required for scraping");
      }
      try {
        const response = await fetch("https://scrape.serper.dev", {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            "X-API-KEY": this.apiKey,
          },
          body: JSON.stringify(params),
          redirect: "follow",
        });
        if (!response.ok) {
          const errorText = await response.text();
          throw new Error(
            `Serper API error: ${response.status} ${response.statusText} - ${errorText}`
          );
        }
        const result = (await response.json()) as IScrapeResult;
        return result;
      } catch (error) {
        console.error(error);
        throw error;
      }
    }
Install Server

Other Tools

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/marcopesani/mcp-server-serper'

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