Open-source project
dondai44423/donsetch avatar
dondai44423/donsetch

DonSeTch: a keyless web fetch, search and crawl server for MCP agents

Web fetch, search, and crawl for AI agents. Built from scratch in Rust. No keys, no accounts. AGPL v3.

688 stars51 forksRustAGPL-3.0

At a glance

What is it?
DonSeTch is a Rust binary that exposes three MCP tools for web research with no API keys or accounts, built around a from-scratch HTTP transport and a Chrome TLS fingerprint. It is a one-shot research tool, and its own README says so.
Who is it for?
Adopt DonSeTch if your agent does one-shot research: a search, a fetch or two, a docs page, one PDF, and you want that without API keys or a hosted scraping account. Do not adopt it for bulk document harvesting, long click-by-click sessions against one defended site, or mass extraction; the README points that class of work at Bladebro instead.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem DonSeTch targets: agent web access without keys or accounts

An agent that needs to read the web usually has to be handed something first: a search API key, a scraping vendor account, a browser automation stack, or all three. DonSeTch's answer is a single local process that exposes three MCP tools and requires no keys and no accounts. The README frames the whole project as "full web research from a single local process" and lists zero API keys and zero accounts as the starting condition. The audience is anyone running an MCP client (the README names Claude Code, Cursor, OpenCode, Pi and Hermes) who wants search, fetch and crawl available to the agent without provisioning credentials per provider. It also runs as a standalone CLI, so the same binary can be driven outside an MCP session. The project is written in Rust and published under AGPL-3.0, with an npm package named donsetch. The scope is deliberately narrow: the README calls it a "rapid-fire research tool" for search, read and verify, and the token budget claim is that the three tool schemas total roughly 2.0k tokens as measured via tools/list. That number matters because tool schemas are paid for on every request an agent makes, whether or not it calls the tool.

The three tools and how the fetch path is wired

The README does not print the full JSON schema for each tool, so the exact parameter list is not something I can reproduce here. What it does describe is the shape of the system. Three tools cover fetch, search and crawl. The fetch and crawl transport is written from scratch: the README states there is no hyper, no Playwright and no Selenium on the core path, and that the HTTP/2 implementation (HPACK, flow control), the extraction engine, the PDF parser, the search aggregator and the crawl engine are all the project's own. The one stated exception is that BYOK adapters and the opt-in CloakBrowser installer use reqwest, while the paths that run on every ordinary fetch do not. The TLS layer is the most specific mechanism in the material: DonSeTch drives Chrome's own BoringSSL natively, so the ClientHello the server sends is Chrome's ClientHello, and the README argues the fingerprint is emergent from the real engine rather than a faked table that decays as Chrome ships updates. On top of that sits what the README calls temporal stealth: TLS session resumption, conditional revalidation returning 304, persistent cookies and connection pooling. The claim is that this temporal layer is the remaining bot tell most tools ignore. A separate mechanism, solve-and-bounce, hands a challenge to a browser, takes the resulting cookies back to the tier-1 fetch path, and then puts the browser to sleep. The README's phrasing is that the browser almost never fetches content. Whether that holds in practice depends on the challenge type, and the README does not break down which challenge vendors it has been exercised against.

Install and the keys the README actually names

The README's install and quickstart sections are referenced in its own table of contents but the body text supplied here is truncated before those sections, so I cannot give you the exact install command or the exact MCP client configuration block. What is confirmable: there is an npm package named donsetch, and the repository also carries Rust edition 2024 and an MCP server badge, which implies a binary built from source is a supported path alongside the npm package. Do not treat those as interchangeable without checking the package contents yourself. On configuration, the README names a small set of keys and values that appear in the prose. The fetch tool takes a must_contain parameter for probe mode, which verifies a claim against the fully fetched page and returns MATCH or NO-MATCH plus up to three excerpts rather than the page. There is an archive parameter with an auto value that serves the nearest Wayback snapshot for a dead link and labels it with its age. There is since_last, which collapses a re-check of a previously fetched page to a single line. There is deadline_ms, described as available everywhere, alongside real MCP cancellation and progress notifications, plus an ms cost footer. Search results are addressable as handles S1 through Sn, and fetch S3 is given as a working example, with link text rendered as [text](L12). Domain adapters are labeled via=adapter:<name> in output and are described as kill-switchable. For Bright Data users there is a bd SERP provider, a Web Unlocker tier-3 bypass, and an unlocker key type, all of which require a Bright Data account and are the one place the keyless claim does not apply.

The one-shot research boundary is the real design constraint

The most useful part of the README is the section that says what DonSeTch is not for. It lists three excluded workloads: bulk document harvesting from a single repository in one run, long sessions against one site page after page at machine speed from the same IP, and mass extraction such as mirroring a file library. The stated reason is not a fetch-layer weakness but request cadence. Every request fires hundreds of times faster than a human, and the README's position is that defended sites read that pattern itself as a bot signal, independent of the TLS fingerprint. The realistic failure mode it names is an IP-level block: restricted access, a captcha wall, or a ban on the whole network mid-run. That is a genuinely unusual thing for a project page to admit, and it should shape how you deploy this. A single research read of a page is fine. A loop over the same domain is not, and no amount of Chrome TLS or solve-and-bounce changes the timing signature. If your agent's workload looks like the excluded list, the failure you will see is not an error from DonSeTch; it is the site refusing you, which is harder to diagnose and can take your network with it.

PDF, search and the parts that are harder to verify

Two subsystems get specific descriptions. The PDF path is called pixel-fusion: glyphs and rendered pixels are taken from the same stream and fused deterministically, with a per-region trust audit, and scanned PDFs are auto-OCR'd. Deterministic fusion is a stronger claim than OCR alone, because it implies the text layer and the visual layer are reconciled rather than one being trusted blindly; the README does not explain the reconciliation rule, so treat the trust audit as something to inspect on your own documents before relying on it for anything consequential. Search is keyless by default: the README describes 10 or more backends queried in parallel, fused by cross-engine consensus plus local semantic reranking, with BYOK optional. Consensus fusion across independent engines is a reasonable way to suppress a single engine's bad result, but it also means result quality is bounded by whichever engines are reachable from your network at that moment, and the README does not list the backends or describe what happens when several are blocked. Two other features are worth flagging as trust-relevant rather than performance-relevant. The anti-cloak check equivalence-tests tier-1 responses against a headless render on decoy-prone domains and stamps "decoy suspected" rather than passing the content through silently. Page memory fingerprints every fetch and reports changed with section-level diffs on re-fetch. Both are attempts to make the tool honest about what it returned, which is the right instinct for an agent pipeline where a silent wrong answer is worse than an error.

Bladebro and the difference between fast and human-paced

The README names its own alternative: Bladebro, by the same author, described as the next step up for work where an agent goes through a defended site the way a person would, page by page, download by download. The difference is not a feature gap, it is a deliberate speed trade. DonSeTch is fast and its speed is presented as its stealth for one-shot reads. Bladebro is slower by design, because over a long session against a defended site the README's position is that looking human beats being fast. That is a coherent split, and it is more honest than most projects that quietly expand scope until the tool is mediocre at both jobs. The practical consequence is that you may end up running both: DonSeTch for the search-and-verify loop, Bladebro for the harvesting job. If you were hoping for one binary that covers both, this repository is telling you it does not, and that the second job is a separate project. Note also that the README states V4 is coming without describing what changes, so any planning around the current tool surface should assume it may move.

Licence and maintenance cost under AGPL-3.0

DonSeTch is AGPL-3.0. The practical consequence, stated generally and not as legal advice, is that the network-use clause in the AGPL is the part to read carefully if you plan to expose this binary to other users over a network rather than running it locally for your own agent. Running it as a local MCP server for your own client is a very different posture from wrapping it in a hosted service. Get your own reading of the licence text before you build the second thing. On maintenance, the material shows a rapid release cadence: three releases in the first week of September 2026 (v3.6.5, v3.6.6, v3.6.7), with the last push to master on 2026-09-10. Fast point releases at that density usually mean active bug-fixing, and they also mean the surface you integrate against can shift under you. The project is not archived. There is a Ko-fi link and a Bright Data partner link in the README, which tells you the funding model is donations plus affiliate revenue rather than a company with a support contract. Plan for that: pin a version, and read the release notes between pins rather than tracking master. The README also advertises a test count and a Trendshift badge; neither is evidence about whether the fetch path works on the sites you care about, and the only way to know that is to run your own URLs through it.

Editorial conclusion

Adopt DonSeTch if your agent does one-shot research: a search, a fetch or two, a docs page, one PDF, and you want that without API keys or a hosted scraping account. Do not adopt it for bulk document harvesting, long click-by-click sessions against one defended site, or mass extraction; the README points that class of work at Bladebro instead. Before wiring it into an MCP client, confirm what you are actually installing (the npm package versus a build from the repository), check that your client supports the cancellation and progress notifications the tool relies on, and read the AGPL-3.0 terms against how you plan to expose the binary.

Official sources

  1. dondai44423/donsetch on GitHub
  2. Issues
  3. License: AGPL-3.0
  4. README
  5. Releases
Community notes

Community notes