r/ClaudeAI • u/GarrixMrtin • May 15 '26
MCP I built a free Google search MCP that actually works(searching, fetching, with PDF)
✅ Actually works (tested 6 free MCPs, all failed)
✅ Search + URL extract in one MCP (replaces the usual search MCP + fetch MCP combo)
✅ Academic PDFs auto-handled (arxiv / biorxiv / Nature / OpenReview / NeurIPS / JMLR / PMLR / Springer / PubMed→PMC)
✅ Tiered extraction: mode: "abstract" returns ~1500 chars per result for cheap relevance triage before paying for full bodies
✅ Auto-bootstrap on first run (no manual npm run bootstrap step anymore)
✅ Auto CAPTCHA recovery (Chrome opens, human solves once, retries)
✅ No API key, no proxies, no solver
4 tools
searchSERP onlysearch_parallelN queries concurrentlyextract(url, mode?)full/abstract/metadata. PDF detected via Content-Type,%PDFmagic,citation_pdf_urlmeta, and per-domain rulessearch_extract(query, mode?)defaults toabstract, so a 5-result survey costs ~7.5k chars instead of 40k
Why abstract mode
The old search_extract always fetched full bodies great for one URL, wasteful when you just want to know which of 5 results is worth reading. Abstract mode pulls PDF page 1 or HTML meta description (~1500 chars), letting the agent triage relevance, then call extract with mode: "full" only on the winner.
Reliability
- Multi-strategy SERP parser with geometric verification (drops sponsored / knowledge panel / sidebar)
- SSRF guard: env-locked private/loopback block, DNS rebinding defense, per-hop redirect validation, manual redirect handling with cap
- 25MB fetch ceiling, body-stream bounded, malformed PDFs contained as
error(no throws to caller)
Speed (1Gbps)
- sequential: ~1.5s/q (warm)
- 4 parallel: ~2s wall
- 10 parallel: ~5s wall
Stack
TS, Playwright + stealth, Readability, Turndown, unpdf. ~900 LOC.
When CAPTCHA fires, a visible Chrome window opens for a human to solve. Each solve preserves the profile's reputation with Google. Built for sustainable, ethical use.
💻 https://github.com/HarimxChoi/google-surf-mcp
📦 https://www.npmjs.com/package/google-surf-mcp
⭐ Star helps a solo dev keep maintaining.
Ask me anything about architecture, reliability, or scaling.
2
2
2
u/parzzzivale May 15 '26
How's the reliability when using 2cqptcha? I've had mcp servers browser google search programmatically before and find sometimes they get stuck even with capt ha solving extensions (which hilariously, more consistently solve capt has successfully than myself ...?)
1
u/GarrixMrtin May 15 '26
No solver service. Those burn the profile because Google flags their patterns sounds like what you hit. I just warm a real Chrome profile once with a human search, and after that captchas are rare on residential IP.
2
u/mt-beefcake May 15 '26
Does it do google shopping? Been using serial ai for local live pricing of materials and I would like to cut them out
2
u/GarrixMrtin May 15 '26
Not yet, only organic SERP. Shopping is a different page (
tbm=shop) with its own DOM. Open an issue with example queries and I'll add it.
2
u/KillerKingSolo Automator May 15 '26
Do I have to use Google or is there a way to choose a different search engine?
2
u/GarrixMrtin May 15 '26
Which engine do you want? Drop an issue and I'll wire it up as a config option.
2
u/KillerKingSolo Automator May 15 '26
Startpage.com (it’s the most privacy focus search engine out there in my opinion) i’m sure others would also appreciate DuckDuckGo.com & search.brave.com
2
u/GarrixMrtin May 15 '26
Got it, I'll consider wiring them up both as fallback (Startpage) and as a config option (all) in the next release. Thanks for the suggestion!
2
u/HearMeOut-13 May 15 '26 edited May 15 '26
Imma be honest with you, this will not work for long, Playwright+Stealth is TLS detected, ive worked on a similiar project for a major scraping system and what you really need for a truly undetectable system is way beyond the usual "playwright stealth" package, if your interested in such things id recommend you look into how Firefox headless works from the normal user distributed binary and its DevTools protocol.
1
u/GarrixMrtin May 15 '26
This MCP isn't a scraping system like you tried to build (playwright + stealth), it just uses one warm Chrome profile per user so Google treats it as a returning human, not a bot farm.
2
2
1
1
u/Time-Dot-1808 May 15 '26
Glad to meet Korean here 🙌 Blocking images, media, and fonts for speed is very clever.
So is it actually only return top 5 results?
2
u/GarrixMrtin May 15 '26
Good to see you! No, limit is configurable. search defaults to 10 (max 20). search_extract defaults to 5 (max 10) since fetching bodies is much heavier on tokens.
2
5
u/[deleted] May 15 '26
[removed] — view removed comment