Intercept

io.github.bighippoman由 GitHub 帳號 bighippoman 發布v3.0.8更新於 Nov 10, 2026

Give your AI the ability to read the web. Fetches URLs as clean markdown with multi-tier fallback.

概覽

AI 產生的概覽

一個本機 MCP 伺服器,讓助理把網頁抓取成乾淨的 Markdown,並提供站點專用處理、多層備援、搜尋與結構化擷取。

可以做什麼
抓取單一網址並回傳 Markdown,涵蓋推文、YouTube、arXiv、PDF、維基百科與 GitHub 頁面,具備多層備援與長內容分頁;直接圖片網址會以圖片區塊回傳,供助理的視覺模型讀取。平行抓取最多 10 個網址,可設定每個網址的長度上限。搜尋網頁,可依站點或時間範圍限定,並提供搜尋加抓取的組合研究呼叫。依 CSS 選擇器從頁面擷取指定欄位或 HTML 表格,回傳結構化 JSON。以資源形式列出本次工作階段最近抓取的網址,並提供研究與文章擷取提示詞。
適用情境
適合助理需要讀取經常阻擋一般請求的網頁內容,或希望用一次呼叫完成搜尋加閱讀的情境。適用於文章、論文、影片、程式碼儲存庫與文件的資料研究。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js 20 或更新版本。抓取不需要任何金鑰。選用:BRAVE_API_KEY 或 SEARXNG_URL 用於搜尋,GITHUB_TOKEN 提高 GitHub API 限額,CF_API_TOKEN 與 CF_ACCOUNT_ID 用於 JavaScript 較重的頁面,以及對外流量的代理設定。
安裝前請注意
預設情況下每次抓取都會查詢並向 agentsweb.org 的公開共享快取貢獻內容;可用 INTERCEPT_SHARED_CACHE 關閉或改為唯讀模式。INTERCEPT_AUTH 保存有效的 Cookie 或權杖,應避免出現在 shell 歷史與提交中。選用的隱身抓取可能違反網站條款,商業解鎖服務依請求計費。抓取到的內容屬於不可信的網頁資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Intercept,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

intercept-mcp

Give your AI the ability to read the web. One command, no API keys required.

Without it, your AI hits a URL and gets a 403, a wall, or a wall of raw HTML. With intercept, it almost always gets the content — clean markdown, ready to use.

Handles tweets, YouTube videos (with transcripts when available), arXiv papers, PDFs, Wikipedia articles, and GitHub repos. If the first strategy fails, it tries up to 14 more before giving up.

Works with any MCP client: Claude Code, Claude Desktop, Codex, Cursor, Windsurf, Cline, and more.

[intercept-mcp MCP server]

Install

Claude Code

bash
claude mcp add intercept -s user -- npx -y intercept-mcp

Codex

bash
codex mcp add intercept -- npx -y intercept-mcp

Cursor

Settings → MCP → Add Server:

json
{  "mcpServers": {    "intercept": {      "command": "npx",      "args": ["-y", "intercept-mcp"]    }  }}

Windsurf

Settings → MCP → Add Server → same JSON config as above.

Claude Desktop

Add to your claude_desktop_config.json:

json
{  "mcpServers": {    "intercept": {      "command": "npx",      "args": ["-y", "intercept-mcp"]    }  }}

Other MCP clients

Any client that supports stdio MCP servers can run npx -y intercept-mcp.

No API keys needed for the fetch tool.

How it works

URLs are processed in four stages:

1. Site-specific handlers

Known URL patterns are routed to dedicated handlers before the fallback pipeline:

PatternHandlerWhat you get
twitter.com/*/status/*, x.com/*/status/*Twitter/XTweet text, author, media, engagement stats (via third-party APIs)
youtube.com/watch?v=*, youtu.be/*YouTubeTitle, channel, duration, views, description, transcript (when captions available)
arxiv.org/abs/*, arxiv.org/pdf/*arXivPaper metadata, authors, abstract, categories
*.pdfPDFExtracted text (text-layer PDFs only)
*.wikipedia.org/wiki/*WikipediaClean article content via Wikimedia REST API
github.com/{owner}/{repo}GitHubRaw README.md content
github.com/{o}/{r}/blob/{ref}/{path}GitHubRaw file content, code-fenced by language
github.com/{o}/{r}/issues/{n}, /pull/{n}GitHubIssue/PR title, state, body, diff stats, comments (via GitHub API)
github.com/{o}/{r}/releases/tag/{t}, /releases/latestGitHubRelease notes (via GitHub API)

The GitHub API endpoints work unauthenticated (60 requests/hour). Set GITHUB_TOKEN to raise the limit.

2. Shared cache (agentsweb.org)

After specialized handlers, public requests check agentsweb.org for a complete result within the requested freshness window. Partial, stale, mismatched, and blocked responses are rejected. Cache latency depends on the network and storage location.

Complete public live retrievals can contribute refresh hints. agentsweb verifies a page through its own retrieval pipeline before publishing it. Confirmations do not reset retrieval time. Authenticated, signed, and GitHub-token requests never use the public cache.

Opt out entirely with INTERCEPT_SHARED_CACHE=false, or use read-only mode (consume but never contribute) with INTERCEPT_CACHE_READ_ONLY=true.

agentsweb.org API

agentsweb.org also exposes standalone endpoints for direct use:

  • /web?q= — search the web
  • /research?q= — search + fetch + cache in one call
  • /fetch?url= — fetch on demand, auto-cached

See agentsweb.org/docs for full API documentation.

3. Fallback pipeline

If no handler matches (or the handler returns nothing), the URL enters the multi-tier pipeline:

TierFetchersBehavior
0agentswebFresh, complete shared content
1Native Markdown, direct HTMLContact the origin first
2Cloudflare Browser Run, JinaHosted extraction; parallel with a short quality comparison window
3Stealth, Codetabs, FlareSolverr, configured unlockerAdditional live retrieval paths
4Wayback, Arquivo, Common Crawl, archive.ph; RSS and scholarly/discussion sourcesLabeled historical or partial fallbacks
5Open Graph metadataMetadata only; insufficient stubs are failures

A successful hosted result stops a slower provider after a 200 ms comparison window. Repeated provider failures trigger a short cooldown. Direct-host health is tracked per host. Historical snapshots never outrun live sources; noCache disables archives unless allowArchive is explicitly true.

4. Caching

Results are cached in-memory with TTL (60 min for successes, 5 min for failures). Max 250 entries with LRU eviction. Failures are cached by retrieval policy, so a shallow failed attempt does not prevent a later broader retry. Duplicate in-flight requests share work while retaining independent cancellation. All three knobs are configurable via INTERCEPT_CACHE_TTL_MS, INTERCEPT_CACHE_FAILURE_TTL_MS, and INTERCEPT_CACHE_SIZE.

Tools

fetch

Fetch a URL and return its content as clean markdown.

  • url (string, required) — URL to fetch
  • maxTier (number, optional, 1-5) — Stop at this tier for speed-sensitive cases
  • maxLength (number, optional, default 50000) — Maximum characters to return
  • startIndex (number, optional, default 0) — Character offset for paginating long content
  • noCache (boolean, optional) — Skip session and shared caches and fetch live
  • timeoutMs — Overall deadline, including downloads (default 25000; research 35000)
  • maxAgeSeconds — Maximum cache age (default 3600; 0 forces retrieval)
  • allowArchive — Permit labeled historical fallbacks (disabled by noCache unless explicitly enabled)

Long pages are truncated at maxLength with a notice telling the agent which startIndex continues the content. Structured output reports source, quality, contentLength, truncated, nextStartIndex, and cacheAgeSeconds so agents can branch on them programmatically. It also reports completeness, sourceKind, retrievedAt, verifiedAt when available, canonicalUrl, contentHash, and title. Research includes verbatim relevant passages with offsets and citation URLs; set passagesOnly to return those excerpts instead of full documents.

Direct image URLs (.png, .jpg, .gif, .webp, up to 5 MB) are returned as an MCP image block instead of text, so the agent's own vision model can read charts, diagrams, screenshots, and scanned documents. The structured output reports source: "image", mimeType, and bytes.

fetch_batch

Fetch up to 10 URLs in parallel, each through the same handler/fallback chain.

  • urls (string[], required, 1-10) — URLs to fetch
  • maxTier, noCache — as in fetch
  • maxLength (number, optional, default 20000) — Per-URL character budget

research

Search the web and fetch the top results in one call — replaces a search followed by several fetches.

  • query (string, required) — Search query
  • count (number, optional, 1-5, default 3) — Results to fetch
  • maxLength (number, optional, default 20000) — Per-result character budget
  • site (string, optional) — Restrict to a domain
  • freshness (string, optional) — day, week, month, or year

search

Search the web and return results.

  • query (string, required) — Search query
  • count (number, optional, 1-20, default 5) — Number of results
  • site (string, optional) — Restrict results to a domain
  • freshness (string, optional) — day, week, month, or year
  • page (number, optional, 1-10) — Results page for pagination

Uses Brave Search API if BRAVE_API_KEY is set, then SearXNG if SEARXNG_URL is set, then DuckDuckGo as an unreliable last resort. freshness and page are ignored by the DuckDuckGo fallback.

extract

Extract specific values from a page as JSON instead of markdown prose — for when you need particular data, not the whole page. Honors per-domain auth and proxies.

  • url (string, required) — The URL to extract from
  • selectors (object, optional) — Map of field name → CSS selector. Each value is either a selector string (returns the first match's text) or { selector, attr?, all? } — attr extracts an attribute (e.g. href), all: true returns every match as an array.
  • tables (boolean, optional) — Convert every HTML table to an array of row objects (defaults to true when no selectors are given).
json
{  "url": "https://shop.example.com/item",  "selectors": {    "title": "h1",    "price": ".price",    "images": { "selector": "img.gallery", "attr": "src", "all": true }  }}

Returns the extracted fields and/or tables as structured output.

Resources

intercept://session/recent

Markdown list of URLs fetched and cached in this session, most recent first. Re-fetching any of them is instant.

Prompts

research-topic

Search for a topic and fetch the top results for a multi-source summary.

  • topic (string) — The topic to research
  • depth (string, default "3") — Number of top results to fetch

extract-article

Fetch a URL and extract the key points from the content.

  • url (string) — The URL to fetch and summarize

Environment variables

VariableRequiredDescription
BRAVE_API_KEYNoBrave Search API key for search
SEARXNG_URLNoSelf-hosted SearXNG instance URL (recommended)
GITHUB_TOKENNoGitHub token raising API rate limits for the issue/PR/release handler
INTERCEPT_AUTHNoJSON map of domain → headers/cookies, to fetch content you're logged in to (see Per-domain authentication)
CF_API_TOKENNoCloudflare API token with "Browser Rendering - Edit" permission
CF_ACCOUNT_IDNoCloudflare account ID (required if CF_API_TOKEN is set)
USE_STEALTH_FETCHNoSet to true to enable stealth fetcher (see warning below)
FLARESOLVERR_URLNoURL of a FlareSolverr instance (e.g. http://localhost:8191) to solve Cloudflare/DDoS-Guard challenges
WEB_UNLOCKER_URLNoGET template (with a {url} placeholder and your API key) for a commercial web-unlocker like ScrapingBee/ScraperAPI/ZenRows — the paid last resort for the hardest sites
INTERCEPT_SHARED_CACHENoSet to false to disable the agentsweb.org shared cache
INTERCEPT_CACHE_READ_ONLYNoSet to true to consume but never contribute to the shared cache
INTERCEPT_CACHE_TTL_MSNoIn-memory cache TTL for successful fetches in ms (default 3600000 = 60 min)
INTERCEPT_CACHE_FAILURE_TTL_MSNoIn-memory cache TTL for failed fetches in ms (default 300000 = 5 min)
INTERCEPT_CACHE_SIZENoMax in-memory cache entries (default 250)
HTTPS_PROXY / HTTP_PROXYNoStandard proxy passthrough — routes all outbound fetches (including stealth) through the proxy. Honors NO_PROXY.
INTERCEPT_PROXIESNoComma/space-separated list of HTTP(S) proxies to rotate across, with automatic retry through the next proxy on a blocked response. Takes precedence over HTTPS_PROXY.

Search: Has a DuckDuckGo fallback but it's rate-limited and unreliable. For production use, self-host SearXNG and set SEARXNG_URL (see below), or get a Brave Search API key.

Fetch: Works without any keys. Set CF_API_TOKEN + CF_ACCOUNT_ID to enable Cloudflare Browser Run (formerly Browser Rendering) for JavaScript-heavy pages (SPAs, React sites).

Stealth fetch (USE_STEALTH_FETCH)

Use at your own risk. When enabled, this adds a fetcher that impersonates real browser TLS fingerprints (Chrome/Firefox cipher suites, HTTP/2 settings, header ordering) using got-scraping. This can bypass bot detection and CAPTCHA triggers on sites that would otherwise block automated requests.

This fetcher runs at tier 3 after the regular raw fetch. If the raw fetch gets blocked (CAPTCHA, Cloudflare challenge, 403), the stealth fetcher retries with browser impersonation.

This may violate the terms of service of some websites. The authors of intercept-mcp take no responsibility for how this feature is used. It is disabled by default and must be explicitly opted into.

Challenge solving (FLARESOLVERR_URL)

The stealth fetcher impersonates a browser's TLS fingerprint, but it can't execute a JavaScript challenge — so sites protected by a Cloudflare "Checking your browser" / DDoS-Guard interstitial still block it. FlareSolverr runs a real headless browser that solves the challenge and returns the page HTML.

Run it (Docker):

bash
docker run -d -p 8191:8191 ghcr.io/flaresolverr/flaresolverr:latest

Then set FLARESOLVERR_URL=http://localhost:8191. It runs at tier 3 as a last resort after the raw and stealth fetchers, and only when this variable is set. Solving a challenge can take 30–60s, so it's the slowest fetcher — but it recovers pages nothing else can.

Commercial web unlocker (WEB_UNLOCKER_URL)

For the hardest targets — sites that need residential IP rotation and real-browser rendering and CAPTCHA handling together — a commercial unlocker is the pragmatic answer. intercept-mcp supports any unlocker that exposes a "GET this URL, return the HTML" endpoint, via a template with a {url} placeholder that holds your API key:

bash
# ScrapingBeeWEB_UNLOCKER_URL='https://app.scrapingbee.com/api/v1/?api_key=KEY&render_js=true&url={url}'# ScraperAPIWEB_UNLOCKER_URL='https://api.scraperapi.com/?api_key=KEY&render=true&url={url}'# ZenRowsWEB_UNLOCKER_URL='https://api.zenrows.com/v1/?apikey=KEY&js_render=true&url={url}'

intercept substitutes the (URL-encoded) target for {url} and converts the returned HTML (or JSON wrapping it) to markdown. It runs at tier 3 as a paid last resort after the free fetchers, only when this variable is set — and your credentials in the template are only ever sent to the unlocker, never to the target. Bright Data's proxy-based Web Unlocker is just an authenticated proxy, so use HTTPS_PROXY / INTERCEPT_PROXIES for that instead. This bills per request.

Bring-your-own proxy (HTTPS_PROXY)

If raw fetches start getting flagged, the most effective fix is usually a clean outbound IP — not a fancier fingerprint. intercept-mcp honors the standard HTTPS_PROXY / HTTP_PROXY / NO_PROXY env vars, so you can route all outbound traffic through whatever proxy you already have:

bash
HTTPS_PROXY=http://user:[email protected]:8080 npx intercept-mcp

This works with any HTTP(S) proxy — a self-hosted Squid, a Tailscale exit node, a $5 VPS running 3proxy, or commercial residential proxies (Bright Data, Oxylabs, etc.). The stealth fetcher and got-scraping calls also pick this up automatically.

Proxy rotation (INTERCEPT_PROXIES)

A single proxy still presents a single IP, which can itself get flagged under load. Set INTERCEPT_PROXIES to a comma- or space-separated list and intercept-mcp round-robins across them, automatically retrying through the next proxy when a request comes back blocked (HTTP 403, 429, 451, 503) or errors:

bash
INTERCEPT_PROXIES="http://user:[email protected]:8080,http://user:[email protected]:8080,http://p3.example.com:8080" npx intercept-mcp

Requests spread across the list, and a blocked response is retried through a different egress (up to 3 attempts) before giving up — so a handful of cheap proxies, or a rotating residential endpoint listed multiple times, behave like a pool. INTERCEPT_PROXIES takes precedence over HTTPS_PROXY, applies per request (so the stealth and archive.ph got-scraping calls rotate too), and accepts HTTP(S) proxies. Invalid entries are ignored.

Per-domain authentication (INTERCEPT_AUTH)

Most of the web is behind a login. INTERCEPT_AUTH lets you attach your own headers or cookies to requests for a specific origin, so the fetch tools can read content you're legitimately signed in to — a paid subscription, a private dashboard, an intranet, an authenticated API.

It's a JSON object mapping a domain to a header map. A domain also matches its subdomains:

bash
INTERCEPT_AUTH='{  "nytimes.com": { "Cookie": "nyt-s=...; nyt-a=..." },  "api.acme.com": { "Authorization": "Bearer eyJ..." }}' npx intercept-mcp

To get a cookie: open the site logged-in, open DevTools → Network, copy the Cookie request header from any request to that domain.

Security model — read this before using it

  • Credentials only ever go to the configured origin. Headers are keyed on the actual host being contacted. Requests matching per-domain authentication use direct origin retrieval only. Redirects are revalidated and custom credentials are stripped across origins.
  • Authenticated responses never touch the shared cache. When a request matches an INTERCEPT_AUTH entry, intercept does not read from or write to the public agentsweb.org cache for that URL — so your private/paid content is never published, and you always get your authenticated view rather than a stranger's anonymous copy. (The in-process session cache still applies.)
  • Treat the value as a secret. It contains live session tokens. Environment variables are visible to the process and its children and may be captured in shell history or process listings — prefer a secrets manager or a non-committed env file, and never commit it. Cookies expire, so you'll periodically need to refresh them.
  • You are responsible for authorized use. Only supply credentials for accounts you own or are permitted to use, and respect each site's terms of service. intercept simply forwards the headers you provide.

Self-hosting SearXNG

For reliable search, self-host SearXNG with Docker. A config is included in the repo:

bash
git clone https://github.com/bighippoman/intercept-mcp.gitcd intercept-mcp/searxng && docker compose up -d

Then set SEARXNG_URL=http://localhost:8888. No rate limits, no CAPTCHAs, aggregates Google + Bing + DuckDuckGo + Wikipedia + Brave.

Or use any existing SearXNG instance — just set SEARXNG_URL to its URL.

URL normalization

Incoming URLs are automatically cleaned:

  • Strips 60+ tracking params (UTM, click IDs, analytics, A/B testing, etc.)
  • Removes hash fragments
  • Upgrades to HTTPS
  • Cleans AMP artifacts
  • Preserves functional params (ref, format, page, offset, limit)

SSRF protection

Agents pass URLs taken from untrusted web content, so the fetch tools refuse anything pointing at local or internal infrastructure: loopback and private IPv4/IPv6 ranges, link-local addresses (including the 169.254.169.254 cloud metadata endpoint), CGNAT, multicast/reserved ranges, and local hostnames (localhost, *.local, *.internal, *.home.arpa). Literal IPs are checked, including alternate notations (decimal, hex) normalized by the URL parser; DNS is not resolved, so public hostnames pointing at private IPs are not caught.

Content quality detection

Each fetcher result is scored for quality. Automatic fail on:

  • CAPTCHA / Cloudflare challenges
  • Login walls
  • HTTP error pages in body
  • Content under 200 characters

Requirements

  • Node.js >= 22.18.0
  • No API keys required for basic use

Validate and release

npm run check runs deterministic regression tests and builds the package. npm run test:live is the optional network smoke suite; provider availability can vary. npm pack produces a reviewable release tarball. npm publish runs the deterministic checks again. CI tests Node.js 22 and 24.

Version 6 preserves functional URL variants and changes fallback ordering to live-first. Consumers should use completeness and sourceKind, rather than assuming every successful result is a complete live document. Source content is untrusted data; extraction quality is not an instruction-safety guarantee.

來源:README.md,提交 0c16893

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v3.0.8最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分