Wigolo

io.github.KnockOutEZ由 GitHub 帳號 KnockOutEZ 發布v0.2.1更新於 Nov 3, 2026

Local-first web intelligence MCP server for AI coding agents

概覽

AI 產生的概覽

本地優先的網頁情報 MCP 伺服器,讓 AI 助理能搜尋、擷取、爬取、結構化抽取、快取、研究與自主蒐集網頁資料。

可以做什麼
  • 以多個搜尋引擎並行搜尋網頁,回傳含評分、原文摘錄與引用的結果
  • 擷取單一網址並轉成乾淨的 Markdown,遇到反爬或單頁應用時升級為無頭瀏覽器,支援 PDF 與頁面操作
  • 依廣度、深度或網站地圖爬取多頁網站,並抽取表格、JSON-LD 或自訂 Schema 等結構化資料
  • 查詢本機快取中已看過的內容、尋找相似頁面,以及比對與監看頁面變化
  • 產生附引用的研究報告,或執行含步驟紀錄與時間預算的自主多步蒐集流程,可選擇由大型語言模型合成答案
適用情境
適合需要自帶網頁能力的編碼助理或自架代理:搜尋、讀取頁面、爬取網站並給出有憑據的答案,而不必按查詢次數付費。也適合希望結果快取在本機、資料不外流的環境。
執行需求
以本機 Node 程序執行,需要 Node 20 以上(建議 LTS 版本)與約 1.5 GB 可用磁碟空間,供瀏覽器引擎與本機模型使用;可透過 npx 或 Docker 安裝。核心工具不需金鑰。可選的答案合成需要大型語言模型服務與金鑰,例如 GEMINI_API_KEY;其他可選設定包括 WIGOLO_GITHUB_TOKEN,以及對外提供服務時的 bearer token。
安裝前請注意
清單宣告需要名為 YOUR_API_KEY 的金鑰,但說明文件稱核心工具免金鑰、只有可選的模型合成才需要供應商金鑰,安裝前應確認實際需要哪一個。啟用大型語言模型服務會把查詢內容傳送給該第三方。擷取與爬取會存取公開網站,watch 可將變更推送到 webhook。專案處於公開測試階段,採 AGPL 授權,公司使用被建議購買商業授權。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

[wigolo — the go-to web for your agent]

Local-first web intelligence for AI agents — no keys, no cloud, no metered bill.

works with  Claude Code · Cursor · Codex · Gemini CLI · OpenCode · VS Code · Windsurf · Zed · Antigravity
and beyond  LangChain · CrewAI · LlamaIndex · Vercel AI SDK · n8n & self-hosted agents · any MCP client · plain REST

[npm] [npm downloads] [GitHub stars] [CI] [node] [MCP] [license] [status] [follow on X] [Discord]

[wigolo on Trendshift] [KnockOutEZ%2Fwigolo | Trendshift]

sponsored by
[TestMu AI]

Quickstart · Tools · Why wigolo · Discord · Sponsors · Benchmark · Docs · Examples · Licensing · Feedback · FAQ

Join the community on Discord — questions, help, and what's being built next.

New features and updates ship steadily. Follow @yourtowhid on X for all of it and new ways to use wigolo, and reach out there for collaborations or feedback · also on LinkedIn


wigolo gives an AI agent one surface for everything web-related: search, fetch, crawl, extract, cache, find-similar, research, and autonomous gather loops. It runs wherever your agent runs — as an MCP server next to your coding agent, as a REST/MCP endpoint on the box where your self-hosted agents live, or embedded through an SDK inside your own app. The core tools need no API keys, nothing it touches leaves ~/.wigolo/, and no bill grows with how much your agent thinks.

Quickstart

bash
npx wigolo init                              # set up the local engine — any systemnpx wigolo init --agents=claude-code,cursor  # …or set up + wire your day-to-day agents in one command

Requires Node ≥ 20 and ~1.5 GB of free disk on macOS, Linux, or Windows. Bare init sets up the local engine: it downloads the browser engine and on-device models, runs a health check, and reports each component. Adding --agents wires the named agents in the same run, so a coding agent you use daily is ready in one command.

  • Supported agents — --agents takes any of claude-code · cursor · codex · gemini-cli · opencode · vscode · windsurf · zed · antigravity (comma-separated); wigolo writes the MCP config and, where supported, instructions for each.
  • Any other setup — any MCP client, agent framework, or self-hosted agent registers npx -y wigolo in its own MCP config. The installation guide has the exact config block for every client, plus Docker, Homebrew, and single-file-binary channels.
  • More on the way — the supported list keeps growing, and a PR to add your agent is welcome; see CONTRIBUTING.md.
  • Interactive setup — --interactive is a plain-text flow; --wizard is the full terminal TUI.
  • Defer downloads — --no-warmup waits until first use. A failed component download never fails setup; init reports what's not ready with the exact fix and still completes.

init is unattended by default, so it's safe in scripts and CI, and any setup problem surfaces right here in the per-component report, before your agent's first call. Search, fetch, crawl, extract, cache, and find-similar work with no API key. Check it's healthy anytime:

bash
npx wigolo doctor

To remove everything cleanly, run npx wigolo config --uninstall --yes. You can also paste the installation guide into any AI assistant and let it do the setup; it's written to be self-contained.

Recommended — a free key for research & agent

Search, fetch, crawl, extract, cache, and find-similar are fully keyless. research, agent, and search format=answer use an LLM to write the synthesized, cited answer. Without one they hand back a raw brief and evidence for your agent to assemble. A free Gemini key turns that into a finished answer:

bash
export WIGOLO_LLM_PROVIDER=geminiexport GEMINI_API_KEY=<free-key>      # grab one at aistudio.google.com/apikey — the free tier is plenty

Any provider works (anthropic · openai · groq), or stay fully local and keyless with WIGOLO_LLM_PROVIDER=ollama (or any OpenAI-compatible URL). Set it in your shell or your agent's MCP env block. Providers, models, and the keyless local-model ladder are in the configuration guide.

What your agent gets back

Every search result is evidence the agent can act on. It carries a verbatim excerpt pinned to its exact position in the source, a citation ID the agent can quote, and a score it can inspect (abridged real shape):

jsonc
{  "results": [{    "title": "Logical replication - PostgreSQL docs",    "url": "https://www.postgresql.org/docs/current/logical-replication.html",    "excerpt": "Logical replication is a method of replicating data objects…",    "citation_id": "src-1",    "source_span": { "start": 1042, "end": 1305 },          // byte-exact provenance    "evidence_score": { "final": 0.86, "semantic": 0.91, "lexical": 0.78, "engine_consensus": 3 }  }],  "citations": [{ "id": "src-1", "url": "…" }],  "freshness_signal": { "published": "2026-05-12", "confidence": "high" }}

Weak results get flagged as junk by wigolo's own scorer. Failed engines are reported and stale cache is labeled, so the agent always knows what it's standing on. Full response contracts per tool are in the tools reference.

Tools

ToolWhat it does
🔎 searchMulti-engine web search (18 direct adapters) with rank fusion, ML reranking, and an explainable per-result score. Pass a query array for parallel breadth. Scope by domain and time range, match an exact phrase, or return image results.
📄 fetchLoad one URL through a tiered router that auto-escalates from plain HTTP to a headless browser engine on anti-bot challenges or SPA shells. Clean markdown + metadata + links. Handles PDFs, a single-heading section, authenticated sessions, and page actions (click / type / scroll / screenshot).
🕸️ crawlMulti-page crawl — BFS, DFS, sitemap, or map-only. Per-domain rate limits, robots.txt respect, boilerplate dedup.
🧩 extractStructured data from a page: tables, metadata, JSON-LD, brand identity, named schemas (Article / Recipe / Product / …), or any custom JSON Schema.
💾 cacheQuery everything already seen — keyword or hybrid semantic. Plus stats, clear, and change detection.
🧲 find_similarPages similar to a URL or a concept, via 3-way fusion of keyword + semantic + live web.
🧠 researchDecompose a question → fan out sub-queries → fetch sources → synthesize a cited report (or a structured brief the host LLM writes from).
🤖 agentAutonomous gather loop: plan → search → fetch → extract → synthesize, with a step log, time budget, and optional output schema.
🔁 diff + ⏱️ watchSee exactly what changed on a page since last visit; re-check on demand and deliver changes to a webhook.

Every tool also runs from the terminal (wigolo search "…" --json), from an interactive shell with NDJSON piping (wigolo shell), over REST, and through the SDKs — CLI reference. Per-tool guides with the full parameter set are in docs/tools.md; runnable examples are in examples/.

Why it's different

wigolo isn't a free stand-in for the paid tools — it's built to match them. It's a focused web layer for your agents: an MCP and REST surface they call directly, with the search and extraction quality the paid services charge for. What separates it:

  • Built for agents. One MCP call fans out many queries across many engines in parallel, which a serial host tool-loop can't replicate. Every result carries transparent per-result scoring, and output is budget-aware.
  • Honest output. Stale cache, failed fetches, degraded backends, and truncation are surfaced in the result. When a bot-protected page can't be read, you get a labeled blocked_by_challenge failure, not a challenge shell returned as content.
  • $0 per query, free to re-query. Default search talks to public engines through direct adapters; the reranker and embeddings run on-device. Every response is cached, so asking again is instant and costs nothing.
  • Private by default. Cache, embeddings, models, and config live under ~/.wigolo/. Nothing reaches a third party unless you explicitly opt into an LLM for synthesis.

Here's what one real result looks like, dissected. It includes the failed engine and the weak result, because those are part of the answer too:

Benchmark

All four tools converged on the same core answer, and only one of them handed back verbatim, byte-pinned evidence while doing it.

One cold query ran live inside a single Claude Fable 5 session, fanned out to four web tools on equal footing (built-in WebSearch, wigolo, Tavily, Exa), and was judged by the agent on the evidence alone. All four converged on the same answer and the same top source, so the parity is demonstrated on-screen. wigolo alone returned verbatim excerpts pinned to byte-offset source spans, an explainable score decomposition, and live per-engine telemetry, and its own scorer flagged two weak results as junk. The cloud tools earn their place too: Exa rendered the official docs' comparison matrix in full. Run your own query and you'll see the same shape.

How it compares

wigoloFirecrawlExaTavily
Multi-engine web search✅✅✅✅
Fetch & structured extraction✅✅✅✅
Whole-site crawl & map✅✅—✅
Verbatim excerpts pinned to byte-offset source spans✅———
Explainable per-result score decomposition✅———
Persistent local memory — re-query instantly, offline✅———
Query data stays on your machine✅———
API key / accountnonerequiredrequiredrequired
Cost per query$0meteredmeteredmetered

Feature standing as of July 2026 — check each vendor's docs for current state.

That last row compounds, because agents ask in bursts:

Beyond your editor

The same ten tools serve every kind of agent, over whichever surface fits: MCP for coding agents, REST for everything else, SDKs to embed, and framework wrappers to drop in.

REST API — wigolo serve

One process exposes a plain-JSON REST API next to the MCP transport. No MCP client needed, just curl:

bash
wigolo serve                          # 127.0.0.1:3333 — loopback is open; off-loopback requires a token
curl -sX POST http://127.0.0.1:3333/v1/search \  -H 'Content-Type: application/json' \  -d '{"query":"local-first software","max_results":5}'

POST /v1/{tool} covers all ten tools, GET /openapi.json is the OpenAPI 3.1 contract, and /mcp + /sse serve remote MCP clients from the same port. Bind past loopback and a bearer token is required, so the server fails closed by default. Point n8n, a Hermes-style assistant, or any self-hosted agent at it. → REST API

SDKs — TypeScript & Python

Thin, typed clients with an embedded local mode that finds or starts the daemon for you. No separate serve step.

TypeScript — npm install wigolo-sdk (zero-dep; Node / Bun / Deno / edge):

ts
import { createLocalClient } from 'wigolo-sdk/local';
const { client, close } = await createLocalClient();   // reuse a running daemon, or spawn oneconst res = await client.search({ query: 'local-first web search', max_results: 5 });console.log(res.results.map((r) => r.title));await close();                                          // stops the daemon only if this call spawned it

Python — pip install wigolo (standard library only; sync + async):

python
from wigolo import local_client
with local_client() as client:                          # reuse a healthy daemon, or spawn one    res = client.search(query="local-first web search", max_results=5)    for r in res["results"]:        print(r["title"], r["url"])

→ SDKs & embedded mode

Framework integrations

Drop wigolo's tools into the framework you already use. You get the full ten-tool surface, including the cache / find_similar / research / agent that most framework web-tools don't ship:

FrameworkPackageWhat you get
LangChainwigolo-langchaineach tool as a BaseTool, plus a BaseRetriever over search / find_similar for RAG
CrewAIwigolo-crewaiwigolo_tools() → hand the set to any crew
LlamaIndexwigolo-llamaindexa BaseReader that loads fetched / crawled / searched pages as documents
Vercel AI SDKwigolo-vercel-ai-sdktool factories for generateText / streamText, edge-friendly

→ Framework integrations

Docker

bash
# stdio MCP — wire it into any MCP client as command: dockerdocker run -i --rm -v wigolo-data:/data ghcr.io/knockoutez/wigolo
# HTTP server for remote / multi-client usedocker run -p 3333:3333 -v wigolo-data:/data \  -e WIGOLO_API_TOKEN=a-long-random-secret \  ghcr.io/knockoutez/wigolo serve --host 0.0.0.0

The slim image lazy-loads models into the volume; ghcr.io/knockoutez/wigolo:latest-full preinstalls the browser engine. Versioned releases use the same -full suffix (for example, 0.3.1-full). Also on Docker Hub as towhid69420/wigolo. → installation & all channels

Agent skills

An 11-pack skill catalog teaches your coding agent to drive each tool well. It's installed by init and managed with wigolo skills add|list|remove. → skills

One note for self-hosters: some challenge-protected sites score IP reputation, so a datacenter IP won't clear walls a home connection would. wigolo labels those failures, and the self-hosting guide covers the opt-in proxy answer.

Star history

[wigolo GitHub stars over time]

Refreshed daily from the GitHub API. Add a ⭐ if wigolo is useful to you.

Architecture

A single Node process speaks MCP (JSON-RPC over stdio). Everything heavy is local and lazy-loaded, so a zero-key install pays nothing for the parts it isn't using.

mermaid
flowchart TD    A["🤖 AI agent<br/>any MCP client · REST · SDK"]    A -->|MCP over stdio| B["<b>wigolo</b><br/>10 tools · dynamic instructions<br/>in-process browser pool + cache + models"]
    B --> C{"Tool layer"}    C --> T1["search · fetch · crawl · extract"]    C --> T2["cache · find_similar · research · agent"]
    T1 --> F["⚙️ Fetch router<br/>tiered escalation, learned per domain"]    T1 --> S["⚙️ Search<br/>18 engines → rank fusion → ML rerank<br/><i>explainable evidence score</i>"]    T2 --> DB[("🗄️ Local cache<br/>keyword + vector index")]    T2 --> ML["🧠 On-device ML<br/>embeddings + reranker"]
    F -.->|optional| LLM["☁️ LLM<br/>synthesis only · opt-in"]    S -.->|optional| SX["🔀 Aggregator backend<br/>opt-in legacy / hybrid"]
    F --> WEB["🌍 Public web"]    S --> WEB
    style B fill:#7c3aed,stroke:#5b21b6,color:#fff    style WEB fill:#0ea5e9,stroke:#0369a1,color:#fff    style DB fill:#1e293b,stroke:#334155,color:#fff    style LLM stroke-dasharray: 5 5    style SX stroke-dasharray: 5 5
  • Code beats model. Deterministic work stays off the LLM: canonicalization, rank fusion, dedup, and schema matching. The model is reserved for judgment, opt-in, and capped per request. LLM-filled fields are checked against the source and nulled if absent.
  • Signal-driven routing. The fetch ladder escalates to a real browser on observable signals, not domain guesses: SPA markers, challenge bodies, thin content. It learns per domain, unlearns when a site stops needing it, and wigolo tune list shows you exactly what it learned.
  • Reads pages the way a browser does. Tiered fetching waits out interstitial challenges and reuses clearances per domain, politely: robots.txt respected, per-domain rate limits, research-grade volumes. When a wall stays up, the failure is labeled and reported.

Configuration

A clean install works out of the box. Three settings raise output quality:

bash
# 1. Synthesis — the biggest lever (research / agent / search-answer write real prose)export WIGOLO_LLM_PROVIDER=gemini                   # or anthropic / openai / groq / ollama (keyless)export GEMINI_API_KEY=<your-key>
# 2. Wider retrieval funnelexport WIGOLO_SEARCH=hybrid                         # core engines + aggregator fallbackexport WIGOLO_GITHUB_TOKEN=...                      # GitHub code search 10 → 30 req/min
# 3. Land more fetches, stay warmexport WIGOLO_TLS_TIER=auto                         # per-domain learned fetch hardeningexport WIGOLO_EAGER_WARMUP=1                        # pay the ~1s model load up front

Per-call habits that pay off: query arrays (["a","b","c"]) for parallel breadth · search_depth: "deep" for queries that matter · include_domains as a hard filter for docs lookups. The full reference covers every environment variable, config-file key, search backend, cache TTL, and serve limit; it's in the configuration guide.

Docs & examples

docs/ — the complete manual: getting started · installation & channels · configuration · tools reference · CLI & shell · REST API · SDKs & integrations · self-hosting · agent skills · plugins · troubleshooting & FAQ · privacy & security

examples/ — runnable, each with a README (and most with a terminal recording): one-shot CLI, NDJSON shell pipelines, REST via curl, TypeScript & Python SDKs, Vercel AI SDK tools, pointing self-hosted n8n at a remote wigolo, watch-with-webhook, and writing your own search-engine plugin. The docs are also rendered on the site at wigolo.app/docs.

Beta & feedback

wigolo is in public beta. Everything documented here works and is held to a 7,600-test suite; it's stable, and beta is about the polish bar. It stays beta until enough people have used it, kicked it, and starred it that calling it v1 means something. Your feedback shapes what comes next, and every report is read, usually the same day:

If wigolo earns a place in your setup, three things keep it going: a ⭐ star (it's how open source gets found), a ☕ coffee (the open-source version is the full product; commercial licenses fund it, not gated features), or an email that goes straight to the one developer who wrote the code.

Troubleshooting

wigolo doctor names any broken component and the exact env var or command that fixes it; wigolo doctor --fix repairs the common cases, and wigolo verify health-checks every component. A component failing during init doesn't break wigolo: init still exits 0, and core search / fetch / crawl / extract / cache work with no models and no browser. Quick hits:

  • Slow or failed downloads — re-run wigolo warmup --all (or --browser / --embeddings / --reranker); they resume and retry.
  • Browser won't launch on Linux — wigolo warmup --browser installs the OS libraries (or prints the exact command).
  • Native build error / unusual Node — use an LTS — Node 22 or 24 — or Node 26 (supported; Current until it becomes LTS).
  • Behind a proxy — USE_PROXY=true + PROXY_URL; add NODE_EXTRA_CA_CERTS for TLS-inspecting proxies.
  • Your agent asks permission on every call — allow the tools in your client, then restart it; rules are read at session start. Details.

The full guide covers per-symptom fixes, a "what still works when X fails" map, platform notes (incl. linux-arm64), and offline installs: docs/troubleshooting.md.

FAQ

Free? What's the catch?

No catch by design. The expensive parts (ranking, embeddings, the browser engine) run on your hardware, so there's no per-query cost to recover and no reason for a meter. It's funded by commercial licenses and sponsors, and the AGPL legally prevents a switch into a closed hosted product.

Is the quality really on par with the paid services?

The benchmark section above is a live 4-way run you can reproduce: everyday agent queries land at parity, the paid tools still win some deep-extraction edge cases, and crawling is where wigolo is strongest. Every result shows its scoring, so you don't have to take anyone's word for it.

Won't public search engines block or rot?

It's engineered for exactly that: 18 engines fused with rank fusion (any one failing barely moves results), a tiered fetch ladder with per-domain learning, and an optional aggregator fallback. Degraded backends are reported in the output, and the local cache means everything already seen keeps working regardless.

Is this kind of scraping OK?

wigolo reads the public web the way a browser does: robots.txt respected by default, per-domain rate limits, and research-grade volumes for one agent on one machine. It sits deliberately at the polite end of the spectrum.

Can I use this at work?

Yes. If you're a company or building a commercial product on wigolo, please take a commercial license or sponsor the project. See LICENSING.md.

Why 1.5 GB of disk?

That's the on-device brain: a full browser engine plus the ranking and embedding models the cloud services run on their side and bill you for. Once it's on disk, every query uses it for free.

Available on

Homebrew, curl | sh, and the single-file binary are covered in the installation guide. Use one channel per machine; they all share ~/.wigolo.

Sponsors

Thank you to the sponsors below, who help keep wigolo maintained and free for everyone to use. Their support goes straight into the work.

[TestMu AI]

TestMu AI (formerly LambdaTest) is the world's first full-stack agentic AI quality engineering platform, trusted by 18,000+ enterprises.

wigolo is free for everyone. If you or your company would like to help keep it maintained, there's room for more sponsors — reach out at [email protected], or see what sponsorship includes and the terms in SPONSORS.md. A one-off via Buy Me a Coffee is welcome too.

Contributing

Bug reports, feature requests, and PRs are all welcome; see CONTRIBUTING.md. Keep tool handlers thin, add tests, and run the suite before opening a PR. The friendliest entry point is the plugin system for custom search engines and extractors: add a search engine in ~100 lines, with a template in examples/plugin-search-engine.

License

Free and open source under the GNU AGPL-3.0, and it'll stay that way. If you're a company, or you're making money with wigolo, please take a commercial license or sponsor the project. That's what keeps it maintained. See LICENSING.md.

See SECURITY.md to report a vulnerability and TRADEMARK.md for use of the name.


wigolo is open source, free, and actively maintained. If it saves you a metered search bill, a ⭐, a sharp issue, or a ☕ coffee helps keep it sustainable.

Built and maintained by @KnockOutEZ · [email protected] · X · LinkedIn

來源:README.md,提交 9180e93

工具

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

版本歷史

1
  1. v0.2.1最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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

    請在儲存庫或註冊中心條目中宣告授權條款。