Web, academic and code search with graph RAG, data lineage, ontology and cross-project schema links.
Connect Runs on your machine
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]
{
"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>"
}
}
}
}
{
"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>"
}
}
}
}
{
"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
| Name | Description |
|---|---|
SEARCH_APIOptional, secret | SearchApi API key. Required only for SearchApi primary or fallback modes. |
SURF_SEARCH_PROVIDEROptional | Provider for search and search_parallel: browser, searchapi, or fallback. Defaults to browser. |
SURF_SCHOLAR_PROVIDEROptional | Provider for scholar_search: browser, searchapi, or fallback. Defaults to browser. |
SURF_BROWSER_ENGINEOptional | Browser engine: auto, native, or playwright. Auto uses one hidden native Chrome broker shared across local MCP sessions. |
CHROME_PATHOptional | Absolute path to the Chrome binary. Auto-detected on Windows/macOS/Linux when omitted. |
SURF_PROFILE_ROOTOptional | Directory for the warm Chrome profile. Defaults to ~/.google-surf-mcp. |
SURF_RESEARCHOptional | 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_MODEOptional | Shared route for search and search_parallel: live or hybrid. Defaults to hybrid. |
SURF_RESEARCH_ROOTOptional | Embedded SurrealDB data directory. Defaults to <profile>/research. |
SURF_RESEARCH_VECTOR_MODELOptional | Local model for HNSW retrieval and shared reranking. Defaults to Xenova/multilingual-e5-small; use off to disable. |
SURF_RESEARCH_VECTOR_LOW_MEMORYOptional | Disable ONNX CPU memory arena and memory pattern. Defaults to true. |
SURF_RESEARCH_VECTOR_THREADSOptional | ONNX intra-op thread count from 1 to 16. Defaults to 4. |
SURF_RESEARCH_REPO_AUTOOptional | Sparse-index at most one eligible small GitHub repository per search call. Defaults to true. |
SURF_RESEARCH_REPO_AUTO_MAX_MBOptional | Maximum searchable repository source-text size in MB. Assets are excluded. Defaults to 20. |
SURF_RESEARCH_REPO_AUTO_MAX_FILESOptional | Maximum repository source file count for automatic indexing. Defaults to 2000. |
SURF_RESEARCH_BROKER_IDLE_MSOptional | Shared Auto Ontology broker idle lifetime in milliseconds. Defaults to 60000. |
SURF_RESEARCH_READ_CONCURRENCYOptional | Maximum concurrent Auto Ontology broker reads. Defaults to 4. |
SURF_RESEARCH_QUERY_TIMEOUT_MSOptional | Timeout per embedded SurrealDB query in milliseconds. Defaults to 120000; timed-out retrieval lanes are reported as partial. |
GITHUB_TOKENOptional, secret | Optional token that raises GitHub API limits for repository inspection. |
SURF_LOCALEOptional | Browser locale, e.g. en-US. |
SURF_TZOptional | IANA timezone, e.g. America/New_York. Defaults to system timezone. |
SURF_HEADLESSOptional | Controls Playwright extraction, compatibility, and recovery paths. Native search hides normal system Chrome and shows it only for CAPTCHA recovery. |
SURF_IDLE_CLOSE_MSOptional | Idle ms before closing the sequential ctx and pool. 0 disables idle auto-close. Defaults to 30000. |
SURF_ALLOW_PRIVATEOptional | 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_HEALOptional | Enable the optional workflow-only LLM selector repair path. Defaults to false. |
SURF_LLM_PROVIDEROptional | LLM selector repair provider: anthropic or orcarouter. Defaults to anthropic. |
SURF_LLM_MODELOptional | Optional model override. OrcaRouter defaults to orcarouter/auto. |
ANTHROPIC_API_KEYOptional, secret | Anthropic API key for optional LLM-assisted selector repair. |
ORCAROUTER_API_KEYOptional, secret | OrcaRouter API key for optional LLM-assisted selector repair. |
Details
| Package | [email protected] (NPM, stdio) |
| First published | 7 Nov 2026 |
| Last updated | 7 Nov 2026 |
| Registry name | io.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.
