$npx -y skills add Aperivue/medsci-skills --skill search-litLiterature search and citation management for medical research. Searches PubMed, Semantic Scholar, and bioRxiv/medRxiv with verified citations. Anti-hallucination — every reference verified via API before inclusion. Generates BibTeX entries.
| 1 | # Literature Search Skill |
| 2 | |
| 3 | You are assisting a medical researcher with literature searches and citation management for |
| 4 | medical research papers. Every reference you produce must be verified against a live database -- |
| 5 | never generate citations from memory alone. |
| 6 | |
| 7 | ## Communication Rules |
| 8 | |
| 9 | - Communicate with the user in their preferred language. |
| 10 | - All citation content (titles, abstracts, BibTeX) in English. |
| 11 | - Medical terminology is always in English. |
| 12 | |
| 13 | ## Key Directories |
| 14 | |
| 15 | - **BibTeX output**: User-specified directory (default: current working directory) |
| 16 | - **Manuscript workspace**: determined by the user or the calling skill |
| 17 | |
| 18 | ## Search Tools: MCP (Primary) + E-utilities (Fallback) |
| 19 | |
| 20 | ### Primary: MCP Tools (Claude.ai Remote) |
| 21 | |
| 22 | | Database | MCP Tool | Purpose | |
| 23 | |----------|----------|---------| |
| 24 | | PubMed | `mcp__claude_ai_PubMed__search_articles` | Search by query, MeSH terms | |
| 25 | | PubMed | `mcp__claude_ai_PubMed__get_article_metadata` | Full metadata for a PMID | |
| 26 | | PubMed | `mcp__claude_ai_PubMed__find_related_articles` | Related articles for a PMID | |
| 27 | | PubMed | `mcp__claude_ai_PubMed__lookup_article_by_citation` | Verify a citation | |
| 28 | | PubMed | `mcp__claude_ai_PubMed__convert_article_ids` | Convert between PMID/DOI/PMCID | |
| 29 | | Semantic Scholar | `mcp__claude_ai_Scholar_Gateway__semanticSearch` | Semantic search across all fields | |
| 30 | | bioRxiv/medRxiv | `mcp__claude_ai_bioRxiv__search_preprints` | Search preprint servers | |
| 31 | | bioRxiv/medRxiv | `mcp__claude_ai_bioRxiv__get_preprint` | Full preprint metadata | |
| 32 | | CrossRef | WebFetch with `https://api.crossref.org/works/{DOI}` | DOI verification | |
| 33 | |
| 34 | ### Fallback: NCBI E-utilities (Direct API via Bash) |
| 35 | |
| 36 | When PubMed MCP is unavailable (session timeout, "MCP session has been terminated" error, |
| 37 | or "No such tool available" error), fall back to NCBI E-utilities via bundled scripts. |
| 38 | |
| 39 | **Detection**: If any `mcp__claude_ai_PubMed__*` call returns an error containing |
| 40 | "terminated", "not found", "not available", or "not connected", switch ALL subsequent |
| 41 | PubMed calls in this session to E-utilities. Do not retry MCP after a disconnect — it |
| 42 | will not recover within the same conversation. |
| 43 | |
| 44 | **Scripts** (in `${CLAUDE_SKILL_DIR}/references/`): |
| 45 | - `pubmed_eutils.sh` — Bash wrapper for NCBI E-utilities API |
| 46 | - `parse_pubmed.py` — Python parser for E-utilities responses |
| 47 | |
| 48 | **Usage patterns:** |
| 49 | |
| 50 | ```bash |
| 51 | EUTILS="${CLAUDE_SKILL_DIR}/references/pubmed_eutils.sh" |
| 52 | PARSER="${CLAUDE_SKILL_DIR}/references/parse_pubmed.py" |
| 53 | |
| 54 | # Search PubMed (returns PMIDs) |
| 55 | bash "$EUTILS" search "diagnostic test accuracy meta-analysis radiology" 20 \ |
| 56 | | python3 "$PARSER" esearch |
| 57 | |
| 58 | # Get article summaries as markdown table |
| 59 | bash "$EUTILS" fetch_json "16168343,16085191,31462531" \ |
| 60 | | python3 "$PARSER" esummary |
| 61 | |
| 62 | # Get detailed metadata |
| 63 | bash "$EUTILS" fetch "16168343" \ |
| 64 | | python3 "$PARSER" efetch |
| 65 | |
| 66 | # Generate BibTeX entries |
| 67 | bash "$EUTILS" fetch "16168343,16085191" \ |
| 68 | | python3 "$PARSER" bibtex |
| 69 | |
| 70 | # Verify a citation by exact title |
| 71 | bash "$EUTILS" cite_lookup "Bivariate analysis of sensitivity and specificity" \ |
| 72 | | python3 "$PARSER" esearch |
| 73 | |
| 74 | # Find related articles for a PMID |
| 75 | bash "$EUTILS" related "16168343" 10 \ |
| 76 | | python3 "$PARSER" esummary |
| 77 | ``` |
| 78 | |
| 79 | **Rate limiting**: 3 requests/second without API key, 10/sec with NCBI_API_KEY. |
| 80 | The script auto-sleeps 350ms between calls. For batch operations, keep calls sequential. |
| 81 | |
| 82 | **E-utilities → MCP equivalence:** |
| 83 | |
| 84 | | MCP Tool | E-utilities Command | Parser Mode | |
| 85 | |----------|-------------------|-------------| |
| 86 | | `search_articles` | `search <query> [retmax]` | `esearch` | |
| 87 | | `get_article_metadata` | `fetch <pmids>` | `efetch` or `bibtex` | |
| 88 | | `find_related_articles` | `related <pmid> [retmax]` | `esummary` | |
| 89 | | `lookup_article_by_citation` | `cite_lookup <title>` | `esearch` → `fetch` | |
| 90 | | `convert_article_ids` | Not available (use CrossRef DOI lookup) | — | |
| 91 | |
| 92 | --- |
| 93 | |
| 94 | ## Workflow |
| 95 | |
| 96 | ### Phase 1: Search Strategy |
| 97 | |
| 98 | 1. **Understand the need**: Get the research topic, specific question, or manuscript section |
| 99 | that needs references. |
| 100 | 2. **Generate search terms**: |
| 101 | - Identify key concepts (Population, Intervention/Exposure, Comparison, Outcome). |
| 102 | - Generate MeSH terms for PubMed queries. |
| 103 | - Build Boolean queries: `(concept1 OR synonym1) AND (concept2 OR synonym2)`. |
| 104 | 3. **Define scope**: |
| 105 | - Date range (default: last 10 years unless user specifies). |
| 106 | - Article types (original research, review, meta-analysis, etc.). |
| 107 | - Language filter (default: English). |
| 108 | 4. **Present the search plan** to the user before executing. Include the Boolean query, |
| 109 | databases to search, and filters. |
| 110 | |
| 111 | * |