Skip to main content
Glama
DavidCastilloAlvarado

dsh-google-chrome-search

dsh-google-chrome-search

CI license: MIT node: >=18

DeepSeek Harness (DSH) 플러그인으로, AI 에이전트가 CDP(Chrome DevTools Protocol)를 통해 로컬 Chrome 브라우저를 구동하여 실제 Google 웹 검색을 실행하고, 모든 페이지를 렌더링하여 콘텐츠를 추출할 수 있게 해줍니다. 검색 API 키가 필요 없습니다 — 머신에 이미 설치된 Chrome으로 동작합니다.

Google은 자동화 및 데이터센터 트래픽에 대해 사람 확인 페이지(CAPTCHA / "비정상적인 트래픽")를 자주 제공합니다. 이런 경우 이 플러그인은 보이는 Chrome 창을 열어 확인 페이지를 표시하고, 사람이 해결할 때까지 대기한 후, 이제 신뢰된 세션에서 결과를 추출합니다. 이것이 "사람에게 묻기" 단계입니다 — 설계상 에이전트는 절대 CAPTCHA를 스스로 해결하려 하지 않습니다.

사람에게 표시되는 Google의 확인 페이지

구성 요소

구성 요소

경로

용도

핵심 엔진

src/search.mjs

Chrome/CDP Google 검색 + CAPTCHA 확인 + 결과 추출

페이지 엔진

src/fetch.mjs

모든 URL 렌더링 + 읽을 수 있는 콘텐츠 추출(Mozilla Readability) + search_and_fetch

MCP 서버

src/server.mjs

stdio를 통해 search, fetch, search_and_fetch 노출 → DSH에서 네이티브 mcp__google__*

CLI

bin/google-search.mjs

직접 사용을 위한 dsh-google-search "<query>"dsh-google-search fetch "<url>"

스킬

skill/SKILL.md

에이전트에게 사용법 + 사람 확인 워크플로우 교육

Related MCP server: browser-search-mcp

요구 사항

  • Node.js ≥ 18 (Node 22에서 테스트됨)

  • 로컬 Chrome/Chromium 바이너리 (예: google-chrome, chromium). 일반적인 경로에서 자동 감지되며, CHROME_PATH 또는 --chrome으로 재정의할 수 있습니다.

  • 보이는 확인 단계를 위해 디스플레이가 있는 데스크톱 세션이 필요합니다(Chrome 창을 사람에게 표시할 수 있어야 함). 헤드리스/SSH에서도 CAPTCHA를 감지하고 (스크린샷과 함께) 보고할 수 있습니다.

설치

git clone https://github.com/davidcastilloalvarado/dsh-google-chrome-search.git
cd dsh-google-chrome-search
npm install

의존성: puppeteer-core (여러분의 Chrome을 구동 — 브라우저를 다운로드하지 않음), @modelcontextprotocol/sdk (MCP 서버용), @mozilla/readability (콘텐츠 추출), zod (스키마 검증).

선택적으로 CLI를 전역에 링크하여 PATH에 포함시킬 수 있습니다:

npm link        # gives you: dsh-google-search "<query>"

CLI 사용

# Search:
node bin/google-search.mjs "nodejs streams" --max 8
# or, after npm install / npm link:
npm run search -- "nodejs streams" --json

# Search, then render + extract the top 3 result pages:
node bin/google-search.mjs "nodejs streams" --max 8 --fetch-top 3 --fetch-max-chars 8000

# Fetch one URL directly (render + extract readable content):
node bin/google-search.mjs fetch "https://nodejs.org/api/stream.html" --max-chars 8000

종료 코드: 0 = 성공 (결과 / 가져온 콘텐츠), 2 = 확인 필요 (CAPTCHA), 3 = 결과 없음 / 가져오기 차단 또는 실패, 1 = 오류, 64 = 사용법 오류.

페이지 가져오기 (렌더링 + 추출)

이 플러그인은 모든 URL을 렌더링하고 읽을 수 있는 주요 콘텐츠를 추출할 수도 있습니다:

  • 동일한 전용 Chrome 프로필에서 페이지를 실행합니다(일관되고 신뢰된 지문을 보는 사이트가 더 잘 동작하도록).

  • 페이지가 완전히 로드될 때까지 대기합니다(늦은 SPA 콘텐츠 포함).

  • 라이브 페이지 내부에서 실행되는 Mozilla Readability로 기사를 추출합니다. 페이지에 뚜렷한 기사가 없으면 전체 페이지 텍스트로 대체합니다.

  • 출력 상한(페이지당 기본 8,000자)으로 에이전트 컨텍스트에 친화적으로 유지합니다.

  • 안티봇 벽을 감지하고 쓰레기를 반환하는 대신 blocked로 보고합니다. 사이트가 사람 확인 챌린지(예: DataDome의 "슬라이드하여 계속하기" 벽)를 제공하면 페이지가 있는 보이는 Chrome 창을 열고, 사람이 통과할 때까지 verifyTimeoutMs 동안 대기한 후 실제 콘텐츠를 추출합니다 — Google CAPTCHA 흐름과 동일한 사람에게 위임하는 철학입니다. 신뢰된 세션 쿠키는 프로필에 유지되므로 해당 사이트의 이후 페이지는 일반적으로 헤드리스로 통과합니다. --no-verify / autoVerify: false를 사용하면 blocked로만 보고합니다.

dsh-google-search fetch "https://example.com/article" --max-chars 10000
dsh-google-search fetch "https://example.com/article" --html --screenshot

검색과 읽기를 결합하는 두 가지 방법:

방법

방식

검색 후 상위 N개 페이지를 한 번에 읽기

search_and_fetch (MCP) / --fetch-top N (CLI)

검색 후 특정 결과 읽기

search 후 선택한 URL로 fetch

페이지는 순차적으로 렌더링됩니다(브라우저 하나, 페이지 한 번에 하나) — 페이지당 ~1–3초가 소요됩니다.

네이티브 DSH 도구로 사용 (MCP)

프로필 구성에서 DSH의 @deepseek-ai/dsh-mcp-client로 MCP 서버를 등록합니다 (예시 — commandargs 경로를 환경에 맞게 조정):

- insert:
    - id: mcp-google
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: google
        transport: stdio
        command: /path/to/node
        args: [ /path/to/dsh-google-chrome-search/src/server.mjs ]
        env:
          CHROME_PATH: /usr/bin/google-chrome   # optional — auto-detected if unset
        toolCallTimeoutMs: 300000

DSH를 재시작하면 에이전트가 세 가지 네이티브 도구를 사용할 수 있습니다:

도구

기능

mcp__google__search

Google 웹 검색 → 링크 + 스니펫

mcp__google__fetch

하나의 URL 렌더링 → 추출된 읽을 수 있는 콘텐츠 (제목, 작성자, 텍스트, 선택적 HTML/스크린샷)

mcp__google__search_and_fetch

검색 → 상위 N개 페이지 렌더링 → 페이지별 추출 콘텐츠를 한 번에

참고:

  • 호출은 직렬화됩니다 (Chrome은 프로필당 하나의 프로세스만 허용), 따라서 동시 도구 호출은 병렬로 실행되지 않고 대기열에 들어갑니다.

  • search_and_fetch는 일반 검색보다 느립니다: 위에 표시된 대로 toolCallTimeoutMs300000(5분)으로 유지하세요.

  • 사람 확인 흐름은 Google 검색(CAPTCHA)과 브라우저를 차단하는 결과 페이지(안티봇 슬라이더) 모두에 적용됩니다: 사람을 위해 보이는 Chrome 창이 열리고, 이후 세션은 프로필에 유지됩니다.

DSH 스킬로 사용

skill/SKILL.md는 에이전트에게 검색 실행 방법과 CAPTCHA를 사람에게 넘겨주는 방법을 교육합니다. 설치하려면 DSH 스킬 디렉토리에 복사하세요, 예:

mkdir -p ~/.dsh/skills/google-chrome-search
cp skill/SKILL.md ~/.dsh/skills/google-chrome-search/

다른 머신에서 공유/사용하기 전에 SKILL.md 내부의 <INSTALL_DIR> 자리 표시자를 이 저장소를 클론한 위치로 편집하세요 (또는 npm link CLI를 PATH에 넣으면 바로 작동합니다).

구성 (환경 변수 / 옵션)

옵션 / 환경 변수

기본값

의미

chromePath / CHROME_PATH

자동 감지

Chrome 실행 파일

profileDir / GSEARCH_PROFILE

~/.dsh-chrome-google

영구적인 전용 Chrome 프로필 ("확인된" 쿠키 유지)

maxResults

8

반환할 자연 검색 결과 (최대 20)

verifyTimeoutMs

150000

사람이 CAPTCHA를 해결할 때까지 대기하는 시간

autoVerify

true

false이면 보이는 창을 절대 열지 않음 — 보고만 함

gl / hl

us / en

지역 / 언어

maxChars

8000

가져온 페이지당 최대 추출 문자 수 (fetch / search_and_fetch)

fetchTop

3

search_and_fetch에서 렌더링할 결과 페이지 수 (최대 5)

includeHtml / screenshot

false

fetch 옵션: 추출된 HTML / 페이지 스크린샷도 반환

timeoutMs

20000

가져온 페이지당 탐색 제한 시간

사람 확인 흐름, 단계별

  1. Chrome이 헤드리스로 검색을 실행합니다 (전용 격리 프로필 — 절대 실제 브라우저가 아님).

  2. 결과가 있으면 → 반환합니다 (status: ok).

  3. Google이 CAPTCHA를 제공하면:

    • 스크린샷을 찍습니다.

    • 확인 페이지에서 보이는 Chrome 창을 엽니다 (동일 프로필).

    • 페이지를 폴링하면서 사람이 해결할 때까지 verifyTimeoutMs 동안 대기합니다.

    • 해결되면 → 결과를 추출 + 반환합니다 (verifiedViaHuman: true 표시). 시간 초과되면 → 최신 스크린샷과 함께 status: verification_required를 반환합니다.

  4. 확인된 세션은 프로필에 유지되므로 다음 검색은 일반적으로 헤드리스로 성공합니다.

테스트

npm test

MCP 서버를 생성하고 search, fetch, search_and_fetch 도구가 나열되는지 확인하며, 머신에 Chrome 바이너리가 있으면 autoVerify: false로 라이브 검색을 수행합니다. 브라우저가 없는 환경(예: CI)에서는 라이브 호출이 정상적으로 건너뜁니다.

문제 해결

증상

해결 방법

Could not find Chrome / 실행 오류

Chrome/Chromium을 설치하거나 CHROME_PATH / --chrome 설정

컨테이너에서 root로 실행, 샌드박스 오류

기본값은 --no-sandbox입니다 (격리용); 샌드박스를 켜려면 noSandbox: false 전달

모든 검색에서 CAPTCHA 발생

전용 프로필(~/.dsh-chrome-google)을 유지하세요 — 삭제하면 "확인된" 쿠키가 초기화됩니다. 데이터센터 IP는 CAPTCHA가 더 자주 발생합니다.

SSH에서 보이는 창이 나타나지 않음

디스플레이가 있는 머신을 사용하거나, autoVerify: false로 설정하고 출력된 스크린샷의 브라우저 컨텍스트에서 CAPTCHA를 수동으로 해결하세요.

ECONNREFUSED / 프로필의 오래된 잠금

해당 프로필을 사용하는 모든 Chrome 인스턴스를 닫고 재시도하세요 (프로필은 개인 프로필과 분리되어 있습니다). 두 개의 CLI 호출을 동시에 실행하지 마세요 — 프로필당 하나의 프로세스입니다.

fetch가 슬라이더 / "사람 확인" 창을 엶

이는 의도된 사람 확인 단계입니다: 창에서 챌린지를 통과하면 재시도하고 세션을 유지합니다. --no-verify는 창을 건너뛰고 blocked로만 보고합니다.

fetchblocked 반환 (창 없음)

사이트가 헤드리스 브라우저를 차단하고 autoVerify가 꺼져 있거나 (또는 디스플레이가 없음). 같은 주제의 다른 소스를 시도하거나 확인을 활성화하고 실행하세요.

fetch가 빈 텍스트 반환

페이지가 JS 중심이고 렌더링이 완료되지 않았습니다; 재시도하거나 (~7초까지 안정화됨), --timeout을 늘리세요.

되돌리기 / 정리

  • 구성: DSH 프로필 구성에서 mcp-google 항목을 제거하세요.

  • 스킬: rm -rf ~/.dsh/skills/google-chrome-search

  • 프로필/스크린샷: rm -rf ~/.dsh-chrome-google

라이선스

MIT

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
4Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DavidCastilloAlvarado/dsh-google-chrome-search'

If you have feedback or need assistance with the MCP directory API, please join our Discord server