Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Search 400M+ open access documents via the BASE search engine API
.claude/skills/brycewang-stanford-base-academic-search/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 34% | 0% |
BASE is one of the world's largest search engines for academic open access web resources. Operated by Bielefeld University Library, it indexes 400M+ documents from 11,000+ content providers including institutional repositories, preprint servers, and digital libraries. Unlike Google Scholar, BASE provides structured metadata, license information, and full-text links. The API is free with registration.
https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgibash# Basic keyword search (JSON response) curl "https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgi?\ func=PerformSearch&query=climate+change+adaptation&format=json&hits=20" # Search with field filters curl "https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgi?\ func=PerformSearch&query=dctitle:transformer+AND+dcsubject:NLP&format=json" # Filter by document type and year curl "https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgi?\ func=PerformSearch&query=deep+learning&dctypenorm=121&dcyear:2024&format=json" # Open access only curl "https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgi?\ func=PerformSearch&query=CRISPR&dcrights:open&format=json"
| Field | Description | Example | |-------|-------------|---------| | dctitle | Title | dctitle:attention+mechanism | | dccreator | Author | dccreator:vaswani | | dcsubject | Subject/keywords | dcsubject:machine+learning | | dcdescription | Abstract | dcdescription:neural+network | | dcyear | Publication year | dcyear:2024 | | dctype | Document type text | dctype:article | | dctypenorm | Normalized type code | 121 (journal article) | | dcrights | Access rights | dcrights:open | | dclang | Language | dclang:eng | | dclink | Source URL | dclink:arxiv.org | | dcoa | Open access status | dcoa:1 (OA), dcoa:2 (restricted) | | dcprovider | Content provider | dcprovider:arxiv.org |
| Code | Type | |------|------| | 121 | Journal article | | 122 | Book / monograph | | 14 | Conference paper | | 15 | Thesis / dissertation | | 17 | Report | | 18 | Preprint |
| Parameter | Description | Default | |-----------|-------------|---------| | func | Must be PerformSearch | Required | | query | Search query with optional field prefixes | Required | | format | Response format: json or xml | xml | | hits | Results per page (max 125) | 10 | | offset | Pagination offset | 0 | | sortby | Sort: dcyear desc, score desc | relevance |
json{ "response": { "numFound": 45200, "start": 0, "docs": [ { "dctitle": "Attention Is All You Need", "dccreator": ["Ashish Vaswani", "Noam Shazeer"], "dcyear": "2017", "dcsubject": ["machine learning", "attention mechanism"], "dcdescription": "The dominant sequence transduction models...", "dcidentifier": "https://arxiv.org/abs/1706.03762", "dcsource": "arXiv.org", "dcprovider": "arxiv.org", "dcdocid": "abc123xyz", "dcoa": 1, "dctypenorm": ["18"], "dclang": ["eng"] } ] } }
pythonimport requests BASE_URL = "https://api.base-search.net/cgi-bin/BaseHttpSearchInterface.fcgi" def search_base(query: str, hits: int = 20, doc_type: int = None, oa_only: bool = False) -> list: """Search BASE for academic open access documents.""" q = query if doc_type: q += f" AND dctypenorm:{doc_type}" if oa_only: q += " AND dcoa:1" params = { "func": "PerformSearch", "query": q, "format": "json", "hits": hits, "sortby": "dcyear desc", } resp = requests.get(BASE_URL, params=params) resp.raise_for_status() data = resp.json() results = [] for doc in data.get("response", {}).get("docs", []): results.append({ "title": doc.get("dctitle"), "authors": doc.get("dccreator", []), "year": doc.get("dcyear"), "source": doc.get("dcsource"), "url": doc.get("dcidentifier"), "abstract": (doc.get("dcdescription") or "")[:300], "open_access": doc.get("dcoa") == 1, "type": doc.get("dctypenorm", []), }) return results def search_dissertations(topic: str, lang: str = "eng") -> list: """Find dissertations and theses on a topic.""" query = f"{topic} AND dctypenorm:15 AND dclang:{lang}" return search_base(query, hits=50) def search_by_provider(query: str, provider: str) -> list: """Search within a specific content provider.""" full_query = f"{query} AND dcprovider:{provider}" return search_base(full_query) # Example: find recent open access ML papers papers = search_base("transformer self-attention", hits=10, oa_only=True) for p in papers: oa = "OA" if p["open_access"] else "restricted" print(f"[{p['year']}] {p['title']} ({oa}) — {p['source']}") # Example: find dissertations on climate modeling theses = search_dissertations("climate modeling ocean") for t in theses: print(f"[{t['year']}] {t['title']} — {', '.join(t['authors'][:2])}")
| Feature | BASE | Google Scholar | OpenAlex | |---------|------|---------------|----------| | Records | 400M+ | Unknown | 250M+ | | Open access focus | Yes | No | Yes | | Structured API | Yes | No official API | Yes | | License metadata | Yes | No | Partial | | Dissertation coverage | Excellent | Good | Limited | | Repository-level filtering | Yes | No | No |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 12,634 | 8,206 | -35% | 1 | 1 | 0% | 2,027 | 3,107 | +53% | 0 | 0 | — |
case-02 | fail→pass | 15,222 | 8,387 | -45% | 1 | 1 | 0% | 2,852 | 3,885 | +36% | 0 | 0 | — |
case-03 | fail→pass | 10,812 | 7,388 | -32% | 1 | 1 | 0% | 1,684 | 3,356 | +99% | 0 | 0 | — |
case-04 | pass→pass | 12,232 | 10,471 | -14% | 1 | 1 | 0% | 2,207 | 3,888 | +76% | 0 | 0 | — |
case-05 | pass→pass | 5,376 | 4,877 | -9% | 1 | 1 | 0% | 1,188 | 2,678 | +125% | 0 | 0 | — |
case-06 | pass→pass | 6,578 | 5,366 | -18% | 1 | 1 | 0% | 1,260 | 2,670 | +112% | 0 | 0 | — |
case-07 | fail→pass | 9,195 | 5,273 | -43% | 1 | 1 | 0% | 1,433 | 2,716 | +90% | 0 | 0 | — |
case-08 | pass→pass | 16,428 | 7,210 | -56% | 1 | 1 | 0% | 2,627 | 3,024 | +15% | 0 | 0 | — |
case-09 | fail→pass | 16,146 | 9,284 | -42% | 1 | 1 | 0% | 2,528 | 3,382 | +34% | 0 | 0 | — |
case-10 | pass→pass | 10,789 | 5,686 | -47% | 1 | 1 | 0% | 1,696 | 2,979 | +76% | 0 | 0 | — |
case-11 | fail→pass | 16,276 | 12,472 | -23% | 1 | 1 | 0% | 3,692 | 3,901 | +6% | 0 | 0 | — |
case-12 | fail→pass | 12,776 | 6,943 | -46% | 1 | 1 | 0% | 1,795 | 3,007 | +68% | 0 | 0 | — |
case-13 | fail→pass | 10,824 | 4,956 | -54% | 1 | 1 | 0% | 1,536 | 2,655 | +73% | 0 | 0 | — |
case-14 | fail→pass | 9,360 | 7,163 | -23% | 1 | 1 | 0% | 1,813 | 3,420 | +89% | 0 | 0 | — |
case-15 | fail→pass | 7,468 | 3,411 | -54% | 1 | 1 | 0% | 1,102 | 2,471 | +124% | 0 | 0 | — |
case-16 | pass→pass | 6,684 | 3,145 | -53% | 1 | 1 | 0% | 991 | 2,364 | +139% | 0 | 0 | — |
case-17 | fail→pass | 8,974 | 5,094 | -43% | 1 | 1 | 0% | 1,734 | 2,816 | +62% | 0 | 0 | — |
case-18 | fail→pass | 16,654 | 10,952 | -34% | 1 | 1 | 0% | 3,077 | 4,107 | +33% | 0 | 0 | — |
case-19 | pass→pass | 4,907 | 1,837 | -63% | 1 | 1 | 0% | 602 | 2,159 | +259% | 0 | 0 | — |
case-20 | pass→pass | 14,033 | 12,163 | -13% | 1 | 1 | 0% | 2,670 | 4,295 | +61% | 0 | 0 | — |
case-21 | fail→pass | 11,352 | 5,566 | -51% | 1 | 1 | 0% | 1,651 | 2,715 | +64% | 0 | 0 | — |
case-22 | fail→pass | 7,296 | 2,063 | -72% | 1 | 1 | 0% | 1,062 | 2,281 | +115% | 0 | 0 | — |
case-23 | pass→pass | 11,037 | 5,667 | -49% | 1 | 1 | 0% | 1,691 | 2,712 | +60% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +61 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.