Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Systematic strategies for searching scientific literature across PubMed, arXiv, Google Scholar, and AI-assisted tools. Covers PICO framework for clinical questions, three-tiered search (database-specific, AI-assisted, content extraction), PubMed field tags and MeSH, boolean query construction, and full-text extraction. Use when planning a literature search or choosing a search tier.
.claude/skills/jaechang-hits-scientific-literature-search/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 596% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 164% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 307% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 142% | 0% |
Scientific literature search is the foundation of evidence-based research. A well-executed search maximizes recall (finding all relevant papers) while maintaining precision (avoiding irrelevant results). This guide provides a systematic approach that combines database-specific query strategies, AI-assisted synthesis, and direct content extraction, organized into a three-tiered framework that scales from targeted lookups to comprehensive landscape reviews.
For clinical and biomedical questions, structure queries using the PICO framework:
PICO queries can be combined with publication type filters to target specific evidence levels:
"Diabetes Mellitus"[MeSH] AND "Metformin"[MeSH] AND "Cardiovascular Diseases"[MeSH] AND ("clinical trial"[Publication Type] OR "meta-analysis"[Publication Type])Literature search is most effective when approached in tiers of increasing breadth:
Tier 1 -- Database-Specific Searches (Most Reliable)
Query established academic databases (PubMed, arXiv, Google Scholar) for peer-reviewed, indexed content. This is the most reliable tier and should always be the starting point.
Bio.Entrez): Primary database for biomedical and life science literature. Supports MeSH controlled vocabulary and advanced field tags.arxiv package): Preprint server for physics, mathematics, computer science, and quantitative biology. Results appear faster than peer-reviewed journals.scholarly package): Broadest coverage across all academic disciplines. Note: has aggressive rate limits on automated queries.Best for: finding specific papers, systematic reviews, clinical evidence, preprints.
Tier 2 -- AI-Assisted Web Search (Comprehensive)
Use the Claude API with the web_search_20250305 server-side tool to synthesize broader context, identify research trends, and surface recent developments not yet indexed in databases. Also use general web search (e.g. via the duckduckgo-search package) for protocols, tutorials, and software documentation.
Best for: understanding the research landscape, complex multi-faceted questions, finding recent developments, identifying key researchers.
Avoid for: specific paper lookups (use Tier 1), citation counts (use Google Scholar), systematic reviews requiring reproducibility, searches where exact query terms must be documented.
Tier 3 -- Direct Content Extraction (Deep Dive)
Extract and analyze full-text content, PDFs, and supplementary materials from identified papers using trafilatura (HTML article extraction), pypdf (PDF text), and the Crossref API (DOI → supplementary file URLs).
Best for: detailed methodology extraction, data retrieval, protocol identification, supplementary data access.
PubMed supports field-specific searching to improve precision:
| Tag | Description | Example | |-----|-------------|---------| | [MeSH] | Medical Subject Heading (controlled vocabulary) | "Neoplasms"[MeSH] | | [Title] | Title field only | "CRISPR"[Title] | | [Title/Abstract] | Title or abstract | "gene therapy"[Title/Abstract] | | [Author] | Author name | "Zhang F"[Author] | | [Journal] | Journal name | "Nature"[Journal] | | [Publication Type] | Article type filter | "Review"[Publication Type] | | [Date - Publication] | Publication date range | "2020/01/01"[Date - Publication]:"2024/12/31"[Date - Publication] | | [MeSH Major Topic] | MeSH term as major focus of the article | "CRISPR-Cas Systems"[MeSH Major Topic] |
Boolean operators control how search terms combine:
python# AND: All terms must be present -- narrows results results = query_pubmed("CRISPR AND cancer AND therapy") # OR: Any term can be present -- broadens results (use for synonyms) results = query_pubmed("(tumor OR tumour OR neoplasm) AND immunotherapy") # NOT: Exclude terms -- use sparingly to avoid losing relevant papers results = query_pubmed("cancer immunotherapy NOT review")
Use parentheses to group OR terms together before combining with AND.
arXiv organizes preprints by subject category. Biology-related categories include:
| Category | Description | |----------|-------------| | q-bio.BM | Biomolecules | | q-bio.CB | Cell Behavior | | q-bio.GN | Genomics | | q-bio.MN | Molecular Networks | | q-bio.NC | Neurons and Cognition | | q-bio.QM | Quantitative Methods | | cs.AI | Artificial Intelligence | | cs.LG | Machine Learning |
Use this tree to determine which search tier and database to start with:
What type of question are you answering?
├── Clinical / biomedical question
│ ├── Specific drug or treatment → Tier 1: PubMed with PICO query
│ ├── Disease mechanism → Tier 1: PubMed with MeSH terms
│ └── Clinical trial evidence → Tier 1: PubMed filtered by Publication Type
├── Computational / quantitative methods
│ ├── ML model or algorithm → Tier 1: arXiv (cs.LG, cs.AI)
│ ├── Computational biology method → Tier 1: arXiv (q-bio.*) + PubMed
│ └── Software tool or pipeline → Tier 2: AI-assisted web search
├── Broad research landscape
│ ├── Current state of a field → Tier 2: AI-assisted web search
│ ├── Recent developments (last 6 months) → Tier 2: AI-assisted web search
│ └── Cross-disciplinary question → Tier 1: Google Scholar + Tier 2
├── Specific paper or data
│ ├── Known paper details → Tier 1: any database by title/author/DOI
│ ├── Methodology or protocol → Tier 3: full-text extraction
│ └── Supplementary data → Tier 3: DOI-based supplementary fetch
└── Protocols / reagents
├── Lab protocol → Tier 2: web search for protocols.io, etc.
└── Validated reagents → Tier 2: AI-assisted web search| Scenario | Recommended Tier and Database | Rationale | |----------|-------------------------------|-----------| | Systematic review of clinical evidence | Tier 1: PubMed with MeSH + publication type filters | Reproducible, documented search strategy required | | Finding a preprint on a new ML method | Tier 1: arXiv with category and keyword search | Preprints appear on arXiv before journals | | Understanding the research landscape | Tier 2: AI-assisted web search | Requires synthesis across many sources | | Extracting a specific protocol from a paper | Tier 3: PDF content extraction | Need full-text access to methods section | | Finding papers across disciplines | Tier 1: Google Scholar | Broadest coverage across fields | | Identifying key researchers in a niche area | Tier 2: AI-assisted web search | Requires contextual synthesis | | Downloading supplementary data tables | Tier 3: DOI-based supplementary fetch | Direct access to supplementary files |
python # Free text misses synonyms query_pubmed("heart attack treatment") # MeSH captures all synonyms query_pubmed('"Myocardial Infarction"[MeSH] AND "Drug Therapy"[MeSH]')
python query_pubmed("(myocardial infarction OR heart attack) AND (treatment OR therapy)")
python query_pubmed('"single cell RNA sequencing" AND methods')
[Publication Type] to target the evidence level you need.python query_pubmed("COVID-19 vaccine efficacy AND clinical trial[Publication Type]")
python # Step 1: Broad results = query_pubmed("CRISPR base editing iPSC", max_papers=20) # Step 2: Add MeSH and specificity results = query_pubmed( '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency', max_papers=20 ) # Step 3: Filter by date results = query_pubmed( '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency AND ("2022"[Date - Publication]:"2024"[Date - Publication])', max_papers=20 )
python # Too specific -- misses relevant papers query_pubmed("CRISPR Cas9 gene editing HEK293T cells 2024 efficiency optimization delivery") # Better -- core concepts only query_pubmed("CRISPR Cas9 gene editing optimization efficiency")
python from Bio import Entrez import arxiv from scholarly import scholarly
Entrez.email = "your.email@example.com" # NCBI requires a contact email
# PubMed: biomedical literature handle = Entrez.esearch( db="pubmed", term='"CRISPR-Cas Systems"MeSH] AND "Gene Editing"MeSH]', retmax=20, ) pubmed_ids = Entrez.read(handle)"IdList"] handle.close()
# arXiv: computational biology preprints arxiv_results = list( arxiv.Search(query="protein structure prediction", max_results=10).results() )
# Google Scholar: broad cross-disciplinary coverage scholar_results = scholarly.search_pubs("single cell RNA sequencing analysis methods")
python from anthropic import Anthropic
client = Anthropic() response = client.messages.create( model="claude-opus-4-7", max_tokens=4096, tools={"type": "web_search_20250305", "name": "web_search", "max_uses": 3}], messages={ "role": "user", "content": "What are the latest developments in CAR-T cell therapy for solid tumors in 2024?", }], ) print(response.content)
python import io import os from pathlib import Path from urllib.parse import urlparse
import requests import trafilatura from pypdf import PdfReader
# Extract article content from URL (clean main text, drops nav/ads) downloaded = trafilatura.fetch_url("https://www.nature.com/articles/nature12373") article_text = trafilatura.extract(downloaded)
# Extract text from a PDF pdf_bytes = requests.get("https://arxiv.org/pdf/1706.03762.pdf", timeout=30).content reader = PdfReader(io.BytesIO(pdf_bytes)) pdf_text = "\n".join(page.extract_text() or "" for page in reader.pages)
# Download supplementary files via Crossref DOI metadata doi = "10.1038/nature12373" meta = requests.get(f"https://api.crossref.org/works/{doi}", timeout=30).json() out_dir = Path("./supplementary_materials") out_dir.mkdir(exist_ok=True) for link in meta.get("message", {}).get("link", ]): url = link.get("URL") if not url: continue fname = os.path.basename(urlparse(url).path) or "supplement.bin" (out_dir / fname).write_bytes(requests.get(url, timeout=60).content)
The following scenarios illustrate how to combine the three tiers for typical research questions.
Start with PubMed for published methodology papers, then supplement with web search for step-by-step protocols from resources like protocols.io.
pythonfrom Bio import Entrez from duckduckgo_search import DDGS Entrez.email = "your.email@example.com" # Search for methodology papers in PubMed handle = Entrez.esearch( db="pubmed", term='"Western Blotting"[MeSH] AND (protocol OR method OR technique)', retmax=10, ) pubmed_ids = Entrez.read(handle)["IdList"] handle.close() # Check web for step-by-step protocols web_hits = DDGS().text("Western blot protocol for membrane proteins", max_results=5)
Begin with review articles for a broad overview, then drill into specific mechanistic studies.
python# Find review articles first for an overview results = query_pubmed( '"Alzheimer Disease"[MeSH] AND pathophysiology AND review[Publication Type]', max_papers=10 ) # Then find specific mechanistic studies results = query_pubmed( '"Alzheimer Disease"[MeSH] AND ("amyloid beta"[MeSH] OR tau) AND mechanism', max_papers=20 )
Use publication type filters to separate clinical trial evidence from systematic reviews.
python# Clinical trials for a specific drug-condition pair results = query_pubmed( '"Drug Name"[Substance Name] AND "Condition"[MeSH] AND clinical trial[Publication Type]', max_papers=20 ) # Systematic reviews and meta-analyses results = query_pubmed( '"Drug Name" AND "Condition" AND (systematic review[Publication Type] OR meta-analysis[Publication Type])', max_papers=10 )
Combine AI-assisted search for synthesis with database searches for recent indexed publications.
pythonfrom anthropic import Anthropic from Bio import Entrez client = Anthropic() Entrez.email = "your.email@example.com" # AI-assisted synthesis of recent advances (Claude API web search tool) response = client.messages.create( model="claude-opus-4-7", max_tokens=4096, tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 3}], messages=[{ "role": "user", "content": "What are the most significant advances in CAR-T cell therapy in 2024?", }], ) # Supplement with recent PubMed results handle = Entrez.esearch( db="pubmed", term='"Chimeric Antigen Receptor T-Cell Therapy"[MeSH] AND "2024"[Date - Publication]', retmax=20, ) pubmed_ids = Entrez.read(handle)["IdList"] handle.close()
Use AI-assisted search for validated reagent recommendations, supplemented by general web search.
pythonfrom anthropic import Anthropic from duckduckgo_search import DDGS client = Anthropic() # Search for validated reagents (Claude API + web search tool) response = client.messages.create( model="claude-opus-4-7", max_tokens=4096, tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 2}], messages=[{ "role": "user", "content": "validated antibodies for Western blot detection of p53 protein", }], ) # Search supplier databases supplier_hits = DDGS().text("p53 antibody Western blot validated", max_results=5)
Use AI-assisted search for synthesized comparisons of techniques or tools.
pythonfrom anthropic import Anthropic client = Anthropic() # Compare approaches with AI synthesis (Claude API web search tool) response = client.messages.create( model="claude-opus-4-7", max_tokens=4096, tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 5}], messages=[{ "role": "user", "content": "Compare different CRISPR delivery methods for in vivo gene editing: viral vectors vs lipid nanoparticles", }], ) print(response.content)
When evaluating search results, apply these criteria:
pubmed-database -- Direct PubMed API access for programmatic literature retrievalscientific-manuscript-writing -- Structuring literature review sections within manuscriptsresearch-question-formulation -- Frameworks for defining answerable research questions| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 10,530 | 10,108 | -4% | 1 | 1 | 0% | 1,852 | 7,421 | +301% | 0 | 0 | — |
case-01 | fail→pass | 46,944 | 63,116 | +34% | 1 | 1 | 0% | 1,535 | 10,681 | +596% | 0 | 0 | — |
case-02 | fail→pass | 23,224 | 22,651 | -2% | 1 | 1 | 0% | 4,749 | 10,018 | +111% | 0 | 0 | — |
case-03 | fail→pass | 14,448 | 12,096 | -16% | 1 | 1 | 0% | 2,972 | 7,845 | +164% | 0 | 0 | — |
case-04 | pass→pass | 12,602 | 11,267 | -11% | 1 | 1 | 0% | 2,485 | 7,733 | +211% | 0 | 0 | — |
case-05 | pass→pass | 11,638 | 8,256 | -29% | 1 | 1 | 0% | 1,987 | 6,949 | +250% | 0 | 0 | — |
case-07 | pass→pass | 12,585 | 9,053 | -28% | 1 | 1 | 0% | 2,220 | 6,973 | +214% | 0 | 0 | — |
case-08 | fail→pass | 9,249 | 7,259 | -22% | 1 | 1 | 0% | 1,635 | 6,661 | +307% | 0 | 0 | — |
case-09 | pass→pass | 17,335 | 11,878 | -31% | 1 | 1 | 0% | 1,856 | 7,339 | +295% | 0 | 0 | — |
case-10 | fail→pass | 26,400 | 19,135 | -28% | 1 | 1 | 0% | 3,787 | 9,166 | +142% | 0 | 0 | — |
case-11 | fail→pass | 22,595 | 8,717 | -61% | 1 | 1 | 0% | 3,125 | 7,163 | +129% | 0 | 0 | — |
case-12 | fail→pass | 13,722 | 12,853 | -6% | 1 | 1 | 0% | 2,499 | 7,763 | +211% | 0 | 0 | — |
case-13 | fail→pass | 8,114 | 5,211 | -36% | 1 | 1 | 0% | 1,522 | 6,454 | +324% | 0 | 0 | — |
case-14 | pass→pass | 5,205 | 3,931 | -24% | 1 | 1 | 0% | 997 | 6,120 | +514% | 0 | 0 | — |
case-15 | fail→pass | 13,663 | 13,360 | -2% | 1 | 1 | 0% | 2,285 | 7,867 | +244% | 0 | 0 | — |
case-16 | fail→pass | 16,231 | 13,588 | -16% | 1 | 1 | 0% | 2,954 | 7,956 | +169% | 0 | 0 | — |
case-17 | pass→pass | 14,235 | 10,328 | -27% | 1 | 1 | 0% | 2,556 | 7,555 | +196% | 0 | 0 | — |
case-18 | pass→pass | 9,381 | 8,136 | -13% | 1 | 1 | 0% | 1,852 | 7,066 | +282% | 0 | 0 | — |
case-19 | pass→pass | 10,333 | 8,317 | -20% | 1 | 1 | 0% | 1,847 | 6,823 | +269% | 0 | 0 | — |
case-20 | pass→pass | 10,278 | 8,803 | -14% | 1 | 1 | 0% | 2,192 | 7,259 | +231% | 0 | 0 | — |
case-21 | fail→fail | 3,892 | 6,966 | +79% | 1 | 1 | 0% | 725 | 6,692 | +823% | 0 | 0 | — |
case-22 | fail→pass | 9,076 | 12,307 | +36% | 1 | 1 | 0% | 1,603 | 7,520 | +369% | 0 | 0 | — |
case-23 | fail→fail | 6,507 | 16,307 | +151% | 1 | 1 | 0% | 1,241 | 9,286 | +648% | 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, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 22 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.