Pada halaman ini
CrawlForge MCP Server v5.0.0 telah dikeluarkan. Ia merupakan keluaran terbesar yang pernah kami hantar, dan hampir kesemuanya bukan ciri baharu.
Sebaliknya, v5.0.0 menghimpunkan program pemulihan tujuh fasa yang didorong oleh audit kod dalaman yang menyeluruh: setiap lubang SSRF, setiap alat yang secara senyap memulangkan output yang salah, setiap pemasa dan konteks pelayar yang bocor, lapisan pengangkutan HTTP yang hanya pernah menyokong satu sesi, setiap kebergantungan yang telah ditinggalkan, serta ciri spesifikasi MCP yang belum kami guna pakai. Suite ujian unit meningkat daripada 480 ujian kepada 914. npm audit turun daripada 16 kerentanan kepada 0.
Terdapat tepat satu perubahan yang memecahkan keserasian: had minimum Node beralih daripada >=18.0.0 kepada >=20.16.0. Jika anda menggunakan Node 20 atau lebih baharu, menaik taraf hanyalah satu baris arahan.
Isi kandungan
- Apa yang disertakan dalam v5.0.0
- Satu-satunya perubahan yang memecahkan keserasian: Node 20
- Fasa 1: lubang keselamatan yang kami tutup
- Fasa 2: 52 cara alat memberikan hasil salah secara senyap
- Fasa 3: selamat dijalankan berhari-hari
- Fasa 4: penggunaan jauh dan HTTP kini benar-benar berfungsi
- Fasa 5: sifar kerentanan npm audit
- Fasa 6: penggunaan spesifikasi MCP
- Baharu sejak v4.8.0: serp_rank dan panduan alat
- Harga: 27 alat bermeter, tidak berubah
- Cara menaik taraf
- Apa yang seterusnya
Apa yang disertakan dalam v5.0.0
| Fasa | Tema | Hasil utama |
|---|---|---|
| 0 | Kemas kini kebergantungan | npm audit 16 kerentanan → 4 sederhana, tanpa mengubah kod |
| 1 | Keselamatan kritikal | Pintasan literal IP SSRF, penerbitan token OAuth, kebocoran rahsia, ketepatan pengebilan |
| 2 | Ketepatan | 52 pembaikan — termasuk penulisan semula crawl_deep yang memulihkan perayapan sebenar |
| 3 | Kebocoran dan tamat masa | 24 pembaikan — konteks pelayar, cache tanpa had, tarikh akhir pada setiap bacaan badan respons |
| 4 | Pengangkutan HTTP | 19 pembaikan — HTTP strim berbilang sesi, prompt yang berfungsi, HMAC webhook |
| 5 | Pemodenan kebergantungan | Had minimum Node ≥ 20, 0 kerentanan npm audit |
| 6 | Penggunaan spesifikasi MCP | Output berstruktur, tugasan tak segerak, senarai putih alat, server.json pendaftaran |
Liputan ujian sepanjang program: 480 → 914 ujian unit, dengan pematuhan protokol MCP kekal pada 100.0% COMPLIANT, 0 ralat pada setiap pintu fasa.
Satu-satunya perubahan yang memecahkan keserasian: Node 20
engines.node beralih daripada >=18.0.0 kepada >=20.16.0.
Node 18 telah tamat hayat pada April 2025, dan 20.16 ialah had minimum yang dituntut oleh pdf-parse 2.4.5 — penulisan semula ESM yang masih diselenggara dan kami perlukan untuk menutup penemuan audit yang terakhir. Dockerfile kami (node:20-alpine) dan CI (Node 22) memang sudah memenuhinya, jadi tiada apa-apa berubah di situ. Jika anda masih menggunakan Node 18, anda kini akan melihat amaran engines semasa pemasangan.
Itu sahaja keseluruhan permukaan yang memecahkan keserasian. Tiada skema alat, bentuk output mahupun kos credits yang berubah bagi pemanggil sedia ada.
Fasa 1: lubang keselamatan yang kami tutup
Inilah fasa yang wajar dibaca dengan teliti jika anda menjalankan CrawlForge berdekatan rangkaian persendirian.
Pintasan literal IP SSRF ialah yang paling kritikal. Perlindungan kami menyelesaikan nama hos dan memeriksa alamat yang terhasil, tetapi tidak pernah menjalankan pemeriksaan yang sama pada URL yang hosnya memang sudah berupa literal IP. http://127.0.0.1/, bentuk perpuluhan 2130706433, bentuk heksadesimal 0x7f000001 — penghurai URL WHATWG menormalkan kesemuanya, dan Node tidak pernah menghalakan literal IP melalui lookup, jadi semuanya lolos begitu sahaja. v5.0.0 menjalankan ipBlocked() pada nama hos berbentuk literal IP semasa pemeriksaan awal dan membalut buildConnector milik dispatcher undici dengan pemeriksaan setiap sambungan, supaya lompatan ubah hala terus ke alamat dalaman turut disekat.
Tiga lagi pembaikan perlindungan dihantar bersamanya:
- Pengecaman IPv6 dipetakan IPv4.
::ffff:127.0.0.1dan::ffff:169.254.169.254kini dinormalkan kepada IPv4 terbenamnya sebelum pemeriksaan julat, dalam mod lalai mahupunSSRF_STRICT. Ini mematikan pintasan rekod AAAA yang dikawal DNS. BLOCKED_DOMAINSbukan lagi konfigurasi mati.config.security.ssrfProtection.blockedDomainssebelum ini diisytiharkan tetapi tidak dibaca sesiapa. Ia kini dikuatkuasakan semasa pemeriksaan awal.- Senarai benaran dinilai setiap lompatan. Sebelum ini, lompatan pertama yang dibenarkan menyebabkan setiap lompatan berikutnya hilang perlindungan.
Kami juga menyambungkan perlindungan ini kepada lima laluan yang sebelum ini langsung tidak mempunyainya: scrape_with_actions (dengan pemeriksaan semula page.url() selepas navigasi yang menutup halaman jika ubah hala mendarat dalam julat tersekat, sekali gus menutup primitif bacaan rangkaian dalaman Playwright), map_site, muat turun PDF process_document, penghantaran dan pemeriksaan kesihatan webhook, serta pemberitahuan webhook deep_research.
Selain SSRF:
- OAuth.
/oauth/authorizekini menuntut bukti pemilikan API key pengendali sebelum mengeluarkan kod, dengan perbandingan digest masa malar. Aliran tanpa nama daftar → benarkan → token yang mencetak token bearer yang dibilkan kepada pengendali kini telah ditutup. - Kebocoran rahsia. Telemetri penggunaan kini menyalurkan parameter alat melalui
maskSecrets()sebelum muatan meninggalkan proses — API key pihak ketiga, pengepala pengesahan dan rahsia penandatanganan webhook tidak lagi bergerak dalam teks biasa.deep_researchberhenti merekod API key LLM ke dalam log fail Winston. - Pengebilan. Ralat yang dilontar oleh pemeriksaan credits itu sendiri kini membilkan sifar — caj separuh pada laluan ralat hanya dikenakan setelah pengendali benar-benar bermula.
checkCreditsmembezakan 401/403 (key tidak sah atau dibatalkan) daripada 5xx (tetingkap tangguh), bukannya melaporkan kedua-duanya sebagai "credits tidak mencukupi".
Fasa 2: 52 cara alat memberikan hasil salah secara senyap
Fasa 2 menangani kategori "lulus ujian asap sambil memulangkan output yang mengelirukan". Yang utama:
crawl_deep boleh digunakan semula untuk perayapan sebenar. Halaman anak BFS sebelum ini ditunggu dari dalam slot baris gilir yang sudah diduduki, bermakna tamat masa baris gilir setiap tugasan mengehadkan keseluruhan perayapan rekursif dan bukannya satu halaman. Mana-mana perayapan yang melebihi CRAWL_TIMEOUT 30 saat akan membuang setiap halaman yang sudah diambil dengan hanya Promise timed out, dan tetapan keselarian rendah (termasuk concurrency: 1) terus buntu. Kedua-duanya telah dibaiki.
Sampel yang mewakili selebihnya:
- Kunci cache yang bercanggah dengan permintaan. Kunci cache hasil
crawl_deepkini merangkumiextract_content, panjang kandungan, corak sertakan/kecualikan,follow_external,respect_robots,concurrency, penapis domain dan sesi. Kuncimap_sitemerangkumisearch, penapis domain,include_metadatadangroup_by_path. Sebelum ini, satu panggilan yang dicache boleh bercanggah dengan parameter anda sepanjang TTL sejam penuh. - Pengekodan aksara. Badan respons kini dinyahkod mengikut set aksara yang diisytiharkan (pengepala
Content-Typeatau pengesanan<meta charset>), bukannya sentiasa menganggap UTF-8. Tiada lagi teks rosak U+FFFD daripada tapak ISO-8859-1 atau Shift_JIS. - Pilihan yang dibuang secara senyap. Skema
optionsbagiextract_content,summarize_contentdananalyze_contentkini menggunakan.passthrough(). Sebelum ini setiap kunci pilihan yang didokumentasikan dibuang sebelum sampai kepada pengendali — inilah juga sebabnyasummarize_contentsentiasa memulangkan sandaran dua ayat yang sama, tersalah label sebagaiextractive. Peringkas ekstraktif kini benar-benar berjalan, dansummaryLengthmengubah outputnya. - Penyelesaian pautan.
extract_linksmenyelesaikan href relatif terhadap URL akhir halaman dan bukannya terhadap asal, menghormati<base href>, serta mengelaskan pautan relatif protokol sebagai luaran. Pembaikan yang sama turut masuk ke pengekstrak pautanscrape, jadi kedua-duanya akhirnya sepadan. - Keserupaan
track_changes. Keserupaan kandungan kini ialah Jaccard token ke atas kandungan. Sebelum ini ia jarak Hamming antara digest heksadesimal sha256 — bermakna setiap suntingan remeh mendapat skor keserupaan sekitar 0% dan mencetuskan amaran perubahan "sederhana". - Pemarkahan
search_web.ranking_weightssepara kini bergabung secara mendalam dengan nilai lalai dan bukannya menggantikannya sepenuhnya, jadi anda tidak lagi mendapat skor akhirNaNatau pemeriksaan pendua yang dimatikan secara senyap. Percubaan semula pengembangan apabila sifar hasil dihadkan kepada satu sandaran sahaja, bukannya sehingga lima carian backend yang dibilkan.
Fasa 3: selamat dijalankan berhari-hari
Fasa 3 menutup 24 penemuan dalam kategori yang hanya muncul dalam proses jangka panjang.
Kitaran hayat pelayar. Menutup halaman Playwright tidak menutup konteksnya — jadi setiap panggilan scrape_with_actions dan setiap extract_content yang dipaparkan melalui pelayar membocorkan satu konteks sehingga proses ditutup. Konteks bukan stealth kini ditutup bersama halamannya. page.goto yang gagal (ralat DNS, tamat masa, URL disekat) sebelum ini meninggalkan satu halaman dan konteks yang masih hidup; kini kedua-duanya dileraikan.
Cache berbatas. crawl_deep memusnahkan CacheManager setiap perayapannya dalam blok finally. Sebelum ini, N perayapan membocorkan N cache secara kekal, setiap satu menyimpan sehingga 1,000 dokumen HTML penuh, dan setiap satunya menjalankan semula imbasan memori JSON.stringify setiap 60 saat selama-lamanya. Contoh yang dibuang kini disahkan melalui GC dengan ujian regresi WeakRef. Hasil batch_scrape mendapat had LRU 20 kelompok serta penyingkiran TTL.
Tarikh akhir pada setiap bacaan badan respons. Pemasa henti kini kekal aktif sepanjang strim badan respons, jadi parameter timeout akhirnya merangkumi pelayan yang memulangkan pengepala lalu tersekat pada badan. Pemasangan semula ketulan kini satu laluan sahaja — sebelum ini O(n²), kira-kira 1.5 saat sekatan gelung peristiwa segerak pada badan 25 MB. Muat turun PDF mendapat AbortSignal.timeout 30 saat yang sebenar (pilihan timeout: fetch-init yang lama diabaikan secara senyap oleh undici), dan penyedia SearXNG mendapat 15 saat berbanding lalai undici kira-kira 5 minit.
Satu pembaikan yang wajar disebut bagi pengguna Claude Desktop: storan syot kilat kini menggunakan ~/.crawlforge/snapshots secara lalai dan bukannya process.cwd(). Klien MCP seperti Claude Desktop melancarkan pelayan dengan direktori kerja /, dan di situ setiap penulisan syot kilat gagal secara senyap.
Fasa 4: penggunaan jauh dan HTTP kini benar-benar berfungsi
Jika anda pernah menggunakan CrawlForge melalui npm run start:http, keadaannya lebih buruk daripada sangkaan anda: satu pengangkutan yang dikongsi bermakna hanya satu sesi pernah wujud, dan sebarang pemutusan yang bersih melumpuhkan /mcp sehingga anda memulakan semula proses.
Mod berkeadaan kini mengikut corak setiap sesi yang didokumentasikan SDK — satu Map<sessionId, {transport, server}> dengan pengangkutan baharu dan McpServer klon bagi setiap initialize, pelupusan semasa DELETE, dan 404 JSON-RPC bagi ID sesi yang tidak dikenali. Klien serentak kedua, sambungan semula selepas talian terputus, dan DELETE diikuti initialize baharu kini semuanya berfungsi.
Turut dalam Fasa 4:
- Prompt
getting-startedsebelum ini tidak boleh diambil oleh mana-mana klien — objek konfigurasinya terkena beban lampauargsSchemaberkedudukan milik SDK, mengisytiharkan argumen wajib yang tidak wujud dan menggagalkan setiapprompts/get. Kini dibaiki, dan suite pematuhan turut merangkumi penemuan serta pengambilan bagi kesemua 6 prompt berdaftar. - Tandatangan HMAC webhook kini merangkumi tepat muatan bersiri yang dihantar melalui POST. Sebelum ini hanya sub-objek
dataditandatangani, jadi pengesahan badan mentah standard di pihak penerima gagal setiap kali. scrapetidak lagi menyisipkan bait base64 syot layar bersaiz beberapa megabait ke dalam hasil JSON — setelah disimpan, hasilnya hanya mengekalkan metadata dan URI sumbercrawlforge://screenshot/{id}.- Sepanduk status persediaan automatik dipindahkan daripada stdout ke stderr, jadi pelancaran pertama dengan
CRAWLFORGE_API_KEYditetapkan tidak lagi menyuntik baris bukan JSON ke dalam saluran JSON-RPC stdio. search_webkembali kepada API key dalam~/.crawlforge/config.jsonapabilaCRAWLFORGE_API_KEYtiada. Pengguna yang dikonfigurasikan melaluinpm run setupsebelum ini lulus pemeriksaan credits lalu terus menemui kegagalan penyesuai yang pasti — dicaj separuh pada kadar 2 credits setiap panggilan.
Fasa 5: sifar kerentanan npm audit
Dengan had minimum Node 20 sudah ditetapkan, Fasa 5 menyingkirkan setiap kebergantungan yang ditinggalkan dan mengambil naik taraf keselamatan yang sebelum ini disekat oleh had lama. npm audit turun daripada 4 sederhana kepada 0.
Dibuang terus: node-cron (tidak digunakan sejak Fasa 3 memindahkan penjadualan pemantau kepada pemasa setInterval; pembuangannya turut membersihkan rantaian uuid yang rentan), @googleapis/customsearch (tidak digunakan — penyesuai Google memanggil hujung REST secara terus), dan node-summarizer (ditinggalkan sejak 2019; peringkas ekstraktif ditulis semula sebagai pemarkah kekerapan perkataan gaya Luhn berasaskan compromise, dengan bentuk hasil yang sama).
Naik taraf yang paling penting: pdf-parse 1.1.1 → 2.4.5. PDFProcessor dipindahkan ke API kelas v2, bermakna pilihan password kini benar-benar menyahsulit PDF yang dilindungi — v1 mengabaikannya secara senyap. Pengekstrakan julat halaman menggunakan pengekstrakan teks separa asli v2, dan bendera metadata tersulit membaca EncryptFilterName sebenar milik pdfjs-dist.
Mengenai rantaian bekalan: fasa ini berjalan semasa cacing npm ChainDrop (aktif sejak 4 Ogos 2026). Setiap pemasangan dijalankan dengan --ignore-scripts, setiap versi yang diguna pakai dihadkan mengikut tarikh penerbitan sebelum 4 Ogos 2026, dan perbezaan lockfile penuh disemak silang dengan senarai pakej terjejas Socket dan StepSecurity tanpa sebarang padanan. Imbasan IoC bersih sebelum dan selepas.
Fasa 6: penggunaan spesifikasi MCP
Fasa terakhir membawa CrawlForge selari dengan spesifikasi MCP semasa.
Output berstruktur (MCP 2025-06-18). scrape, map_site, serp_rank, search_web, extract_structured dan crawl_deep kini mengisytiharkan outputSchema dan memulangkan structuredContent di samping teks JSON warisan. Skema tersebut longgar secara reka bentuk, jadi hasil yang sah tidak mungkin gagal pengesahan output SDK.
Tugasan tak segerak. crawl_deep, batch_scrape, deep_research dan agent didaftarkan dengan taskSupport: 'optional' di bawah sambungan io.modelcontextprotocol/tasks. Klien yang menyokong tugasan menerima pemegang serta-merta dan menyoal tasks/get; klien tanpa sokongan tugasan tetap menerima hasil segerak seperti sebelumnya. Inilah penyelesaian bagi perayapan panjang yang tamat masa dalam tetingkap panggilan alat sesebuah klien.
Pemilihan alat di pihak klien. Dua pemboleh ubah persekitaran baharu membolehkan anda mendedahkan sebahagian sahaja daripada 27 alat dan mengurangkan lambakan konteks:
# By name
CRAWLFORGE_TOOLS=scrape,search_web,extract_content
# Or by group — 12 available: basic, search, crawl, extract, batch,
# research, tracking, llmstxt, stealth, templates, scrape, agent
CRAWLFORGE_TOOL_GROUPS=search,extractJika tidak ditetapkan, semua alat didedahkan. Nama yang tidak dikenali diabaikan dengan amaran stderr, batch_scrape mengaktifkan get_batch_results secara automatik, dan sepanduk permulaan melaporkan berapa banyak yang diaktifkan daripada jumlah keseluruhan.
Kebersihan protokol. Skema alat kini diisytiharkan dalam JSON Schema 2020-12 dan bukannya draft-07. tools/list disusun secara deterministik demi kestabilan cache prompt klien. Argumen alat yang tidak sah kini dipulangkan sebagai hasil isError: true — yang boleh diperbetulkan sendiri oleh model pemanggil — dan bukannya ralat protokol -32602. Ikon disertakan pada serverInfo, setiap alat dan setiap prompt.
Pendaftaran MCP. server.json telah lengkap mengikut skema pendaftaran 11 Disember 2025, dengan aliran kerja penerbitan OIDC GitHub yang menolak ke registry.modelcontextprotocol.io pada keluaran seterusnya.
Baharu sejak v4.8.0: serp_rank dan panduan alat
Jika naik taraf terakhir anda ialah v4.8.0, dua keluaran kecil telah mendarat di antaranya.
v4.9.0 menambah serp_rank, alat ke-27 — kedudukan organik Google sebenar melalui DataForSEO, pada kadar 5 credits bagi setiap carian yang dikonfigurasikan. v4.10.0 menjadikannya memulangkan senarai organik sepuluh teratas yang penuh di samping kedudukan domain sasaran anda.
v4.10.0 turut menambah instructions peringkat pelayan dalam MCP. Pelayan kini memberitahu mana-mana klien yang bersambung supaya mengutamakan alat CrawlForge berbanding keupayaan web terbina dalamnya sendiri untuk carian, pengambilan, perayapan dan penyelidikan. Oleh sebab ia dihantar bersama binari pelayan, setiap klien MCP menerimanya secara automatik pada pelancaran seterusnya selepas naik taraf — tanpa perlu menjalankan init semula. Ia panduan, bukan penguatkuasaan: sebuah MCP server tidak boleh mematikan alat terbina dalam sesebuah klien.
Harga: 27 alat bermeter, tidak berubah
Tiada harga berubah dalam v5.0.0. Kesemua 27 alat adalah bermeter dan memerlukan API key, pada kadar 1 hingga 10 credits setiap panggilan.
| Pelan | Harga | Credits |
|---|---|---|
| Free | sekali sahaja (tanpa kad) | 1,000 credits percubaan |
| Hobby | $19/bulan | 5,000 |
| Professional | $99/bulan | 50,000 |
| Business | $399/bulan | 250,000 |
Setiap pelan merangkumi setiap alat. Pengekstrakan LLM menggunakan Ollama tempatan secara lalai, jadi anda tidak memerlukan key OpenAI atau Anthropic melainkan anda memilih untuk menggunakannya.
Cara menaik taraf
Semak versi Node anda dahulu — inilah satu-satunya perkara yang boleh menyusahkan anda:
node --version # must be >= 20.16.0Kemudian:
npm install -g crawlforge-mcp-server@latestPengguna baharu:
npm install -g crawlforge-mcp-server
npx crawlforge initPengguna klien MCP sedia ada juga boleh sekadar mencetuskan sambungan semula /mcp. Oleh sebab Fasa 2 membaiki tingkah laku alat dan bukannya skema alat, panggilan sedia ada anda terus berfungsi — cuma kini ia memulangkan hasil yang betul.
Apa yang seterusnya
Beberapa trek Fasa 6 sengaja ditangguhkan dan bukannya digesa: hujung jauh terhos dengan OAuth, peringkat tanpa key, pemantauan berjadual sebagai perkhidmatan, sesi berkekalan, dan penyuntingan PII. Migrasi SDK v2 pula beratur di belakang keputusan mengenai had minimum Node 22.
Sementara itu, jemputan daripada v4.8.0 masih berdiri. Jika anda menemui kawalan yang tidak berkelakuan seperti yang didakwa dokumentasi, itulah pepijat yang benar-benar ingin kami dengar.
Sedia mencubanya? Mulakan percuma dengan 1,000 credits — kemudian jalankan npx crawlforge init untuk mendaftarkan MCP server. Lihat dokumentasi penuh, rujukan serp_rank, atau catatan keluaran v4.8.0 untuk melihat apa yang datang sebelum ini.
Cuba sendiri — tiada pendaftaran diperlukan
Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.
1,000 credits percuma • Sekali sahaja • Tiada kad kredit diperlukan
Tag
Tentang Penulis
Kekal dikemas kini dengan pandangan terkini
Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.
Tiada spam. Berhenti melanggan bila-bila masa.