NestDaddy

Google Surf Mcp

io.github.HarimxChoi/google-surf-mcp · v1.1.6

Web, academic and code search with graph RAG, data lineage, ontology and cross-project schema links.

Connect Runs on your machine

Terminal
claude mcp add google-surf-mcp -e SEARCH_API=<SEARCH_API> -e SURF_SEARCH_PROVIDER=<SURF_SEARCH_PROVIDER> -e SURF_SCHOLAR_PROVIDER=<SURF_SCHOLAR_PROVIDER> -e SURF_BROWSER_ENGINE=<SURF_BROWSER_ENGINE> -e CHROME_PATH=<CHROME_PATH> -e SURF_PROFILE_ROOT=<SURF_PROFILE_ROOT> -e SURF_RESEARCH=<SURF_RESEARCH> -e SURF_RETRIEVAL_MODE=<SURF_RETRIEVAL_MODE> -e SURF_RESEARCH_ROOT=<SURF_RESEARCH_ROOT> -e SURF_RESEARCH_VECTOR_MODEL=<SURF_RESEARCH_VECTOR_MODEL> -e SURF_RESEARCH_VECTOR_LOW_MEMORY=<SURF_RESEARCH_VECTOR_LOW_MEMORY> -e SURF_RESEARCH_VECTOR_THREADS=<SURF_RESEARCH_VECTOR_THREADS> -e SURF_RESEARCH_REPO_AUTO=<SURF_RESEARCH_REPO_AUTO> -e SURF_RESEARCH_REPO_AUTO_MAX_MB=<SURF_RESEARCH_REPO_AUTO_MAX_MB> -e SURF_RESEARCH_REPO_AUTO_MAX_FILES=<SURF_RESEARCH_REPO_AUTO_MAX_FILES> -e SURF_RESEARCH_BROKER_IDLE_MS=<SURF_RESEARCH_BROKER_IDLE_MS> -e SURF_RESEARCH_READ_CONCURRENCY=<SURF_RESEARCH_READ_CONCURRENCY> -e SURF_RESEARCH_QUERY_TIMEOUT_MS=<SURF_RESEARCH_QUERY_TIMEOUT_MS> -e GITHUB_TOKEN=<GITHUB_TOKEN> -e SURF_LOCALE=<SURF_LOCALE> -e SURF_TZ=<SURF_TZ> -e SURF_HEADLESS=<SURF_HEADLESS> -e SURF_IDLE_CLOSE_MS=<SURF_IDLE_CLOSE_MS> -e SURF_ALLOW_PRIVATE=<SURF_ALLOW_PRIVATE> -e SURF_LLM_HEAL=<SURF_LLM_HEAL> -e SURF_LLM_PROVIDER=<SURF_LLM_PROVIDER> -e SURF_LLM_MODEL=<SURF_LLM_MODEL> -e ANTHROPIC_API_KEY=<ANTHROPIC_API_KEY> -e ORCAROUTER_API_KEY=<ORCAROUTER_API_KEY> -- npx -y [email protected]
claude_desktop_config.json
{
  "mcpServers": {
    "google-surf-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "SEARCH_API": "<SEARCH_API>",
        "SURF_SEARCH_PROVIDER": "<SURF_SEARCH_PROVIDER>",
        "SURF_SCHOLAR_PROVIDER": "<SURF_SCHOLAR_PROVIDER>",
        "SURF_BROWSER_ENGINE": "<SURF_BROWSER_ENGINE>",
        "CHROME_PATH": "<CHROME_PATH>",
        "SURF_PROFILE_ROOT": "<SURF_PROFILE_ROOT>",
        "SURF_RESEARCH": "<SURF_RESEARCH>",
        "SURF_RETRIEVAL_MODE": "<SURF_RETRIEVAL_MODE>",
        "SURF_RESEARCH_ROOT": "<SURF_RESEARCH_ROOT>",
        "SURF_RESEARCH_VECTOR_MODEL": "<SURF_RESEARCH_VECTOR_MODEL>",
        "SURF_RESEARCH_VECTOR_LOW_MEMORY": "<SURF_RESEARCH_VECTOR_LOW_MEMORY>",
        "SURF_RESEARCH_VECTOR_THREADS": "<SURF_RESEARCH_VECTOR_THREADS>",
        "SURF_RESEARCH_REPO_AUTO": "<SURF_RESEARCH_REPO_AUTO>",
        "SURF_RESEARCH_REPO_AUTO_MAX_MB": "<SURF_RESEARCH_REPO_AUTO_MAX_MB>",
        "SURF_RESEARCH_REPO_AUTO_MAX_FILES": "<SURF_RESEARCH_REPO_AUTO_MAX_FILES>",
        "SURF_RESEARCH_BROKER_IDLE_MS": "<SURF_RESEARCH_BROKER_IDLE_MS>",
        "SURF_RESEARCH_READ_CONCURRENCY": "<SURF_RESEARCH_READ_CONCURRENCY>",
        "SURF_RESEARCH_QUERY_TIMEOUT_MS": "<SURF_RESEARCH_QUERY_TIMEOUT_MS>",
        "GITHUB_TOKEN": "<GITHUB_TOKEN>",
        "SURF_LOCALE": "<SURF_LOCALE>",
        "SURF_TZ": "<SURF_TZ>",
        "SURF_HEADLESS": "<SURF_HEADLESS>",
        "SURF_IDLE_CLOSE_MS": "<SURF_IDLE_CLOSE_MS>",
        "SURF_ALLOW_PRIVATE": "<SURF_ALLOW_PRIVATE>",
        "SURF_LLM_HEAL": "<SURF_LLM_HEAL>",
        "SURF_LLM_PROVIDER": "<SURF_LLM_PROVIDER>",
        "SURF_LLM_MODEL": "<SURF_LLM_MODEL>",
        "ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>",
        "ORCAROUTER_API_KEY": "<ORCAROUTER_API_KEY>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "google-surf-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "SEARCH_API": "<SEARCH_API>",
        "SURF_SEARCH_PROVIDER": "<SURF_SEARCH_PROVIDER>",
        "SURF_SCHOLAR_PROVIDER": "<SURF_SCHOLAR_PROVIDER>",
        "SURF_BROWSER_ENGINE": "<SURF_BROWSER_ENGINE>",
        "CHROME_PATH": "<CHROME_PATH>",
        "SURF_PROFILE_ROOT": "<SURF_PROFILE_ROOT>",
        "SURF_RESEARCH": "<SURF_RESEARCH>",
        "SURF_RETRIEVAL_MODE": "<SURF_RETRIEVAL_MODE>",
        "SURF_RESEARCH_ROOT": "<SURF_RESEARCH_ROOT>",
        "SURF_RESEARCH_VECTOR_MODEL": "<SURF_RESEARCH_VECTOR_MODEL>",
        "SURF_RESEARCH_VECTOR_LOW_MEMORY": "<SURF_RESEARCH_VECTOR_LOW_MEMORY>",
        "SURF_RESEARCH_VECTOR_THREADS": "<SURF_RESEARCH_VECTOR_THREADS>",
        "SURF_RESEARCH_REPO_AUTO": "<SURF_RESEARCH_REPO_AUTO>",
        "SURF_RESEARCH_REPO_AUTO_MAX_MB": "<SURF_RESEARCH_REPO_AUTO_MAX_MB>",
        "SURF_RESEARCH_REPO_AUTO_MAX_FILES": "<SURF_RESEARCH_REPO_AUTO_MAX_FILES>",
        "SURF_RESEARCH_BROKER_IDLE_MS": "<SURF_RESEARCH_BROKER_IDLE_MS>",
        "SURF_RESEARCH_READ_CONCURRENCY": "<SURF_RESEARCH_READ_CONCURRENCY>",
        "SURF_RESEARCH_QUERY_TIMEOUT_MS": "<SURF_RESEARCH_QUERY_TIMEOUT_MS>",
        "GITHUB_TOKEN": "<GITHUB_TOKEN>",
        "SURF_LOCALE": "<SURF_LOCALE>",
        "SURF_TZ": "<SURF_TZ>",
        "SURF_HEADLESS": "<SURF_HEADLESS>",
        "SURF_IDLE_CLOSE_MS": "<SURF_IDLE_CLOSE_MS>",
        "SURF_ALLOW_PRIVATE": "<SURF_ALLOW_PRIVATE>",
        "SURF_LLM_HEAL": "<SURF_LLM_HEAL>",
        "SURF_LLM_PROVIDER": "<SURF_LLM_PROVIDER>",
        "SURF_LLM_MODEL": "<SURF_LLM_MODEL>",
        "ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>",
        "ORCAROUTER_API_KEY": "<ORCAROUTER_API_KEY>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "google-surf-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "SEARCH_API": "<SEARCH_API>",
        "SURF_SEARCH_PROVIDER": "<SURF_SEARCH_PROVIDER>",
        "SURF_SCHOLAR_PROVIDER": "<SURF_SCHOLAR_PROVIDER>",
        "SURF_BROWSER_ENGINE": "<SURF_BROWSER_ENGINE>",
        "CHROME_PATH": "<CHROME_PATH>",
        "SURF_PROFILE_ROOT": "<SURF_PROFILE_ROOT>",
        "SURF_RESEARCH": "<SURF_RESEARCH>",
        "SURF_RETRIEVAL_MODE": "<SURF_RETRIEVAL_MODE>",
        "SURF_RESEARCH_ROOT": "<SURF_RESEARCH_ROOT>",
        "SURF_RESEARCH_VECTOR_MODEL": "<SURF_RESEARCH_VECTOR_MODEL>",
        "SURF_RESEARCH_VECTOR_LOW_MEMORY": "<SURF_RESEARCH_VECTOR_LOW_MEMORY>",
        "SURF_RESEARCH_VECTOR_THREADS": "<SURF_RESEARCH_VECTOR_THREADS>",
        "SURF_RESEARCH_REPO_AUTO": "<SURF_RESEARCH_REPO_AUTO>",
        "SURF_RESEARCH_REPO_AUTO_MAX_MB": "<SURF_RESEARCH_REPO_AUTO_MAX_MB>",
        "SURF_RESEARCH_REPO_AUTO_MAX_FILES": "<SURF_RESEARCH_REPO_AUTO_MAX_FILES>",
        "SURF_RESEARCH_BROKER_IDLE_MS": "<SURF_RESEARCH_BROKER_IDLE_MS>",
        "SURF_RESEARCH_READ_CONCURRENCY": "<SURF_RESEARCH_READ_CONCURRENCY>",
        "SURF_RESEARCH_QUERY_TIMEOUT_MS": "<SURF_RESEARCH_QUERY_TIMEOUT_MS>",
        "GITHUB_TOKEN": "<GITHUB_TOKEN>",
        "SURF_LOCALE": "<SURF_LOCALE>",
        "SURF_TZ": "<SURF_TZ>",
        "SURF_HEADLESS": "<SURF_HEADLESS>",
        "SURF_IDLE_CLOSE_MS": "<SURF_IDLE_CLOSE_MS>",
        "SURF_ALLOW_PRIVATE": "<SURF_ALLOW_PRIVATE>",
        "SURF_LLM_HEAL": "<SURF_LLM_HEAL>",
        "SURF_LLM_PROVIDER": "<SURF_LLM_PROVIDER>",
        "SURF_LLM_MODEL": "<SURF_LLM_MODEL>",
        "ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>",
        "ORCAROUTER_API_KEY": "<ORCAROUTER_API_KEY>"
      }
    }
  }
}

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools

This server runs locally, so its tools are listed by your MCP client once it starts.

Environment variables

NameDescription
SEARCH_API
Optional, secret
SearchApi API key. Required only for SearchApi primary or fallback modes.
SURF_SEARCH_PROVIDER
Optional
Provider for search and search_parallel: browser, searchapi, or fallback. Defaults to browser.
SURF_SCHOLAR_PROVIDER
Optional
Provider for scholar_search: browser, searchapi, or fallback. Defaults to browser.
SURF_BROWSER_ENGINE
Optional
Browser engine: auto, native, or playwright. Auto uses one hidden native Chrome broker shared across local MCP sessions.
CHROME_PATH
Optional
Absolute path to the Chrome binary. Auto-detected on Windows/macOS/Linux when omitted.
SURF_PROFILE_ROOT
Optional
Directory for the warm Chrome profile. Defaults to ~/.google-surf-mcp.
SURF_RESEARCH
Optional
Enable Google Surf Auto Ontology: local project memory, evidence capture, and hybrid retrieval. Defaults to true. The SURF_RESEARCH setting name is unchanged.
SURF_RETRIEVAL_MODE
Optional
Shared route for search and search_parallel: live or hybrid. Defaults to hybrid.
SURF_RESEARCH_ROOT
Optional
Embedded SurrealDB data directory. Defaults to <profile>/research.
SURF_RESEARCH_VECTOR_MODEL
Optional
Local model for HNSW retrieval and shared reranking. Defaults to Xenova/multilingual-e5-small; use off to disable.
SURF_RESEARCH_VECTOR_LOW_MEMORY
Optional
Disable ONNX CPU memory arena and memory pattern. Defaults to true.
SURF_RESEARCH_VECTOR_THREADS
Optional
ONNX intra-op thread count from 1 to 16. Defaults to 4.
SURF_RESEARCH_REPO_AUTO
Optional
Sparse-index at most one eligible small GitHub repository per search call. Defaults to true.
SURF_RESEARCH_REPO_AUTO_MAX_MB
Optional
Maximum searchable repository source-text size in MB. Assets are excluded. Defaults to 20.
SURF_RESEARCH_REPO_AUTO_MAX_FILES
Optional
Maximum repository source file count for automatic indexing. Defaults to 2000.
SURF_RESEARCH_BROKER_IDLE_MS
Optional
Shared Auto Ontology broker idle lifetime in milliseconds. Defaults to 60000.
SURF_RESEARCH_READ_CONCURRENCY
Optional
Maximum concurrent Auto Ontology broker reads. Defaults to 4.
SURF_RESEARCH_QUERY_TIMEOUT_MS
Optional
Timeout per embedded SurrealDB query in milliseconds. Defaults to 120000; timed-out retrieval lanes are reported as partial.
GITHUB_TOKEN
Optional, secret
Optional token that raises GitHub API limits for repository inspection.
SURF_LOCALE
Optional
Browser locale, e.g. en-US.
SURF_TZ
Optional
IANA timezone, e.g. America/New_York. Defaults to system timezone.
SURF_HEADLESS
Optional
Controls Playwright extraction, compatibility, and recovery paths. Native search hides normal system Chrome and shows it only for CAPTCHA recovery.
SURF_IDLE_CLOSE_MS
Optional
Idle ms before closing the sequential ctx and pool. 0 disables idle auto-close. Defaults to 30000.
SURF_ALLOW_PRIVATE
Optional
Set to 'true' to allow extract on private/loopback addresses (localhost, 10.x, 192.168.x, 169.254.x, etc). Default blocks them as an SSRF guard.
SURF_LLM_HEAL
Optional
Enable the optional workflow-only LLM selector repair path. Defaults to false.
SURF_LLM_PROVIDER
Optional
LLM selector repair provider: anthropic or orcarouter. Defaults to anthropic.
SURF_LLM_MODEL
Optional
Optional model override. OrcaRouter defaults to orcarouter/auto.
ANTHROPIC_API_KEY
Optional, secret
Anthropic API key for optional LLM-assisted selector repair.
ORCAROUTER_API_KEY
Optional, secret
OrcaRouter API key for optional LLM-assisted selector repair.

Details

Package[email protected] (NPM, stdio)
First published7 Nov 2026
Last updated7 Nov 2026
Registry nameio.github.HarimxChoi/google-surf-mcp

More search and web servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.