Spicrawl
Server Details
Web data for AI agents. Spicrawl MCP lets agents fetch public web pages as clean Markdown, HTML, text, screenshots, PDFs, or structured JSON. It handles JavaScript-heavy pages and browser actions like clicking, filling forms, and scrolling.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 27 tools
Tools are cleanly partitioned by resource prefix (batch, session, browser, docs, request, usage) and each verb targets a distinct action. The few soft overlaps — batch_results vs batch_task_content vs batch_status, and session_release vs session_delete — are disambiguated by their descriptions (paginated finished-item list vs single-seq payload vs metadata; release vs permanent delete).
Nearly all tools follow a predictable spicrawl_<resource>_<verb> snake_case pattern (batch_submit, session_create, docs_read, usage_summary). Minor deviations: the singular request_get paired with plural requests_list, and the bare spicrawl_scrape without a resource segment, slightly break the pattern but remain readable.
At 27 tools it is slightly above the comfortable range, but the surface spans genuinely broad domains (batch, browser, sessions, docs, usage, requests) so most tools earn their place. The 9-tool batch cluster is the largest but each member covers a distinct lifecycle step.
Full lifecycle coverage across domains: scraping, complete batch management (submit/add/close/cancel/retry/status/results/content/list), full session lifecycle (create/get/list/context/release/delete), remote browser connect/control/live-view, docs search/read/index, and usage plus reconciliation. There are no obvious workflow dead ends.
Available Tools
27 toolsspicrawl_batch_add_itemsAdd URLs to an open batch jobAInspect
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 }.
Inputs: job_id (required), urls, wait, items, +9 more. Returns: job, items_added, items_dispatched
spicrawl_batch_cancelCancel a batch jobADestructiveIdempotentInspect
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.
Inputs: job_id (required). Returns: id, name, open, params, +20 more
spicrawl_batch_closeClose an open batch jobAIdempotentInspect
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.
Inputs: job_id (required). Returns: id, name, open, params, +20 more
spicrawl_batch_listList batch jobsARead-onlyIdempotentInspect
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.
Inputs: limit, cursor, status. Returns: batches, next_cursor
spicrawl_batch_resultsRead a batch job's resultsARead-onlyIdempotentInspect
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).
Inputs: job_id (required), limit, cursor, status. Returns: results, next_cursor
spicrawl_batch_retryRetry a batch job's failed itemsAInspect
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 }.
Inputs: job_id (required). Returns: job, items_reset, items_dispatched
spicrawl_batch_statusCheck a batch job's statusARead-onlyIdempotentInspect
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.
Inputs: job_id (required). Returns: id, name, open, params, +20 more
spicrawl_batch_submitSubmit a batch scrape jobAInspect
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.
Inputs: name, open, urls, wait, +16 more. Returns: id, name, open, params, +20 more
spicrawl_batch_task_contentRead one batch item's contentARead-onlyIdempotentInspect
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.
Inputs: seq (required), job_id (required). Returns: content
spicrawl_browser_connect_urlBrowser (CDP) connect URLAInspect
Mints a single-use connect URL for Spicrawl's remote browser (GET /v1/browser, a DevTools Protocol (CDP) WebSocket) so YOUR code can drive it with any CDP client, using the URL as the browser WebSocket endpoint. It calls POST /v1/browser/token and returns a ws:// or wss:// URL carrying a short-lived token, never the API key: the URL works ONCE, within 60 seconds, and only with the options given here (editing them in the URL is refused), so call this right before connecting and again for every new session. Prefer sending the key as an Authorization header when the client supports headers on the WebSocket upgrade: then connect to the plain /v1/browser URL with 'Authorization: Bearer ' and no token is needed. The key must carry the browser scope. Parameter errors are reported when minting. The result's session_id names the session once connected: when a page needs a person (a login, a one-time code, a captcha), pass it to spicrawl_browser_live_view for a link they can open, and to spicrawl_browser_control to see when they hand control back.
Inputs: proxy, engine, sticky_key, session_ttl, +2 more. Returns: url, notes, expires_at, session_id, +1 more
spicrawl_browser_controlWho controls a remote browserAIdempotentInspect
Reads or changes who drives a connected remote browser: agent (your CDP connection) or human (a person in its live view, see spicrawl_browser_live_view). status reads it: poll it after sending a live-view link, and continue once controller is agent again. takeover hands control to the person before they ask (your input and navigation then fail with error -32001); release takes it back. The person can also take and give back control from the live view themselves.
Inputs: session_id (required), action. Returns: status, controller, expires_at, session_id
spicrawl_browser_live_viewLive view link for a remote browserAInspect
Gets a link a person can open to watch the remote browser your CDP connection is driving, and take control of it: the same tabs, cookies and page. Use it when a page needs a human: a login, a one-time code, a captcha. Send them live_view_url; they press "Take control", do the step, and give control back. While they have it, your connection's input and navigation commands fail with error -32001 (reading the page still works); poll spicrawl_browser_control (action status) until controller is agent, then carry on. The link works once and must be opened within 60 seconds; ask again for a new one. The session must still be connected. Watching costs nothing beyond the session itself.
Inputs: session_id (required). Returns: live_url, expires_in, session_id, single_use, +1 more
spicrawl_docs_indexList the Spicrawl docsARead-onlyIdempotentInspect
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.
Inputs: no named parameters. Returns: url, content, truncated
spicrawl_docs_readRead a Spicrawl docs pageARead-onlyIdempotentInspect
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.
Inputs: path (required). Returns: url, title, md_url, content, +2 more
spicrawl_docs_searchSearch the Spicrawl docsARead-onlyIdempotentInspect
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.
Inputs: query (required), limit. Returns: hint, query, results, error_code
spicrawl_request_getGet one requestARead-onlyIdempotentInspect
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.
Inputs: id (required). Returns: id, url, proxy, spans, +15 more
spicrawl_requests_listList recent requestsARead-onlyIdempotentInspect
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.
Inputs: limit, before, status, before_id, +2 more. Returns: data, page
spicrawl_scrapeScrape a URLAInspect
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 (a natural-language ai_extract is coming soon), 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, ai_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.
Inputs: url (required), mode, wait, cache, +35 more. Returns: pdf, url, data, links, +13 more
spicrawl_session_contextDump a session's stored contextARead-onlyIdempotentInspect
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.
Inputs: session_id (required). Returns: retired, warning, created_at, expires_at, +7 more
spicrawl_session_createCreate a browsing sessionAInspect
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).
Inputs: engine, rotate_ip, sticky_key, fingerprint, +6 more. Returns: id, lease, proxy, engine, +14 more
spicrawl_session_deleteDelete a sessionADestructiveIdempotentInspect
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.
Inputs: session_id (required), force. Returns: deleted, session_id
spicrawl_session_getGet a sessionARead-onlyIdempotentInspect
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).
Inputs: session_id (required). Returns: id, lease, proxy, engine, +14 more
spicrawl_session_listList sessionsARead-onlyIdempotentInspect
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.
Inputs: limit, cursor, engine, status. Returns: sessions, next_cursor
spicrawl_session_releaseRelease a sessionADestructiveIdempotentInspect
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.
Inputs: session_id (required), force. Returns: id, lease, proxy, engine, +14 more
spicrawl_usageUsage breakdownARead-onlyIdempotentInspect
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.
Inputs: to, from, metrics, group_by, +1 more. Returns: keys, groups, period, totals, +5 more
spicrawl_usage_reconciliationUsage reconciliationARead-onlyIdempotentInspect
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.
Inputs: day. Returns: day, drift, warnings, repairable, +2 more
spicrawl_usage_summaryUsage summaryARead-onlyIdempotentInspect
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.
Inputs: no named parameters. Returns: plan, period, credits, metrics, +6 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityCmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.