Spicrawl
REMOTE · MCP.SPICRAWL.COM · 2 COMPONENTS
Web scraping MCP server: any URL to Markdown or JSON, with JavaScript rendering and batch jobs.
Available components
Last scanned (3 hours ago)
Scores higher than 68% of remote servers
Reachable. Last reached 17 Oct 2026.
Category Web Scraping
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5555 tokens (~231/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
- Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Oct 26 0
- Stability: unverified → 0.03 ▲ functional
- 13 Oct 26 +40
- Transport: unverified → pass ▲ security
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Authorization: Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. security
- MCP protocol: unverified → pass ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Schema quality: fail functional
- First check of Schema quality: excellent functional
- First check of Schema quality: fail functional
- First check of Destructive annotations: 100 functional
- First check of Tool coverage: 100 functional
- First check of Tool coverage: 100 functional
- 10 Oct 26 33
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 17 Oct 2026 · Probed https://mcp.spicrawl.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=spicrawl.com | CN=YR1,O=Let's Encrypt,C=US | 26 Sept 2026 | 25 Dec 2026 | RSA 2048 | SHA256-RSA | 64d3405a442085baab8eb025b9470395e49 |
| SANs: *.spicrawl.com, spicrawl.com | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.spicrawl.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| spicrawl.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="spicrawl-mcp"
Bearer realm="spicrawl-mcp" Protected resource metadata
| Retrieved | No |
|---|---|
| Problem | no_resource_metadata |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.spicrawl.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.spicrawl.com/mcp | HTTPS enforced | 301 | https://mcp.spicrawl.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
spicrawl_batch_add_items Add URLs to an open batch job ~397
Append URLs to a batch job that was submitted with `open: true`. Same item vocabulary as `spicrawl_batch_submit` (EITHER `urls` or `items`, not both, plus shared settings for these new items). Fails with CONFLICT if the job is closed or finished. Not idempotent: calling twice adds the URLs twice. Returns `{ job, items_added, items_dispatched }`.
| Name | Type | Req | Description |
|---|---|---|---|
| block_resources | array | – | Resource types to block while rendering, e.g. ["image","font","media"]. |
| custom_headers | object | – | Extra request headers sent with every URL. |
| format | string | – | Output format for every item (`response_format`). spicrawl_batch_submit defaults to 'markdown', the same as spicrawl_scrape; an item's own `response_format` overrides it. |
| items | array | – | Long form: one /v1/scrape request object per item. Besides `url` and `external_id`, any /v1/scrape field (e.g. `js_render`, `wait_for`, `response_format`) overrides the shared setting for that item o… |
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| main_content_only | boolean | – | Strip each page to its main article. |
| max_cost | integer | – | Ceiling in credits for ONE item (not the whole job — see credit_budget). |
| render | boolean | – | Render every URL with a browser (`js_render`). |
| urls | array | – | Shorthand: URLs scraped with the shared settings and no per-item overrides. Mutually exclusive with `items`. |
| wait | integer | – | Milliseconds to wait after load (rendered scrapes). |
| wait_for | string | – | CSS selector to wait for before capturing (rendered scrapes). |
| Name | Type | Req | Description |
|---|---|---|---|
| items_added | number | – | Items written to the job. |
| items_dispatched | number | – | Of those, how many reached the dispatch queue now; do not re-add the rest. |
| job | object | – | The job as it stands after the call. |
No examples provided.
spicrawl_batch_cancel Cancel a batch job ~103
Cancel a batch job: items not yet started are cancelled and will never run; items already finished keep their results; items already running finish first, so the job comes back `cancelling` and moves to `cancelled` when they drain. Cannot be undone — resubmit to run the URLs again. Returns the job object.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| cancel_requested_at | string|null | – | ISO-8601 time a cancel was accepted. |
| concurrency | number | – | Effective per-job concurrency after the server's clamping. |
| error_code | string|null | – | Machine code of a job-level failure. |
| error_message | string|null | – | Human-readable job-level failure reason. |
| estimated_credits | number | – | Credits reserved at submission (a hold, not a charge; compare with progress.credits_charged). |
| estimated_credits_micro | number | – | Same as estimated_credits in micro-credits. |
| failure_threshold | number|null | – | Failed-item count that aborts the job, when set. |
| finished_at | string|null | – | ISO-8601 time the job reached a terminal status. |
| id | string | yes | Job id. Pass it as `job_id` to the other spicrawl_batch_* tools. |
| max_attempts | number | – | Effective attempts per item. |
| name | string|null | – | The label given at submission, if any. |
| open | boolean|null | – | True while the job accepts appended items (it will not complete until closed). |
| params | – | – | The job-level scrape settings as stored. |
| priority | number | – | Effective scheduling priority. |
| progress | object | – | Live item counters and the credits charged so far. |
| project_id | string | – | Project the API key belongs to. |
| results_expire_at | string|null | – | ISO-8601 deadline after which results answer 410 Gone. |
| results_url | string | – | API path of the job's results: /v1/batch/{id}/results. |
| started_at | string|null | – | ISO-8601 time the first item started. |
| status | string | – | Lifecycle: queued, running, paused, cancelling, completed, failed or cancelled. Keep polling while queued/running/paused/cancelling; stop at completed, failed or cancelled. |
| status_url | string | – | API path to poll for this job: /v1/batch/{id}. |
| submitted_at | string | – | ISO-8601 time the job was accepted. |
| total_items | number | – | Number of items in the job. |
| warnings | – | – | Decisions made on the caller's behalf at submission (a clamped concurrency, items not yet queued). |
No examples provided.
spicrawl_batch_close Close an open batch job ~68
Stop an open batch job accepting items, so it completes once its queued work drains. Idempotent (closing a closed job succeeds). Returns the job object.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| cancel_requested_at | string|null | – | ISO-8601 time a cancel was accepted. |
| concurrency | number | – | Effective per-job concurrency after the server's clamping. |
| error_code | string|null | – | Machine code of a job-level failure. |
| error_message | string|null | – | Human-readable job-level failure reason. |
| estimated_credits | number | – | Credits reserved at submission (a hold, not a charge; compare with progress.credits_charged). |
| estimated_credits_micro | number | – | Same as estimated_credits in micro-credits. |
| failure_threshold | number|null | – | Failed-item count that aborts the job, when set. |
| finished_at | string|null | – | ISO-8601 time the job reached a terminal status. |
| id | string | yes | Job id. Pass it as `job_id` to the other spicrawl_batch_* tools. |
| max_attempts | number | – | Effective attempts per item. |
| name | string|null | – | The label given at submission, if any. |
| open | boolean|null | – | True while the job accepts appended items (it will not complete until closed). |
| params | – | – | The job-level scrape settings as stored. |
| priority | number | – | Effective scheduling priority. |
| progress | object | – | Live item counters and the credits charged so far. |
| project_id | string | – | Project the API key belongs to. |
| results_expire_at | string|null | – | ISO-8601 deadline after which results answer 410 Gone. |
| results_url | string | – | API path of the job's results: /v1/batch/{id}/results. |
| started_at | string|null | – | ISO-8601 time the first item started. |
| status | string | – | Lifecycle: queued, running, paused, cancelling, completed, failed or cancelled. Keep polling while queued/running/paused/cancelling; stop at completed, failed or cancelled. |
| status_url | string | – | API path to poll for this job: /v1/batch/{id}. |
| submitted_at | string | – | ISO-8601 time the job was accepted. |
| total_items | number | – | Number of items in the job. |
| warnings | – | – | Decisions made on the caller's behalf at submission (a clamped concurrency, items not yet queued). |
No examples provided.
spicrawl_batch_list List batch jobs ~101
List this API key's project's batch jobs, newest first, with status and progress. Returns `{ batches: [...], next_cursor? }`; pass `next_cursor` back as `cursor` for the next page.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | `next_cursor` from a previous page, verbatim. |
| limit | integer | – | Page size (default 50, max 200). |
| status | string | – | Only jobs in this status. |
| Name | Type | Req | Description |
|---|---|---|---|
| batches | array | yes | Jobs, newest first (empty when there are none). |
| next_cursor | string|null | – | Pass back as `cursor` for the next page; absent on the last page. |
No examples provided.
spicrawl_batch_results Read a batch job's results ~194
Return a page of FINISHED items of a batch job (one record per item: seq, url, external_id, status, error, and content, or a `result_url` API path (GET /v1/batch/{id}/tasks/{seq}/content, same key) for large bodies). Unfinished items are not listed yet. Returns `{ results: [...], next_cursor? }`; pass `next_cursor` back as `cursor` for the next page. Results expire after the job's retention window (410 Gone).
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | `next_cursor` from a previous page, verbatim. |
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| limit | integer | – | Page size (default 500, max 5000). |
| status | string | – | Only items that finished with this status. |
| Name | Type | Req | Description |
|---|---|---|---|
| next_cursor | string|null | – | Pass back as `cursor` for the next page; absent on the last page. |
| results | array | yes | Finished items of the job, in seq order. |
No examples provided.
spicrawl_batch_retry Retry a batch job's failed items ~78
Re-queue every FAILED item of a batch job so it runs again (succeeded items are untouched; a job with no failures is returned unchanged). Returns `{ job, items_reset, items_dispatched }`.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| items_dispatched | number | – | Of those, how many reached the dispatch queue now; the rest are recovered automatically. |
| items_reset | number | – | Failed items reset to queued (0 means nothing had failed). |
| job | object | – | The job as it stands after the call. |
No examples provided.
spicrawl_batch_status Check a batch job's status ~91
Return one batch job with its status and progress (total/completed/succeeded/failed/remaining, credits charged). Poll this after `spicrawl_batch_submit`; once status is `completed`, `failed` or `cancelled`, read `spicrawl_batch_results`.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| cancel_requested_at | string|null | – | ISO-8601 time a cancel was accepted. |
| concurrency | number | – | Effective per-job concurrency after the server's clamping. |
| error_code | string|null | – | Machine code of a job-level failure. |
| error_message | string|null | – | Human-readable job-level failure reason. |
| estimated_credits | number | – | Credits reserved at submission (a hold, not a charge; compare with progress.credits_charged). |
| estimated_credits_micro | number | – | Same as estimated_credits in micro-credits. |
| failure_threshold | number|null | – | Failed-item count that aborts the job, when set. |
| finished_at | string|null | – | ISO-8601 time the job reached a terminal status. |
| id | string | yes | Job id. Pass it as `job_id` to the other spicrawl_batch_* tools. |
| max_attempts | number | – | Effective attempts per item. |
| name | string|null | – | The label given at submission, if any. |
| open | boolean|null | – | True while the job accepts appended items (it will not complete until closed). |
| params | – | – | The job-level scrape settings as stored. |
| priority | number | – | Effective scheduling priority. |
| progress | object | – | Live item counters and the credits charged so far. |
| project_id | string | – | Project the API key belongs to. |
| results_expire_at | string|null | – | ISO-8601 deadline after which results answer 410 Gone. |
| results_url | string | – | API path of the job's results: /v1/batch/{id}/results. |
| started_at | string|null | – | ISO-8601 time the first item started. |
| status | string | – | Lifecycle: queued, running, paused, cancelling, completed, failed or cancelled. Keep polling while queued/running/paused/cancelling; stop at completed, failed or cancelled. |
| status_url | string | – | API path to poll for this job: /v1/batch/{id}. |
| submitted_at | string | – | ISO-8601 time the job was accepted. |
| total_items | number | – | Number of items in the job. |
| warnings | – | – | Decisions made on the caller's behalf at submission (a clamped concurrency, items not yet queued). |
No examples provided.
spicrawl_batch_submit Submit a batch scrape job ~604
Submit many URLs to be scraped as one asynchronous job, with shared settings applied to every URL. Give EITHER `urls` or `items`, not both (at least one URL, unless `open` is true). Returns the job object (id, status, estimated_credits, progress). Poll with `spicrawl_batch_status`, read with `spicrawl_batch_results` or `spicrawl_batch_task_content`. Use this instead of many `spicrawl_scrape` calls when you have tens or thousands of URLs. Set `open: true` to keep the job accepting more URLs via `spicrawl_batch_add_items`; an open job never finishes until you call `spicrawl_batch_close`.
| Name | Type | Req | Description |
|---|---|---|---|
| block_resources | array | – | Resource types to block while rendering, e.g. ["image","font","media"]. |
| concurrency | integer | – | Max items in flight at once for this job (may be capped by the server; see warnings). |
| credit_budget | integer | – | Ceiling on the WHOLE job, in credits; the run aborts when it would exceed this. |
| custom_headers | object | – | Extra request headers sent with every URL. |
| failure_threshold | integer | – | Abort the job once this many items have failed. |
| format | string | – | Output format for every item (`response_format`). spicrawl_batch_submit defaults to 'markdown', the same as spicrawl_scrape; an item's own `response_format` overrides it. |
| items | array | – | Long form: one /v1/scrape request object per item. Besides `url` and `external_id`, any /v1/scrape field (e.g. `js_render`, `wait_for`, `response_format`) overrides the shared setting for that item o… |
| main_content_only | boolean | – | Strip each page to its main article. |
| max_attempts | integer | – | Per-item retry attempts on failure. |
| max_cost | integer | – | Ceiling in credits for ONE item (not the whole job — see credit_budget). |
| name | string | – | A human label for the job. |
| open | boolean | – | Keep the job accepting items after submission (append with spicrawl_batch_add_items, finish with spicrawl_batch_close). |
| priority | integer | – | Scheduling priority of the job relative to your other jobs. |
| render | boolean | – | Render every URL with a browser (`js_render`). |
| urls | array | – | Shorthand: URLs scraped with the shared settings and no per-item overrides. Mutually exclusive with `items`. |
| wait | integer | – | Milliseconds to wait after load (rendered scrapes). |
| wait_for | string | – | CSS selector to wait for before capturing (rendered scrapes). |
| webhook_endpoint_id | string | – | Id of a registered webhook endpoint notified (with the job object) when the job completes. |
| Name | Type | Req | Description |
|---|---|---|---|
| cancel_requested_at | string|null | – | ISO-8601 time a cancel was accepted. |
| concurrency | number | – | Effective per-job concurrency after the server's clamping. |
| error_code | string|null | – | Machine code of a job-level failure. |
| error_message | string|null | – | Human-readable job-level failure reason. |
| estimated_credits | number | – | Credits reserved at submission (a hold, not a charge; compare with progress.credits_charged). |
| estimated_credits_micro | number | – | Same as estimated_credits in micro-credits. |
| failure_threshold | number|null | – | Failed-item count that aborts the job, when set. |
| finished_at | string|null | – | ISO-8601 time the job reached a terminal status. |
| id | string | yes | Job id. Pass it as `job_id` to the other spicrawl_batch_* tools. |
| max_attempts | number | – | Effective attempts per item. |
| name | string|null | – | The label given at submission, if any. |
| open | boolean|null | – | True while the job accepts appended items (it will not complete until closed). |
| params | – | – | The job-level scrape settings as stored. |
| priority | number | – | Effective scheduling priority. |
| progress | object | – | Live item counters and the credits charged so far. |
| project_id | string | – | Project the API key belongs to. |
| results_expire_at | string|null | – | ISO-8601 deadline after which results answer 410 Gone. |
| results_url | string | – | API path of the job's results: /v1/batch/{id}/results. |
| started_at | string|null | – | ISO-8601 time the first item started. |
| status | string | – | Lifecycle: queued, running, paused, cancelling, completed, failed or cancelled. Keep polling while queued/running/paused/cancelling; stop at completed, failed or cancelled. |
| status_url | string | – | API path to poll for this job: /v1/batch/{id}. |
| submitted_at | string | – | ISO-8601 time the job was accepted. |
| total_items | number | – | Number of items in the job. |
| warnings | – | – | Decisions made on the caller's behalf at submission (a clamped concurrency, items not yet queued). |
No examples provided.
spicrawl_batch_task_content Read one batch item's content ~144
Return the full payload one item of a batch job produced, by its `seq` (items are numbered from 0 in submission order). Cheaper than paging results when you need one URL's output. A CONFLICT error means either the item has not finished yet (poll `spicrawl_batch_status` and ask again) or it finished as failed (it will never produce content; the message says which). NOT_FOUND means no such seq.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The batch job id returned by spicrawl_batch_submit or spicrawl_batch_list. |
| seq | integer | yes | The item's sequence number (0-based, submission order). |
| Name | Type | Req | Description |
|---|---|---|---|
| content | – | – | The item's document when it is text (markdown, text or html) or any non-object JSON value. An item whose payload is a JSON object is returned as that object's own fields instead. |
No examples provided.
spicrawl_docs_index List the Spicrawl docs ~73
The docs' llms.txt: every Spicrawl documentation page with its title, a one-line description and its Markdown URL. Use it to find the right page when a search does not, or to get an overview of what is documented; read a page with spicrawl_docs_read. No parameters.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The index (llms.txt): one line per page with its title, description and Markdown URL. |
| truncated | boolean | yes | True when the content was cut at the size cap; the content says so at its end. |
| url | string | yes | Where the document lives on the docs site. |
No examples provided.
spicrawl_docs_read Read a Spicrawl docs page ~183
Fetches one Spicrawl documentation page as Markdown. `path` may be a page path (`guides/anti-bot`), a docs URL from spicrawl_docs_search (url or md_url), or either with a `#anchor` (the whole page is returned; the anchor names the section to look at). Only pages on the Spicrawl docs (https://docs.spicrawl.com/docs) can be read. Pages over 60000 characters are truncated, and the text says so. Don't know the path? Use spicrawl_docs_search, or spicrawl_docs_index (llms.txt) for the list of every page.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Page path (`guides/anti-bot`, `errors#AUTH_INVALID_KEY`) or a full docs URL, as returned by spicrawl_docs_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The document as Markdown. |
| md_url | string | – | The Markdown source it was read from. |
| section | string | – | The #anchor that was asked for, without the #. The whole page is returned. |
| title | string | – | The page's first heading, when it has one. |
| truncated | boolean | yes | True when the content was cut at the size cap; the content says so at its end. |
| url | string | yes | Where the document lives on the docs site. |
No examples provided.
spicrawl_docs_search Search the Spicrawl docs ~211
Full-text search over the Spicrawl documentation (guides, API reference, errors, limits). Use it to look up a parameter name, value or combination for a spicrawl_* tool, or to explain an error a spicrawl_* tool returned: search the error code itself (e.g. `ERR::UPSTREAM::CHALLENGE`) and the result also carries a direct link to that code's entry on the errors page. Returns the best-matching pages, each with its title, the matching sections (heading, a short snippet, URL) and md_url; then call spicrawl_docs_read with a page's md_url or url to read it in full.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum pages to return, 1-20. Default 8. |
| query | string | yes | What to look for: a feature, parameter, error code or question, e.g. 'wait_for selector' or 'ERR::AUTH::INSUFFICIENT_SCOPE'. |
| Name | Type | Req | Description |
|---|---|---|---|
| error_code | object | – | Present when the query is an error code (ERR::AREA::NAME). |
| hint | string | – | What to try when there are no results. |
| query | string | yes | The search text, as sent. |
| results | array | yes | Matching pages, most relevant first. Empty when nothing matched. |
No examples provided.
spicrawl_request_get Get one request ~172
The full log record of one past API call by its request id. Every response carries its id in the X-Request-Id header (and error bodies carry it too), so this is the tool for debugging a failed or slow scrape: it shows status, error_code/error_detail, attempts, the engine and proxy (tier, country, provider, sticky) actually used, whether and how the target blocked it (vendor/signal/rule), per-stage latency spans and credits charged. Returns not_found both for unknown ids and for ones older than your retention window, and for another project's request unless your key has the `read` scope.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The request id (a ULID, from X-Request-Id or a spicrawl_requests_list row's `id`). |
| Name | Type | Req | Description |
|---|---|---|---|
| attempts | number | – | Dispatch attempts including retries. |
| blocked | object | – | Present only when a bot challenge was detected. |
| bytes_in | number | – | – |
| bytes_out | number | – | – |
| created_at | string | – | When the request arrived, RFC 3339 UTC. |
| credits_micro | number | – | Credits charged in micro-credits (1 credit = 1000000); 0 unless success. |
| engine | string | – | The rendering tier that served it: fetch, js or browser. Absent when refused before a tier was chosen. |
| error_code | string | – | The problem code the caller got, e.g. ERR::UPSTREAM::CHALLENGE. Absent on success. |
| error_detail | string | – | – |
| features | object | – | Features the request used; free-form. |
| http_status | number | – | The target's HTTP status; absent when no response was received. |
| id | string | yes | The request id (X-Request-Id). |
| project_id | string | – | – |
| proxy | object | – | What proxy was asked for versus what served. Never an exit IP or credentials. |
| proxy_bytes | number | – | – |
| spans | object | – | Latency in milliseconds per stage; null means not measured. Stages do not sum to total_ms. |
| status | string | – | Terminal outcome: success, failed, timeout, blocked, rejected or cancelled. Only success is charged. |
| url | string | – | The target URL as requested. |
| url_host | string | – | – |
No examples provided.
spicrawl_requests_list List recent requests ~320
Recent API calls in your key's project, newest first, each with project_id, status, engine, http_status, error_code/error_detail, attempts, URL, proxy used, latency spans (queue/engine/upstream/total ms), block detection and credits. Use it to find failing calls (only_errors=true) or to spot patterns across a target. all_projects=true lists every project in your organization instead (needs a key with the `read` scope; 403 ERR::AUTH::INSUFFICIENT_SCOPE otherwise). Records only exist within the retention window reported in page.retention_hours / page.retained_since; an empty page means nothing in that window. Paginate by passing page.next_before and page.next_before_id back as before and before_id while page.has_more is true, keeping all_projects the same. Not billing-grade: use spicrawl_usage for totals.
| Name | Type | Req | Description |
|---|---|---|---|
| all_projects | boolean | – | Every project in your organization, not just the key's own. Needs the `read` scope. Keep it the same across pages. |
| before | string | – | Cursor: RFC 3339 timestamp, exactly as returned in page.next_before. Pass together with before_id. |
| before_id | string | – | Cursor: request id, exactly as returned in page.next_before_id. |
| limit | integer | – | Rows per page, 1-200. Default 50. |
| only_errors | boolean | – | Only requests whose status is anything other than 'success'. |
| status | string | – | Only requests with this outcome. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | – | Request records, newest first. Can be shorter than limit while page.has_more is true. |
| page | object | – | Paging cursor and the retention window. |
No examples provided.
spicrawl_scrape Scrape a URL ~1,403
Retrieve a web page and return its content as markdown (default), text, HTML, a JSON envelope, or a printed PDF. Handles the fetch vs. browser decision, charset decoding, and PDF-to-text for you. Optionally extract structured data with CSS selectors (`extract`) or `autoparse`, return discovered `links`, take a `screenshot`, or scope the DOM with `include_tags`/`exclude_tags`. Each successful call is billed in credits (a failure costs 0). Results are cached by default, and a cache hit is billed like the fetch that stored it (the cache saves time, not credits); set `cache=false` for time-sensitive pages. With the defaults it only reads the page. A `method` other than GET, HEAD or OPTIONS, and the `actions` that click, fill or run scripts on the page, can change state on the target site: set them only when the user asks for that. For markdown, text and HTML it returns `{ content }`. With `format: "json"`, or when `extract`, `autoparse`, `links`, `screenshot` or `network_capture` is set, it returns the JSON envelope: `content`, the site's `status`, `credits`, `engine` (the rendering tier: `fetch`, `js` or `browser`), `warnings` and `data` for extraction. Screenshots come back as image content blocks; each `screenshots` entry in the JSON keeps its metadata and says which block holds it. A PDF comes back as a resource content block, with its size, the rendering tier and the credits in the JSON.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Browser steps run in order before capture (render only). Each step is {type, ...fields}. Examples: [{"type":"click","selector":"#load-more"},{"type":"wait_for","selector":".item:nth-child(20)","timeo… |
| allowed_status_codes | array | – | Target statuses to treat as success instead of an error (e.g. [404] to capture a not-found page). |
| autoparse | boolean | – | Return the structured data the page publishes about itself (JSON-LD, OpenGraph, Twitter Card, microdata). No selectors; survives redesigns. |
| block_resources | array | – | Resource types the browser should not load, e.g. ["fonts","media","images"] (render only). Faster and cheaper. |
| cache | boolean | – | Serve a recent cached result if fresh (on by default). A hit is billed at the same price as the fetch that stored it: the cache saves time, not credits. Set false only when you need live data. |
| cache_ttl | integer | – | Max age in seconds of a cached copy to accept (0 forces a fresh fetch; capped at 48h). Freshness only: a hit is billed like a fetch. |
| custom_headers | object | – | Extra request headers sent to the target, e.g. {"Accept-Language":"de"}. |
| exclude_tags | array | – | CSS selectors to remove (e.g. ['nav','.ad','#cookie']). |
| extract | object | – | Selector-based extraction: a map of field -> CSS/XPath selector, e.g. {"title":"h1","price":".amount"}. Returns structured `data`. Precise and cheap when you know the page structure. |
| format | string | – | Output format. 'markdown' (default) is best for feeding to an LLM; 'html' returns the raw document; 'json' returns a structured envelope; 'pdf' prints the page in a full browser (routed there for you… |
| impersonate | boolean | – | Fetch tier only: present a real browser's TLS/JA3 + HTTP/2 fingerprint to clear passive bot gates. On by default; set false to send a plain client handshake. |
| include_tags | array | – | CSS selectors to KEEP (everything else is dropped). |
| links | boolean | – | Also return the page's discovered links as an absolute, de-duplicated list. |
| main_content_only | boolean | – | Strip the page to its main article, dropping nav/footer/aside. Defaults on for markdown. |
| max_cost | integer | – | Refuse (rather than run) a request that would cost more than this many credits. |
| method | string | – | HTTP method sent to the target (default GET; no request body can be sent). Anything but GET, HEAD or OPTIONS can change state on the target site: use it only when the user asks. |
| mode | string | – | Routing mode. `auto` lets the platform escalate fetch -> browser as needed, billing only the rung that worked. |
| network_capture | object | – | Record the API responses the PAGE fetched while rendering — often cleaner JSON than the DOM. Render only. |
| original_status | boolean | – | Return the target's own HTTP status instead of 200 for a successful scrape. |
| parse_pdf | boolean | – | Turn a PDF target into text/markdown (default true). false refuses PDFs. |
| proxy | string | – | Your own proxy URL to egress through. Takes precedence over the pool; no surcharge. |
| proxy_verify | boolean | – | Verify `proxy` is reachable before using it. |
| render | boolean | – | Render with a real browser (executes JavaScript). Use for single-page apps or pages whose content is painted client-side. Costs more than the default fetch tier. |
| screenshot | boolean | – | Capture a screenshot (requires render). |
| screenshot_format | string | – | Screenshot image format. |
| screenshot_fullpage | boolean | – | Capture the whole page, not just the viewport. |
| screenshot_quality | integer | – | Screenshot quality 1-100 (lossy formats). |
| screenshot_selector | string | – | Capture only the element matching this CSS selector. |
| session_id | string | – | Run inside a session from spicrawl_session_create: same exit IP and browser state (cookies, localStorage) across calls. |
| url | string | yes | The absolute URL to retrieve. |
| wait | integer | – | Milliseconds to wait after load before capturing (render only). |
| wait_for | string | – | CSS selector to wait for before capturing (render only). |
| wait_for_timeout | integer | – | Max milliseconds to wait for `wait_for`. |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | The page in the requested format (markdown, text or html); absent for a PDF. |
| credits | number | – | Credits charged for this call. |
| data | – | – | Output of `extract` or `autoparse`. |
| diagnostics | – | – | Which rendering tiers were tried, after an escalation. |
| empty_fields | – | – | `extract` rules that matched nothing: usually a broken selector. |
| engine | string | – | Rendering tier that produced the page: fetch, js or browser. |
| final_url | string | – | URL after redirects; may be empty. |
| headers | – | – | The target's response headers. |
| links | – | – | The page's links, absolute and de-duplicated, when `links` was set. |
| network | – | – | Responses the page fetched, when `network_capture` was set. |
| object | – | Present for format=pdf: the file itself is a resource content block. | |
| proxy_source | string | – | Whose exit carried the request: pool, custom or direct. |
| screenshots | – | – | Metadata of each screenshot; the images are separate image content blocks. |
| status | number | – | The target site's HTTP status (not this call's). Anything but 200/404/410 is charged 0. |
| truncated | boolean | – | The target body exceeded the size cap and was cut. |
| url | string | – | The requested URL. |
| warnings | – | – | Advisories about the call, e.g. an ignored option. |
No examples provided.
spicrawl_session_context Dump a session's stored context ~100
Return the full stored state of a LIVE session — cookies, localStorage and other credentials — plus its fingerprint and domain scores. The `session_context` object can be passed to spicrawl_session_create to clone the session. The result contains secrets (login cookies): do not echo it to the user or logs unless asked.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | The session id returned by spicrawl_session_create or spicrawl_session_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | – | Creation time, RFC 3339 UTC. |
| domain_scores | object | – | Per-domain standing, keyed by domain. Omitted when empty. |
| expires_at | string | – | Current expiry, RFC 3339 UTC. |
| fingerprint | – | – | Stored browser fingerprint; null when none. |
| last_used_at | string|null | – | Last use, RFC 3339 UTC; null if never used. |
| retired | string | – | Why the session was retired; absent while usable. |
| schema_version | integer | – | – |
| session_context | object | – | Cookies and storage: secrets. Pass it as `session_context` to spicrawl_session_create to clone the session. |
| session_id | string | yes | The session id. |
| usage_count | integer | – | – |
| warning | string | – | The API's reminder that this state dies with the session. |
No examples provided.
spicrawl_session_create Create a browsing session ~312
Create a session: a persistent browser identity (cookie jar, localStorage, a fixed rendering tier and, by default, a sticky exit IP) that survives across scrapes. Use it for multi-step flows — log in, then fetch pages behind the login — by passing the returned `id` as `session_id` to every `spicrawl_scrape` call that should share the state. The rendering tier is fixed for the session's lifetime and every scrape on the session runs on it. Leave `engine` out and one is chosen for you. Release the session with `spicrawl_session_release` when done. Returns the session object (id, engine, status, sticky_key, proxy, expires_at).
| Name | Type | Req | Description |
|---|---|---|---|
| domain_scores | object | – | Seed per-domain error scores (usually copied from a spicrawl_session_context dump). |
| engine | string | – | Rendering tier fixed for the session's lifetime. Optional: leave it out and one is chosen for you. `fetch` is plain HTTP; `js` is JavaScript rendering and refuses `actions`, `block_resources`, screen… |
| session_context | object | – | Seed the session's state (cookies, storage) — e.g. the `session_context` object from spicrawl_session_context, to clone a session. |
| ttl_seconds | integer | – | Idle lifetime in seconds (min 30, default 1800; the organization's maximum is enforced, not clamped). |
| Name | Type | Req | Description |
|---|---|---|---|
| context | – | – | Size summary of the stored context (counts only, no secrets); null once the session is not active. |
| created_at | string | – | Creation time, RFC 3339 UTC. |
| domain_scores | object | – | Per-domain standing, keyed by domain. Omitted when empty. |
| engine | string | – | Rendering tier the session is bound to: fetch, js or browser. |
| expires_at | string | – | Current expiry (slides on use), RFC 3339 UTC. |
| fingerprint | object | – | Browser fingerprint, as stored. |
| hard_expires_at | string | – | Fixed ceiling the expiry never passes, RFC 3339 UTC. |
| id | string | yes | Session id; pass it as `session_id` to spicrawl_scrape. |
| last_used_at | string|null | – | Last successful scrape, RFC 3339 UTC; null if never used. |
| lease | object | – | Present only while a scrape holds the session; release and delete are refused until it lapses unless `force`. |
| project_id | string | – | Project the session belongs to. |
| proxy | object | – | The session's exit intent (never an IP or endpoint). |
| released_at | string | – | Release time, on released sessions, RFC 3339 UTC. |
| retired | string | – | Why the session was taken out of service (expired, usage_exhausted, explicit); absent while usable. |
| status | string | – | active, released or expired; derived from the clock, and only `active` sessions can be used. |
| sticky_key | string | – | Exit pin in use (empty when rotate_ip was set). |
| usage_count | integer | – | Successful scrapes that used the session. |
| warnings | array | – | Decisions made on your behalf at creation, e.g. a TTL reduced to the organization maximum. |
No examples provided.
spicrawl_session_delete Delete a session ~121
Permanently delete a session and its stored state, including the record itself (prefer spicrawl_session_release if you only want to stop using it). Idempotent: deleting an already-deleted session succeeds. Refused while a scrape holds the session's lease unless `force` is true.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Break an active lease (a scrape currently using the session). Only set when you know it is safe. |
| session_id | string | yes | The session id returned by spicrawl_session_create or spicrawl_session_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| deleted | boolean | yes | Always true on success (deleting an already-deleted session succeeds). |
| session_id | string | yes | The id that was deleted. |
No examples provided.
spicrawl_session_get Get a session ~86
Return one session's metadata: status, `engine` (its rendering tier), proxy/exit, usage count, expiry, lease holder, and a summary of its stored context. Never returns the credentials themselves (use spicrawl_session_context for that).
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | The session id returned by spicrawl_session_create or spicrawl_session_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| context | – | – | Size summary of the stored context (counts only, no secrets); null once the session is not active. |
| created_at | string | – | Creation time, RFC 3339 UTC. |
| domain_scores | object | – | Per-domain standing, keyed by domain. Omitted when empty. |
| engine | string | – | Rendering tier the session is bound to: fetch, js or browser. |
| expires_at | string | – | Current expiry (slides on use), RFC 3339 UTC. |
| fingerprint | object | – | Browser fingerprint, as stored. |
| hard_expires_at | string | – | Fixed ceiling the expiry never passes, RFC 3339 UTC. |
| id | string | yes | Session id; pass it as `session_id` to spicrawl_scrape. |
| last_used_at | string|null | – | Last successful scrape, RFC 3339 UTC; null if never used. |
| lease | object | – | Present only while a scrape holds the session; release and delete are refused until it lapses unless `force`. |
| project_id | string | – | Project the session belongs to. |
| proxy | object | – | The session's exit intent (never an IP or endpoint). |
| released_at | string | – | Release time, on released sessions, RFC 3339 UTC. |
| retired | string | – | Why the session was taken out of service (expired, usage_exhausted, explicit); absent while usable. |
| status | string | – | active, released or expired; derived from the clock, and only `active` sessions can be used. |
| sticky_key | string | – | Exit pin in use (empty when rotate_ip was set). |
| usage_count | integer | – | Successful scrapes that used the session. |
| warnings | array | – | Decisions made on your behalf at creation, e.g. a TTL reduced to the organization maximum. |
No examples provided.
spicrawl_session_list List sessions ~114
List this API key's project's sessions, newest first. Returns `{ sessions: [...], next_cursor? }`; pass `next_cursor` back as `cursor` for the next page. Never includes the stored credentials.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | `next_cursor` from a previous page, verbatim. |
| engine | string | – | Only sessions on this rendering tier. |
| limit | integer | – | Page size (default 50, max 200). |
| status | string | – | Only sessions in this state. |
| Name | Type | Req | Description |
|---|---|---|---|
| next_cursor | string | – | Pass back as `cursor` for the next page; absent on the last page. |
| sessions | array | yes | Sessions on this page, newest first; may be short or empty under a `status` filter. |
No examples provided.
spicrawl_session_release Release a session ~156
End a session when you are done with it: frees its exit IP and browser state; it can no longer be used with spicrawl_scrape. Its stored cookies and storage are purged and cannot be recovered; start a new session and log in again to continue. The record stays visible (status `released`) so its history can still be inspected. Refused while a scrape holds the session's lease unless `force` is true. Returns the session object.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Break an active lease (a scrape currently using the session). Only set when you know it is safe. |
| session_id | string | yes | The session id returned by spicrawl_session_create or spicrawl_session_list. |
| Name | Type | Req | Description |
|---|---|---|---|
| context | – | – | Size summary of the stored context (counts only, no secrets); null once the session is not active. |
| created_at | string | – | Creation time, RFC 3339 UTC. |
| domain_scores | object | – | Per-domain standing, keyed by domain. Omitted when empty. |
| engine | string | – | Rendering tier the session is bound to: fetch, js or browser. |
| expires_at | string | – | Current expiry (slides on use), RFC 3339 UTC. |
| fingerprint | object | – | Browser fingerprint, as stored. |
| hard_expires_at | string | – | Fixed ceiling the expiry never passes, RFC 3339 UTC. |
| id | string | yes | Session id; pass it as `session_id` to spicrawl_scrape. |
| last_used_at | string|null | – | Last successful scrape, RFC 3339 UTC; null if never used. |
| lease | object | – | Present only while a scrape holds the session; release and delete are refused until it lapses unless `force`. |
| project_id | string | – | Project the session belongs to. |
| proxy | object | – | The session's exit intent (never an IP or endpoint). |
| released_at | string | – | Release time, on released sessions, RFC 3339 UTC. |
| retired | string | – | Why the session was taken out of service (expired, usage_exhausted, explicit); absent while usable. |
| status | string | – | active, released or expired; derived from the clock, and only `active` sessions can be used. |
| sticky_key | string | – | Exit pin in use (empty when rotate_ip was set). |
| usage_count | integer | – | Successful scrapes that used the session. |
| warnings | array | – | Decisions made on your behalf at creation, e.g. a TTL reduced to the organization maximum. |
No examples provided.
spicrawl_usage Usage breakdown ~308
Billing-grade usage for your org over a date window, from the daily rollup (usage_daily), grouped by day, project, engine, feature or key. group_by=key returns per API key (key_id, name, prefix, project_id) counters per metric per day, from usage_key_daily; keyless (dashboard) usage is not in it, and a project-scoped key sees only its own project's keys. Use it to answer 'how many requests/credits did I use, and where'. The window defaults to the last 30 days including today; `to` is EXCLUSIVE (a single day 2026-08-01 is from=2026-08-01, to=2026-08-02) and the window may not exceed 400 days. The response carries stale_seconds (age of the newest rollup row; null when the window is empty). Requires the key to have the `read` scope.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | Inclusive start date, YYYY-MM-DD (UTC). Default: 29 days before today. |
| group_by | string | – | How to group the rows. Default 'day'. |
| metrics | array | – | Metrics to return. Omit for all of them. |
| project_id | string | – | Restrict to one project id (must be a valid Spicrawl identifier). |
| to | – | – | EXCLUSIVE end date, YYYY-MM-DD (UTC). Default: tomorrow, so today is included. |
| Name | Type | Req | Description |
|---|---|---|---|
| group_by | string | – | The dimension used: day, project, engine, feature or key. |
| groups | – | – | The buckets, sorted by key. Empty (or missing for group_by=key) does not mean no usage: read totals. |
| keys | – | – | group_by=key only: one entry per API key, with its counters per UTC day. |
| period | object | – | The window, as a half-open range of UTC days. |
| stale_seconds | number|null | – | Age of usage_as_of in seconds; null when the window is empty. A large value means the rollup is behind. |
| totals | – | – | Billed quantities for the whole window. Authoritative; use these, not the sum of groups. |
| unattributed | – | – | The part of each total the groups do not explain. |
| usage_as_of | string|null | – | When the newest rollup row in the window was written; null when the window is empty. |
| warnings | array | – | Caveats the numbers would otherwise hide. |
No examples provided.
spicrawl_usage_reconciliation Usage reconciliation ~96
Drift report for ONE day: re-derives usage from that day's request log and compares it with the billed daily rollup, so you can see whether the rollup missed or double-counted anything. Defaults to yesterday (UTC); today is still accumulating and would always show drift. Requires the `read` scope.
| Name | Type | Req | Description |
|---|---|---|---|
| day | string | – | The UTC day to reconcile, YYYY-MM-DD. Default: yesterday. |
| Name | Type | Req | Description |
|---|---|---|---|
| day | string | – | The UTC day reconciled. |
| drift | – | – | Disagreements; empty means no drift. |
| interpretation | string | – | What the drift can and cannot prove. Read it before acting on drift. |
| repairable | boolean | – | Always false; nothing is repaired. |
| request_log_rows | number | – | Rows in the request log for the day; 0 means there was nothing to compare against. |
| warnings | array | – | Caveats the numbers would otherwise hide. |
No examples provided.
spicrawl_usage_summary Usage summary ~68
A compact current-period summary of your org's usage (totals as of now, from the daily rollup). No parameters. Use for a quick 'how much have I used so far'; use spicrawl_usage for a windowed breakdown. Requires the `read` scope.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| allowance | object | – | The monthly allowance the API enforces. Omitted when it cannot be read (warnings says so). |
| credits | – | – | Metered usage against the plan's included credits. Micro-credits: 1 credit = 1000000. |
| metrics | – | – | Every billed metric for the period. |
| period | object | – | The window, as a half-open range of UTC days. |
| period_elapsed_days | number | – | Whole days of the period elapsed; use it to pace consumption. |
| plan | object | – | – |
| stale_seconds | number|null | – | Age of usage_as_of in seconds; null when the window is empty. A large value means the rollup is behind. |
| unattributed | – | – | Metric name -> quantity. credits are micro-credits (1 credit = 1000000), engine_ms milliseconds, bytes_* bytes, the rest counts. |
| usage_as_of | string|null | – | When the newest rollup row in the window was written; null when the window is empty. |
| warnings | array | – | Caveats the numbers would otherwise hide. |
No examples provided.
How do I install the Spicrawl MCP server?
Spicrawl is a hosted endpoint at https://mcp.spicrawl.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.spicrawl.com
claude mcp add --transport http officialspicrawl-mcp 'https://mcp.spicrawl.com/mcp'
What is the Spicrawl MCP server?
Spicrawl is an MCP server listed in the public MCP registry as io.github.OfficialSpicrawl/mcp. Web scraping MCP server: any URL to Markdown or JSON, with JavaScript rendering and batch jobs. This page covers its hosted endpoint (https://mcp.spicrawl.com/mcp).
Is the Spicrawl MCP server safe to use?
Spicrawl scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Spicrawl MCP server expose?
Spicrawl exposes 24 tools: spicrawl_scrape, spicrawl_batch_submit, spicrawl_batch_list, spicrawl_batch_status, spicrawl_batch_results, and 19 more. Their descriptions and schemas cost roughly 5,503 tokens of context every time the server is loaded.
Does the Spicrawl MCP server require authentication?
Yes. Spicrawl asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Spicrawl MCP server still maintained?
Spicrawl is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.