9Router Web Fetch
Turn any URL into markdown, text, or HTML via 9Router's /v1/web/fetch, routing across Jina Reader, Firecrawl, Tavily, Exa, and Ollama Cloud with automatic provider fallback.
The skill is a read-only URL-fetch API wrapper with least privilege, no destructive defaults, and keys passed via environment variables rather than hardcoded; however, data-flow disclosure (URL content sent to upstream cloud providers), user confirmation, and rollback mechanisms are absent — deducted to 15.
Docs are internally consistent with matching request/response examples and a provider-quirk table; but static review shows no tests, no error-code documentation, and undefined failure feedback — static cap 10, deducted to 8.
Trigger scenarios are clear (scrape webpage, URL to markdown) with inputs/outputs and provider boundaries described; but the skill depends entirely on a local 9Router instance plus overseas upstreams (Jina/Firecrawl/Exa etc.) with no mainland-China reachability disclosure — deducted to 9.
Well-structured with a discovery endpoint and provider-quirk table; repo carries MIT license — but the skill has no version/changelog, defers setup to another SKILL.md via external link, and does not state maintenance/update responsibility — deducted to 9.
Core task (URL→markdown/text/html) has complete copy-paste curl/JS examples; but no execution evidence, and the response shape is shown once with conditional fields — static cap 7, deducted to 6.
Only author-authored docs and example requests; no test suites, no third-party execution evidence, no cross-source corroboration; repo CI covers only Docker publishing and docs deployment, not this skill's key paths — static cap 5, deducted to 4.
- This is a static source-only review; no requests were executed. Scores reflect documentation self-consistency, not tested behavior.
- Using this skill sends the target URL and its content to the selected upstream cloud provider (Firecrawl/Jina/Tavily/Exa/Ollama Cloud); avoid it for sensitive or internal pages.
- Core function depends on a local 9Router instance and overseas upstream APIs; mainland-China reachability is undisclosed and may fail.
- jina-reader has a ~1M chars/month free tier and exa uses x-api-key instead of Bearer; verify provider requirements before configuring.
- The skill has no version or changelog; upstream endpoint behavior may change with 9Router updates.
What does this skill do, and when should you use it?
9router-web-fetch is one of nine skills bundled in the decolua/9router repository (MIT licensed), located at skills/9router-web-fetch/. It wraps the /v1/web/fetch endpoint of a running 9Router instance so AI coding assistants can scrape webpages and return markdown, text, or HTML. Requests can be routed to Jina Reader, Firecrawl, Tavily Extract, Exa Contents, or Ollama Cloud, or chained via fetch-combo with auto-fallback. The prerequisite is an installed, running 9Router (npm install -g 9router) with NINEROUTER_URL set (plus NINEROUTER_KEY if auth is enabled). It suits users who want their assistant to read articles, extract page content, or convert URLs to markdown.
The skill is an operational guide: it POSTs to $NINEROUTER_URL/v1/web/fetch with a model (e.g. firecrawl, jina-reader, tavily, exa, ollama, or fetch-combo), a url, an optional format (markdown default / text / html), and an optional max_characters to truncate output. Discovery is done via GET /v1/models/web (IDs ending in /fetch) and per-provider parameters via /v1/models/info. The response includes title, content (format, text, length), links (currently from Ollama Cloud), metadata, fetch cost (0 in examples), and latency metrics.
- A developer using Claude Code or Codex who needs the assistant to read a technical article or docs page before writing code
- Users who want webpages converted into markdown for notes or as LLM context
- Researchers needing bulk page extraction (Tavily returns raw_content)
- Users scraping JavaScript-rendered pages where plain readers fail (choose Firecrawl)
- Users with an existing Ollama Cloud account who want to reuse that API key and also get discovered page links
- Users worried about a single scraping provider's rate limits who want fetch-combo automatic fallback
What are this skill's strengths and limitations?
- One endpoint aggregates five scraping backends (Jina Reader, Firecrawl, Tavily, Exa, Ollama Cloud) with a clear selection guide per scenario
- fetch-combo provides automatic fallback between backends so a single provider's limits don't break the task
- Controllable output (markdown/text/html) with max_characters truncation; responses include cost and latency metrics
- The Ollama backend reuses an existing ollama connection key; example responses show fetch_cost_usd of 0
- SKILL.md is a plain Markdown guide with no platform-only mechanisms, making it portable across Agent Skills clients
- Hard dependency on a running 9Router instance and NINEROUTER_URL/KEY; not a standalone scraping tool
- The source provides no test suite or independent release info for this skill
- The links field is currently returned only by Ollama Cloud, so backends are not feature-equivalent; jina-reader's free tier is about 1M chars/month
- Requires network access to external scraping services; page content goes to third-party providers
- Auth schemes differ per provider (exa uses x-api-key, others Bearer), so misconfiguration debugging falls on the user
How do you install this skill?
The skill ships inside the decolua/9router repo's skills/ collection. Install the main app globally: npm install -g 9router, then run 9router; the dashboard opens at http://localhost:20128. Place the skills/9router-web-fetch/ folder into your Agent Skills client's skills directory (e.g. Claude Code's), and set NINEROUTER_URL; add NINEROUTER_KEY if auth is enabled. To run from source: cp .env.example .env && npm install, then start in dev or build+start mode per the README. Exact steps for copying the skill folder into a specific client are not documented in the source.
How do you use this skill?
Trigger it with a prompt like "Fetch https://example.com and convert it to markdown" or "Read the content of this article". The skill directs the assistant to first run curl $NINEROUTER_URL/v1/models/web to list web-fetch providers, then POST to /v1/web/fetch, e.g.: curl -X POST $NINEROUTER_URL/v1/web/fetch -H "Authorization: Bearer $NINEROUTER_KEY" -H "Content-Type: application/" -d '{"model":"jina-reader","url":"https://9router.com","format":"markdown"}'. Use fetch-combo as the model for auto-fallback across providers, and pass max_characters to limit output length.
How does this skill compare with similar options?
Compared with calling individual scraping APIs directly (e.g. wiring up Firecrawl or Jina Reader yourself), this skill gives a unified entry point through 9Router with auto-fallback. Compared with the repo's other skills (such as the main 9router LLM-routing skill), this one only handles web fetching and format conversion — it does not cover chat model routing or token saving.