The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Skim402 listing page.
Skim is the complete web toolkit for AI agents—not just a simple page reader. Get a free card key at skim402.com/pricing; wallet/x402 is optional.
skim-mcp is the official Model Context Protocol server for Skim. It turns public pages into clean, agent-ready Markdown—typically ~4x smaller than raw HTML in Skim's measured comparisons—and exposes the full toolkit: clean reads, batch reads, JavaScript/browser rendering, structured extraction, crawling, PDFs, page-change watches, and curated Signals.
Default path: a card-plan API key. Get a free sk402_ key at skim402.com (pricing). Paste it as SKIM_API_KEY. A crypto wallet is not required.
Optional path: x402 wallet pay. If you prefer pay-per-call in USDC on Base, you can set SKIM_WALLET_PRIVATE_KEY instead. Ignore this unless you want it.
Tools in this package: read_url, read_urls, extract_url, crawl_url, read_pdf, watch_urls, check_watch, poll_signal.
Try before you integrate: use the Playground for a quick read or the Workbench to test batches, extraction, crawl, PDFs, watches, and Signals.

1. Get a free key at skim402.com — it starts with sk402_. Card required at signup; 1,000 reads/month on the free plan. Details: skim402.com/pricing.
2. Add this to your MCP client. Claude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Cursor — ~/.cursor/mcp.json (or Settings → MCP). Same JSON works in Cline, Continue, Zed, and other MCP clients:
3. Restart the client and ask it to read a URL:
Only if you prefer pay-per-call ($0.002 USDC on Base) instead of a card key. You can skip this entire block.
Fund a dedicated Base wallet with a small USDC balance ($1 ≈ 500 reads). Setup guide: https://skim402.com/wallet.
Use a fresh wallet, not your personal one. This private key lives in a plaintext config file on your machine — treat it like a hot wallet for $0.002 tolls, not a savings account.
Do I need an API key?
Yes for the default path. Get a free sk402_ key at https://skim402.com. A wallet is optional.
Is this wallet-only? Do I need crypto?
No. Card API key is the default. x402 wallet pay is optional.
What tools can my agent call?
read_url, read_urls (batch), extract_url, crawl_url, read_pdf, watch_urls, check_watch, and poll_signal.
With a card key:
Wallet / x402 challenge (optional — returns HTTP 402 if you send no payment):
read_urlReads any URL and returns clean Markdown with a YAML frontmatter block.
Input: { "url": "https://example.com/article" }
Routes: GET /api/t/read?url= (API key) · POST /api/v1/read (wallet)
Output:
read_urlsBatch-read 1–10 URLs in one call. Optional stripLinks / stripImages.
Input: { "urls": ["https://a.example", "https://b.example"] }
Routes: POST /api/t/read/batch · POST /api/v1/read/batch
extract_urlStructured JSON from a page. Pass a JSON Schema, or a preset: article, product, job, review, event, table.
Input: { "url": "https://example.com/product", "preset": "product" }
Routes: POST /api/t/extract · POST /api/v1/extract
Presets are sent as schemas on those extract routes.
crawl_urlCrawl a site (origin or start URL) and return clean Markdown per page. Discovers sitemap.xml / robots.txt sitemaps plus same-origin links. Cap 25 pages. 1 credit per successful page; failed pages are not charged.
Input: { "url": "https://example.com", "maxPages": 10 }
Optional: stripLinks, stripImages. Bare hosts like example.com are treated as https://example.com.
Route: POST /api/t/crawl (API key). No x402 /v1 twin — set SKIM_API_KEY.
read_pdfFetch a public PDF URL and return clean Markdown plus an optional bookmark outline. Text comes only from the file. Image-only scans return 422 (no OCR). Files larger than 8 MB return 413. 3 credits; failed conversions are not charged.
Input: { "url": "https://example.com/paper.pdf" }
Optional: outline (default true).
Route: POST /api/t/read-pdf (API key). No x402 /v1 twin — set SKIM_API_KEY.
poll_signalPoll a Skim Signal and return the latest structured items (title, summary, source, timestamp, link, entities). 2 credits per successful poll; failed polls are refunded.
Requires SKIM_API_KEY. Wallet-only configs get a clear error.
Input: { "slug": "ai-news", "limit": 20 }
Optional filters (pass only those the feed documents): forms (sec-filings, campaign-finance), categories (deals), fields (research), states (film-incentives), committees (campaign-finance).
Slugs: ai-news, sec-filings, crypto-news, macro, security, regulations, courts, recalls, deals, launches, trending, research, energy, entertainment, studio-jobs, campaign-finance, film-incentives. Use x402 for the ecosystem feed.
Routes (API key): GET /api/t/signal/{slug}/latest?limit= · GET /api/t/feeds/x402/latest?limit= (x402 is not /signal/x402)
watch_urls / check_watchRegister 1–20 URLs, then poll for content diffs. watch_id is a secret.
Input: { "urls": ["https://competitor.com/pricing"], "note": "pricing" } then { "watch_id": "w_…" } (optional status_only: true)
Routes (API key): POST /api/t/watch · GET /api/t/watch/diff?id= · GET /api/t/watch/status?id=
Routes (wallet): POST /api/v2/watch · GET /api/v2/watch/diff?id= · GET /api/v2/watch/status?id=
| Variable | Required | Default | Notes |
|---|---|---|---|
SKIM_API_KEY | yes (or wallet) | — | Card-plan API key (sk402_...). Get one free at skim402.com / pricing. Takes priority over SKIM_WALLET_PRIVATE_KEY. |
SKIM_WALLET_PRIVATE_KEY | optional | — | Only if you are not using a card key. Hex private key for a dedicated Base wallet that pays x402 reads ($0.002 USDC/call). Ignored when SKIM_API_KEY is set. Never use a personal wallet. |
SKIM_MAX_PRICE_USD | no | 0.01 | Wallet lane only. Hard cap on per-call price in USD. Single reads are $0.002. Batch / extract / watch cost more — raise this (e.g. 0.05) if the wallet lane rejects those calls. |
SKIM_API_URL | no | https://skim402.com | Override the API base URL. For self-hosting or local development. |
SKIM_TIMEOUT_MS | no | 90000 | Hard deadline per call in milliseconds. Aborts stalled requests so a single bad call can never hang your agent. Unsettled calls are never charged, so retry is safe. |
Card lane (default):
Wallet lane (x402, optional):
End-to-end latency is typically 1.5–2 seconds including settlement. Wallet-lane private keys never leave your machine — they only sign authorizations locally.
skim-mcp only talks to skim402.com (or whatever you set as SKIM_API_URL). No analytics, no error reporting, no phone-home."No tool named read_url shows up in Claude/Cursor."
Restart the client fully (quit, don't just reload the window). MCP servers are spawned at client startup. If still missing, run npx skim-mcp directly in a terminal — if you get a stack trace, it's likely Node < 18.
"401 Unauthorized" with card key.
Your SKIM_API_KEY is invalid or expired. Get a fresh one at skim402.com/pricing.
"402 Payment Required loops forever" (wallet lane). Your wallet is out of USDC on Base mainnet. Check the balance on BaseScan, top up if needed.
"USDC is on Ethereum, not Base." This is the most common funding mistake. USDC on Ethereum mainnet does not work — Skim only accepts USDC on Base. See https://skim402.com/wallet for the bridging walkthrough.
MIT