Skip to main content
Glama
JayceeTran1995

Firecrawl MCP Server

firecrawl_map

Discover all indexed URLs on a website to identify pages for scraping or locate specific sections of a site. Returns an array of found URLs.

Instructions

Map a website to discover all indexed URLs on the site.

Best for: Discovering URLs on a website before deciding what to scrape; finding specific sections of a website. Not recommended for: When you already know which specific URL you need (use scrape or batch_scrape); when you need the content of the pages (use scrape after mapping). Common mistakes: Using crawl to discover URLs instead of map. Prompt Example: "List all URLs on example.com." Usage Example:

{
  "name": "firecrawl_map",
  "arguments": {
    "url": "https://example.com"
  }
}

Returns: Array of URLs found on the site.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
searchNo
sitemapNo
includeSubdomainsNo
limitNo
ignoreQueryParametersNo

Implementation Reference

  • Handler function that executes the firecrawl_map tool by calling client.map() with the provided URL and options.
    execute: async (
      args: unknown,
      { session, log }: { session?: SessionData; log: Logger }
    ): Promise<string> => {
      const { url, ...options } = args as { url: string } & Record<
        string,
        unknown
      >;
      const client = getClient(session);
      const cleaned = removeEmptyTopLevel(options as Record<string, unknown>);
      log.info('Mapping URL', { url: String(url) });
      const res = await client.map(String(url), {
        ...cleaned,
        origin: ORIGIN,
      } as any);
      return asText(res);
    },
  • Zod schema defining the input parameters for the firecrawl_map tool.
    parameters: z.object({
      url: z.string().url(),
      search: z.string().optional(),
      sitemap: z.enum(['include', 'skip', 'only']).optional(),
      includeSubdomains: z.boolean().optional(),
      limit: z.number().optional(),
      ignoreQueryParameters: z.boolean().optional(),
    }),
  • src/index.ts:312-357 (registration)
    Registration of the firecrawl_map tool using server.addTool, including name, description, parameters, and execute handler.
    server.addTool({
      name: 'firecrawl_map',
      description: `
    Map a website to discover all indexed URLs on the site.
    
    **Best for:** Discovering URLs on a website before deciding what to scrape; finding specific sections of a website.
    **Not recommended for:** When you already know which specific URL you need (use scrape or batch_scrape); when you need the content of the pages (use scrape after mapping).
    **Common mistakes:** Using crawl to discover URLs instead of map.
    **Prompt Example:** "List all URLs on example.com."
    **Usage Example:**
    \`\`\`json
    {
      "name": "firecrawl_map",
      "arguments": {
        "url": "https://example.com"
      }
    }
    \`\`\`
    **Returns:** Array of URLs found on the site.
    `,
      parameters: z.object({
        url: z.string().url(),
        search: z.string().optional(),
        sitemap: z.enum(['include', 'skip', 'only']).optional(),
        includeSubdomains: z.boolean().optional(),
        limit: z.number().optional(),
        ignoreQueryParameters: z.boolean().optional(),
      }),
      execute: async (
        args: unknown,
        { session, log }: { session?: SessionData; log: Logger }
      ): Promise<string> => {
        const { url, ...options } = args as { url: string } & Record<
          string,
          unknown
        >;
        const client = getClient(session);
        const cleaned = removeEmptyTopLevel(options as Record<string, unknown>);
        log.info('Mapping URL', { url: String(url) });
        const res = await client.map(String(url), {
          ...cleaned,
          origin: ORIGIN,
        } as any);
        return asText(res);
      },
    });
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by explaining what the tool returns ('Array of URLs'), its discovery-focused behavior, and constraints (indexed URLs only). It doesn't mention rate limits, authentication needs, or pagination, but provides substantial operational context beyond basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with clear sections (Best for, Not recommended, Common mistakes, examples), uses bullet-like formatting, and every sentence adds value. The prompt and usage examples are directly helpful without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters (0% schema coverage), no annotations, and no output schema, the description provides excellent purpose and usage guidance but leaves most parameters undocumented. It explains the return format adequately but doesn't address parameter behaviors, making it incomplete for effective tool invocation despite strong contextual framing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 6 parameters, the description fails to explain any parameters beyond the required 'url' in the usage example. It mentions 'search' in the prompt example but doesn't define it, and ignores the other 4 parameters entirely. The description adds minimal value beyond what's implied by the tool name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb+resource ('Map a website to discover all indexed URLs on the site'), distinguishes it from siblings by contrasting with 'scrape' and 'batch_scrape', and explicitly mentions what it doesn't do (get content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with 'Best for:' and 'Not recommended for:' sections, names specific alternative tools (scrape, batch_scrape), and warns about a common mistake (using crawl instead of map). This gives clear when-to-use and when-not-to-use criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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/JayceeTran1995/firecrawl-mcp-server'

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