关于 Spicrawl
Spicrawl 是面向需要网页内容或结构化数据的 Agent 的网页抓取 MCP 服务。它支持 JavaScript 渲染、浏览器操作、持久会话,以及最多处理 10,000 个 URL 的异步批量任务。
主要功能
- 01将网页抓取为 Markdown、文本、HTML 或 JSON
- 02渲染 JavaScript 并操作页面
- 03通过选择器或自动解析提取数据
- 04最多处理 10,000 个 URL 的批量任务
- 05持久浏览器会话与截图
适用场景
- 01读取依赖 JavaScript 的网页
- 02收集结构化商品价格
- 03抓取文档并用于知识库
- 04从大量 URL 收集列表信息
MCP 相关
通过托管的 Streamable HTTP 端点或本地 stdio 服务,向 MCP 客户端提供 `spicrawl_*` 工具。工具涵盖网页抓取、批量任务、浏览器会话、用量、请求历史和文档。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.spicrawl.com/mcpclaude mcp add --transport http officialspicrawl https://mcp.spicrawl.com/mcp{"mcpServers":{"officialspicrawl":{"type":"http","url":"https://mcp.spicrawl.com/mcp"}}}在 Cursor 中打开{"servers":{"officialspicrawl":{"type":"http","url":"https://mcp.spicrawl.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"officialspicrawl":{"type":"http","url":"https://mcp.spicrawl.com/mcp"}}}{"mcpServers":{"officialspicrawl":{"serverUrl":"https://mcp.spicrawl.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.spicrawl.com/mcp需要授权工具
24| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要获取的绝对 URL。 |
| mode | enum | 否 | 路由模式。`auto` 会在需要时由平台将请求升级为 fetch -> browser,并且只按成功的级别计费。auto |
| wait | integer | 否 | 加载后、捕获前等待的毫秒数(仅渲染时)。 |
| cache | boolean | 否 | 如果近期缓存结果仍然新鲜,则提供该结果(默认开启)。命中缓存的费用与存储该结果的抓取费用相同:缓存节省时间,不节省额度。仅在需要实时数据时设为 false。 |
| links | boolean | 否 | 同时以绝对 URL 去重列表的形式返回页面发现的链接。 |
| proxy | string | 否 | 用于出口流量的自有代理 URL。优先于代理池;不收取附加费。 |
| format | enum | 否 | 输出格式。'markdown'(默认)最适合馈送给 LLM;'html' 返回原始文档;'json' 返回结构化封装;'pdf' 会在完整浏览器中打印页面(系统会为你路由到该浏览器),并将文件作为资源内容块返回。markdown | text | html | json | pdf |
| method | string | 否 | 发送到目标的 HTTP 方法(默认 GET;不能发送请求正文)。除 GET、HEAD 或 OPTIONS 外,任何方法都可能更改目标网站的状态:仅在用户要求时使用。 |
| render | boolean | 否 | 使用真实浏览器渲染(执行 JavaScript)。适用于单页应用或内容由客户端绘制的页面。费用高于默认 fetch 级别。 |
| actions | array | 否 | 捕获前按顺序运行的浏览器步骤(仅渲染时)。每个步骤的形式为 {type, ...fields}。示例:[{"type":"click","selector":"#load-more"},{"type":"wait_for","selector":".item:nth-child(20)","timeout_ms":5000}] · 无限滚动:[{"type":"scroll","to_bottom":true},{"type":"wait_for","ms":1000}] · 登录:[{"type":"fill","selector":"#user","value":"me"},{"type":"fill","selector":"#pass","value":"…","secret":true},{"type":"click","selector":"button[type=submit]","wait_for_navigation":true}]。截图步骤会将响应切换为 JSON 封装(FORMAT_COERCED 警告会说明这一点)。 |
| extract | object | 否 | 基于选择器提取:字段 -> CSS/XPath 选择器的映射,例如 {"title":"h1","price":".amount"}。返回结构化的 `data`。了解页面结构时,这种方式精准且成本低。 |
| max_cost | integer | 否 | 如果请求费用超过此额度数,则拒绝请求,而不是执行。 |
| wait_for | string | 否 | 捕获前等待的 CSS 选择器(仅渲染时)。 |
| autoparse | boolean | 否 | 返回页面自行发布的结构化数据(JSON-LD、OpenGraph、Twitter Card、microdata)。无需选择器;页面改版后仍然有效。 |
| cache_ttl | integer | 否 | 可接受的缓存副本最大年龄(秒)(0 表示强制重新抓取;上限为 48h)。仅控制新鲜度:命中缓存的费用与抓取相同。 |
| parse_pdf | boolean | 否 | 将 PDF 目标转换为文本/markdown(默认 true)。false 表示拒绝处理 PDF。 |
| screenshot | boolean | 否 | 捕获屏幕截图(需要 render)。 |
| session_id | string | 否 | 在 spicrawl_session_create 创建的会话中运行:多次调用之间使用相同的出口 IP 和浏览器状态(cookies、localStorage)。 |
| impersonate | boolean | 否 | 仅适用于 fetch 级别:提供真实浏览器的 TLS/JA3 + HTTP/2 指纹,以绕过被动机器人检测。默认开启;设为 false 可发送普通客户端握手。 |
| exclude_tags | array | 否 | 要移除的 CSS 选择器(例如 ['nav','.ad','#cookie'])。 |
| include_tags | array | 否 | 要保留的 CSS 选择器(其余内容都会被丢弃)。 |
| proxy_verify | boolean | 否 | 使用 `proxy` 前,验证其是否可访问。 |
| custom_headers | object | 否 | 发送到目标的额外请求标头,例如 {"Accept-Language":"de"}。 |
| block_resources | array | 否 | 浏览器不应加载的资源类型,例如 ["fonts","media","images"](仅渲染模式)。速度更快、成本更低。 |
| network_capture | object | 否 | 记录页面在渲染期间获取的 API 响应——其 JSON 往往比 DOM 更简洁。仅渲染模式。 |
| network_capture.urls | array | 否 | 要记录的页面自身请求的 URL 模式。 |
| network_capture.max_responses | integer | 否 | 记录响应的数量上限。 |
| network_capture.include_bodies | boolean | 否 | 包含响应正文。 |
| network_capture.max_body_bytes | integer | 否 | 每个响应正文的大小上限。 |
| network_capture.resource_types | array | 否 | 要记录的资源类型,例如 ["xhr","fetch"]。 |
| original_status | boolean | 否 | 成功抓取时,返回目标自身的 HTTP 状态码,而不是 200。 |
| wait_for_timeout | integer | 否 | 等待 `wait_for` 的最长毫秒数。 |
| main_content_only | boolean | 否 | 将页面精简为主要文章,删除导航栏、页脚和侧栏。Markdown 格式默认启用。 |
| screenshot_format | string | 否 | 截图图像格式。 |
| screenshot_quality | integer | 否 | 截图质量,范围为 1–100(有损格式)。 |
| screenshot_fullpage | boolean | 否 | 截取整个页面,而不仅是视口。 |
| screenshot_selector | string | 否 | 仅捕获与此 CSS 选择器匹配的元素。 |
| allowed_status_codes | array | 否 | 将目标状态码视为成功而非错误,例如使用 [404] 来捕获未找到页面。 |
详细介绍
Spicrawl MCP 服务:为 Claude、Cursor 和 AI Agent 提供网页抓取
若要让 Claude、Cursor 或其他 AI Agent 抓取网站,请连接 Spicrawl MCP 服务。添加托管端点 https://mcp.spicrawl.com/mcp(或在本地运行 npx -y @spicrawl/mcp),并提供 Spicrawl API 密钥,Agent 就可以调用 spicrawl_scrape,以 Markdown、文本、HTML 或 JSON 格式读取任意 URL。它可以渲染 JavaScript 页面、提取结构化数据、在单个批量任务中抓取最多 10,000 个 URL、截图并保留已登录的浏览器会话;所有功能都以原生 spicrawl_* 工具的形式提供,可在 Claude Code、Claude Desktop、Cursor、VS Code、Windsurf、Gemini CLI 和 Codex 中使用。免费套餐每月包含 1,000 个积分。
文档 · 获取 API 密钥 · TypeScript SDK · 命令行工具 · Agent 插件 · 更新日志
安装来源: npm · Smithery · Glama · MCP Registry · Dify 插件 · Cursor Directory
## 快速入门-
在 app.spicrawl.com 创建 API 密钥。密钥以
spicrawl_live_或spicrawl_test_开头。 -
连接托管端点
https://mcp.spicrawl.com/mcp(MCP Streamable HTTP,无需安装):export SPICRAWL_API_KEY=spicrawl_live_... claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \ --header "Authorization: Bearer $SPICRAWL_API_KEY"Codex:
codex mcp add spicrawl --url https://mcp.spicrawl.com/mcp --bearer-token-env-var SPICRAWL_API_KEY -
或者通过 stdio 在本地运行(Node.js 20+),适用于只能启动本地服务的客户端:
claude mcp add spicrawl --env SPICRAWL_API_KEY=$SPICRAWL_API_KEY -- npx -y @spicrawl/mcp -
向你的 Agent 提问:“使用 Spicrawl 将 https://example.com/pricing 读取为 Markdown,并列出每个套餐及其价格。” 它会调用
spicrawl_scrape,并以 Markdown 格式返回页面。
两种传输方式都提供相同的 spicrawl_* 工具(共定义了 25 个;在远程浏览器上线之前,托管端点会列出 24 个,见工具),并且每次调用都使用你的密钥,具有与直接 API 调用相同的权限范围、限制和额度。
功能介绍
- 将任意 URL 抓取为 Markdown、文本、HTML、JSON 信封或打印版 PDF,只需使用一个工具
spicrawl_scrape。默认格式为 Markdown,并会将页面精简为主要内容。 - 使用
render: true渲染 JavaScript(3 个额度)。普通抓取需 1 个额度;截图、PDF 和actions使用完整浏览器(8 个额度);mode: "auto"则会在普通抓取无效时升级到浏览器,并且只按成功的级别计费(价格表)。你无需自行选择渲染方式;Spicrawl 会选择能够满足请求的最低成本方案。 - 使用 CSS/XPath 选择器映射(
extract)提取结构化数据,或提取页面公开的 JSON-LD、OpenGraph、Twitter Card 和微数据(autoparse)。 - 在采集前通过 8 种类型化浏览器操作控制页面:
click、fill、wait_for、wait_for_navigation、scroll(包括无限滚动)、select、evaluate和screenshot。 - 返回模型可查看的截图和 PDF:截图以 MCP 图像块形式返回(每张最大 5 MB 的 base64),打印页面则以
application/pdf资源块形式返回(最大 10 MB)。 - 批量抓取数千个 URL,作为一个异步任务,每次调用最多可处理 10,000 项。提供 9 个工具,用于提交任务、轮询、分页获取结果、重试、取消任务,以及保持任务开放以便发现更多 URL 后追加。
- 使用持久会话保持浏览器登录状态:Cookie、存储数据和固定的渲染级别会在多次抓取间复用。
- 使用用量和请求日志工具回答“这花了多少钱?”,并可在 Agent 内部阅读 Spicrawl 文档。
使用场景
- 将文档抓取到 RAG 知识库。 使用
spicrawl_scrape将文档页面读取为简洁的 Markdown(Markdown 默认启用main_content_only),或者通过一个spicrawl_batch_submit任务一次性排队处理最多 10,000 个 URL。Spicrawl 返回 Markdown;分块和嵌入由你负责。参见知识库指南。 - 监控价格。 使用
extract选择器映射或autoparse获取产品标题、价格和库存情况,并设置cache: false以获取最新信息。普通抓取需 1 个额度,渲染抓取需 3 个额度。按你自己的计划运行。参见价格监控。 - 提取招聘信息。 从招聘网站收集职位信息,包括无限滚动页面(使用
render: true和scroll操作),并将其提取为结构化字段。参见招聘信息。 - 读取 JavaScript 密集型页面。 当普通抓取返回空壳页面时,调用
spicrawl_scrape并设置render: true(3 个额度),让页面先完成构建。
抓取前,请检查各网站的服务条款和 robots.txt。
使用哪个工具
- 如果现在需要某个页面的内容或数据,请使用
spicrawl_scrape。 - 如果页面为空白,或是没有 JavaScript 的骨架页面,请再次调用
spicrawl_scrape,并设置render: true。 - 如果你了解页面结构,请使用带 CSS 选择器的
extract;如果不了解,请尝试autoparse。 - 如果 URL 超过约 20 个,请使用
spicrawl_batch_submit,然后调用spicrawl_batch_status和spicrawl_batch_results。 - 如果你在处理过程中发现 URL,请使用
open: true提交,并通过spicrawl_batch_add_items追加,最后调用spicrawl_batch_close。 - 如果必须先登录,请使用
spicrawl_session_create,并将其id作为session_id传给spicrawl_scrape。 - 如果调用失败且你需要了解原因,请使用请求 ID 调用
spicrawl_request_get,或使用only_errors调用spicrawl_requests_list。 - 如果你不确定某个参数或错误代码,请先使用
spicrawl_docs_search,不要猜测。
工具
共有 25 个工具,按任务分组。托管端点会列出 24 个工具,直到远程浏览器启动:无密钥的 tools/list 和服务卡片不会列出 spicrawl_browser_connect_url(即将推出),而使用你的密钥打开的会话和 stdio 包(npx -y @spicrawl/mcp)会列出全部 25 个工具。工具会拒绝未知参数,因此字段拼写错误时会报错并指出字段名称,而不是悄然忽略。每个工具都设有 title,并明确标注 readOnlyHint、destructiveHint 和 openWorldHint,让客户端知道哪些调用需要确认:spicrawl_scrape 不是只读工具(其 method 和 actions 可以提交表单),而 spicrawl_batch_cancel、spicrawl_session_release 和 spicrawl_session_delete 具有破坏性。每个工具还声明了 outputSchema,并会在原有文本之外返回与之匹配的 structuredContent,因此客户端可以读取字段(credits、status、next_cursor 等),而无需解析文本。架构会列出 Agent 可以依赖的内容,同时保持开放:API 日后新增的字段会原样传递,状态和层级则是普通字符串。返回文档或 JSON 数组的工具(spicrawl_docs_read、spicrawl_batch_task_content)会将其置于 structuredContent 下的 content 中。完整参数参考:docs.spicrawl.com/agents/mcp。
将网站抓取为 Markdown
| 工具 | 功能 | 关键参数 |
|---|---|---|
spicrawl_scrape | 将单个 URL 获取为 markdown(默认)、text、html、json 或 pdf,并可选择渲染、提取内容、获取链接、截图和执行浏览器操作。 | url、format、render、mode、main_content_only、include_tags、exclude_tags、extract、autoparse、links、screenshot、actions、wait_for、session_id、proxy、cache、max_cost |
批量抓取多个 URL
| 工具 | 功能 | 关键参数 |
|---|---|---|
spicrawl_batch_submit | 使用共享设置,将多个 URL 排入一个异步任务;返回包含 estimated_credits 的任务信息。 | urls 或 items、render、format、open、max_attempts、credit_budget、max_cost |
spicrawl_batch_list | 按时间从新到旧列出项目的批量任务。 | status、limit(最大值为 200)、cursor |
spicrawl_batch_status | 查看单个任务的状态和进度。 | job_id |
spicrawl_batch_results | 获取已完成项目的一页结果;任务运行期间也可使用。 | job_id、status、limit(最大值为 5000)、cursor |
spicrawl_batch_task_content | 获取单个项目的完整负载。 | job_id、seq |
spicrawl_batch_cancel | 取消任务;已完成项目仍会保留结果。 | job_id |
spicrawl_batch_retry | 将所有失败项目重新排入队列。 | job_id |
spicrawl_batch_add_items | 向使用 open: true 提交的任务追加 URL。 | job_id、urls 或 items |
spicrawl_batch_close | 停止向开放任务添加项目,以便任务完成。 | job_id |
浏览器会话
| 工具 | 作用 | 关键参数 |
|---|---|---|
spicrawl_session_create | 创建持久化浏览器身份(Cookie、存储空间和固定的渲染等级)。 | engine、ttl_seconds、session_context |
spicrawl_session_list | 按创建时间从新到旧列出会话。 | status、engine、limit、cursor |
spicrawl_session_get | 查看单个会话的状态、渲染等级、出口、用量和过期时间。 | session_id |
spicrawl_session_context | 转储活动会话的 Cookie 和存储空间(包含机密信息)。 | session_id |
spicrawl_session_release | 结束会话;其记录会保留为 released 状态。 | session_id |
spicrawl_session_delete | 永久删除会话及其状态。 | session_id |
用量和请求历史
| 工具 | 作用 | 关键参数 |
|---|---|---|
spicrawl_usage | 查询日期范围内可用于计费的用量(read 范围)。 | from、to、group_by、metrics |
spicrawl_usage_summary | 当前周期的总用量(read 范围)。 | 无 |
spicrawl_usage_reconciliation | 查看请求日志与计费汇总之间某一天的差异(read 范围)。 | day |
spicrawl_requests_list | 查看近期 API 调用及其状态、错误代码、渲染等级、延迟和额度。 | only_errors、status、limit、all_projects |
spicrawl_request_get | 查看单次调用的完整日志记录。 | id |
文档
| 工具 | 作用 | 关键参数 |
|---|---|---|
spicrawl_docs_search | 搜索 Spicrawl 文档;如果输入错误代码,也会链接到对应条目。 | query、limit(1-20,默认 8) |
spicrawl_docs_read | 以 Markdown 格式读取单个文档页面(超过 60,000 个字符时会截断)。 | path |
spicrawl_docs_index | 文档的 llms.txt:列出每个页面及其标题和 .md 链接。 | 无 |
即将推出
spicrawl_browser_connect_url 将生成一次性 CDP WebSocket URL,以便通过任意 CDP 客户端驱动由 Spicrawl 托管的浏览器;目前尚不支持远程浏览器。这是第 25 个工具,也是托管的无密钥工具列表和服务卡片中唯一未列出的工具(其中有 24 个工具)。这些模式还预先接受 ai_extract、stealth、extract_preset、premium_proxy、proxy_country 和 sticky_key,但这些功能尚未发布。Agent 暂时不要发送这些参数。若只想列出目前可用的工具,请设置 SPICRAWL_MCP_HIDE_UNAVAILABLE=1(参见环境变量)。
示例提示词
- “将 https://example.com/pricing 抓取为 Markdown,并总结各个套餐。”
- “从此 URL 获取产品名称、价格和库存状态。”(使用
spicrawl_scrape的extract或autoparse) - “在 cookie 横幅消失后,对 https://example.com 进行整页截图。”(使用
render、actions、screenshot_fullpage) - “抓取这 500 个 URL,并提供每个页面的标题。”(使用
spicrawl_batch_submit,然后使用spicrawl_batch_results) - “为什么我上一次抓取失败了?”(先使用
spicrawl_requests_list并设置only_errors,然后使用spicrawl_request_get) - “我这个月用了多少额度?”(使用
spicrawl_usage_summary)
配置 MCP 客户端
将密钥放入 SPICRAWL_API_KEY,并在客户端支持的配置中引用它,这样密钥就不会写入已提交的文件。
Claude Code
托管端点,仅为你本人保存(为每个项目添加 --scope user):
claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \
--header "Authorization: Bearer $SPICRAWL_API_KEY"
若要与团队共享,请在项目根目录提交 .mcp.json。Claude Code 会展开 ${VAR},因此每位团队成员都会使用自己的密钥:
{
"mcpServers": {
"spicrawl": {
"type": "http",
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${SPICRAWL_API_KEY}" }
}
}
}
也可以安装插件,其中包含 MCP 服务和 Spicrawl Agent 技能:
claude plugin marketplace add OfficialSpicrawl/agent-plugins
claude plugin install spicrawl@spicrawl-plugins
使用 claude mcp list 或在会话中使用 /mcp 进行检查。更多信息:docs.spicrawl.com/agents/claude-code。
Claude Desktop
Claude Desktop 的 `claude_desktop_config.json` 仅启动本地(stdio)服务,而自定义连接器无法发送 `Authorization` 标头,因此请在本地运行该软件包。macOS 上的文件路径为 `~/Library/Application Support/Claude/claude_desktop_config.json`,Windows 上为 `%APPDATA%\Claude\claude_desktop_config.json`:{
"mcpServers": {
"spicrawl": {
"command": "npx",
"args": ["-y", "@spicrawl/mcp"],
"env": { "SPICRAWL_API_KEY": "spicrawl_live_..." }
}
}
}
保存后,重新启动 Claude Desktop。
Cursor
使用上方的 Add to Cursor 按钮,或将以下内容添加到项目中的 .cursor/mcp.json(或添加到 ~/.cursor/mcp.json,以用于所有项目)。Cursor 会解析 url 和 headers 中的 ${env:NAME},因此请在已设置 SPICRAWL_API_KEY 的环境中启动 Cursor:
{
"mcpServers": {
"spicrawl": {
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
VS Code (GitHub Copilot)
使用上方的 Install in VS Code 按钮,或将以下内容添加到 .vscode/mcp.json。VS Code 使用 servers 键,输入变量会提示你输入一次密钥并安全存储,因此此文件可以安全地提交:
{
"inputs": [
{ "type": "promptString", "id": "spicrawl-api-key", "description": "Spicrawl API key", "password": true }
],
"servers": {
"spicrawl": {
"type": "http",
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${input:spicrawl-api-key}" }
}
}
}
VS Code 不会在 headers 中展开 ${env:...},因此请使用输入变量。更多信息:docs.spicrawl.com/agents/github-copilot。
Windsurf (Devin Desktop)
Windsurf 现已更名为 Devin Desktop。对于默认的 Devin Local Agent,请在本地范围内添加服务(保存到被 Git 忽略的 .devin/mcp_config.local.json):
devin mcp add spicrawl https://mcp.spicrawl.com/mcp -H "Authorization: Bearer $SPICRAWL_API_KEY"
对于旧版 Cascade Agent,请编辑 ~/.config/devin/mcp_config.json(Windows 上为 %APPDATA%\devin\mcp_config.json)。Cascade 会从 serverUrl 读取 URL,并替换 ${env:...}:
{
"mcpServers": {
"spicrawl": {
"serverUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
Gemini CLI
Gemini CLI 会在展开标头前移除名称中包含 KEY、TOKEN 或 AUTH 的变量,因此请使用其他名称导出密钥:
export SPICRAWL_MCP_BEARER="$SPICRAWL_API_KEY"
然后将以下内容添加到 ~/.gemini/settings.json(或单个项目的 .gemini/settings.json)。Streamable HTTP 使用 httpUrl 键:
{
"mcpServers": {
"spicrawl": {
"httpUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer $SPICRAWL_MCP_BEARER" }
}
}
}
或者:gemini mcp add --scope user --transport http --header 'Authorization: Bearer $SPICRAWL_MCP_BEARER' spicrawl https://mcp.spicrawl.com/mcp。运行 /mcp 进行检查。更多信息:docs.spicrawl.com/agents/gemini-cli。
Codex
Codex 每次连接时都会从环境中读取密钥,因此密钥不会写入任何文件:
codex mcp add spicrawl --url https://mcp.spicrawl.com/mcp --bearer-token-env-var SPICRAWL_API_KEY
等效的 ~/.codex/config.toml(或可信项目中的 .codex/config.toml):
[mcp_servers.spicrawl]
url = "https://mcp.spicrawl.com/mcp"
bearer_token_env_var = "SPICRAWL_API_KEY"
也可使用本地 stdio:
[mcp_servers.spicrawl]
command = "npx"
args = ["-y", "@spicrawl/mcp"]
env = { SPICRAWL_API_KEY = "spicrawl_live_..." }
Smithery and other gateways
将连接参数作为标头传递的网关不一定能发送 Authorization: Bearer <key>:Smithery 会将参数映射到标头,但发送的是原始值,不带 Bearer 前缀;而客户端通常无法将来源命名为 authorization。/mcp 可通过以下任一标头接收密钥:
| 标头 | 值 |
|---|---|
x-api-key | spicrawl_live_...(推荐用于网关) |
api-key | spicrawl_live_... |
Authorization | spicrawl_live_...(原始密钥,不带 Bearer ),或 Bearer spicrawl_live_... |
在 Smithery 中,将 API 密钥设为连接参数,将其映射到 x-api-key 标头,并标记为机密。也可以将其映射到 Authorization 并发送原始密钥;当整个值是 Spicrawl 密钥时,服务端会接受该值。
密钥可以在连接架构中设为可选(不放入 required):/mcp 上的 initialize、ping 和 tools/list 无需密钥即可响应,返回的工具列表与服务卡片相同(24 个工具,不含 spicrawl_browser_connect_url),因此目录可以列出这些工具。调用任何工具仍需有效密钥,否则会被拒绝并返回 401;没有密钥时不会打开会话,也不会产生费用或读取数据。请在参数说明中注明,运行任何工具都需要该密钥。
如果发送了多个密钥,则按 Authorization: Bearer、原始 Authorization、x-api-key、api-key 的顺序,使用第一个格式正确的密钥。不会读取查询字符串中的密钥,因为 URL 最终会出现在访问日志中。/chatgpt/mcp 仅接受 OAuth 访问令牌,不接受上述任何一种密钥。
其他 MCP 客户端
| 设置 | 值 |
|---|---|
| 传输方式 | Streamable HTTP |
| URL | https://mcp.spicrawl.com/mcp |
| 请求头 | Authorization: Bearer <your key>(或 x-api-key: <your key>) |
仅支持 stdio 的客户端会在其环境中设置 SPICRAWL_API_KEY,并运行 npx -y @spicrawl/mcp。服务仅接受 API 密钥,不接受 OAuth。其他客户端(OpenCode、Zed、JetBrains、Cline、Goose 等)的设置页面:docs.spicrawl.com/agents/mcp。
| 变量 | 默认值 | 使用方 | 用途 |
|---|---|---|---|
SPICRAWL_API_KEY | 无(必填) | stdio | 你的 API 密钥。HTTP 服务会忽略此变量,并使用每个调用方的 bearer 令牌。 |
SPICRAWL_BASE_URL | https://api.spicrawl.com(stdio),http://127.0.0.1:8080(HTTP) | 两者 | 工具调用的 Spicrawl API。 |
SPICRAWL_PUBLIC_BASE_URL | SPICRAWL_BASE_URL | 两者 | 终端用户访问的 API,仅用于返回给用户的 URL。 |
SPICRAWL_DOCS_URL | https://docs.spicrawl.com | 两者 | 文档工具使用的文档基础 URL。你的密钥绝不会发送到该地址。 |
SPICRAWL_DOCS_HOST | 无 | 两者 | 旧版配置:文档位于 /docs 下的源站。仅当未设置 SPICRAWL_DOCS_URL 时读取。 |
SPICRAWL_MCP_ADDR | 127.0.0.1:8090 | HTTP | 监听地址,格式为 host:port。 |
SPICRAWL_MCP_SESSION_IDLE_MS | 1800000(30 分钟) | HTTP | MCP 会话空闲达到此时长后将被丢弃。 |
SPICRAWL_MCP_HIDE_UNAVAILABLE | 关闭 | 两者 | 设置为 1、true、yes 或 on 时,不会列出已公布但尚不可用的内容:不会注册 spicrawl_browser_connect_url(工具数量为 24 个而非 25 个),并且会从架构中移除所有标记为“即将推出”的参数(ai_extract、stealth、extract_preset、premium_proxy、proxy_country、sticky_key,以及会话参数 rotate_ip、region_pool 和 fingerprint)。在服务启动会话时读取;更改后需重启进程。无密钥的 tools/list 和服务卡片始终按启用此选项的方式运行。 |
SPICRAWL_CHATGPT_ENABLED | 关闭 | HTTP | 设置为 1、true、yes 或 on 时启用 ChatGPT 端点。关闭时,/chatgpt/mcp、其元数据和 OpenAI challenge 均会返回 404。 |
SPICRAWL_CHATGPT_RESOURCE | https://mcp.spicrawl.com/chatgpt/mcp | HTTP | OAuth 资源标识符。令牌的 aud 必须与此值完全一致;元数据发布在 /.well-known/oauth-protected-resource + 其路径下。 |
SPICRAWL_OAUTH_ISSUER | https://app.spicrawl.com | HTTP | 授权服务器,列在元数据中。令牌会在 <issuer>/api/oauth/introspect 处进行内省。 |
SPICRAWL_OAUTH_INTROSPECT_SECRET | 无 | HTTP | 此服务在内省端点使用的 bearer 密钥。未设置时,所有令牌请求均返回 503。 |
SPICRAWL_CHATGPT_ROOT_PRM | 关闭 | HTTP | 也在根路径 /.well-known/oauth-protected-resource 下提供元数据。默认关闭,因为 /mcp 使用 API 密钥,不得公布 OAuth。 |
SPICRAWL_OPENAI_APPS_CHALLENGE | 无 | HTTP | 在 /.well-known/openai-apps-challenge 提供的 OpenAI 域名验证令牌。 |
SPICRAWL_OPENAI_APPS_CHALLENGE_FILE | 无 | HTTP | 保存该令牌的文件(会删除首尾空白及末尾换行符)。仅当未设置 SPICRAWL_OPENAI_APPS_CHALLENGE 时读取。 |
如果未设置任何文档变量,指向可自托管 API 的服务会从该 API 自身读取文档,路径为 <SPICRAWL_PUBLIC_BASE_URL or SPICRAWL_BASE_URL>/docs。
通过 HTTP 自托管 MCP 服务
托管端点运行的是此软件包的 Streamable HTTP 服务。要运行自己的服务:
SPICRAWL_MCP_ADDR=127.0.0.1:8090 \
SPICRAWL_BASE_URL=https://api.spicrawl.com \
npx -y @spicrawl/mcp --http
- 在 HTTP 模式下,
SPICRAWL_BASE_URL默认为http://127.0.0.1:8080(同一主机上的 Spicrawl API),而不是公共 API。将其设置为https://api.spicrawl.com,即可连接公共 API。 - MCP 服务在
POST/GET/DELETE /mcp上;存活检查位于GET /healthz(无需身份验证)。 GET /.well-known/mcp/server-card.json(无需身份验证,Cache-Control: public, max-age=3600)是面向无法在没有密钥的情况下扫描/mcp的 Smithery 等目录的静态服务卡片,其中包含serverInfo、传输方式、Bearer 身份验证和工具列表。工具列表读取自与tools/list相同的定义,就像启用了SPICRAWL_MCP_HIDE_UNAVAILABLE一样:共 24 个工具,不包括spicrawl_browser_connect_url。使用密钥打开的会话也会列出该工具,除非设置了此变量。- 未提供任何密钥时,
/mcp仅响应发现请求:initialize、ping、initialized通知和tools/list(与服务卡片相同的 24 个工具列表;不会签发Mcp-Session-Id,也不会向上游发送任何内容)。任何其他请求,包括tools/call,都会返回401;发送格式错误的密钥或指定会话的请求也会返回401。不带会话的GET会返回405。 - 每位调用方都使用自己的密钥,以
Authorization: Bearer spicrawl_live_...的形式发送;如果网关无法发送Bearer前缀,则可使用原始Authorization: spicrawl_live_...、x-api-key或api-key标头(参见上文“Smithery 和其他网关”;切勿使用查询参数)。会话打开前会先向 API 验证密钥(API 拒绝时返回401,无法连接 API 时返回带有Retry-After的503),并且会话会固定使用打开它的密钥。 - 服务使用纯 HTTP。通过网络发送密钥前,请将其置于 TLS 后面。
ChatGPT 端点(OAuth)
同一进程可为 ChatGPT 应用提供另一个受限的 MCP 端点。除非启用了 SPICRAWL_CHATGPT_ENABLED,否则该端点处于关闭状态;无论如何,/mcp 都不会改变。
| 路由 | 功能 |
|---|---|
POST /chatgpt/mcp | MCP Streamable HTTP,无状态:不使用 Mcp-Session-Id,每个请求都会创建一个新的服务,返回 JSON 响应。其他方法会返回 405。 |
GET /.well-known/oauth-protected-resource/chatgpt/mcp | 受保护资源元数据(RFC 9728):resource、authorization_servers(发行方)、scopes_supported: ["scrape","batch"]、resource_documentation。 |
GET /.well-known/oauth-protected-resource | 同一文档,仅在设置了 SPICRAWL_CHATGPT_ROOT_PRM 时提供。 |
GET /.well-known/openai-apps-challenge | 以 text/plain 返回验证令牌,字节内容精确且末尾无换行符;未配置时返回 404。 |
身份验证仅接受 OAuth 访问令牌(spicrawl_oat_…):
- 没有令牌:返回
401,并附带WWW-Authenticate: Bearer resource_metadata="https://mcp.spicrawl.com/.well-known/oauth-protected-resource/chatgpt/mcp", scope="scrape batch"。 - 无效、未激活、已过期或受众错误的令牌,或 API 密钥(
spicrawl_live_…/spicrawl_test_…;此处绝不接受):返回相同的401,并附带error="invalid_token", error_description="…"。 - 令牌的作用域未涵盖的工具调用:返回
403,并附带error="insufficient_scope"。spicrawl_scrape需要scrape,批处理工具需要batch,文档工具只需要有效令牌。 - 授权服务器无法访问或拒绝此服务的密钥:返回带有
Retry-After的503。 每个令牌都会通过POST <issuer>/api/oauth/introspect检查(Authorization: Bearer <SPICRAWL_OAUTH_INTROSPECT_SECRET>,表单正文为token=…)。只有active: true且aud与资源相同的令牌才会被接受。肯定结果会按令牌的 SHA-256 值缓存,最长 30 秒,且绝不会超过其exp。工具会使用内省结果返回的api_key调用上游;该密钥和令牌都不会被记录。如果 API 在调用过程中拒绝该密钥,工具会返回错误,其_meta["mcp/www_authenticate"]中包含新的invalid_token挑战,并将该令牌从缓存中移除。
该端点列出六个工具,每个工具都明确设置了 readOnlyHint/destructiveHint/openWorldHint,并带有标题和 securitySchemes: [{type: "oauth2", scopes: [...]}](也包含在 _meta.securitySchemes 中):
| 工具 | 作用域 | 参数 |
|---|---|---|
spicrawl_scrape | scrape | url(仅限 http/https)、format(markdown/text/html/json)、render、main_content_only、include_tags、exclude_tags、links、extract(CSS 选择器)、autoparse、wait_for、cache、cache_ttl、max_cost(默认值为 5)。始终使用 HTTP GET。 |
spicrawl_batch_submit | batch | urls(1 至 25 个)、format、render、main_content_only、max_cost、credit_budget(默认值为 50)。 |
spicrawl_batch_status | batch | job_id。 |
spicrawl_batch_results | batch | job_id、status、limit(默认值为 25,最大值为 100)、cursor。 |
spicrawl_docs_search、spicrawl_docs_read | 无 | 与 /mcp 上的参数相同。 |
此处的 spicrawl_scrape 为只读工具,与 /mcp 上的不同:该端点只发送 GET 请求,不包含 method、正文、标头或 actions。spicrawl_batch_submit 不是只读工具,因为它会创建任务。
如果结果页面列出的成功项目没有内容(这会发生在任务仍在完成过程中),spicrawl_batch_results 会通过 GET /v1/batch/{id}/tasks/{seq}/content 补全内容。每页最多获取 25 个项目和 2 MiB。暂时无法读取的项目会返回 unavailable,超过大小上限的项目会返回 omitted。
所有其他参数都会被拒绝,而非丢弃。结果会保留内容、网站状态和已扣除的积分;请求 ID、时间戳、引擎和代理详情、存储引用及项目 ID 均不会返回。
全局安装后(npm install -g @spicrawl/mcp),命令为 spicrawl-mcp(别名为 spicrawl-mcp-server),支持 --http、--version 和 --help。
常见问题
哪个 MCP 服务可以抓取 JavaScript 网站?
Spicrawl MCP 服务可以。调用 spicrawl_scrape 并设置 render: true(3 个积分),页面就会在浏览器中加载、运行脚本,并以处理完成的 Markdown、文本、HTML 或 JSON 格式返回。对于较晚出现的内容,可添加包含 CSS 选择器的 wait_for;也可以设置 mode: "auto",先尝试普通抓取,仅在需要时升级到更强的渲染方式。Spicrawl 会为每个请求选择渲染方式,并按实际提供服务的等级计费(fetch、js 或 browser,在 JSON 结果中以 engine 报告);没有可用于选择渲染方式的参数。
如何让 Claude 访问 Web?
使用 API 密钥将 Spicrawl MCP 服务连接到 Claude。在 Claude Code 中:
claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \
--header "Authorization: Bearer $SPICRAWL_API_KEY"
之后,Claude 就可以通过调用 spicrawl_scrape 读取你提供的任意 URL。Spicrawl 按 URL 读取网页,并非搜索引擎。如需了解 Claude Desktop 的安装方法,请参阅下方的安装解答。
有免费套餐吗?
有。测试期间,每个组织都使用同一套餐,每月有 1,000 个积分。普通抓取消耗 1 个积分,JavaScript 渲染消耗 3 个积分,全浏览器渲染(截图、PDF、actions)消耗 8 个积分。请求失败不扣积分,缓存命中按存储该缓存时的抓取价格计费。当月积分用完后,调用会失败并返回 ERR::LIMIT::QUOTA_EXCEEDED,直到积分重置。请参阅积分。
它能处理受机器人防护的页面吗?
只能使用你自己的代理。将代理传入 proxy(一个 http:// URL;住宅代理效果最佳)。当网站返回 Cloudflare 托管质询时,Spicrawl 会检测到该情况,将请求切换到使用同一代理出口的完整浏览器渲染,并返回真实页面,费用为 8 个额度点。如果每一步都受到质询,你会收到 ERR::UPSTREAM::CHALLENGE,且不扣费。成功的可能性较高,但不保证成功;Spicrawl 不会解决 CAPTCHA。使用默认共享池时,受到质询的页面会返回该错误。请参阅抓取 Cloudflare 保护的页面。
如何在 Cursor 或 Claude Desktop 中安装?
**Cursor:**点击上方的 Add to Cursor,或将以下内容添加到 .cursor/mcp.json,并在设置好 SPICRAWL_API_KEY 的情况下启动 Cursor:
{
"mcpServers": {
"spicrawl": {
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
Claude Desktop 只启动本地(stdio)服务,因此请运行该软件包。将以下内容添加到 claude_desktop_config.json 并重启应用:
{
"mcpServers": {
"spicrawl": {
"command": "npx",
"args": ["-y", "@spicrawl/mcp"],
"env": { "SPICRAWL_API_KEY": "spicrawl_live_..." }
}
}
}
请在 app.spicrawl.com 获取密钥。Claude Code、VS Code、Windsurf、Gemini CLI 和 Codex 的设置步骤见设置 MCP 客户端。
它能抓取整个网站吗?
目前没有单独的抓取工具。使用 links: true 抓取页面以获取其链接,然后将这些链接传入一个已打开的批处理任务(open: true 和 spicrawl_batch_add_items)。
其他问题
有托管的 Spicrawl MCP 服务吗?
有:https://mcp.spicrawl.com/mcp,采用 MCP Streamable HTTP,通过 Authorization: Bearer <API key> 进行身份验证,因此无需安装任何内容。
它支持 OAuth 吗?
/mcp 不支持:它只接受 Spicrawl API 密钥,因此对于在收到 401 时尝试使用 OAuth 的客户端,请关闭该端点的 OAuth。单独的 ChatGPT 端点 /chatgpt/mcp 仅接受 OAuth 访问令牌,且仅在运营方启用时可用。
我应该使用 MCP 服务、SDK 还是 CLI?
当 AI Agent 需要将 Spicrawl 作为工具调用时,请使用 MCP 服务。在你自己的 TypeScript 或 JavaScript 代码中使用 @spicrawl/sdk,在终端或 Shell 脚本中使用 @spicrawl/cli,其他语言则使用 REST API。
故障排除
| 症状 | 解决方法 |
|---|---|
HTTP 401 或 "Unauthorized: send your Spicrawl API key" | 请求头缺失,或密钥格式错误、未知、已撤销或已过期。请检查客户端启动时所在的环境中是否设置了该变量。无法发送 Bearer 的网关可以使用 x-api-key 请求头;系统不会读取 URL 中的密钥。 |
请求头中包含字面值 ${SPICRAWL_API_KEY} | 客户端未对其进行展开。Claude Code 使用 ${VAR},Cursor 使用 ${env:VAR},VS Code 使用 ${input:id},Codex 使用 bearer_token_env_var。 |
连接时收到带有 Retry-After 的 HTTP 503 | 服务器无法连接到 API 以检查你的密钥。请重试;你的密钥没有问题。 |
spicrawl_usage* 工具返回 ERR::AUTH::INSUFFICIENT_SCOPE | 在控制面板中为密钥授予 read 作用域。 |
ERR::LIMIT::QUOTA_EXCEEDED(HTTP 402) | 每月额度已用完。在额度重置前重试无效。 |
spicrawl_scrape 出现 "Unknown argument" | 请使用工具支持的名称:render,而非 js_render;format,而非 response_format。 |
| 工具未显示 | 重启客户端,并检查配置键(VS Code 中为 servers,其他客户端中为 mcpServers)。 |
npx 未找到(stdio) | 请安装 Node.js 20 或更高版本。 |
不带密钥运行 curl -i https://mcp.spicrawl.com/mcp 会收到 401:这说明该端点可访问。
相关软件包
@spicrawl/sdk:Spicrawl API 的官方 TypeScript SDK。@spicrawl/cli:Spicrawl 命令行界面。- OfficialSpicrawl/agent-plugins:打包了此服务和 Spicrawl 技能的插件,适用于 Claude Code、Codex、Cursor、Gemini CLI 等。
链接
- 文档:docs.spicrawl.com/agents/mcp
- 面向大模型的文档:docs.spicrawl.com/llms.txt
- 控制面板和 API 密钥:app.spicrawl.com
- 问题:github.com/OfficialSpicrawl/mcp/issues
- 安全:SECURITY.md。切勿提交 API 密钥;如果密钥泄露,请在 app.spicrawl.com 撤销。
发布到 MCP Registry
server.json 列出了 npm/stdio 软件包和托管的
Streamable HTTP 端点,二者均位于 io.github.OfficialSpicrawl/mcp 下。安装服务的用户
需要提供 API 密钥;清单中不应包含密钥。
现有的 release 工作流会在 npm 任务成功后,将内容发布到 MCP Registry;触发条件是推送到 main 或在 main 上手动运行。Registry 身份验证使用 GitHub OIDC(id-token: write),因此无需新增密钥、设备登录或 DNS
记录。npm 发布仍使用现有的 NPM_TOKEN 密钥。
要发布版本,请运行 npm version --no-git-tag-version X.Y.Z,更新变更日志,
并将更改提交到 main。npm 版本钩子会同步 server.json 中的两个版本。
如果手动编辑 package.json,请运行 npm run registry:sync。
CI 使用 Ajv 根据官方 $schema 检查清单,并在 npm 发布前拒绝名称
或版本不一致的情况。要在本地运行此检查:
npm ci
npm run registry:validate
# Offline: pass a downloaded copy of the exact server.json $schema URL.
npm run registry:validate -- /path/to/server.schema.json
Registry 任务会在发布前检查已发布的 npm 软件包是否具有匹配的 mcpName。
如果 Registry 中已存在该版本,则会跳过;查询失败则会停止
任务。要重试 Registry 发布失败,或列出当前已发布的 npm 版本,请在 main 上再次运行
release 工作流。要更改现有条目的元数据,请使用新版本。发布器二进制文件已固定版本,且其下载文件会使用发布校验和进行检查;升级 CLI 时,请更新 release.yml 中的版本。
请在
https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.OfficialSpicrawl/mcp 验证发布结果。
必须先将工作流合并到 OfficialSpicrawl/mcp,OIDC 才能发布该命名空间。Fork 的拉取请求会进行验证和测试,但绝不会运行 Registry 任务。
官方参考资料:发布快速入门、 GitHub Actions 和远程服务。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。