skills/literature/search/worldcat-search-api/SKILL.md
Search the world's largest library catalog via OCLC WorldCat API
npx skillsauth add wentorai/research-plugins worldcat-search-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
WorldCat is the world's largest network of library content, aggregating catalogs from 10,000+ libraries across 170+ countries. The Search API provides access to 500M+ bibliographic records — books, journals, dissertations, media, and more — with holdings information showing which libraries own each item. Essential for interlibrary loan discovery, collection analysis, and comprehensive bibliographic searches. Requires a WSKey (free for non-commercial use).
# Register at https://platform.worldcat.org/
# Obtain a WSKey (API key) for your application
# OAuth 2.0 client credentials flow
curl -X POST "https://oauth.oclc.org/token" \
-u "$WSKEY_CLIENT_ID:$WSKEY_SECRET" \
-d "grant_type=client_credentials&scope=wcapi"
https://www.worldcat.org/api/search/
# Keyword search
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search?q=machine+learning&limit=25"
# Search by title
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search?q=ti:attention+is+all+you+need"
# Search by author
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search?q=au:hinton+geoffrey"
# Search by ISBN
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search?q=bn:9780262035613"
# Combined filters
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search?q=su:artificial+intelligence+AND+yr:2020-2026&itemType=book"
| Index | Prefix | Example |
|-------|--------|---------|
| Keyword | (none) | q=neural+networks |
| Title | ti: | q=ti:deep+learning |
| Author | au: | q=au:goodfellow |
| Subject | su: | q=su:machine+learning |
| ISBN | bn: | q=bn:9780262035613 |
| ISSN | n: | q=n:0028-0836 |
| OCLC Number | no: | q=no:1234567 |
| Publisher | pb: | q=pb:MIT+Press |
| Year | yr: | q=yr:2024 or yr:2020-2026 |
| Language | la: | q=la:eng |
| Parameter | Description | Example |
|-----------|-------------|---------|
| q | Search query with indexes | q=ti:BERT+AND+au:devlin |
| limit | Results per page (max 50) | limit=25 |
| offset | Pagination offset | offset=50 |
| itemType | Format filter | book, journal, thesis, audiobook |
| itemSubType | Subtype filter | digital, printbook |
| heldByInstitutionID | Holdings filter | Institution registry ID |
| orderBy | Sort order | bestMatch, mostWidelyHeld, datePublished |
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search/brief-bibs/{oclc_number}"
# Find libraries holding a specific item
curl -H "Authorization: Bearer $TOKEN" \
"https://www.worldcat.org/api/search/brief-bibs/{oclc_number}/holdings?lat=42.36&lon=-71.06&distance=50"
{
"numberOfRecords": 1250,
"briefRecords": [
{
"oclcNumber": "1234567890",
"title": "Deep Learning",
"creator": "Ian Goodfellow; Yoshua Bengio; Aaron Courville",
"date": "2016",
"publisher": "MIT Press",
"language": "eng",
"generalFormat": "Book",
"specificFormat": "PrintBook",
"isbns": ["9780262035613"],
"catalogingInfo": {
"catalogingAgency": "DLC"
},
"totalHoldingCount": 3542
}
]
}
import os
import requests
CLIENT_ID = os.environ["OCLC_WSKEY_ID"]
CLIENT_SECRET = os.environ["OCLC_WSKEY_SECRET"]
BASE_URL = "https://www.worldcat.org/api/search"
def get_token() -> str:
"""Obtain OAuth token from OCLC."""
resp = requests.post(
"https://oauth.oclc.org/token",
auth=(CLIENT_ID, CLIENT_SECRET),
data={"grant_type": "client_credentials", "scope": "wcapi"},
)
resp.raise_for_status()
return resp.json()["access_token"]
def search_worldcat(query: str, limit: int = 25,
item_type: str = None) -> list:
"""Search WorldCat bibliographic records."""
token = get_token()
params = {"q": query, "limit": limit}
if item_type:
params["itemType"] = item_type
resp = requests.get(
BASE_URL,
headers={"Authorization": f"Bearer {token}"},
params=params,
)
resp.raise_for_status()
data = resp.json()
results = []
for rec in data.get("briefRecords", []):
results.append({
"oclc": rec.get("oclcNumber"),
"title": rec.get("title"),
"creator": rec.get("creator"),
"date": rec.get("date"),
"publisher": rec.get("publisher"),
"format": rec.get("generalFormat"),
"holdings": rec.get("totalHoldingCount", 0),
"isbns": rec.get("isbns", []),
})
return results
def find_nearby_holdings(oclc_number: str,
lat: float, lon: float,
distance_km: int = 50) -> list:
"""Find libraries near a location that hold a specific item."""
token = get_token()
resp = requests.get(
f"{BASE_URL}/brief-bibs/{oclc_number}/holdings",
headers={"Authorization": f"Bearer {token}"},
params={"lat": lat, "lon": lon, "distance": distance_km},
)
resp.raise_for_status()
return resp.json().get("briefRecords", [])
# Example: find widely-held ML textbooks
books = search_worldcat("su:machine learning AND yr:2020-2026",
item_type="book", limit=10)
for b in books:
print(f"[{b['date']}] {b['title']} — {b['publisher']} "
f"(held by {b['holdings']} libraries)")
| Tier | Access | Rate Limit | |------|--------|------------| | WSKey (free) | Search + brief records | Moderate | | Enterprise | Full MARC records + analytics | Higher |
tools
10 document processing skills. Trigger: extracting text from PDFs, parsing references, document Q&A. Design: parsing pipelines (GROBID, marker) and structured extraction tools.
documentation
Guide to tldraw for infinite canvas whiteboarding and diagram creation
testing
Create graphical abstracts, schematic diagrams, and scientific illustrations
documentation
Create UML diagrams and architecture visualizations with PlantUML