Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.
.claude/skills/affaan-m-pubmed-database/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 31% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 29% | 0% |
Use this skill when a task needs biomedical literature from PubMed rather than general web search.
Start with the research question, split it into concepts, then combine concepts with Boolean operators.
textconcept_1 AND concept_2 AND filter synonym_a OR synonym_b NOT exclusion_term
Useful PubMed field tags:
[ti]: title[ab]: abstract[tiab]: title or abstract[au]: author[ta]: journal title abbreviation[mh]: MeSH term[majr]: major MeSH topic[pt]: publication type[dp]: date of publication[la]: languageExamples:
textdiabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2026[dp] (metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt] smith ja[au] AND cancer[tiab] AND 2026[dp] AND english[la]
Prefer MeSH when the concept has a stable controlled-vocabulary term. Combine MeSH with title/abstract terms when the topic is new or terminology varies.
Correct subheading syntax puts the subheading before the field tag:
textdiabetes mellitus, type 2/drug therapy[mh] cardiovascular diseases/prevention & control[mh]
Use [majr] only when the topic must be central to the paper. It can improve precision but may miss relevant work.
Publication types:
clinical trial[pt]meta-analysis[pt]randomized controlled trial[pt]review[pt]systematic review[pt]guideline[pt]Date filters:
text2026[dp] 2020:2026[dp] 2026/03/15[dp]
Availability filters:
textfree full text[sb] hasabstract[text]
NCBI E-utilities supports repeatable API workflows:
esearch.fcgi: search and return PMIDs.esummary.fcgi: return lightweight article metadata.efetch.fcgi: fetch abstracts or full records in XML, MEDLINE, or text.elink.fcgi: find related articles and linked resources.Use an email and API key for production scripts. Store API keys in environment variables, never in committed files or command history.
pythonimport os import time import requests BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils" def esearch(query: str, retmax: int = 20) -> list[str]: params = { "db": "pubmed", "term": query, "retmode": "json", "retmax": retmax, "tool": "ecc-pubmed-search", "email": os.environ.get("NCBI_EMAIL", ""), } api_key = os.environ.get("NCBI_API_KEY") if api_key: params["api_key"] = api_key response = requests.get(f"{BASE}/esearch.fcgi", params=params, timeout=30) response.raise_for_status() time.sleep(0.35) return response.json()["esearchresult"]["idlist"] pmids = esearch("hypertension[mh] AND randomized controlled trial[pt] AND 2024:2026[dp]") print(pmids)
For batches, prefer NCBI history server parameters (usehistory=y, WebEnv, query_key) instead of passing very long PMID lists through URLs.
For each search pass, record:
Example:
markdown| Database | Date searched | Query | Filters | Results | | --- | --- | --- | --- | ---: | | PubMed | 2026-05-11 | `sickle cell disease[mh] AND CRISPR[tiab]` | 2020:2026[dp], English | 42 |
raise_for_status() or otherwise handle non-200responses before parsing?
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 18,392 | 15,102 | -18% | 1 | 1 | 0% | 3,150 | 4,121 | +31% | 0 | 0 | — |
case-01 | fail→pass | 11,387 | 12,305 | +8% | 1 | 1 | 0% | 2,131 | 3,583 | +68% | 0 | 0 | — |
case-02 | pass→pass | 9,216 | 3,637 | -61% | 1 | 1 | 0% | 1,496 | 1,925 | +29% | 0 | 0 | — |
case-03 | pass→pass | 7,412 | 3,211 | -57% | 1 | 1 | 0% | 1,036 | 1,781 | +72% | 0 | 0 | — |
case-04 | fail→fail | 12,343 | 7,216 | -42% | 1 | 1 | 0% | 1,952 | 2,444 | +25% | 0 | 0 | — |
case-05 | pass→pass | 7,049 | 7,064 | +0% | 1 | 1 | 0% | 1,331 | 2,744 | +106% | 0 | 0 | — |
case-07 | pass→pass | 13,069 | 10,347 | -21% | 1 | 1 | 0% | 2,291 | 3,196 | +40% | 0 | 0 | — |
case-08 | pass→pass | 11,379 | 10,376 | -9% | 1 | 1 | 0% | 1,983 | 3,281 | +65% | 0 | 0 | — |
case-09 | pass→pass | 8,046 | 3,170 | -61% | 1 | 1 | 0% | 1,321 | 1,751 | +33% | 0 | 0 | — |
case-10 | pass→pass | 2,608 | 2,836 | +9% | 1 | 1 | 0% | 398 | 1,724 | +333% | 0 | 0 | — |
case-20 | fail→fail | 17,326 | 12,374 | -29% | 1 | 1 | 0% | 2,762 | 3,310 | +20% | 0 | 0 | — |
case-11 | pass→pass | 7,778 | 2,767 | -64% | 1 | 1 | 0% | 1,289 | 1,799 | +40% | 0 | 0 | — |
case-12 | pass→pass | 4,224 | 2,043 | -52% | 1 | 1 | 0% | 556 | 1,608 | +189% | 0 | 0 | — |
case-13 | pass→pass | 8,466 | 2,992 | -65% | 1 | 1 | 0% | 1,530 | 1,855 | +21% | 0 | 0 | — |
case-14 | pass→pass | 6,741 | 2,660 | -61% | 1 | 1 | 0% | 1,115 | 1,754 | +57% | 0 | 0 | — |
case-21 | fail→fail | 6,345 | 5,698 | -10% | 1 | 1 | 0% | 1,222 | 2,347 | +92% | 0 | 0 | — |
case-15 | fail→pass | 8,043 | 3,759 | -53% | 1 | 1 | 0% | 1,249 | 1,915 | +53% | 0 | 0 | — |
case-16 | fail→pass | 5,456 | 1,970 | -64% | 1 | 1 | 0% | 835 | 1,570 | +88% | 0 | 0 | — |
case-17 | pass→pass | 15,351 | 10,355 | -33% | 1 | 1 | 0% | 2,430 | 2,986 | +23% | 0 | 0 | — |
case-18 | pass→pass | 7,543 | 2,957 | -61% | 1 | 1 | 0% | 1,211 | 1,772 | +46% | 0 | 0 | — |
case-19 | pass→pass | 7,181 | 4,627 | -36% | 1 | 1 | 0% | 1,292 | 2,062 | +60% | 0 | 0 | — |
case-22 | fail→fail | 14,342 | 14,980 | +4% | 1 | 1 | 0% | 2,900 | 4,480 | +54% | 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. 22 cases were attempted. The headline lift of +14 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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/3/2026 | +27% |
Other measured skills in the registry, with their headline benchmark lift.