wos-search
Original:🇺🇸 English
Translated
Search Web of Science by topic, author, title, DOI, or advanced query. Supports edition/database filtering and sort.
2installs
Sourcecookjohn/wos-skills
Added on
NPX Install
npx skill4agent add cookjohn/wos-skills wos-searchTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →WoS Search
Search Web of Science via internal API. Supports edition filtering, sorting, and multiple databases — all in a single call.
evaluate_scriptImportant: Browser Prerequisite
The browser must be on any page (logged in). The skill calls the WoS internal API directly via , so no page navigation is needed.
webofscience.comfetchLanguage 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
)
product| User says | product | Description |
|---|---|---|
| "core collection" / default | | WoS Core Collection |
| "all databases" | | All databases combined |
| "medline" | | Biomedical literature |
| "preprint" | | Preprint Citation Index |
| "scielo" | | SciELO Citation Index |
Edition filtering (Core Collection only)
| User says | editions value |
|---|---|
| "SCI" / "science" | |
| "SSCI" / "social science" | |
| "CPCI" / "conference" | |
| "all" / default | omit |
Multiple editions can be combined:
["WOS.SCI", "WOS.SSCI"]Sort options
| User says | sort value |
|---|---|
| "citations" / "most cited" | |
| "newest" / "latest" | |
| "oldest" | |
| "relevance" / default | |
| "usage" | |
Field mapping (for query rows)
| User says | rowField |
|---|---|
| topic / keyword / about | TS |
| title | TI |
| author | AU |
| DOI | DO |
| journal / source | SO |
| year | PY |
| affiliation / institution | OG |
| abstract | AB |
| funding | FO |
| country | CU |
Steps
Step 1: Build API Request Body
json
{
"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
}- : array of
queryobjects. For multiple conditions, add{rowField, rowText}(rowBoolean/AND/OR) to subsequent rows.NOT - : optional, omit for all editions.
editions - : number of records to retrieve (default 10, max 50).
count - : default
sort.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 ( to ) to re-establish the session, then run the API call. This adds 1 extra tool call (2 total).
navigate_pagehttps://www.webofscience.com/wos/woscc/basic-searchAlternatively, use the URL-based fallback (Step 2B below) which always works regardless of SID state.
javascript
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 for detailed information"
/wos-paper-detail {WoS ID} - "Use to export results"
/wos-export - To see more results, re-run with higher or use
count/wos-navigate-pages
Step 2B: URL-based Fallback (when SID is lost)
If API returns (e.g., after navigating to an external publisher site), fall back to URL navigation:
no_sessionnavigate_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 with DOM selectors (see Mode B), or re-attempt the API call (SID will be re-established after the navigation).
evaluate_scriptwos-parse-resultsWhen to use: After the browser visited an external site (publisher, DOI link, etc.) and no longer contains WoS SID entries.
performance.getEntriesByType('resource')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)
- field uses format
editions,WOS.SCI,WOS.SSCI, etc.WOS.CPCI-S - For Chinese keywords in SCI/SSCI, translate to English first
- Max 50 records per request; use to control
retrieve.count - saves the search to WoS session history
history: true