Firecrawl

ทางการ

ดึงข้อมูลเว็บด้วย Firecrawl

คุณทำอะไรได้บ้างด้วย Firecrawl MCP?

  • Scrape a single URL for clean content — Extract a page as structured JSON or markdown with firecrawl_scrape, optionally redacting PII.
  • Search the web for current information — Find relevant pages across the web using firecrawl_search, with optional content extraction from results.
  • Map a site to discover its URLs — List all indexed URLs on a domain with firecrawl_map before deciding which pages to scrape.
  • Run autonomous multi-source research — Start an async firecrawl_agent job to gather and structure information from across the web, then poll firecrawl_agent_status for results.
  • Interact with dynamic pages — Click, type, and navigate on a page using firecrawl_interact, then extract the resulting state.
  • Monitor pages for changes over time — Set up recurring checks with firecrawl_monitor_* tools and get diffs when content changes meaningfully.

เอกสาร

Firecrawl MCP Server

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

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

คุณสมบัติ

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

ลองเล่นกับ เซิร์ฟเวอร์ MCP ของเราบนสนามเด็กเล่นของ MCP.so หรือบน Klavis AI

การติดตั้ง

โฮสต์ MCP (ระดับฟรีไม่ต้องใช้คีย์)

เชื่อมต่อกับเซิร์ฟเวอร์โฮสต์ระยะไกลโดยไม่ต้องตั้งค่า:

https://mcp.firecrawl.dev/v2/mcp

ในระดับฟรีไม่ต้องใช้คีย์ scrape, search, และ interact ทำงานได้โดยไม่ต้องใช้คีย์ API (จำกัดอัตรา) เครื่องมืออื่นๆ เช่น crawl, map, agent, และ extract ยังต้องใช้คีย์

แนะนำให้ใช้คีย์ API หรือ OAuth ทุกครั้งที่มนุษย์สามารถสมัครได้ มันปลดล็อกชุดเครื่องมือเต็มรูปแบบและขีดจำกัดที่สูงขึ้น เมื่อมีคีย์ ให้ใช้:

https://mcp.firecrawl.dev/{FIRECRAWL_API_KEY}/v2/mcp

ดู เอกสารเซิร์ฟเวอร์ MCP และ คู่มือการเริ่มต้นใช้งานเอเจนต์ สำหรับรายละเอียดการตั้งค่า

การรันด้วย 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: คู่มือการกำหนดค่าเซิร์ฟเวอร์ MCP ของ Cursor

การกำหนดค่า 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. ป้อนข้อมูลต่อไปนี้:
    • ชื่อ: "firecrawl-mcp" (หรือชื่อที่คุณต้องการ)
    • ประเภท: "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 ของคุณ หากคุณยังไม่มี คุณสามารถสร้างบัญชีและรับได้จาก https://www.firecrawl.dev/app/api-keys

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

การรันบน 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 ภายในเครื่อง

เพื่อรันเซิร์ฟเวอร์โดยใช้ 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 (ดั้งเดิม)

เพื่อติดตั้ง 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 ต่อไปนี้ลงในไฟล์การตั้งค่าผู้ใช้ (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 ของคุณ
    • จำเป็นเมื่อใช้ cloud API (ค่าเริ่มต้น)
    • ไม่จำเป็นเมื่อใช้อินสแตนซ์ที่โฮสต์เองด้วย FIRECRAWL_API_URL
  • FIRECRAWL_API_URL (ไม่จำเป็น): ปลายทาง API ที่กำหนดเองสำหรับอินสแตนซ์ที่โฮสต์เอง
    • ตัวอย่าง: https://firecrawl.your-domain.com
    • หากไม่ระบุ จะใช้ cloud API (ต้องใช้คีย์ API)

MCP OAuth (โทเค็นการเข้าถึง Bearer)

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

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

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

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

สำหรับการใช้ cloud API:

export FIRECRAWL_API_KEY=your-api-key

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

# 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

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

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

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

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

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

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

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

เครื่องมือเหมาะที่สุดสำหรับส่งคืน
scrapeเนื้อหาหน้าเดียวJSON (แนะนำ) หรือ markdown
interactโต้ตอบกับ URL หรือหน้าที่ดึงข้อมูลผลการดำเนินการ + scrapeId สำหรับโหมด URL
mapการค้นพบ URL บนไซต์URL[]
crawlการดึงข้อมูลหลายหน้า (พร้อมขีดจำกัด)สถานะ/ข้อมูลการ crawl สุดท้ายหลังการสำรวจภายใน
parseไฟล์และการอ้างอิงการอัปโหลดที่โฮสต์markdown, JSON, หรือผลลัพธ์เอกสาร
extractการดึงข้อมูลที่มีโครงสร้างจาก URLข้อมูลที่มีโครงสร้าง JSON
searchการค้นหาเว็บสำหรับข้อมูลresults[]
agentการวิจัยหลายแหล่งที่ซับซ้อนJSON (ข้อมูลที่มีโครงสร้าง)
monitorการตรวจสอบหน้าซ้ำข้อมูลเมตาและความแตกต่างของการตรวจสอบ/ตรวจสอบ
researchการวิจัยเอกสารและที่เก็บ GitHubผลการวิจัยและการจับคู่ที่เก็บ

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

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

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

เครื่องมือที่มีอยู่

1. เครื่องมือ Scrape (firecrawl_scrape)

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

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

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

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

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

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

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

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

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

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

"รับรายละเอียดผลิตภัณฑ์จาก 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. เครื่องมือ Map (firecrawl_map)

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

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

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

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

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

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

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

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

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

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

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

ส่งคืน:

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

3. เครื่องมือ Search (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"

3b. เครื่องมือ Search Feedback (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'"
  }
}

ส่งคืน:

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

3c. เครื่องมือความคิดเห็นทั่วไป (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"
    }
  }
}

ส่งคืน:

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

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

เริ่มงานรวบรวมข้อมูล สำรวจสถานะจนกว่าจะถึงสถานะสิ้นสุด และส่งคืนสถานะ/ข้อมูลการรวบรวมข้อมูลขั้นสุดท้าย

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

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

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

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

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

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

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

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

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

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

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

ส่งคืน:

  • สถานะและข้อมูลการรวบรวมข้อมูลขั้นสุดท้ายหลังจากการสำรวจภายใน รวมถึง id, status, completed, total, creditsUsed, expiresAt, next และ data ใช้ id ที่ส่งคืนกับ firecrawl_check_crawl_status หากคุณต้องการตรวจสอบงานอีกครั้งในภายหลัง

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

ตรวจสอบสถานะและผลลัพธ์ของงานรวบรวมข้อมูลที่มีอยู่ตาม ID

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

ส่งคืน:

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

6. เครื่องมือแยกวิเคราะห์ (firecrawl_parse)

แยกวิเคราะห์ไฟล์ในเครื่องหรือการอ้างอิงการอัปโหลดที่โฮสต์ด้วยเอนด์พอยต์ /v2/parse ของ Firecrawl

เหมาะที่สุดสำหรับ: PDF, เอกสาร Word, สเปรดชีต, ไฟล์ HTML และเอกสารอื่นๆ ที่ต้องการเอาต์พุต markdown หรือ JSON แบบมีโครงสร้าง MCP ที่โฮสต์รองรับโฟลว์การอัปโหลด-อ้างอิงสองขั้นตอน การอ่านไฟล์โดยตรงในเครื่องต้องใช้ FIRECRAWL_API_URL ที่โฮสต์เอง

ไม่แนะนำสำหรับ: URL ระยะไกล (ใช้การขูด), หลายไฟล์ในการเรียกครั้งเดียว (เรียกแยกวิเคราะห์ครั้งละหนึ่งไฟล์) หรือการดำเนินการเฉพาะเบราว์เซอร์ เช่น ภาพหน้าจอและการคลิก

โฟลว์ MCP ที่โฮสต์: MCP ที่โฮสต์ไม่สามารถอ่านระบบไฟล์ของผู้เรียกได้โดยตรง เรียก firecrawl_parse ด้วย filePath เพื่อรับคำสั่งอัปโหลดอายุสั้นและ nextToolCall อัปโหลดไฟล์ในเครื่อง จากนั้นเรียก firecrawl_parse อีกครั้งด้วย uploadRef ที่ส่งคืน การสร้าง URL อัปโหลดที่โฮสต์ต้องใช้การตรวจสอบสิทธิ์ Firecrawl หรือสิทธิ์แบบไม่ใช้คีย์ ในโหมด npx firecrawl-mcp ในเครื่อง การแยกวิเคราะห์ไฟล์โดยตรงในปัจจุบันต้องใช้ FIRECRAWL_API_URL ที่ชี้ไปยัง Firecrawl API ที่โฮสต์เอง เซิร์ฟเวอร์ในเครื่องที่ใช้คีย์ API บนคลาวด์เพียงอย่างเดียวไม่สามารถอ่านและอัปโหลดไฟล์ผ่านเครื่องมือนี้ได้

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

{
  "name": "firecrawl_parse",
  "arguments": {
    "filePath": "/absolute/path/to/document.pdf",
    "formats": ["markdown"],
    "parsers": ["pdf"],
    "zeroDataRetention": true
  }
}

ส่งคืน: เนื้อหาเอกสารที่แยกวิเคราะห์แล้วหรือคำแนะนำการอัปโหลดที่โฮสต์พร้อม nextToolCall

7. เครื่องมือแยกข้อมูล (firecrawl_extract)

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

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

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

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

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

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

  • urls: อาร์เรย์ของ URL ที่จะแยกข้อมูล
  • prompt: พรอมต์ที่กำหนดเองสำหรับการแยกข้อมูล LLM
  • systemPrompt: พรอมต์ระบบเพื่อแนะนำ LLM
  • schema: สคีมา JSON สำหรับการแยกข้อมูลที่มีโครงสร้าง
  • 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
  }
}

ส่งคืน:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

"ค้นหาผู้ก่อตั้ง 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 โดยใช้ ID งานที่ส่งคืน

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

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

ส่งคืน:

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

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

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

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

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

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

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

10. เครื่องมือโต้ตอบ (firecrawl_interact)

โต้ตอบกับ URL ใหม่หรือกับหน้าที่เปิดไว้แล้วโดย firecrawl_scrape

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

ตัวเลือกการใช้งาน:

  • ส่ง url เพื่อขูดและเปิดหน้าสำหรับการโต้ตอบในการเรียก MCP ครั้งเดียว
  • ส่ง scrapeId เพื่อโต้ตอบต่อกับหน้าที่ขูดไว้แล้ว
  • ส่งอย่างใดอย่างหนึ่งระหว่าง url หรือ scrapeId พร้อมกับ prompt หรือ code

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

{
  "name": "firecrawl_interact",
  "arguments": {
    "url": "https://example.com",
    "prompt": "Click the pricing link and summarize the visible plans"
  }
}

ส่งคืน: ผลลัพธ์การโต้ตอบ และสำหรับโหมด URL scrapeId ที่ได้รับสำหรับการติดตามผลหรือการล้างข้อมูล

11. เครื่องมือหยุดการโต้ตอบ (firecrawl_interact_stop)

หยุดเซสชันการโต้ตอบสำหรับหน้าที่ขูดเมื่อคุณโต้ตอบเสร็จแล้ว

{
  "name": "firecrawl_interact_stop",
  "arguments": {
    "scrapeId": "scrape-id-here"
  }
}

12. เครื่องมือวิจัย (firecrawl_research_*)

ค้นหาและตรวจสอบเอกสารและที่เก็บ GitHub ผ่านเครื่องมือ MCP การวิจัย

เครื่องมือวิจัยที่มีอยู่:

  • firecrawl_research_search_papers: ค้นหาเอกสารวิจัย
  • firecrawl_research_inspect_paper: ตรวจสอบเอกสารหนึ่งฉบับ
  • firecrawl_research_related_papers: ค้นหาเอกสารที่เกี่ยวข้อง
  • firecrawl_research_read_paper: อ่านเนื้อหาเอกสาร
  • firecrawl_research_search_github: ค้นหาที่เก็บ GitHub

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

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

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

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

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

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

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

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

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

{
  "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_delete: ลบตัวตรวจสอบ (ทำลายล้าง เรียกเมื่อผู้ใช้ตั้งใจจะลบออกเท่านั้น)
  • 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
[ERROR] Rate limit exceeded

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

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

  • ข้อผิดพลาดขีดจำกัดอัตรา API แสดงต่อไคลเอนต์ MCP
  • ข้อความข้อผิดพลาดโดยละเอียด
  • ความยืดหยุ่นของเครือข่าย

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

{
  "content": [
    {
      "type": "text",
      "text": "Error: Rate limit exceeded"
    }
  ],
  "isError": true
}

การพัฒนา

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

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

  1. Fork ที่เก็บ
  2. สร้างสาขาคุณลักษณะของคุณ
  3. รันการทดสอบ: npm test
  4. ส่งคำขอดึงข้อมูล

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

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

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

ใบอนุญาต

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