ketch
Web search, public code search, library docs and page-to-markdown scraping from one Go binary
Local web fetch, keyless multi-engine search, site crawl and screenshots in one Rust binary
By Bishesh Bhandari (individual) Rust Local · stdio Browser automationWeb search
72 popularity score ★ 975 ↓ 1.7k/wk
Opens the app, which asks before it adds the server.
claude mcp add donsetch -- npx -y donsetch mcp{
"mcpServers": {
"donsetch": {
"command": "npx",
"args": [
"-y",
"donsetch",
"mcp"
]
}
}
}{
"mcpServers": {
"donsetch": {
"command": "npx",
"args": [
"-y",
"donsetch",
"mcp"
]
}
}
}{
"servers": {
"donsetch": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"donsetch",
"mcp"
]
}
}
}[mcp_servers.donsetch]
command = "npx"
args = ["-y", "donsetch", "mcp"]gemini mcp add --scope user donsetch npx -- -y donsetch mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
git clone https://github.com/dondai44423/donsetch.git
cd donsetch
cargo build --release --features ocr,rerank,httpclaude mcp add donsetch -- '<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch' mcp --supervised{
"mcpServers": {
"donsetch": {
"command": "<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch",
"args": [
"mcp",
"--supervised"
]
}
}
}{
"mcpServers": {
"donsetch": {
"command": "<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch",
"args": [
"mcp",
"--supervised"
]
}
}
}{
"servers": {
"donsetch": {
"type": "stdio",
"command": "<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch",
"args": [
"mcp",
"--supervised"
]
}
}
}[mcp_servers.donsetch]
command = "<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch"
args = ["mcp", "--supervised"]gemini mcp add --scope user donsetch '<ABSOLUTE_PATH_TO_CLONE>/target/release/donsetch' -- mcp --supervised| Set together: proxy | |
|---|---|
DONSEEK_PROXIES |
Optional: Comma-separated proxy pool used by search and crawl. |
| Set together: browser | |
DONSETCH_BROWSER_BACKEND |
Optional: Browser backend: auto, chromium, headless or cloak (cloakbrowser). Also settable as DONSETCH_BROWSER__BACKEND. |
DONSETCH_CLOAK_AUTO_DOWNLOAD |
Optional: Set to 1 to let it download a pinned CloakBrowser from GitHub on first use of the cloak backend. DONSETCH_BROWSER__CLOAK_AUTO_DOWNLOAD=true does the same. |
CLOAKBROWSER_BINARY_PATH |
Optional: Path to an existing CloakBrowser binary for the cloak backend (does not select it on its own). |
DONSETCH_CONFIG |
Optional: Path to a donsetch.toml config file. |
DONSETCH_BINARY |
Optional: Path to an existing donsetch binary for the npm wrapper to use. |
DONSETCH_HTTP_TOKEN secret |
Optional: Token clients must send when running the HTTP transport. |
DonSeTch is a single Rust program that gives an assistant four web tools: read a URL as markdown, search the public web, crawl one site, and capture a page as a PNG. It runs on your own machine over stdio, and the npm package is a thin wrapper that downloads a prebuilt binary for your platform from GitHub Releases and checks its SHA-256.
Fetching starts with plain HTTP through its own HTTP/2 stack on Chrome's BoringSSL, so the TLS handshake matches real Chrome. When a page turns out to be a bot wall or an empty JavaScript shell, it escalates to a local browser, lets that clear the challenge, then hands the cookies back to the fast HTTP path. Reads can be trimmed with a focus query, one section, a CSS selector or a phrase check. PDFs are parsed locally, and scanned ones go through OCR in the builds that include it. Search queries several engines and verticals at once with no API key, then merges and reranks the results with a small local model.
The browser used for escalation is selectable. Besides Chromium and a forced headless mode there is a CloakBrowser backend, and if you switch it on together with its auto-download setting the program fetches a pinned CloakBrowser release from GitHub the first time it needs it. In the v4.10.2 config code the backend setting defaults to `auto` and auto-download defaults to off (source: src/config.rs).
The tool list at v4.10.2 has exactly four entries, pinned by a test fixture. Some defaults there are not in the README: `web_search` returns 7 candidates by default and at most 12, while `web_crawl` reads 10 pages by default (cap 200), follows links 2 levels deep, stays on the seed host, obeys robots.txt and gives up after 120 seconds unless told otherwise (source: tests/fixtures/tools_list.json). The binary doubles as a CLI and can serve MCP over HTTP. Its README says a major V5 release is being worked on, so settings and tools may change.
| Runtime | Node.js |
|---|---|
| Runs on | macOS, Windows, Linux |
| Also |
|
Node.js with npm to use the npm package (it fetches a prebuilt binary). Prebuilt binaries cover Linux x64/arm64 (glibc 2.35 or newer, e.g. Ubuntu 22.04+), macOS arm64/x64 and Windows x64. musl/Alpine must build from source (Rust, Go, NASM, CMake, Clang). Windows needs tar (built in since Windows 10 1803). Network access is needed, and first OCR or rerank use downloads about 60 MB of models.
Interactive captchas (hCaptcha, reCAPTCHA, Turnstile) are not solved locally; they need a paid Bright Data Web Unlocker key, otherwise the fetch returns an error. Keyless search hits engines from your own IP and gets rate-limited under heavy use unless a proxy pool is set. Its makers say it is meant for one-shot research, not long or bulk sessions against a defended site, which risk an IP-level block of your network. `web_fetch` does not check robots.txt (crawl does by default). OCR and reranking are missing from linux-arm64 prebuilts and the default source build. Browser `actions` are capped at 16 steps. The README's npx example omits `-y`; the snippet here adds it.
Suits a developer who wants an assistant to search and read the web from their own machine with no account or API key, including pages behind simple bot walls, PDFs and docs sites, with tight control over how many tokens a read costs. It is local only, so it needs a supported OS and ideally a Chromium install. Pick something else for long, page-by-page work on one defended site or bulk downloads: its makers point to their Bladebro browser tool for that. Teams that cannot accept AGPL-3.0 code, or that want a hosted endpoint, should look elsewhere.
3 only read, 1 changes things. A ? marks an optional parameter.
web_fetch changesurl: anymode?: enummax_chars?: integerfocus?: stringtoc?: booleansection?: stringselector?: stringmust_contain?: stringoffset?: integertier?: enumactions?: arraybudget_tokens?: integerdeadline_ms?: integerimage_text?: booleanlinks?: booleanmedia?: booleanshot?: stringsince_last?: booleanstitch?: booleanweb_searchquery: stringmax_results?: integerintent?: enumquery_variants?: arraydeadline_ms?: integerweb_crawlurl?: stringresume?: stringmode?: enumfocus?: stringmax_pages?: integermax_depth?: integermax_total_chars?: integerper_page_max?: integermap_limit?: integerinclude_paths?: arrayexclude_paths?: arraysame_host?: booleanrespect_robots?: booleandeadline_s?: integerdataset?: booleansince_last?: booleanweb_screenshoturl: stringfull_page?: booleanwait_ms?: integerdeadline_ms?: integer