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 |
documentation
Write Tsinghua University theses using the ThuThesis LaTeX template
development
Templates, formatting rules, and strategies for thesis and dissertation writing
documentation
Set up LaTeX templates for PhD and Master's thesis documents
documentation
Write SJTU theses using the SJTUThesis LaTeX template with full compliance