crw-migrate
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesecrw-migrate — Coming from Firecrawl?
crw-migrate — 从Firecrawl迁移?
Switch in one line. The v2 API is a drop-in for the official v4 SDK
and — swap the base URL and keep your code.
firecrawl-pyfirecrawl-js只需一行代码即可切换。v2 API可直接替代官方 v4 SDK和——只需替换基础URL,代码无需改动。
firecrawl-pyfirecrawl-jsWhen to use
使用场景
- You have existing Firecrawl SDK code or REST calls you want to repoint.
- You're replacing a entry in your MCP config.
firecrawl-mcp-server - You want to know exactly which Firecrawl endpoints are covered vs. which need adaptation.
- 您已有Firecrawl SDK代码或REST调用,希望将其指向新服务。
- 您需要替换MCP配置中的条目。
firecrawl-mcp-server - 您想明确了解哪些Firecrawl端点可直接兼容,哪些需要适配。
The one-line swap
一行代码替换
firecrawl-py v4 (Python SDK)
firecrawl-py v4(Python SDK)
Managed fastCRW:
python
from firecrawl import FirecrawlApp
app = FirecrawlApp(
api_url="https://api.fastcrw.com",
api_key="crw_live_..."
)Self-hosted fastCRW (default port 3000, no auth):
python
app = FirecrawlApp(
api_url="http://localhost:3000",
api_key="any" # self-host ignores the key when auth is not configured
)托管版fastCRW:
python
from firecrawl import FirecrawlApp
app = FirecrawlApp(
api_url="https://api.fastcrw.com",
api_key="crw_live_..."
)自托管版fastCRW(默认端口3000,无认证):
python
app = FirecrawlApp(
api_url="http://localhost:3000",
api_key="any" # 未配置认证时,自托管版本会忽略密钥
)firecrawl-js (TypeScript/Node SDK)
firecrawl-js(TypeScript/Node SDK)
ts
import FirecrawlApp from "@mendable/firecrawl-js";
const app = new FirecrawlApp({
apiUrl: "https://api.fastcrw.com", // or "http://localhost:3000"
apiKey: "crw_live_...",
});ts
import FirecrawlApp from "@mendable/firecrawl-js";
const app = new FirecrawlApp({
apiUrl: "https://api.fastcrw.com", // 或 "http://localhost:3000"
apiKey: "crw_live_...",
});REST / curl
REST / curl
Replace with (or your
self-hosted ). Auth header stays the same:
.
https://api.firecrawl.devhttps://api.fastcrw.comhttp://localhost:3000Authorization: Bearer <key>bash
undefined将替换为(或您的自托管地址)。认证头保持不变:。
https://api.firecrawl.devhttps://api.fastcrw.comhttp://localhost:3000Authorization: Bearer <key>bash
undefinedBefore
切换前
curl -X POST https://api.firecrawl.dev/v1/scrape
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
curl -X POST https://api.firecrawl.dev/v1/scrape
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
After — change exactly two things: host + key
切换后 — 只需修改两处:主机地址 + 密钥
curl -X POST https://api.fastcrw.com/v1/scrape
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
undefinedcurl -X POST https://api.fastcrw.com/v1/scrape
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
-H "Authorization: Bearer crw_live_..."
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}'
undefinedCompatibility matrix
兼容性矩阵
Drop-in endpoints (no code change needed)
可直接兼容的端点(无需修改代码)
| Endpoint | Notes |
|---|---|
| Full markdown/html/links/json formats, |
| Async BFS crawl, polling shape matches |
| URL discovery |
| Own search backend instead of Fire-engine; same response shape |
| v2 surface with |
| v2 crawl |
| v2 map |
| v2 search |
| Batch scrape |
| PDF → markdown (see gaps below) |
| 端点 | 说明 |
|---|---|
| 支持完整的markdown/html/links/json格式,以及 |
| 异步广度优先爬取,轮询格式完全匹配 |
| URL发现功能 |
| 使用独立搜索后端而非Fire-engine;响应格式一致 |
| 带有 |
| v2版本爬取功能 |
| v2版本URL发现功能 |
| v2版本搜索功能 |
| 批量爬取功能 |
| PDF转markdown(详见下方差异点) |
Gaps — what needs adaptation
差异点 — 需要适配的功能
| Firecrawl feature | fastCRW equivalent | Action |
|---|---|---|
| Supported. Async: returns a job id, poll | None, but switch to polling if you port the route as-is. |
| Supported. Pass | None. |
| Not implemented — cloud-only Firecrawl feature. | No equivalent. |
| Not implemented. | No equivalent. |
| PDF only. fastCRW uses | Keep Firecrawl for non-PDF docs, or convert to PDF first. |
| Accepted for wire-compat; degrades to text-layer extraction with a | If OCR is required, keep Firecrawl. |
MCP tool names | fastCRW MCP uses | Update MCP config. |
| Fire-engine anti-bot | Not available. fastCRW uses LightPanda → Chrome stealth ladder. | For heavy Cloudflare sites, test coverage; consider proxy pool. |
| Firecrawl功能 | fastCRW等效方案 | 操作建议 |
|---|---|---|
| 已支持。异步模式:返回任务ID,需轮询 | 无需修改,但如果直接迁移该接口,需切换为轮询模式。 |
| 已支持。传入 | 无需修改。 |
| 未实现 — Firecrawl专属云功能。 | 无等效方案。 |
| 未实现。 | 无等效方案。 |
| 仅支持PDF。fastCRW使用 | 非PDF文档需继续使用Firecrawl,或先转换为PDF格式。 |
| 为兼容保留参数;会降级为文本层提取,并返回 | 若需要OCR功能,需继续使用Firecrawl。 |
MCP工具名称 | fastCRW MCP使用 | 更新MCP配置。 |
| Fire-engine反爬机制 | 不可用。fastCRW使用LightPanda → Chrome隐身阶梯方案。 | 针对受Cloudflare严格保护的站点,需测试覆盖情况;可考虑使用代理池。 |
jsonSchema
alias
jsonSchemajsonSchema
别名
jsonSchemaFirecrawl's uses . fastCRW's accepts
both the top-level field and the alias for
closer Firecrawl parity:
/v1/extractextract.schema/v1/scrapejsonSchemaextract.schemajson
{
"url": "https://example.com",
"formats": ["json"],
"jsonSchema": {
"type": "object",
"properties": { "title": { "type": "string" } }
}
}Requires configured in (or
env var). See crw-self-host.
[extraction.llm]config.tomlCRW_EXTRACTION__LLM__API_KEYFirecrawl的使用。fastCRW的同时支持顶层字段和别名,以实现与Firecrawl更高的兼容性:
/v1/extractextract.schema/v1/scrapejsonSchemaextract.schemajson
{
"url": "https://example.com",
"formats": ["json"],
"jsonSchema": {
"type": "object",
"properties": { "title": { "type": "string" } }
}
}需在中配置(或设置环境变量)。详见crw-self-host。
config.toml[extraction.llm]CRW_EXTRACTION__LLM__API_KEYSwitching your MCP config
切换MCP配置
Firecrawl MCP uses ; fastCRW's MCP server is .
Tool names change from to :
firecrawl-mcp-servercrw-mcpfirecrawl_*crw_*| Firecrawl MCP tool | fastCRW MCP tool |
|---|---|
| |
| |
| |
| |
| |
| |
| — | |
Firecrawl MCP使用;fastCRW的MCP服务器为。工具名称从改为:
firecrawl-mcp-servercrw-mcpfirecrawl_*crw_*| Firecrawl MCP工具 | fastCRW MCP工具 |
|---|---|
| |
| |
| |
| |
| |
| |
| — | |
Claude Code — replace in ~/.claude/claude_desktop_config.json
(or settings)
~/.claude/claude_desktop_config.jsonClaude Code — 在~/.claude/claude_desktop_config.json
(或设置界面)中替换
~/.claude/claude_desktop_config.jsonjson
{
"mcpServers": {
"crw": {
"command": "npx",
"args": ["crw-mcp"],
"env": {
"CRW_API_URL": "https://api.fastcrw.com",
"CRW_API_KEY": "crw_live_..."
}
}
}
}For self-hosted (no auth, no env needed):
json
{
"mcpServers": {
"crw": {
"command": "npx",
"args": ["crw-mcp"]
}
}
}Embedded mode ( with no ) runs the engine in-process
— zero server to stand up, ~6 MB RAM.
npx crw-mcpCRW_API_URLjson
{
"mcpServers": {
"crw": {
"command": "npx",
"args": ["crw-mcp"],
"env": {
"CRW_API_URL": "https://api.fastcrw.com",
"CRW_API_KEY": "crw_live_..."
}
}
}
}自托管版(无认证,无需设置环境变量):
json
{
"mcpServers": {
"crw": {
"command": "npx",
"args": ["crw-mcp"]
}
}
}嵌入模式(执行且不设置)会在进程内运行引擎——无需启动独立服务器,仅占用约6MB内存。
npx crw-mcpCRW_API_URLVerify the swap — checklist
验证切换完成 — 检查清单
Run these after pointing at fastCRW. Each should return :
"success": truebash
undefined指向fastCRW后运行以下命令,每个命令应返回:
"success": truebash
undefined1. Health check (no auth)
1. 健康检查(无需认证)
→ {"status":"ok",...}
→ {"status":"ok",...}
2. Basic scrape
2. 基础爬取
curl -X POST "$CRW_API_URL/v1/scrape"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}' | jq .success
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}' | jq .success
curl -X POST "$CRW_API_URL/v1/scrape"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}' | jq .success
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com","formats":["markdown"]}' | jq .success
→ true
→ true
3. Map (URL discovery)
3. URL发现
curl -X POST "$CRW_API_URL/v1/map"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com"}' | jq '.data | length'
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com"}' | jq '.data | length'
curl -X POST "$CRW_API_URL/v1/map"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com"}' | jq '.data | length'
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"url":"https://example.com"}' | jq '.data | length'
→ N (should be > 0)
→ N(应大于0)
4. Search (requires a search backend — managed always works; self-host needs sidecar)
4. 搜索(需搜索后端支持——托管版始终可用;自托管版需要配套服务)
curl -X POST "$CRW_API_URL/v1/search"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"query":"fastCRW scraper","limit":3}' | jq .success
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"query":"fastCRW scraper","limit":3}' | jq .success
curl -X POST "$CRW_API_URL/v1/search"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"query":"fastCRW scraper","limit":3}' | jq .success
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{"query":"fastCRW scraper","limit":3}' | jq .success
→ true
→ true
5. Structured extraction (requires [extraction.llm] configured)
5. 结构化提取(需配置[extraction.llm])
curl -X POST "$CRW_API_URL/v1/scrape"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{ "url":"https://example.com", "formats":["json"], "jsonSchema":{"type":"object","properties":{"title":{"type":"string"}}} }' | jq '.data.json'
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{ "url":"https://example.com", "formats":["json"], "jsonSchema":{"type":"object","properties":{"title":{"type":"string"}}} }' | jq '.data.json'
Compare the `data.markdown` / `data.metadata` shape from your existing
Firecrawl responses — the field names on the overlap surface (`title`,
`description`, `sourceURL`, `statusCode`) match. A few metadata sub-fields
diverge; inspect with `jq .data.metadata` if your code reads specific keys.curl -X POST "$CRW_API_URL/v1/scrape"
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{ "url":"https://example.com", "formats":["json"], "jsonSchema":{"type":"object","properties":{"title":{"type":"string"}}} }' | jq '.data.json'
-H "Authorization: Bearer $CRW_API_KEY"
-H "Content-Type: application/json"
-d '{ "url":"https://example.com", "formats":["json"], "jsonSchema":{"type":"object","properties":{"title":{"type":"string"}}} }' | jq '.data.json'
对比现有Firecrawl响应中的`data.markdown` / `data.metadata`格式——重叠字段(`title`、`description`、`sourceURL`、`statusCode`)的名称一致。部分元数据子字段存在差异;如果您的代码读取特定键值,请使用`jq .data.metadata`检查。See also
扩展阅读
- crw-self-host — stand up your own crw server + search backend
- crw-best-practices — SDK patterns, error handling, batching
- crw — hub skill, full verb ladder
- crw-self-host — 搭建自己的crw服务器+搜索后端
- crw-best-practices — SDK使用模式、错误处理、批量操作
- crw — 核心技能汇总、完整功能说明