A self-contained browser engine that fetches, renders, and extracts web content as Markdown, JSON, or screenshots — no Chromium, no API key, no setup.
SaferSkills independently audited servo-fetch (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
curl or built-in web fetch instead)Start the MCP server: servo-fetch mcp (stdio) or servo-fetch mcp --port 8080 (Streamable HTTP)
Extract readable content from a URL. JavaScript is executed, CSS layout is computed, and navigation noise (navbars, sidebars, footers, cookie banners) is stripped automatically.
Parameters:
url (required): URL to fetch (http/https only)format: "markdown" (default), "json", "html", "text", or "accessibility_tree"selector: CSS selector to extract a specific section instead of full-page extractionmaxLength: max characters to return (default 5000)startIndex: character offset for paginationvisibility: "moderate" (default), "strict", or "off"timeout (s, default 30), settleMs (ms, default 0), userAgent, cookiesFile, headersfetch(url: "https://docs.rs/tokio", format: "markdown")
fetch(url: "https://example.com", format: "json", selector: "article")
fetch(url: "https://example.com", format: "accessibility_tree")PDF URLs are auto-detected via Content-Type and extracted directly.
Fetch multiple URLs in parallel. Results are returned as separate content entries in completion order. Failed URLs are reported inline without aborting the batch.
Parameters:
urls (required): array of URLs to fetch (http/https only, max 20)format: "markdown" (default), "json", "html", "text", or "accessibility_tree"selector: CSS selector to extract a specific sectionmaxLength: max characters per URL result (default 5000)visibility: "moderate" (default), "strict", or "off"timeout (s, default 30), settleMs (ms, default 0), userAgent, cookiesFile, headersbatch_fetch(urls: ["https://a.com", "https://b.com"], format: "markdown")
batch_fetch(urls: ["https://a.com", "https://b.com"], format: "json", selector: "article")Crawl a website starting from a URL, following same-site links via BFS. JavaScript is executed, CSS layout is computed, and navigation noise is stripped. Respects robots.txt.
Parameters:
url (required): starting URL to crawl (http/https only)limit: max pages to crawl (default 50, max 500)maxDepth: max link depth from seed (default 3, max 10)format: "markdown" (default) or "json"include: URL path patterns to include (e.g. ["/docs/**"])exclude: URL path patterns to excludemaxLength: max characters per page result (default 5000)selector: CSS selector to extract a specific section per pagetimeout (s, default 30), settleMs (ms, default 0), userAgent, cookiesFile, headerscrawl(url: "https://docs.example.com", limit: 20, maxDepth: 3)
crawl(url: "https://docs.example.com", include: ["/guide/**"], limit: 50)Capture a PNG screenshot. Uses Servo's software renderer — works without GPU.
Parameters:
url (required): URL to capturefullPage: capture the full scrollable page (default false)timeout (s, default 30), settleMs (ms, default 0), userAgent, cookiesFile, headersscreenshot(url: "https://example.com")
screenshot(url: "https://example.com", fullPage: true)Evaluate a JavaScript expression after the page loads. Console messages (log, warn, error) are appended to the result.
Parameters:
url (required): URL to loadexpression (required): JavaScript expression to evaluatetimeout (s, default 30), settleMs (ms, default 0), userAgent, cookiesFile, headersexecute_js(url: "https://example.com", expression: "document.title")
execute_js(url: "https://example.com", expression: "[...document.querySelectorAll('h2')].map(e => e.textContent)")servo-fetch https://example.com # Markdown (default)
servo-fetch https://example.com --format json # Structured JSON
servo-fetch URL1 URL2 URL3 # Parallel batch (Markdown with separators)
servo-fetch URL1 URL2 --format json # Parallel batch (NDJSON)
servo-fetch https://example.com --format png -o out.png # Save PNG screenshot
servo-fetch https://example.com --js "document.title" # Run JavaScript and print result
servo-fetch https://example.com --selector article # Extract a section by CSS selector
servo-fetch https://example.com --schema schema.json # Schema-driven JSON
servo-fetch https://example.com --cookies cookies.txt # Send session cookies
servo-fetch https://example.com -H "Authorization: Bearer TOKEN" # Custom request header (repeatable)
servo-fetch https://example.com --format html # Raw HTML
servo-fetch https://example.com --format text # Plain text
servo-fetch https://example.com -t 60 # Custom timeout
servo-fetch https://example.com --settle 500 # Extra wait for SPAs
servo-fetch crawl https://docs.example.com --limit 20 # Crawl a site (BFS)
servo-fetch crawl https://docs.example.com --include "/docs/**" # Crawl with path filter
servo-fetch URL --output page.md # Save a single URL to a file
servo-fetch crawl URL --output-dir ./pages/ # One file per pagetimeout parameter for slow pagesFor pagination patterns, format selection, and MCP configuration, see references/guide.md.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.