mcpField
W
wos-search

wos-search

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

wos-search について

wos-searchは、ブラウザーからWeb of Scienceを検索するスキルです。データベース、コレクションのエディション、並べ替えを指定でき、文献検索の結果を表で提示します。

主な機能

  1. 01複数のWeb of Scienceデータベースを検索
  2. 02コアコレクションのエディションを絞り込み
  3. 03関連度、日付、被引用数、利用数で並べ替え
  4. 04検索語をフィールドに割り当て
  5. 051回の検索で最大50件を取得

活用シーン

  1. 01トピック、著者、DOI、雑誌から論文を探す
  2. 02SCIまたはSSCIに検索範囲を限定
  3. 03被引用数や日付で結果を並べ替え

インストール

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

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

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

詳細

WoS 検索

内部 API を介して Web of Science を検索します。1 回の evaluate_script 呼び出しで、エディションの絞り込み、並べ替え、複数のデータベースに対応します。

重要:ブラウザーの前提条件

ブラウザーで webofscience.com のページを開いている必要があります(ログイン済み)。このスキルは fetch を介して WoS 内部 API を直接呼び出すため、ページ遷移は必要ありません。

言語に関するガイダンス

WoS データベース(特に SCI/SSCI)は、主に英語の文献を索引化しています。ユーザーが中国語のキーワードを指定した場合は、英語に翻訳してください(例:「价值共创」→「value co-creation」)。翻訳したことをユーザーに伝えてください。

パラメーターのリファレンス

データベース(product)
ユーザーの指定product説明
「core collection」/デフォルトWOSCCWoS Core Collection
「all databases」ALLDBすべてのデータベースを統合
「medline」MEDLINE生物医学文献
「preprint」PPRNPreprint Citation Index
「scielo」SCIELOSciELO Citation Index
エディションの絞り込み(Core Collection のみ)
ユーザーの指定editions の値
「SCI」/「science」WOS.SCI
「SSCI」/「social science」WOS.SSCI
「CPCI」/「conference」WOS.CPCI-S、WOS.CPCI-SSH
「all」/デフォルトeditions フィールドを省略(またはすべてを含める)

複数のエディションを組み合わせることができます:["WOS.SCI", "WOS.SSCI"]

並べ替えオプション
ユーザーの指定sort の値
「citations」/「most cited」times-cited-descending
「newest」/「latest」date-descending
「oldest」date-ascending
「relevance」/デフォルトrelevance
「usage」usage-count-last-180-days-descending
フィールドの対応表(クエリ行用)
ユーザーの指定rowField
トピック/キーワード/内容TS
タイトルTI
著者AU
DOIDO
ジャーナル/情報源SO
年PY
所属機関OG
抄録AB
資金提供FO
国CU

手順

ステップ 1:API リクエスト本文を作成する
{
  "product": "WOSCC",
  "searchMode": "general",
  "viewType": "search",
  "serviceMode": "summary",
  "search": {
    "mode": "general",
    "database": "WOSCC",
    "query": [
      {"rowField": "TS", "rowText": "USER_QUERY"}
    ],
    "editions": ["WOS.SSCI"]
  },
  "retrieve": {
    "count": 10,
    "history": true,
    "jcr": true,
    "sort": "times-cited-descending",
    "analyzes": [],
    "locale": "en"
  },
  "eventMode": null
}
  • query:{rowField, rowText} オブジェクトの配列です。複数の条件を指定する場合は、後続の行に rowBoolean(AND/OR/NOT)を追加します。
  • editions:省略可能です。すべてのエディションを対象にする場合は省略します。
  • count:取得するレコード数です(デフォルトは 10、最大 50)。
  • sort:デフォルトは relevance です。
ステップ 2:evaluate_script で API を呼び出す

必要なツール呼び出しはこれだけです(合計 1 回)。

ブラウザーが以前 WoS 以外のページ(例:出版社のリンクを開いた後)にあった場合、SID が失われます。その場合は、セッションを再確立するために、まず任意の WoS ページに戻ってください(navigate_page で https://www.webofscience.com/wos/woscc/basic-search に移動)。その後、API を呼び出します。この場合、ツール呼び出しが 1 回追加されます(合計 2 回)。

または、SID の状態にかかわらず常に機能する URL ベースのフォールバック(下記のステップ 2B)を使用してください。

async () => {
  // Extract SID from network history
  const sid = performance.getEntriesByType('resource')
    .filter(r => r.name.includes('SID='))
    .map(r => r.name.match(/SID=([^&]+)/)?.[1])
    .filter(Boolean)[0] || '';

  if (!sid) return { status: 'no_session', message: 'SID lost (likely navigated to external site). Use Step 2B or navigate to any WoS page first.' };

  const response = await fetch(`/api/wosnx/core/runQuerySearch?SID=${sid}`, {
    method: 'POST',
    headers: { 'Content-Type': 'text/plain;charset=UTF-8', 'Accept': 'application/x-ndjson' },
    body: JSON.stringify({
      "product": "{PRODUCT}",
      "searchMode": "general",
      "viewType": "search",
      "serviceMode": "summary",
      "search": {
        "mode": "general",
        "database": "{PRODUCT}",
        "query": [{QUERY_ROWS}],
        "editions": [{EDITIONS}]
      },
      "retrieve": {
        "count": {COUNT},
        "history": true,
        "jcr": true,
        "sort": "{SORT}",
        "analyzes": [],
        "locale": "en"
      },
      "eventMode": null
    })
  });

  const text = await response.text();
  const lines = text.trim().split('\n').map(line => {
    try { return JSON.parse(line); } catch(e) { return null; }
  }).filter(Boolean);

  const searchInfo = lines.find(l => l.key === 'searchInfo')?.payload;
  const recordsData = lines.find(l => l.key === 'records')?.payload;

  let records = [];
  if (recordsData) {
    records = Object.entries(recordsData).map(([idx, rec]) => ({
      idx: parseInt(idx),
      wosId: rec.colluid,
      title: rec.titles?.item?.en?.[0]?.title || '',
      authors: rec.names?.author?.en?.filter(Boolean).map(a => a.wos_standard).join('; ') || '',
      source: rec.titles?.source?.en?.[0]?.title || '',
      year: rec.pub_info?.pubyear || '',
      vol: rec.pub_info?.vol || '',
      issue: rec.pub_info?.issue || '',
      pages: rec.pub_info?.page_no || '',
      doi: rec.doi || '',
      citations: rec.citation_related?.counts?.WOSCC || 0,
      citationsAll: rec.citation_related?.counts?.ALLDB || 0,
      refCount: rec.ref_count || 0,
      abstract: rec.abstract?.basic?.en?.abstract?.replace(/<[^>]*>/g, '')?.substring(0, 300) || '',
      docType: rec.doctypes?.[0] || '',
      oa: rec.oa || false
    }));
  }

  return {
    status: 'ok',
    totalResults: searchInfo?.RecordsFound || 0,
    recordsSearched: searchInfo?.RecordsSearched || 0,
    queryId: searchInfo?.QueryID || '',
    records
  };
}
ステップ 3:結果を提示する

次のような表で表示します:

Found **{totalResults}** results in {database} ({edition}).
Sorted by: {sort}.

| # | Title | Authors | Source | Year | Cited | WoS ID |
|---|-------|---------|--------|------|-------|--------|
| 1 | {title} | {authors} | {source} | {year} | {citations} | {wosId} |
| ... |

次のアクションを提示します:

  • 詳細情報を表示するには「/wos-paper-detail {WoS ID}を使用」
  • 結果をエクスポートするには「/wos-exportを使用」
  • さらに結果を表示するには、count を増やして再実行するか、/wos-navigate-pagesを使用
ステップ 2B:URL ベースのフォールバック(SID が失われた場合)

API が no_session を返した場合(例:外部の出版社サイトに移動した後)、URL ナビゲーションに切り替えます:

navigate_page({
  url: "https://www.webofscience.com/wos/{db}/general-summary?queryJson={ENCODED_QUERY_JSON}",
  initScript: "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

次に、DOM セレクターを使用した evaluate_script で結果を抽出します(wos-parse-results の Mode B を参照)。または API 呼び出しを再試行します(ナビゲーション後に SID が再確立されます)。

使用する状況:ブラウザーで外部サイト(出版社、DOI リンクなど)を表示した後、performance.getEntriesByType('resource') に WoS SID のエントリーが含まれなくなった場合。

メモ

  • SID が失われていない場合はツール呼び出し 1 回(API)、失われた場合はツール呼び出し 2 回(ナビゲーション+API/DOM)
  • API は NDJSON(改行区切り JSON)を返すため、行ごとに解析します
  • SID はブラウザーのパフォーマンスリソースエントリーから抽出します
  • SID の喪失:外部サイトに移動するとパフォーマンスエントリーがクリアされます。先に任意の WoS ページに移動して復元するか、URL ベースのフォールバック(ステップ 2B)を使用してください
  • editions フィールドの形式は WOS.SCI、WOS.SSCI、WOS.CPCI-S などです
  • SCI/SSCI で中国語のキーワードを使用する場合は、先に英語に翻訳してください
  • リクエストごとの最大レコード数は 50 件です。retrieve.count で制御してください
  • history: true を指定すると、検索が WoS のセッション履歴に保存されます

コメント