Google search via Playwright with a warm Chrome profile. No API key, no proxies.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"io-github-harimxchoi-google-surf-mcp": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Demo only. Actual searches run headless by default (no visible browser). Set SURF_HEADLESS=false to make Chrome visible like in the clip above.
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in browser / search
Production ready MCP server with real-time search, extract, map & crawl.
Web and local search using Brave Search API
Browser automation with Puppeteer for web scraping and testing
Multi-engine MCP server, CLI, and local daemon for agent web search and content retrieval — skill-guided workflows, no API keys.
MCP Security Weekly
Get CVE alerts and security updates for io.github.HarimxChoi/google-surf-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
✨Anti-Bot Search MCP: No API Key✨
English | 한국어

Demo only. Actual searches run headless by default (no visible browser). Set
SURF_HEADLESS=falseto make Chrome visible like in the clip above.
Google search MCP. No API key. Just works.
search / search_parallel / extract / search_extract / healthextract (blocks localhost, private IPs, AWS metadata by default)Plug it into any MCP client and you get Google search as a tool.
No CAPTCHA solver. When CAPTCHA fires on any tool, a Chrome window opens for a human to solve. Each solve preserves the profile's reputation with Google. Built for sustainable, ethical use.
One-time install needs a ~1s profile warm-up (see Install).
Designed for local use. For headless / serverless environments set SURF_CLOUD_MODE=true (fail-fast on CAPTCHA, worker pool disabled).
| result | |
|---|---|
| sequential | ~1.5s/query (first call ~4s, includes setup) |
| parallel x4 | ~1.5s wall (first call ~9s, includes pool warm) |
| parallel x10 | ~4.5s wall |
| search_extract x5 | ~5s wall (search + 5 parallel extracts) |
Measured on a workstation with a 1Gb/s connection.
playwright-extra stealth as a cascade fallback tierRequires Node 18+ and Google Chrome (or Chromium) on the system.
npx google-surf-mcp # actual MCP - register in client config
Or local clone:
git clone https://github.com/HarimxChoi/google-surf-mcp
cd google-surf-mcp
npm install
npm run bootstrap
bootstrap opens a Chrome window. Run one Google search in it. Close. Profile is now warm.
Override paths if needed:
CHROME_PATH=/path/to/chrome SURF_TZ=America/New_York npm run bootstrap
Paste this into your ~/.claude.json:
{
"mcpServers": {
"google-surf": {
"command": "npx",
"args": ["-y", "google-surf-mcp"]
}
}
}
Restart Claude Code. Done. search, search_parallel, extract, search_extract, health are now available.
For other MCP clients, use the same JSON shape in their config file.
Local clone variant:
{
"mcpServers": {
"google-surf": {
"command": "node",
"args": ["/abs/path/to/google-surf-mcp/build/index.js"]
}
}
}
search(query, limit?) - single query, ~1.5s. Returns title / url / snippet. Sponsored ads filtered out. Results cached 24h (SURF_CACHE_TTL_SEARCH_MS=0 to bypass).search_parallel(queries[], limit?) - pool of 4, max 10 queries per call.extract(url, max_chars?) - fetch a URL, return article markdown (Readability with text fallback). Failures return { error }, never throw.search_extract(query, limit?, max_chars?) - search + parallel extract in one call. Returns SERP results enriched with full article content. Per-page failures are isolated.health() - server status: cascade mode, rate-limiter usage, cache size, config. Call it if searches start failing or retu