Firecrawl MCP Server

ทางการ

เพิ่มความสามารถในการขูดข้อมูลเว็บและการค้นหาอันทรงพลังให้กับไคลเอนต์ LLM เช่น Cursor และ Claude

เอกสาร

Firecrawl MCP Server

เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่นำ Firecrawl มาสู่เอเจนต์ AI ที่เข้ากันได้กับ MCP — ค้นหา, ดึงข้อมูล, และโต้ตอบกับเว็บสดเพื่อบริบทที่สะอาด พร้อมใช้งานสำหรับเอเจนต์

ขอบคุณมากสำหรับ @vrknetha, @knacklabs สำหรับการพัฒนาเริ่มต้น!

คุณสมบัติ

  • ค้นหาเว็บและรับเนื้อหาทั้งหน้า
  • ดึงข้อมูล URL ใดๆ ให้เป็นข้อมูลที่มีโครงสร้างและสะอาด
  • โต้ตอบกับหน้าเว็บ — คลิก, นำทาง, และดำเนินการ
  • การวิจัยเชิงลึกด้วยเอเจนต์อัตโนมัติ
  • การลองใหม่และจำกัดอัตราการเรียกอัตโนมัติ
  • รองรับคลาวด์และโฮสต์เอง
  • รองรับ SSE

ลองเล่นกับ MCP Server ของเราบน MCP.so's playground หรือบน Klavis AI

การติดตั้ง

การรันด้วย npx

env FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp

การติดตั้งด้วยตนเอง

npm install -g firecrawl-mcp

การรันบน Cursor

การกำหนดค่า Cursor 🖥️ หมายเหตุ: ต้องใช้ Cursor เวอร์ชัน 0.45.6+ สำหรับคำแนะนำการกำหนดค่าล่าสุด โปรดดูเอกสารอย่างเป็นทางการของ Cursor เกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ MCP: Cursor MCP Server Configuration Guide

เพื่อกำหนดค่า Firecrawl MCP ใน Cursor v0.48.6

  1. เปิดการตั้งค่า Cursor
  2. ไปที่ Features > MCP Servers
  3. คลิก "+ Add new global MCP server"
  4. ป้อนโค้ดต่อไปนี้:
    {
      "mcpServers": {
        "firecrawl-mcp": {
          "command": "npx",
          "args": ["-y", "firecrawl-mcp"],
          "env": {
            "FIRECRAWL_API_KEY": "YOUR-API-KEY"
          }
        }
      }
    }
    

เพื่อกำหนดค่า Firecrawl MCP ใน Cursor v0.45.6

  1. เปิดการตั้งค่า Cursor
  2. ไปที่ Features > MCP Servers
  3. คลิก "+ Add New MCP Server"
  4. ป้อนข้อมูลต่อไปนี้:
    • Name: "firecrawl-mcp" (หรือชื่อที่คุณต้องการ)
    • Type: "command"
    • Command: env FIRECRAWL_API_KEY=your-api-key npx -y firecrawl-mcp

หากคุณใช้ Windows และพบปัญหา ให้ลอง cmd /c "set FIRECRAWL_API_KEY=your-api-key && npx -y firecrawl-mcp"

แทนที่ your-api-key ด้วย Firecrawl API key ของคุณ หากคุณยังไม่มี คุณสามารถสร้างบัญชีและรับได้จาก https://www.firecrawl.dev/app/api-keys

หลังจากเพิ่มแล้ว ให้รีเฟรชรายการเซิร์ฟเวอร์ MCP เพื่อดูเครื่องมือใหม่ Composer Agent จะใช้ Firecrawl MCP โดยอัตโนมัติเมื่อเหมาะสม แต่คุณสามารถร้องขออย่างชัดเจนได้โดยอธิบายความต้องการในการดึงข้อมูลเว็บของคุณ เข้าถึง Composer ผ่าน Command+L (Mac) เลือก "Agent" ข้างปุ่ม submit และป้อนคำถามของคุณ

การรันบน Windsurf

เพิ่มสิ่งนี้ลงใน ./codeium/windsurf/model_config.json ของคุณ:

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

การรันด้วย Streamable HTTP Local Mode

เพื่อรันเซิร์ฟเวอร์โดยใช้ Streamable HTTP ในเครื่องแทนการขนส่ง stdio เริ่มต้น:

env HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=fc-YOUR_API_KEY npx -y firecrawl-mcp

ใช้ url: http://localhost:3000/mcp

การติดตั้งผ่าน Smithery (Legacy)

เพื่อติดตั้ง Firecrawl สำหรับ Claude Desktop โดยอัตโนมัติผ่าน Smithery:

npx -y @smithery/cli install @mendableai/mcp-server-firecrawl --client claude

การรันบน VS Code

สำหรับการติดตั้งในคลิกเดียว คลิกปุ่มติดตั้งด้านล่าง...

Install with NPX in VS Code Install with NPX in VS Code Insiders

สำหรับการติดตั้งด้วยตนเอง เพิ่มบล็อก JSON ต่อไปนี้ลงในไฟล์ User Settings (JSON) ของคุณใน VS Code คุณสามารถทำได้โดยกด Ctrl + Shift + P และพิมพ์ Preferences: Open User Settings (JSON)

{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "apiKey",
        "description": "Firecrawl API Key",
        "password": true
      }
    ],
    "servers": {
      "firecrawl": {
        "command": "npx",
        "args": ["-y", "firecrawl-mcp"],
        "env": {
          "FIRECRAWL_API_KEY": "${input:apiKey}"
        }
      }
    }
  }
}

หรือคุณสามารถเพิ่มลงในไฟล์ชื่อ .vscode/mcp.json ในพื้นที่ทำงานของคุณ ซึ่งจะช่วยให้คุณแชร์การกำหนดค่ากับผู้อื่นได้:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "apiKey",
      "description": "Firecrawl API Key",
      "password": true
    }
  ],
  "servers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "${input:apiKey}"
      }
    }
  }
}

การกำหนดค่า

ตัวแปรสภาพแวดล้อม

จำเป็นสำหรับ Cloud API

  • FIRECRAWL_API_KEY: Firecrawl API key ของคุณ
    • จำเป็นเมื่อใช้ cloud API (ค่าเริ่มต้น)
    • ไม่จำเป็นเมื่อใช้อินสแตนซ์ที่โฮสต์เองด้วย FIRECRAWL_API_URL
  • FIRECRAWL_API_URL (ไม่จำเป็น): ปลายทาง API แบบกำหนดเองสำหรับอินสแตนซ์ที่โฮสต์เอง
    • ตัวอย่าง: https://firecrawl.your-domain.com
    • หากไม่ระบุ จะใช้ cloud API (ต้องใช้ API key)

MCP OAuth (Bearer access tokens)

Firecrawl ที่โฮสต์สามารถออก access tokens (fco_…) ของ OAuth ผ่านเซิร์ฟเวอร์การอนุญาตบน firecrawl.dev เซิร์ฟเวอร์ MCP นี้จะส่งต่อข้อมูลประจำตัวใดๆ ที่แก้ไขได้ไปยัง Firecrawl API เป็น Authorization: Bearer …

  • การขนส่ง HTTP stream (CLOUD_SERVICE=true, HTTP_STREAMABLE_SERVER=true, หรือ SSE_LOCAL=true): ไคลเอนต์ควรส่ง Authorization: Bearer <fco_access_token> ในคำขอ MCP โทเค็นผู้ถือ OAuth จะมีความสำคัญกว่า x-firecrawl-api-key / x-api-key เมื่อมีทั้งสองอย่าง
  • stdio: ใช้ FIRECRAWL_OAUTH_TOKEN สำหรับโทเค็นการเข้าถึงแบบคงที่ หรือใช้ FIRECRAWL_API_KEY สำหรับ API key ต่อไป

ใช้เฉพาะ access tokens (fco_…) เท่านั้น Refresh tokens (fcr_…) ต้องแลกเปลี่ยนที่ปลายทางโทเค็น ไม่ใช่ส่งไปยัง scrape/search API

การกำหนดค่าเพิ่มเติม

การกำหนดค่าการลองใหม่
  • FIRECRAWL_RETRY_MAX_ATTEMPTS: จำนวนครั้งสูงสุดในการลองใหม่ (ค่าเริ่มต้น: 3)
  • FIRECRAWL_RETRY_INITIAL_DELAY: ความล่าช้าเริ่มต้นในหน่วยมิลลิวินาทีก่อนลองใหม่ครั้งแรก (ค่าเริ่มต้น: 1000)
  • FIRECRAWL_RETRY_MAX_DELAY: ความล่าช้าสูงสุดในหน่วยมิลลิวินาทีระหว่างการลองใหม่ (ค่าเริ่มต้น: 10000)
  • FIRECRAWL_RETRY_BACKOFF_FACTOR: ตัวคูณการถอยกลับแบบเอกซ์โพเนนเชียล (ค่าเริ่มต้น: 2)
การตรวจสอบการใช้เครดิต
  • FIRECRAWL_CREDIT_WARNING_THRESHOLD: เกณฑ์เตือนการใช้เครดิต (ค่าเริ่มต้น: 1000)
  • FIRECRAWL_CREDIT_CRITICAL_THRESHOLD: เกณฑ์วิกฤตการใช้เครดิต (ค่าเริ่มต้น: 100)

ตัวอย่างการกำหนดค่า

สำหรับการใช้ cloud API พร้อมการลองใหม่และการตรวจสอบเครดิตแบบกำหนดเอง:

# Required for cloud API
export FIRECRAWL_API_KEY=your-api-key

# Optional retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=5        # Increase max retry attempts
export FIRECRAWL_RETRY_INITIAL_DELAY=2000    # Start with 2s delay
export FIRECRAWL_RETRY_MAX_DELAY=30000       # Maximum 30s delay
export FIRECRAWL_RETRY_BACKOFF_FACTOR=3      # More aggressive backoff

# Optional credit monitoring
export FIRECRAWL_CREDIT_WARNING_THRESHOLD=2000    # Warning at 2000 credits
export FIRECRAWL_CREDIT_CRITICAL_THRESHOLD=500    # Critical at 500 credits

สำหรับอินสแตนซ์ที่โฮสต์เอง:

# Required for self-hosted
export FIRECRAWL_API_URL=https://firecrawl.your-domain.com

# Optional authentication for self-hosted
export FIRECRAWL_API_KEY=your-api-key  # If your instance requires auth

# Custom retry configuration
export FIRECRAWL_RETRY_MAX_ATTEMPTS=10
export FIRECRAWL_RETRY_INITIAL_DELAY=500     # Start with faster retries

การใช้งานกับ Claude Desktop

เพิ่มสิ่งนี้ลงใน claude_desktop_config.json ของคุณ:

{
  "mcpServers": {
    "mcp-server-firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "YOUR_API_KEY_HERE",

        "FIRECRAWL_RETRY_MAX_ATTEMPTS": "5",
        "FIRECRAWL_RETRY_INITIAL_DELAY": "2000",
        "FIRECRAWL_RETRY_MAX_DELAY": "30000",
        "FIRECRAWL_RETRY_BACKOFF_FACTOR": "3",

        "FIRECRAWL_CREDIT_WARNING_THRESHOLD": "2000",
        "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD": "500"
      }
    }
  }
}

การกำหนดค่าระบบ

เซิร์ฟเวอร์มีพารามิเตอร์ที่กำหนดค่าได้หลายตัวซึ่งสามารถตั้งค่าผ่านตัวแปรสภาพแวดล้อม นี่คือค่าเริ่มต้นหากไม่ได้กำหนดค่า:

const CONFIG = {
  retry: {
    maxAttempts: 3, // Number of retry attempts for rate-limited requests
    initialDelay: 1000, // Initial delay before first retry (in milliseconds)
    maxDelay: 10000, // Maximum delay between retries (in milliseconds)
    backoffFactor: 2, // Multiplier for exponential backoff
  },
  credit: {
    warningThreshold: 1000, // Warn when credit usage reaches this level
    criticalThreshold: 100, // Critical alert when credit usage reaches this level
  },
};

การกำหนดค่าเหล่านี้ควบคุม:

  1. พฤติกรรมการลองใหม่

    • ลองใหม่โดยอัตโนมัติสำหรับคำขอที่ล้มเหลวเนื่องจากข้อจำกัดอัตรา
    • ใช้การถอยกลับแบบเอกซ์โพเนนเชียลเพื่อหลีกเลี่ยงการทำให้ API ทำงานหนักเกินไป
    • ตัวอย่าง: ด้วยการตั้งค่าเริ่มต้น การลองใหม่จะถูกพยายามที่:
      • ลองใหม่ครั้งที่ 1: หน่วงเวลา 1 วินาที
      • ลองใหม่ครั้งที่ 2: หน่วงเวลา 2 วินาที
      • ลองใหม่ครั้งที่ 3: หน่วงเวลา 4 วินาที (จำกัดสูงสุดที่ maxDelay)
  2. การตรวจสอบการใช้เครดิต

    • ติดตามการใช้เครดิต API สำหรับการใช้ cloud API
    • ให้คำเตือนที่เกณฑ์ที่ระบุ
    • ช่วยป้องกันการหยุดชะงักของบริการที่ไม่คาดคิด
    • ตัวอย่าง: ด้วยการตั้งค่าเริ่มต้น:
      • คำเตือนที่เครดิตคงเหลือ 1000
      • การแจ้งเตือนวิกฤตที่เครดิตคงเหลือ 100

การจำกัดอัตราและการประมวลผลแบบกลุ่ม

เซิร์ฟเวอร์ใช้ความสามารถในการจำกัดอัตราและการประมวลผลแบบกลุ่มในตัวของ Firecrawl:

  • การจัดการข้อจำกัดอัตราอัตโนมัติด้วยการถอยกลับแบบเอกซ์โพเนนเชียล
  • การประมวลผลแบบขนานที่มีประสิทธิภาพสำหรับการดำเนินการแบบกลุ่ม
  • การจัดคิวและควบคุมคำขออย่างชาญฉลาด
  • การลองใหม่โดยอัตโนมัติสำหรับข้อผิดพลาดชั่วคราว

วิธีเลือกเครื่องมือ

ใช้คู่มือนี้เพื่อเลือกเครื่องมือที่เหมาะสมสำหรับงานของคุณ:

  • หากคุณทราบ URL ที่แน่นอนที่คุณต้องการ:
    • สำหรับหนึ่งรายการ: ใช้ scrape (พร้อมรูปแบบ JSON สำหรับข้อมูลที่มีโครงสร้าง)
    • สำหรับหลายรายการ: ใช้ batch_scrape
  • หากคุณต้องการค้นพบ URL บนไซต์: ใช้ map
  • หากคุณต้องการค้นหาเว็บเพื่อหาข้อมูล: ใช้ search
  • หากคุณต้องการการวิจัยที่ซับซ้อนจากหลายแหล่งที่ไม่รู้จัก: ใช้ agent
  • หากคุณต้องการวิเคราะห์ทั้งไซต์หรือส่วน: ใช้ crawl (พร้อมข้อจำกัด!)
  • หากคุณต้องการการทำงานอัตโนมัติของเบราว์เซอร์แบบโต้ตอบ (คลิก, พิมพ์, นำทาง): ใช้ scrape + interact

ตารางอ้างอิงด่วน

เครื่องมือเหมาะที่สุดสำหรับส่งคืน
scrapeเนื้อหาหน้าเดียวJSON (แนะนำ) หรือ markdown
interactโต้ตอบกับหน้าที่ดึงมาผลลัพธ์การดำเนินการ
batch_scrapeURL ที่รู้จักหลายรายการJSON (แนะนำ) หรือ markdown[]
mapการค้นพบ URL บนไซต์URL[]
crawlการดึงข้อมูลหลายหน้า (พร้อมข้อจำกัด)markdown/html[]
searchการค้นหาเว็บเพื่อหาข้อมูลresults[]
agentการวิจัยหลายแหล่งที่ซับซ้อนJSON (ข้อมูลที่มีโครงสร้าง)

คู่มือการเลือกรูปแบบ

เมื่อใช้ scrape หรือ batch_scrape ให้เลือกรูปแบบที่เหมาะสม:

  • รูปแบบ JSON (แนะนำสำหรับกรณีส่วนใหญ่): ใช้เมื่อคุณต้องการข้อมูลเฉพาะจากหน้าเว็บ กำหนด schema ตามสิ่งที่คุณต้องการดึงข้อมูล ซึ่งจะทำให้การตอบกลับมีขนาดเล็กและหลีกเลี่ยง context window overflow
  • รูปแบบ Markdown (ใช้เท่าที่จำเป็น): เฉพาะเมื่อคุณต้องการเนื้อหาทั้งหน้าจริงๆ เช่น การอ่านบทความทั้งหมดเพื่อสรุปหรือวิเคราะห์โครงสร้างหน้า

เครื่องมือที่มีให้

1. Scrape Tool (firecrawl_scrape)

ดึงเนื้อหาจาก URL เดียวพร้อมตัวเลือกขั้นสูง

เหมาะสำหรับ:

  • การดึงเนื้อหาหน้าเดียว เมื่อคุณทราบแน่ชัดว่าหน้าใดมีข้อมูล

ไม่แนะนำสำหรับ:

  • การดึงเนื้อหาจากหลายหน้า (ใช้ batch_scrape สำหรับ URL ที่รู้จัก หรือ map + batch_scrape เพื่อค้นพบ URL ก่อน หรือ crawl สำหรับเนื้อหาทั้งหน้า)
  • เมื่อคุณไม่แน่ใจว่าหน้าใดมีข้อมูล (ใช้ search)

ข้อผิดพลาดทั่วไป:

  • ใช้ scrape สำหรับรายการ URL (ใช้ batch_scrape แทน)
  • ใช้รูปแบบ markdown เป็นค่าเริ่มต้น (ใช้รูปแบบ JSON เพื่อดึงเฉพาะสิ่งที่คุณต้องการ)

การเลือกรูปแบบที่เหมาะสม:

  • รูปแบบ JSON (แนะนำ): สำหรับกรณีการใช้งานส่วนใหญ่ ใช้รูปแบบ JSON พร้อม schema เพื่อดึงเฉพาะข้อมูลที่ต้องการ ซึ่งจะทำให้การตอบกลับมีความกระชับและป้องกัน context window overflow
  • รูปแบบ Markdown: เฉพาะเมื่องานต้องการเนื้อหาทั้งหน้าจริงๆ (เช่น การสรุปบทความทั้งหมด, การวิเคราะห์โครงสร้างหน้า)

ตัวอย่าง Prompt:

"รับรายละเอียดสินค้าจาก https://example.com/product."

ตัวอย่างการใช้งาน (รูปแบบ JSON - แนะนำ):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com/product",
    "formats": [
      {
        "type": "json",
        "prompt": "Extract the product information",
        "schema": {
          "type": "object",
          "properties": {
            "name": { "type": "string" },
            "price": { "type": "number" },
            "description": { "type": "string" }
          },
          "required": ["name", "price"]
        }
      }
    ]
  }
}

ตัวอย่างการใช้งาน (รูปแบบ markdown - เมื่อต้องการเนื้อหาทั้งหมด):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com/article",
    "formats": ["markdown"],
    "onlyMainContent": true
  }
}

ตัวอย่างการใช้งาน (รูปแบบ branding - ดึงข้อมูลเอกลักษณ์แบรนด์):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formats": ["branding"]
  }
}

รูปแบบ Branding: ดึงข้อมูลเอกลักษณ์แบรนด์ที่ครอบคลุม (สี, ฟอนต์, การพิมพ์, ระยะห่าง, โลโก้, ส่วนประกอบ UI) สำหรับการวิเคราะห์การออกแบบหรือการจำลองสไตล์ ความเป็นส่วนตัว: ตั้งค่า redactPII: true เพื่อส่งคืนเนื้อหาที่มีการปกปิดข้อมูลที่ระบุตัวบุคคลได้

ส่งคืน:

  • ข้อมูลที่มีโครงสร้าง JSON, markdown, โปรไฟล์ branding หรือรูปแบบอื่นๆ ตามที่ระบุ

2. Batch Scrape Tool (firecrawl_batch_scrape)

ดึงข้อมูลหลาย URL อย่างมีประสิทธิภาพด้วยการจำกัดอัตราและการประมวลผลแบบขนานในตัว

เหมาะสำหรับ:

  • การดึงเนื้อหาจากหลายหน้า เมื่อคุณทราบแน่ชัดว่าจะดึงหน้าใด

ไม่แนะนำสำหรับ:

  • การค้นพบ URL (ใช้ map ก่อนหากคุณไม่ทราบ URL)
  • การดึงข้อมูลหน้าเดียว (ใช้ scrape)

ข้อผิดพลาดทั่วไป:

  • ใช้ batch_scrape กับ URL มากเกินไปในครั้งเดียว (อาจพบข้อจำกัดอัตราหรือ token overflow)

ตัวอย่าง Prompt:

"รับเนื้อหาของโพสต์บล็อกสามรายการนี้: [url1, url2, url3]"

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_batch_scrape",
  "arguments": {
    "urls": ["https://example1.com", "https://example2.com"],
    "options": {
      "formats": ["markdown"],
      "onlyMainContent": true
    }
  }
}

ส่งคืน:

  • การตอบกลับรวมถึง ID การดำเนินการสำหรับตรวจสอบสถานะ:
{
  "content": [
    {
      "type": "text",
      "text": "Batch operation queued with ID: batch_1. Use firecrawl_check_batch_status to check progress."
    }
  ],
  "isError": false
}

3. Check Batch Status (firecrawl_check_batch_status)

ตรวจสอบสถานะของการดำเนินการแบบกลุ่ม

{
  "name": "firecrawl_check_batch_status",
  "arguments": {
    "id": "batch_1"
  }
}

4. Map Tool (firecrawl_map)

ทำแผนผังเว็บไซต์เพื่อค้นพบ URL ที่ถูกจัดทำดัชนีทั้งหมดบนไซต์

เหมาะสำหรับ:

  • การค้นพบ URL บนเว็บไซต์ก่อนตัดสินใจว่าจะดึงข้อมูลอะไร
  • การค้นหาส่วนเฉพาะของเว็บไซต์

ไม่แนะนำสำหรับ:

  • เมื่อคุณทราบแล้วว่าต้องการ URL ใดโดยเฉพาะ (ใช้ scrape หรือ batch_scrape)
  • เมื่อคุณต้องการเนื้อหาของหน้า (ใช้ scrape หลังจากการทำแผนผัง)

ข้อผิดพลาดทั่วไป:

  • ใช้ crawl เพื่อค้นพบ URL แทน map

ตัวอย่าง Prompt:

"แสดงรายการ URL ทั้งหมดบน example.com"

ตัวอย่างการใช้งาน:

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

ส่งคืน:

  • อาร์เรย์ของ URL ที่พบบนไซต์

5. Search Tool (firecrawl_search)

ค้นหาเว็บและเลือกดึงเนื้อหาจากผลการค้นหาได้

เหมาะสำหรับ:

  • การค้นหาข้อมูลเฉพาะจากหลายเว็บไซต์ เมื่อคุณไม่ทราบว่าเว็บไซต์ใดมีข้อมูล
  • เมื่อคุณต้องการเนื้อหาที่เกี่ยวข้องมากที่สุดสำหรับคำถาม

ไม่แนะนำสำหรับ:

  • เมื่อคุณทราบแล้วว่าจะดึงข้อมูลจากเว็บไซต์ใด (ใช้ scrape)
  • เมื่อคุณต้องการความครอบคลุมที่ครอบคลุมของเว็บไซต์เดียว (ใช้ map หรือ crawl)

ข้อผิดพลาดทั่วไป:

  • ใช้ crawl หรือ map สำหรับคำถามปลายเปิด (ใช้ search แทน)

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_search",
  "arguments": {
    "query": "latest AI research papers 2023",
    "limit": 5,
    "lang": "en",
    "country": "us",
    "scrapeOptions": {
      "formats": ["markdown"],
      "onlyMainContent": true,
      "redactPII": true
    }
  }
}

ส่งคืน:

  • อาร์เรย์ของผลลัพธ์การค้นหา (พร้อมเนื้อหาที่สกัดได้ตามต้องการ) รวมถึงฟิลด์ id ส่ง id นั้นไปยัง firecrawl_search_feedback หลังจากที่คุณใช้ผลลัพธ์เพื่อคืนเครดิต 1 เครดิต (การค้นหามีค่าใช้จ่าย 2 เครดิต) และปรับปรุงคุณภาพการค้นหา

ตัวอย่างพรอมต์:

"ค้นหางานวิจัยล่าสุดเกี่ยวกับ AI ที่เผยแพร่ในปี 2023"

5b. เครื่องมือข้อเสนอแนะการค้นหา (firecrawl_search_feedback)

ส่งข้อเสนอแนะแบบมีโครงสร้างเกี่ยวกับผลลัพธ์ firecrawl_search ก่อนหน้า ข้อเสนอแนะครั้งแรกต่อรหัสการค้นหาจะคืนเครดิต 1 เครดิตและปรับปรุงคุณภาพการค้นหาของ Firecrawl มีคุณสมบัติ idempotent ต่อรหัสการค้นหา

เรียกใช้สิ่งนี้หลังจากการค้นหาทุกครั้งที่คุณใช้งานจริง (หรือที่ไม่ได้ช่วยอะไร) ข้อเสนอแนะที่ไม่ดี/บางส่วนด้วย missingContent มีค่าเท่ากับข้อเสนอแนะที่ดี

การยกเลิก: ตั้งค่า FIRECRAWL_NO_SEARCH_FEEDBACK=1 (หรือ FIRECRAWL_DISABLE_SEARCH_FEEDBACK=1) ในสภาพแวดล้อมเมื่อเริ่มต้นเซิร์ฟเวอร์ MCP เครื่องมือ firecrawl_search_feedback จะไม่ถูกลงทะเบียน ดังนั้นเอเจนต์จึงไม่สามารถเรียกใช้ได้ ผู้ดูแลทีมยังสามารถปิดใช้งานข้อเสนอแนะทางฝั่งเซิร์ฟเวอร์ได้ ในกรณีนั้นเครื่องมือจะถูกลงทะเบียนแต่จะส่งคืน feedbackErrorCode: "TEAM_OPTED_OUT" เสมอ

ฟิลด์ที่สำคัญที่สุด: missingContent เป็นอาร์เรย์ของเนื้อหาเฉพาะที่เอเจนต์คาดว่าจะพบแต่ไม่พบ หนึ่งรายการต่อหัวข้อที่ขาดหายไป — สิ่งเหล่านี้จะถูกรวบรวมข้ามทีมและบอกเราว่าควรจัดทำดัชนีอะไรต่อไป

ขีดจำกัดการคืนเครดิตรายวัน (ต่อทีม ต่อวัน UTC ค่าเริ่มต้น 100 เครดิต) เมื่อ creditsRefundedToday ของทีมถึง dailyRefundCap การส่งครั้งต่อไปจะยังบันทึกข้อเสนอแนะแต่จะไม่คืนเครดิตอีกต่อไป การตอบกลับจะตั้งค่า dailyCapReached: true เอเจนต์ควรหยุดเรียกใช้เครื่องมือนี้ในช่วงที่เหลือของวัน UTC เมื่อเห็นแฟล็กนั้น

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_search_feedback",
  "arguments": {
    "searchId": "0193f6c5-1234-7890-abcd-1234567890ab",
    "rating": "good",
    "valuableSources": [
      {
        "url": "https://docs.firecrawl.dev/features/search",
        "reason": "Most up-to-date description of /search."
      }
    ],
    "missingContent": [
      {
        "topic": "Pricing for the search endpoint",
        "description": "No pricing tier table for /search specifically."
      },
      { "topic": "Per-team rate limits" }
    ],
    "querySuggestions": "Boost docs.firecrawl.dev for queries that mention 'firecrawl'"
  }
}

ส่งคืน:

  • JSON { success, feedbackId, creditsRefunded, alreadySubmitted? }

5c. เครื่องมือข้อเสนอแนะทั่วไป (firecrawl_feedback)

ส่งข้อเสนอแนะแบบมีโครงสร้างสำหรับงานเอนด์พอยต์ v2 ที่เสร็จสมบูรณ์ผ่าน /v2/feedback ใช้สิ่งนี้สำหรับข้อเสนอแนะระดับเอนด์พอยต์เกี่ยวกับงาน scrape, parse, map หรือ search สำหรับคุณภาพผลลัพธ์การค้นหาโดยเฉพาะ ควรเลือกใช้ firecrawl_search_feedback เนื่องจากมีคำแนะนำเฉพาะสำหรับการค้นหา

ให้ข้อเสนอแนะกระชับ: ใช้รหัสปัญหา แท็ก บันทึกย่อ URL หมายเลขหน้า และออบเจ็กต์ข้อมูลเมตาขนาดเล็ก อย่ารวมเอาต์พุตการสกัด/แยกวิเคราะห์ดิบ

การยกเลิก: ตั้งค่า FIRECRAWL_NO_ENDPOINT_FEEDBACK=1 (หรือ FIRECRAWL_DISABLE_ENDPOINT_FEEDBACK=1) ในสภาพแวดล้อมเมื่อเริ่มต้นเซิร์ฟเวอร์ MCP เครื่องมือ firecrawl_feedback จะไม่ถูกลงทะเบียน ดังนั้นเอเจนต์จึงไม่สามารถเรียกใช้ได้

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_feedback",
  "arguments": {
    "endpoint": "scrape",
    "jobId": "0193f6c5-1234-7890-abcd-1234567890ab",
    "rating": "partial",
    "issues": ["missing_markdown"],
    "tags": ["docs"],
    "note": "The pricing table was missing from the markdown output.",
    "url": "https://example.com/pricing",
    "pageNumbers": [1],
    "metadata": {
      "format": "markdown"
    }
  }
}

ส่งคืน:

  • JSON { success, feedbackId, creditsRefunded, creditsRefundedToday?, dailyRefundCap?, dailyCapReached?, alreadySubmitted?, warning? }

6. เครื่องมือรวบรวมข้อมูล (firecrawl_crawl)

เริ่มงานรวบรวมข้อมูลแบบอะซิงโครนัสบนเว็บไซต์และสกัดเนื้อหาจากทุกหน้า

เหมาะที่สุดสำหรับ:

  • การสกัดเนื้อหาจากหลายหน้าที่เกี่ยวข้องกัน เมื่อคุณต้องการความครอบคลุมที่ครบถ้วน

ไม่แนะนำสำหรับ:

  • การสกัดเนื้อหาจากหน้าเดียว (ใช้การสกัดแทน)
  • เมื่อกังวลเกี่ยวกับขีดจำกัดโทเค็น (ใช้ map + batch_scrape)
  • เมื่อคุณต้องการผลลัพธ์ที่รวดเร็ว (การรวบรวมข้อมูลอาจช้า)

คำเตือน: การตอบกลับการรวบรวมข้อมูลอาจมีขนาดใหญ่มากและอาจเกินขีดจำกัดโทเค็น จำกัดความลึกของการรวบรวมข้อมูลและจำนวนหน้า หรือใช้ map + batch_scrape เพื่อการควบคุมที่ดีกว่า

ข้อผิดพลาดที่พบบ่อย:

  • การตั้งค่า limit หรือ maxDepth สูงเกินไป (ทำให้โทเค็นล้น)
  • ใช้การรวบรวมข้อมูลสำหรับหน้าเดียว (ใช้การสกัดแทน)

ตัวอย่างพรอมต์:

"รับโพสต์บล็อกทั้งหมดจากสองระดับแรกของ example.com/blog"

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://example.com/blog/*",
    "maxDepth": 2,
    "limit": 100,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true
  }
}

ส่งคืน:

  • การตอบกลับรวมถึงรหัสการดำเนินการสำหรับการตรวจสอบสถานะ:
{
  "content": [
    {
      "type": "text",
      "text": "Started crawl for: https://example.com/* with job ID: 550e8400-e29b-41d4-a716-446655440000. Use firecrawl_check_crawl_status to check progress."
    }
  ],
  "isError": false
}

7. ตรวจสอบสถานะการรวบรวมข้อมูล (firecrawl_check_crawl_status)

ตรวจสอบสถานะของงานรวบรวมข้อมูล

{
  "name": "firecrawl_check_crawl_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

ส่งคืน:

  • การตอบกลับรวมถึงสถานะของงานรวบรวมข้อมูล:

8. เครื่องมือสกัดข้อมูล (firecrawl_extract)

สกัดข้อมูลที่มีโครงสร้างจากหน้าเว็บโดยใช้ความสามารถของ LLM รองรับทั้ง AI บนคลาวด์และการสกัดด้วย LLM แบบโฮสต์เอง

เหมาะที่สุดสำหรับ:

  • การสกัดข้อมูลที่มีโครงสร้างเฉพาะ เช่น ราคา ชื่อ รายละเอียด

ไม่แนะนำสำหรับ:

  • เมื่อคุณต้องการเนื้อหาทั้งหมดของหน้า (ใช้การสกัดแทน)
  • เมื่อคุณไม่ได้มองหาข้อมูลที่มีโครงสร้างเฉพาะ

อาร์กิวเมนต์:

  • urls: อาร์เรย์ของ URL ที่จะสกัดข้อมูล
  • prompt: พรอมต์ที่กำหนดเองสำหรับการสกัดด้วย LLM
  • systemPrompt: พรอมต์ระบบเพื่อแนะนำ LLM
  • schema: JSON schema สำหรับการสกัดข้อมูลที่มีโครงสร้าง
  • allowExternalLinks: อนุญาตการสกัดจากลิงก์ภายนอก
  • enableWebSearch: เปิดใช้งานการค้นหาเว็บเพื่อบริบทเพิ่มเติม
  • includeSubdomains: รวมโดเมนย่อยในการสกัด

เมื่อใช้อินสแตนซ์แบบโฮสต์เอง การสกัดจะใช้ LLM ที่คุณกำหนดค่าไว้ สำหรับ API บนคลาวด์ จะใช้บริการ LLM ที่จัดการโดย Firecrawl ตัวอย่างพรอมต์:

"สกัดชื่อผลิตภัณฑ์ ราคา และคำอธิบายจากหน้าผลิตภัณฑ์เหล่านี้"

ตัวอย่างการใช้งาน:

{
  "name": "firecrawl_extract",
  "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extract product information including name, price, and description",
    "systemPrompt": "You are a helpful assistant that extracts product information",
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "price": { "type": "number" },
        "description": { "type": "string" }
      },
      "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
  }
}

ส่งคืน:

  • ข้อมูลที่มีโครงสร้างที่สกัดได้ตามที่กำหนดโดย schema ของคุณ
{
  "content": [
    {
      "type": "text",
      "text": {
        "name": "Example Product",
        "price": 99.99,
        "description": "This is an example product description"
      }
    }
  ],
  "isError": false
}

9. เครื่องมือเอเจนต์ (firecrawl_agent)

เอเจนต์วิจัยเว็บอัตโนมัติ นี่คือเลเยอร์เอเจนต์ AI แยกต่างหากที่เรียกดูอินเทอร์เน็ต ค้นหาข้อมูล นำทางผ่านหน้าต่างๆ และสกัดข้อมูลที่มีโครงสร้างตามคำถามของคุณอย่างอิสระ

วิธีการทำงาน:

เอเจนต์ทำการค้นหาเว็บ ติดตามลิงก์ อ่านหน้า และรวบรวมข้อมูลโดยอัตโนมัติ สิ่งนี้ทำงานแบบ อะซิงโครนัส - มันจะส่งคืนรหัสงานทันที และคุณโพล firecrawl_agent_status เพื่อตรวจสอบว่าเสร็จสิ้นเมื่อใดและดึงผลลัพธ์

เวิร์กโฟลว์อะซิงโครนัส:

  1. เรียก firecrawl_agent ด้วยพรอมต์/schema ของคุณ → ส่งคืนรหัสงาน
  2. ทำงานอื่นในขณะที่เอเจนต์ค้นคว้า (อาจใช้เวลาหลายนาทีสำหรับคำถามที่ซับซ้อน)
  3. โพล firecrawl_agent_status ด้วยรหัสงานเพื่อตรวจสอบความคืบหน้า
  4. เมื่อสถานะเป็น "completed" การตอบกลับจะรวมข้อมูลที่สกัดได้

เหมาะที่สุดสำหรับ:

  • งานวิจัยที่ซับซ้อนเมื่อคุณไม่ทราบ URL ที่แน่นอน
  • การรวบรวมข้อมูลจากหลายแหล่ง
  • การค้นหาข้อมูลที่กระจัดกระจายอยู่บนเว็บ
  • งานที่คุณสามารถทำงานอื่นได้ในขณะรอผลลัพธ์

ไม่แนะนำสำหรับ:

  • การสกัดหน้าเดียวอย่างง่ายเมื่อคุณทราบ URL (ใช้การสกัดด้วยรูปแบบ JSON - เร็วกว่าและถูกกว่า)

อาร์กิวเมนต์:

  • prompt: คำอธิบายภาษาธรรมชาติของข้อมูลที่คุณต้องการ (จำเป็น, สูงสุด 10,000 ตัวอักษร)
  • urls: อาร์เรย์ทางเลือกของ URL เพื่อให้เอเจนต์โฟกัสที่หน้าเฉพาะ
  • schema: JSON schema ทางเลือกสำหรับเอาต์พุตที่มีโครงสร้าง

ตัวอย่างพรอมต์:

"ค้นหาผู้ก่อตั้ง Firecrawl และภูมิหลังของพวกเขา"

ตัวอย่างการใช้งาน (เริ่มเอเจนต์ จากนั้นโพลเพื่อผลลัพธ์):

{
  "name": "firecrawl_agent",
  "arguments": {
    "prompt": "Find the top 5 AI startups founded in 2024 and their funding amounts",
    "schema": {
      "type": "object",
      "properties": {
        "startups": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "funding": { "type": "string" },
              "founded": { "type": "string" }
            }
          }
        }
      }
    }
  }
}

จากนั้นโพลด้วย firecrawl_agent_status โดยใช้รหัสงานที่ส่งคืน

ตัวอย่างการใช้งาน (พร้อม URL - เอเจนต์โฟกัสที่หน้าเฉพาะ):

{
  "name": "firecrawl_agent",
  "arguments": {
    "urls": ["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
    "prompt": "Compare the features and pricing information from these pages"
  }
}

ส่งคืน:

  • รหัสงานสำหรับการตรวจสอบสถานะ ใช้ firecrawl_agent_status เพื่อโพลหาผลลัพธ์

10. ตรวจสอบสถานะเอเจนต์ (firecrawl_agent_status)

ตรวจสอบสถานะของงานเอเจนต์และดึงผลลัพธ์เมื่อเสร็จสมบูรณ์ ใช้สิ่งนี้เพื่อโพลหาผลลัพธ์หลังจากเริ่มเอเจนต์

รูปแบบการโพล: การวิจัยของเอเจนต์อาจใช้เวลาหลายนาทีสำหรับคำถามที่ซับซ้อน โพลเอนด์พอยต์นี้เป็นระยะ (เช่น ทุก 10-30 วินาที) จนกว่าสถานะจะเป็น "completed" หรือ "failed"

{
  "name": "firecrawl_agent_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

สถานะที่เป็นไปได้:

  • processing: เอเจนต์กำลังค้นคว้าอยู่ - ตรวจสอบอีกครั้งในภายหลัง
  • completed: การวิจัยเสร็จสิ้น - การตอบกลับรวมข้อมูลที่สกัดได้
  • failed: เกิดข้อผิดพลาด

11. เครื่องมือตรวจสอบ (firecrawl_monitor_*)

สร้างและจัดการตัวตรวจสอบหน้าแบบประจำ ตัวตรวจสอบจะรันการสกัดหรือรวบรวมข้อมูลตามกำหนดเวลา เปรียบเทียบผลลัพธ์แต่ละรายการกับสแนปช็อตที่เก็บไว้ล่าสุด และสามารถแจ้งเตือนผ่านเว็บฮุกหรืออีเมล

เหมาะที่สุดสำหรับ:

  • การเฝ้าดูหนึ่งหน้าหรือไม่กี่หน้าเมื่อเวลาผ่านไป
  • การแจ้งเตือนเมื่อมีการเปลี่ยนแปลงที่มีความหมายโดยใช้เป้าหมายภาษาอังกฤษธรรมดา
  • การติดตามประวัติการตรวจสอบและการเปลี่ยนแปลงระดับหน้า

รูปแบบการสร้างที่แนะนำ:

ใช้ page หรือ pages บวกกับ goal เซิร์ฟเวอร์ MCP จะสร้างคำขอตัวตรวจสอบด้วยกำหนดการ 30 นาที และ API จะเปิดใช้งานการตัดสินการเปลี่ยนแปลงที่มีความหมายโดยอัตโนมัติ

การตัดสินการเปลี่ยนแปลงที่มีความหมายจะทำงานโดยอัตโนมัติเมื่อตั้งค่า goal เว็บฮุกของหน้าจะเปิดเผย isMeaningful และ judgment ในเหตุการณ์ monitor.page

เขียนเป้าหมายเป็นคำแนะนำตัวตรวจสอบที่กระชับ 2-3 ประโยค ระบุสิ่งที่ควรเรียกการแจ้งเตือน รักษาขอบเขตใดๆ ที่ผู้ใช้ให้ไว้ และรวมการยกเว้นเฉพาะเจตนาเมื่อเห็นได้ชัดจากคำขอเท่านั้น สัญญาณรบกวนทั่วไป เช่น ช่องว่าง การเปลี่ยนแปลงเฉพาะการจัดรูปแบบ รหัสคำขอ พารามิเตอร์การติดตาม ข้อมูลเมตาทั่วไป และโครมหน้าทั่วไปที่ไม่เกี่ยวข้อง ได้รับการจัดการโดยตัวตัดสินแล้ว ดังนั้นอย่าทำซ้ำในทุกเป้าหมาย หากผู้ใช้คลุมเครือ ให้รักษาเป้าหมายให้กว้าง หากพวกเขาขอการตรวจสอบแบบกว้างหรือ "การเปลี่ยนแปลงใดๆ" ให้รักษาสิ่งนั้นไว้ หากผู้ใช้บอกว่าพวกเขาไม่สนใจบางสิ่ง ให้รวมสิ่งนั้นอย่างชัดเจน

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "page": "https://example.com/pricing",
    "goal": "Alert when pricing, packaging, or launch messaging changes."
  }
}

หลายหน้าพร้อมเว็บฮุก:

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "pages": ["https://example.com/pricing", "https://example.com/changelog"],
    "goal": "Alert when pricing, packaging, or launch messaging changes.",
    "webhookUrl": "https://example.com/webhooks/firecrawl"
  }
}

คำขอสร้างขั้นสูง:

ส่ง body เมื่อคุณต้องการเป้าหมายการรวบรวมข้อมูล การติดตามการเปลี่ยนแปลง JSON การเก็บรักษาแบบกำหนดเอง หรือการควบคุม judgeEnabled อย่างชัดเจน

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "body": {
      "name": "Docs monitor",
      "schedule": { "text": "hourly", "timezone": "UTC" },
      "goal": "Alert when docs pages add, remove, or materially change API behavior.",
      "targets": [{ "type": "crawl", "url": "https://example.com/docs" }]
    }
  }
}

เครื่องมือตัวตรวจสอบอื่นๆ:

  • firecrawl_monitor_list: แสดงรายการตัวตรวจสอบ
  • firecrawl_monitor_get: รับตัวตรวจสอบหนึ่งรายการ
  • firecrawl_monitor_update: อัปเดตฟิลด์รวมถึง goal, judgeEnabled, webhook และ notification
  • firecrawl_monitor_run: เรียกการตรวจสอบทันที
  • firecrawl_monitor_checks: แสดงรายการการตรวจสอบ กรองตามสถานะได้
  • firecrawl_monitor_check: รับผลลัพธ์ระดับหน้า รวมถึง diff, snapshot, judgment.meaningful และ judgment.meaningfulChanges

ระบบบันทึก

เซิร์ฟเวอร์รวมการบันทึกที่ครอบคลุม:

  • สถานะการดำเนินงานและความคืบหน้า
  • เมตริกประสิทธิภาพ
  • การตรวจสอบการใช้เครดิต
  • การติดตามขีดจำกัดอัตรา
  • เงื่อนไขข้อผิดพลาด

ตัวอย่างข้อความบันทึก:

[INFO] Firecrawl MCP Server initialized successfully
[INFO] Starting scrape for URL: https://example.com
[INFO] Batch operation queued with ID: batch_1
[WARNING] Credit usage has reached warning threshold
[ERROR] Rate limit exceeded, retrying in 2s...

การจัดการข้อผิดพลาด

เซิร์ฟเวอร์ให้การจัดการข้อผิดพลาดที่มีประสิทธิภาพ:

  • การลองใหม่โดยอัตโนมัติสำหรับข้อผิดพลาดชั่วคราว
  • การจัดการขีดจำกัดอัตราพร้อมการถอยกลับ
  • ข้อความข้อผิดพลาดโดยละเอียด
  • คำเตือนการใช้เครดิต
  • ความยืดหยุ่นของเครือข่าย

ตัวอย่างการตอบกลับข้อผิดพลาด:

{
  "content": [
    {
      "type": "text",
      "text": "Error: Rate limit exceeded. Retrying in 2 seconds..."
    }
  ],
  "isError": true
}

การพัฒนา

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

การมีส่วนร่วม

  1. Fork repository
  2. สร้าง branch คุณลักษณะของคุณ
  3. รันการทดสอบ: npm test
  4. ส่ง pull request

ขอบคุณผู้มีส่วนร่วม

ขอบคุณ @vrknetha, @cawstudios สำหรับการนำไปใช้ครั้งแรก!

ขอบคุณ MCP.so และ Klavis AI สำหรับการโฮสต์ และ @gstarwd, @xiangkaiz และ @zihaolin96 สำหรับการรวมเซิร์ฟเวอร์ของเรา

ใบอนุญาต

ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ LICENSE