{
  "slug": "io-github-harimxchoi-google-surf-mcp",
  "name": "io.github.HarimxChoi/google-surf-mcp",
  "title": "google-surf-mcp",
  "description": "Web, academic and code search with graph RAG, data lineage, ontology and cross-project schema links.",
  "version": "1.1.4",
  "publishedAt": "2026-10-20T01:01:10.879215Z",
  "updatedAt": "2026-10-20T01:01:10.879215Z",
  "repoUrl": "https://github.com/HarimxChoi/google-surf-mcp",
  "websiteUrl": null,
  "namespace": {
    "type": "github",
    "owner": "HarimxChoi"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "google-surf-mcp",
      "version": "1.1.4",
      "transport": "stdio",
      "runtimeHint": null
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "SEARCH_API",
      "isSecret": true,
      "isRequired": false,
      "description": "SearchApi API key. Required only for SearchApi primary or fallback modes."
    },
    {
      "name": "SURF_SEARCH_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Provider for search and search_parallel: browser, searchapi, or fallback. Defaults to browser."
    },
    {
      "name": "SURF_SCHOLAR_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Provider for scholar_search: browser, searchapi, or fallback. Defaults to browser."
    },
    {
      "name": "SURF_BROWSER_ENGINE",
      "isSecret": false,
      "isRequired": false,
      "description": "Browser engine: auto, native, or playwright. Auto uses one hidden native Chrome broker shared across local MCP sessions."
    },
    {
      "name": "CHROME_PATH",
      "isSecret": false,
      "isRequired": false,
      "description": "Absolute path to the Chrome binary. Auto-detected on Windows/macOS/Linux when omitted."
    },
    {
      "name": "SURF_PROFILE_ROOT",
      "isSecret": false,
      "isRequired": false,
      "description": "Directory for the warm Chrome profile. Defaults to ~/.google-surf-mcp."
    },
    {
      "name": "SURF_RESEARCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable local project memory and hybrid retrieval. Defaults to true."
    },
    {
      "name": "SURF_RETRIEVAL_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "Shared route for search and search_parallel: live or hybrid. Defaults to hybrid."
    },
    {
      "name": "SURF_RESEARCH_ROOT",
      "isSecret": false,
      "isRequired": false,
      "description": "Embedded SurrealDB data directory. Defaults to <profile>/research."
    },
    {
      "name": "SURF_RESEARCH_VECTOR_MODEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Local model for HNSW retrieval and shared reranking. Defaults to Xenova/multilingual-e5-small; use off to disable."
    },
    {
      "name": "SURF_RESEARCH_VECTOR_LOW_MEMORY",
      "isSecret": false,
      "isRequired": false,
      "description": "Disable ONNX CPU memory arena and memory pattern. Defaults to true."
    },
    {
      "name": "SURF_RESEARCH_VECTOR_THREADS",
      "isSecret": false,
      "isRequired": false,
      "description": "ONNX intra-op thread count from 1 to 16. Defaults to 4."
    },
    {
      "name": "SURF_RESEARCH_REPO_AUTO",
      "isSecret": false,
      "isRequired": false,
      "description": "Sparse-index at most one eligible small GitHub repository per search call. Defaults to true."
    },
    {
      "name": "SURF_RESEARCH_REPO_AUTO_MAX_MB",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum searchable repository source-text size in MB. Assets are excluded. Defaults to 20."
    },
    {
      "name": "SURF_RESEARCH_REPO_AUTO_MAX_FILES",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum repository source file count for automatic indexing. Defaults to 2000."
    },
    {
      "name": "SURF_RESEARCH_BROKER_IDLE_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Shared research broker idle lifetime in milliseconds. Defaults to 60000."
    },
    {
      "name": "SURF_RESEARCH_READ_CONCURRENCY",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum concurrent research broker reads. Defaults to 4."
    },
    {
      "name": "SURF_RESEARCH_QUERY_TIMEOUT_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Timeout per embedded SurrealDB query in milliseconds. Defaults to 120000; timed-out retrieval lanes are reported as partial."
    },
    {
      "name": "GITHUB_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Optional token that raises GitHub API limits for repository inspection."
    },
    {
      "name": "SURF_LOCALE",
      "isSecret": false,
      "isRequired": false,
      "description": "Browser locale, e.g. en-US."
    },
    {
      "name": "SURF_TZ",
      "isSecret": false,
      "isRequired": false,
      "description": "IANA timezone, e.g. America/New_York. Defaults to system timezone."
    },
    {
      "name": "SURF_HEADLESS",
      "isSecret": false,
      "isRequired": false,
      "description": "Controls Playwright extraction, compatibility, and recovery paths. Native search hides normal system Chrome and shows it only for CAPTCHA recovery."
    },
    {
      "name": "SURF_IDLE_CLOSE_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Idle ms before closing the sequential ctx and pool. 0 disables idle auto-close. Defaults to 30000."
    },
    {
      "name": "SURF_ALLOW_PRIVATE",
      "isSecret": false,
      "isRequired": false,
      "description": "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."
    },
    {
      "name": "SURF_LLM_HEAL",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable the optional workflow-only LLM selector repair path. Defaults to false."
    },
    {
      "name": "SURF_LLM_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "LLM selector repair provider: anthropic or orcarouter. Defaults to anthropic."
    },
    {
      "name": "SURF_LLM_MODEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Optional model override. OrcaRouter defaults to orcarouter/auto."
    },
    {
      "name": "ANTHROPIC_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Anthropic API key for optional LLM-assisted selector repair."
    },
    {
      "name": "ORCAROUTER_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "OrcaRouter API key for optional LLM-assisted selector repair."
    }
  ],
  "category": "search-web",
  "subcategory": "research",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/HarimxChoi/google-surf-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "warn",
      "detail": "Asks for 4 secrets: SEARCH_API, GITHUB_TOKEN, ANTHROPIC_API_KEY, ORCAROUTER_API_KEY"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account HarimxChoi"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "google-surf-mcp@1.1.4 runs nothing at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "warn",
      "detail": "Reads browser or wallet data (build/browser.js:206: \"Login Data\")"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 85 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"google-surf-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"google-surf-mcp@1.1.4\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 291,
  "archived": false,
  "pushedAt": "2026-10-20T16:48:25Z",
  "health": {
    "score": 56,
    "parts": {
      "popularity": 0.5373092936617463,
      "activity": 0.6,
      "issues": null,
      "security": 0.6
    },
    "fail": 0,
    "warn": 2,
    "raw": {
      "stars": 291,
      "forks": 32,
      "downloads": 454,
      "hn": {
        "n": 0,
        "pts": 0
      },
      "issuesOpen": 0,
      "issuesClosed": 3,
      "prsMerged": 7,
      "commits90": 0,
      "release": "2026-10-30T15:56:30Z",
      "pushed": "2026-10-20T16:48:25Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:35:52.424Z"
  }
}
