mcpField
G
gs-search

gs-search

github.com/cookjohn生産性538443 回インストール33 週間前に更新
リポジトリ

gs-search について

キーワードで Google Scholar を検索し、取得した論文情報を構造化して提示するスキルです。CAPTCHAへの対応に加え、関連スキルを使ったページ移動、引用確認、Zoteroへのエクスポート手順も含みます。

主な機能

  1. 01Google Scholarのキーワード検索
  2. 02論文結果の構造化抽出
  3. 03data-CID識別子の表示
  4. 04入手可能な全文の強調表示
  5. 05CAPTCHA検出と再試行の案内

活用シーン

  1. 01研究テーマに関する論文の検索
  2. 02論文の引用数と識別子の確認
  3. 03Zoteroへの後続エクスポート用に結果を整理

MCP 対応

mcp__chrome-devtools__navigate_pageでGoogle Scholarを開き、evaluate_scriptでページのDOMから結果を取得します。Google Scholarの公開APIではなく、ブラウザツールを利用します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cookjohn/gs-skills --skill gs-search

インストール後、Claude Code で/gs-searchを入力して読み込まれたか確認します。

詳細

Google Scholar の基本検索

キーワードを使用して Google Scholar で論文を検索します。DOM スクレイピングにより、構造化された結果リストを返します。

引数

$ARGUMENTS には検索キーワードが含まれます。

手順

1. 移動

mcp__chrome-devtools__navigate_page を使用します:

  • url: https://scholar.google.com/scholar?q={URL_ENCODED_KEYWORDS}&hl=en&num=10
2. 結果を抽出(evaluate_script)

結果が読み込まれるまで待ち、CAPTCHA を確認してから DOM をスクレイピングします:

async () => {
  // Wait for results or CAPTCHA
  for (let i = 0; i < 20; i++) {
    if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break;
    await new Promise(r => setTimeout(r, 500));
  }

  // CAPTCHA check
  if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) {
    return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' };
  }

  const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl');
  const results = Array.from(items).map((item, i) => {
    const titleEl = item.querySelector('.gs_rt a');
    const meta = item.querySelector('.gs_a')?.textContent || '';
    // Parse "Author1, Author2 - Journal, Year - publisher"
    const parts = meta.split(' - ');
    const authors = parts[0]?.trim() || '';
    const journalYear = parts[1]?.trim() || '';
    const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');
    const relatedEl = item.querySelector('.gs_fl a[href*="related"]');
    const versionsEl = item.querySelector('.gs_fl a[href*="cluster"]');

    return {
      n: i + 1,
      title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '',
      href: titleEl?.href || '',
      authors,
      journalYear,
      citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0',
      citedByUrl: citedByEl?.href || '',
      dataCid: item.getAttribute('data-cid') || '',
      fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '',
      snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || '',
      relatedUrl: relatedEl?.href || '',
      versionsUrl: versionsEl?.href || '',
      versions: versionsEl?.textContent?.match(/\d+/)?.[0] || ''
    };
  });

  const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
  const currentUrl = window.location.href;
  return { total: totalText, resultCount: results.length, currentUrl, results };
}
3. 結果を表示

結果を番号付きリストで表示します:

Searched Google Scholar for "$ARGUMENTS": {total}

1. {title}
   Authors: {authors} | {journalYear}
   Cited by: {citedBy} | [Full text]({fullTextUrl})
   Data-CID: {dataCid}

2. ...

引用のエクスポートと「引用元」の追跡に使用する一意の識別子である dataCid は、必ず表示してください。

fullTextUrl がある場合は、目立つように表示してください(オープンアクセスの PDF/HTML を意味します)。

4. フォローアップ

ユーザーが次の操作を希望する場合:

  • さらに結果を見る:gs-navigate-pages を使用して次のページに移動します
  • 論文の引用者を確認する:data-cid を指定して gs-cited-by を使用します
  • Zotero にエクスポートする:data-cid を指定して gs-export を使用します

CAPTCHA の処理

結果に {error: 'captcha'} が含まれている場合:

  1. ユーザーに次のように伝えます:「Google Scholar で CAPTCHA 認証が求められています。ブラウザーで認証を完了してください。」
  2. ユーザーの確認を待ちます
  3. evaluate_script による抽出を再試行します

メモ

  • このスキルでは、ツールを 2 回呼び出します:navigate_page と evaluate_script
  • Google Scholar に公開 API はありません。すべてのデータ抽出は DOM スクレイピングで行います
  • data-cid は主要な識別子(クラスター ID)であり、すべての GS スキルで使用されます
  • CAPTCHA が表示されないよう、リクエスト頻度を低く保ってください
  • ページあたりの結果数はデフォルトで num=10 です(最大 20)

コメント