Skip to main content
Glama
codyde

MCP Firecrawl Server

by codyde

scrape-website

Extract website content in markdown, HTML, or text formats from any URL for data collection and analysis purposes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
formatsNo

Implementation Reference

  • The handler function for the scrape-website tool. It scrapes the website using firecrawl.scrapeUrl, logs debug info, handles errors with Sentry, and returns the scraped content as markdown or other formats in a structured response.
    async ({ url, formats }) => {
      return await Sentry.startSpan(
        { name: "scrape-website" },
        async () => {
          try {
            // Debug input
            console.error('DEBUG: Scraping URL:', url, 'with formats:', formats);
    
            // Add Sentry breadcrumb for debugging
            Sentry.addBreadcrumb({
              category: 'scrape-website',
              message: `Scraping URL: ${url}`,
              data: { formats },
              level: 'info'
            });
    
            // Scrape the website
            const scrapeResult = await firecrawl.scrapeUrl(url, { 
              formats: formats 
            });
    
            // Debug raw response
            console.error('DEBUG: Raw scrape result:', JSON.stringify(scrapeResult, null, 2));
    
            if (!scrapeResult.success) {
              // Capture error in Sentry
              Sentry.captureMessage(`Failed to scrape website: ${scrapeResult.error}`, 'error');
              return {
                content: [{ 
                  type: "text", 
                  text: `Failed to scrape website: ${scrapeResult.error}` 
                }],
                isError: true
              };
            }
    
            // Return the content directly
            return {
              content: [{ 
                type: "text", 
                text: scrapeResult.markdown || scrapeResult.content || 'No content available'
              }]
            };
    
          } catch (error) {
            console.error('DEBUG: Caught error:', error);
            // Capture exception in Sentry
            Sentry.captureException(error);
            return {
              content: [{ 
                type: "text", 
                text: `Error scraping website: ${error.message}` 
              }],
              isError: true
            };
          }
        }
      );
    }
  • Zod input schema defining the parameters for the scrape-website tool: a required URL and optional formats array defaulting to markdown.
    { 
      url: z.string().url(),
      formats: z.array(z.enum(['markdown', 'html', 'text'])).default(['markdown'])
    },
  • src/server.js:62-127 (registration)
    Registration of the scrape-website tool on the MCP server using server.tool(), specifying name, input schema, and handler function.
    server.tool(
      "scrape-website",
      { 
        url: z.string().url(),
        formats: z.array(z.enum(['markdown', 'html', 'text'])).default(['markdown'])
      },
      async ({ url, formats }) => {
        return await Sentry.startSpan(
          { name: "scrape-website" },
          async () => {
            try {
              // Debug input
              console.error('DEBUG: Scraping URL:', url, 'with formats:', formats);
    
              // Add Sentry breadcrumb for debugging
              Sentry.addBreadcrumb({
                category: 'scrape-website',
                message: `Scraping URL: ${url}`,
                data: { formats },
                level: 'info'
              });
    
              // Scrape the website
              const scrapeResult = await firecrawl.scrapeUrl(url, { 
                formats: formats 
              });
    
              // Debug raw response
              console.error('DEBUG: Raw scrape result:', JSON.stringify(scrapeResult, null, 2));
    
              if (!scrapeResult.success) {
                // Capture error in Sentry
                Sentry.captureMessage(`Failed to scrape website: ${scrapeResult.error}`, 'error');
                return {
                  content: [{ 
                    type: "text", 
                    text: `Failed to scrape website: ${scrapeResult.error}` 
                  }],
                  isError: true
                };
              }
    
              // Return the content directly
              return {
                content: [{ 
                  type: "text", 
                  text: scrapeResult.markdown || scrapeResult.content || 'No content available'
                }]
              };
    
            } catch (error) {
              console.error('DEBUG: Caught error:', error);
              // Capture exception in Sentry
              Sentry.captureException(error);
              return {
                content: [{ 
                  type: "text", 
                  text: `Error scraping website: ${error.message}` 
                }],
                isError: true
              };
            }
          }
        );
      }
    );
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/codyde/mcp-firecrawl-tool'

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