Skip to main content
Glama
DavidCastilloAlvarado

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経由でsearchfetchsearch_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-chromechromium)。一般的なパスから自動検出されます。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サーバーをプロファイル設定に登録します(例 — 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を再起動すると、エージェントは3つのネイティブツールを利用できます:

ツール

機能

mcp__google__search

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

mcp__google__fetch

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

mcp__google__search_and_fetch

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

注意:

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

  • 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プロファイル(「検証済み」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サーバーを起動し、searchfetchsearch_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を報告するだけです。

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