Skip to main content
Glama
dsh-google-chrome-search

dsh-google-chrome-search

dsh-google-chrome-search

CI license: MIT node: >=18

DeepSeek Harness (DSH) プラグインで、AIエージェントがローカルのChromeブラウザをCDP(Chrome DevTools Protocol)経由で操作して、実際のGoogleウェブ検索を実行し、任意のページをレンダリングしてコンテンツを抽出できるようにします。検索APIキーは不要で、マシンにインストール済みのChromeで動作します。

Googleは自動化されたトラフィックやデータセンターからのトラフィックに対して、人間による検証ページ(CAPTCHA /「異常なトラフィック」)を頻繁に表示します。その場合、このプラグインは検証ページを指す可視のChromeウィンドウを開き、人間が解決するのを待って、信頼されたセッションから結果を抽出します。これが「人間に尋ねる」ステップです。設計上、エージェントはCAPTCHAを自分で解決しようとはしません。

Google's verification page, as shown to the human

提供されるもの

構成要素

パス

目的

コアエンジン

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フローと同じ「人間に手渡す」哲学です。信頼されたセッションCookieはプロファイルに残るため、そのサイトの後続ページは通常ヘッドレスで通過します。--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

検索と読み取りを組み合わせる2つの方法:

内容

方法

検索して上位Nページを1回の呼び出しで読む

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

検索して特定の結果を読む

search、次に選択したURLでfetch

ページは順次レンダリングされます(1つのブラウザで一度に1ページ)。ページあたり約1〜3秒かかります。

ネイティブDSHツール(MCP)として使用

DSHの@deepseek-ai/dsh-mcp-clientを使用してMCPサーバーをプロファイル設定に登録します(例 — commandとargsのパスは環境に合わせて調整してください):

- 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を再起動すると、エージェントは3つのネイティブツールを利用できます:

ツール

機能

mcp__google__search

Googleウェブ検索 → リンク + スニペット

mcp__google__fetch

1つのURLをレンダリング → 抽出された読みやすいコンテンツ(タイトル、著者、テキスト、オプションでHTML/スクリーンショット)

mcp__google__search_and_fetch

検索 → 上位Nページをレンダリング → 1回の呼び出しでページごとの抽出コンテンツ

注意:

  • 呼び出しは直列化されます(Chromeはプロファイルごとに1プロセスを許可するため)。そのため、並行ツール呼び出しは並列実行ではなくキューに入ります。

  • search_and_fetchは通常の検索より遅いです。上記のようにtoolCallTimeoutMsを300000(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プロファイル(「検証済み」Cookieを保持)

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)を保持します。削除すると「検証済み」Cookieがリセットされます。データセンターIPはCAPTCHAが発生しやすいです。

SSHで可視ウィンドウが表示されない

ディスプレイのあるマシンを使用するか、autoVerify: falseを設定し、表示されたスクリーンショットのブラウザコンテキストで手動でCAPTCHAを解決します。

ECONNREFUSED / プロファイル内の古いロック

そのプロファイルを使用しているすべてのChromeインスタンスを閉じてから再試行します(プロファイルは個人用とは別です)。2つのCLI呼び出しを同時に実行しないでください — プロファイルごとに1プロセスです。

fetchがスライダー /「あなたは人間ですか?」ウィンドウを開く

これは意図したとおりの人間による検証ステップです。ウィンドウでチャレンジを通過すると、再試行してセッションを保持します。--no-verifyはウィンドウをスキップしてblockedを報告するだけです。

fetchがblockedを返す(ウィンドウなし)

サイトがヘッドレスブラウザを遮断し、autoVerifyがオフ(またはディスプレイがない)です。同じトピックの別のソースを試すか、検証を有効にして実行します。

fetchが空のテキストを返す

ページがJS主体でレンダリングが完了していません。再試行するか(約7秒で安定します)、--timeoutを増やします。

元に戻す / クリーンアップ

  • 設定:DSHプロファイル設定からmcp-googleエントリを削除します。

  • スキル:rm -rf ~/.dsh/skills/google-chrome-search

  • プロファイル/スクリーンショット:rm -rf ~/.dsh-chrome-google

ライセンス

MIT

Related MCP Connectors

Related MCP Servers