MCPInstall

wos-search

Search Web of Science by topic, author, title, DOI, or advanced query. Supports edition/database filtering and sort.

Installs
125
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

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

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads wos-search automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

WoS Search

Search Web of Science via internal API. Supports edition filtering, sorting, and multiple databases — all in a single evaluate_script call.

Important: Browser Prerequisite

The browser must be on any webofscience.com page (logged in). The skill calls the WoS internal API directly via fetch, so no page navigation is needed.

Language Guidance

WoS databases (especially SCI/SSCI) primarily index English-language literature. If the user provides Chinese keywords, translate to English (e.g., "价值共创" → "value co-creation"). Inform the user about the translation.

Parameter Reference

Database (product)

User saysproductDescription
"core collection" / defaultWOSCCWoS Core Collection
"all databases"ALLDBAll databases combined
"medline"MEDLINEBiomedical literature
"preprint"PPRNPreprint Citation Index
"scielo"SCIELOSciELO Citation Index

Edition filtering (Core Collection only)

User sayseditions value
"SCI" / "science"WOS.SCI
"SSCI" / "social science"WOS.SSCI
"CPCI" / "conference"WOS.CPCI-S, WOS.CPCI-SSH
"all" / defaultomit editions field (or include all)

Multiple editions can be combined: ["WOS.SCI", "WOS.SSCI"]

Sort options

User sayssort value
"citations" / "most cited"times-cited-descending
"newest" / "latest"date-descending
"oldest"date-ascending
"relevance" / defaultrelevance
"usage"usage-count-last-180-days-descending

Field mapping (for query rows)

User saysrowField
topic / keyword / aboutTS
titleTI
authorAU
DOIDO
journal / sourceSO
yearPY
affiliation / institutionOG
abstractAB
fundingFO
countryCU

Steps

Step 1: Build API Request Body

{
  "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: array of {rowField, rowText} objects. For multiple conditions, add rowBoolean (AND/OR/NOT) to subsequent rows.
  • editions: optional, omit for all editions.
  • count: number of records to retrieve (default 10, max 50).
  • sort: default relevance.

Step 2: Execute API Call via evaluate_script

This is the only tool call needed — 1 call total.

If the browser was previously on a non-WoS page (e.g., after following a publisher link), SID will be lost. In that case, first navigate back to any WoS page (navigate_page to https://www.webofscience.com/wos/woscc/basic-search) to re-establish the session, then run the API call. This adds 1 extra tool call (2 total).

Alternatively, use the URL-based fallback (Step 2B below) which always works regardless of SID state.

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
  };
}

Step 3: Present Results

Display as a table:

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

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

Offer next actions:

  • "Use /wos-paper-detail {WoS ID} for detailed information"
  • "Use /wos-export to export results"
  • To see more results, re-run with higher count or use /wos-navigate-pages

Step 2B: URL-based Fallback (when SID is lost)

If API returns no_session (e.g., after navigating to an external publisher site), fall back to URL navigation:

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

Then extract results via evaluate_script with DOM selectors (see wos-parse-results Mode B), or re-attempt the API call (SID will be re-established after the navigation).

When to use: After the browser visited an external site (publisher, DOI link, etc.) and performance.getEntriesByType('resource') no longer contains WoS SID entries.

Notes

  • 1 tool call (API) or 2 tool calls (navigate + API/DOM) if SID is lost
  • API returns NDJSON (newline-delimited JSON); parse line by line
  • SID is extracted from browser's performance resource entries
  • SID loss: Navigating to external sites clears performance entries. Recover by navigating to any WoS page first, or use URL-based fallback (Step 2B)
  • editions field uses format WOS.SCI, WOS.SSCI, WOS.CPCI-S, etc.
  • For Chinese keywords in SCI/SSCI, translate to English first
  • Max 50 records per request; use retrieve.count to control
  • history: true saves the search to WoS session history

FAQ

What does the wos-search skill do?

Search Web of Science by topic, author, title, DOI, or advanced query. Supports edition/database filtering and sort.

How do I install wos-search?

Run npx skills add https://github.com/cookjohn/wos-skills --skill wos-search in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/wos-search/ (personal) or .claude/skills/wos-search/ (project).

Which AI agents can use wos-search?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is wos-search safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains wos-search?

It is published by cookjohn in cookjohn/wos-skills. It has 125 recorded installs.

More from cookjohn/wos-skills

View all →

wos-download

cookjohn/wos-skills

Download PDF full text for a WoS paper via publisher links.

Docs & Writing92 installs

wos-paper-detail

cookjohn/wos-skills

Get detailed information for a paper by WoS ID (e.g., WOS:000779183600001).

wos-export

cookjohn/wos-skills

Export WoS records to Zotero, RIS, BibTeX, or Excel.

Data & Databases54 installs

wos-navigate-pages

cookjohn/wos-skills

Navigate to a specific page of WoS search results, or load more results from the last search.

51 installs

wos-parse-results

cookjohn/wos-skills

Parse search results from the current WoS results page or API response. Internal skill used by other skills.

Backend & APIs50 installs

Popular data & databases skills

View category →

Postgres best practices maintained by Supabase, for Postgres running anywhere. Load this skill BEFORE writing or changing anything that lives in a Postgres database: creating or altering tables and columns (including choosing column types), schema design, migrations and declarative schema files, RLS policies and the tests that verify them, indexes, triggers, database functions, queues and scheduled jobs (pgcron, pgmq), vector/semantic search (pgvector), and restoring dumps (pgrestore) or importing data. Also load it when diagnosing slow queries, high CPU, timeouts, EXPLAIN plans, connection exhaustion, locking, bloat, or rows visible to the wrong user or tenant. This is not just a performance guide — schema, migration, security, and SQL authoring tasks need these rules too, even for a one-column change or a single query.

OfficialData & Databases462.2K installs

prisma-client-api

prisma/skills

Prisma Client API reference covering model queries, filters, operators, and client methods. Use when writing database queries, using CRUD operations, filtering data, or configuring Prisma Client. Triggers on "prisma query", "findMany", "create", "update", "delete", "$transaction".

OfficialData & Databases393.5K installs

Deprecated compatibility name for prisma-orm-setup. Use only when a user or existing integration explicitly invokes prisma-database-setup; otherwise select prisma-orm-setup.

OfficialData & Databases392.3K installs

prisma-cli

prisma/skills

Prisma ORM 7 CLI reference for existing Prisma 7 applications or explicitly selected Prisma 7 workflows. Covers prisma init, generate, migrate, db, dev, studio, and mcp. For setup, connection repair, or Prisma 8, use prisma-orm-setup; not the Prisma Platform CLI.

OfficialData & Databases390.8K installs

prisma-postgres

prisma/skills

Deprecated compatibility name for prisma-postgres-setup. Use only when a user or existing integration explicitly invokes prisma-postgres; otherwise select prisma-postgres-setup.

OfficialData & Databases384.4K installs

Required reference for Prisma ORM 7 SQL driver adapter work. Use when implementing or modifying adapters, adding database drivers, or touching SqlDriverAdapter, Transaction, savepoint, result mapping, or DriverAdapterError behavior. Covers current transaction lifecycle, optional savepoint hooks, original database-error preservation, and verification.

OfficialData & Databases378.9K installs