PubMed Search
CLI and Python SDK for biomedical literature search, query analysis, citation export, full-text lookup, and multi-source academic enrichment.
This repository is CLI/SDK-first. The primary runtime surface is the pubmed-search shell command, which is friendly to Codex-like coding agents, terminal workflows, and scripts. The Python package also exposes reusable clients and application services for projects that need direct imports.
Origin and Attribution
This CLI/SDK mainline is maintained at PiaoyangGuohai1/pubmed-search. It is derived from and inspired by u9401066/pubmed-search-mcp, with the Apache-2.0 license and upstream attribution preserved. The original MCP-oriented fork remains a legacy reference; this repository maintains the terminal and Python SDK surfaces.
Install
pip install pubmed-search
For local development from this repository:
pip install -e .
Optional NCBI credentials can be provided through flags or environment variables:
export NCBI_EMAIL="you@example.com"
export NCBI_API_KEY="optional_ncbi_key"
CLI
pubmed-search --help
pubmed-search search "MASLD cardiovascular risk" --format json --limit 5
pubmed-search strategy "MASLD cardiovascular risk" --format json
pubmed-search analyze-query "MASLD cardiovascular risk" --format json
pubmed-search details 38905512 --format markdown
pubmed-search export 38905512 --format ris
pubmed-search fulltext 38905512 --format markdown
pubmed-search timeline "MASLD cardiovascular risk" --limit 20 --format markdown
Core commands:
| Command | Purpose |
|---|---|
search |
Search biomedical literature across PubMed and optional academic sources. |
strategy |
Generate MeSH expansion and search strategy materials. |
analyze-query |
Analyze intent, complexity, identifiers, PICO, and source recommendations without running a search. |
details |
Fetch detailed metadata for one or more PMIDs. |
export |
Export citations as BibTeX, RIS, CSV, MEDLINE, CSL JSON, or JSON. |
fulltext |
Locate full-text access through available source resolvers. |
text-mined |
Retrieve text-mined biomedical terms when source data is available. |
related |
Find related articles for a PMID. |
metrics |
Fetch citation metrics where supported. |
timeline |
Build research timeline summaries from a query or PMID set. |
cite-tree |
Explore citation/reference relationships around a root PMID. |
pico |
Parse a clinical question into PICO-style components. |
gene, compound, clinvar |
Query NCBI extended databases. |
Use --format json for agent and script workflows. Use --output path to write command output directly to a file.
Python SDK
from pubmed_search import LiteratureSearcher, QueryAnalyzer, export_articles
searcher = LiteratureSearcher(email="you@example.com")
articles = searcher.search("MASLD cardiovascular risk", limit=5)
for article in articles:
print(article["pmid"], article["title"])
analysis = QueryAnalyzer().analyze("MASLD cardiovascular risk")
print(analysis.intent, analysis.complexity)
bibtex = export_articles(articles, fmt="bibtex")
Useful imports include:
LiteratureSearcherfor PubMed search/details/citation metrics.SearchStrategyGeneratorfor MeSH and query strategy generation.QueryAnalyzerandResultAggregatorfor application-level search planning.EuropePMCClient,NCBIExtendedClient, and source client factories for external data sources.export_articles,export_bibtex,export_ris,export_csv,export_medline, andexport_jsonfor citation output.
Architecture
The codebase keeps the retrieval product independent from any host application:
src/pubmed_search/
cli/ click commands and terminal formatting
application/ search planning, export, fulltext, timeline, and session services
domain/ article and pipeline entities
infrastructure/ NCBI, Europe PMC, OpenAlex, Semantic Scholar, Crossref, Unpaywall, and other adapters
shared/ settings, logging, cache, and cross-cutting helpers
The CLI imports application services directly. Presentation-specific protocol servers are not part of the main package. If a protocol adapter is needed again later, it should live in a separate package that depends on pubmed-search.
Development
pip install -e .[all]
pytest
ruff check .
The editable package installs only the pubmed-search console command.
Citation
If you use this software in research or internal methods documentation, cite the repository metadata in CITATION.cff.
Metadata
Release files for pubmed-search 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pubmed_search-0.6.0.tar.gz | 303.9 kB | Without provenance | Details for pubmed_search-0.6.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pubmed_search-0.6.0-py3-none-any.whl | Python 3 | none | any | Details for pubmed_search-0.6.0-py3-none-any.whl |
Total release size: 685.2 kB
Release files / pubmed_search-0.6.0.tar.gz
| Download URL | pubmed_search-0.6.0.tar.gz |
|---|---|
| Size | 303.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b12774a8897bebcbb6e449f43efffaf00449f4e8ead1dc846b5f6f25475f5a07
|
|
BLAKE2b-256 checksum How to use checksums |
d25bb29ed03dd1f5012be6b3f517543070107fcc75c56d9e035ee30a02dabc67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Release files / pubmed_search-0.6.0-py3-none-any.whl
| Download URL | pubmed_search-0.6.0-py3-none-any.whl |
|---|---|
| Size | 381.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
74cceab0eea17262c82cd86104c39e88178f97dce8ea7f5bfa90e5c369fd64ef
|
|
BLAKE2b-256 checksum How to use checksums |
355a54d2e98bd7235f81d3c69cfc27f741f833b56b0c5b6f0b08cffa1416c65d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Security for pubmed-search 0.6.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.