unified_search
Search academic literature across multiple databases in one query. Automatically determines relevant sources, combines results, and provides ranked, deduplicated articles with open-access links.
Instructions
š Unified Search - Single entry point for multi-source academic search.
Automatically analyzes your query and searches the best sources. No need to choose between PubMed, OpenAlex, CrossRef, etc.
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā WHAT IT DOES: āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Analyzes your query (complexity, intent, PICO elements)
Automatically selects best sources based on query type
Searches multiple sources in parallel
Deduplicates and merges results
Ranks by configurable criteria
Enriches with OA links (Unpaywall)
Auto-detects ICD-9/10 codes and expands to MeSH terms
Optionally searches preprints (arXiv, medRxiv, bioRxiv)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā EXAMPLES (most calls only need 1-2 params): āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Simple (1 param): unified_search("remimazolam ICU sedation")
With limit (2 params): unified_search("machine learning in anesthesia", limit=20)
Specify sources: unified_search("CRISPR gene therapy", sources="pubmed,openalex")
Auto minus one source: unified_search("sepsis biomarkers", sources="auto,-semantic_scholar")
Search all enabled sources except enrichment-only CrossRef: unified_search("icu sedation", sources="all,-crossref")
Clinical filters: unified_search("diabetes treatment", filters="year:2020-2025,age_group:aged,clinical_query:therapy")
Include preprints + shallow search: unified_search("COVID-19 vaccine", options="preprints,shallow")
Provider-native semantic retrieval (OpenAlex capability): unified_search("mechanisms of treatment resistance", sources="openalex", options="native_semantic")
Reproducible systematic retrieval (bulk/cursor where supported): unified_search("melanoma AND immunotherapy", sources="openalex,semantic_scholar", options="systematic")
Full control: unified_search("propofol vs remimazolam", sources="pubmed,semantic_scholar,europe_pmc", ranking="impact", filters="year:2020-,sex:female,species:humans", options="preprints,no_relax")
ICD Code Auto-Detection: unified_search("E11 complications") ā Auto-expands E11 to "Diabetes Mellitus, Type 2"[MeSH]
Args:
query: Search query (natural language, ICD codes, or structured).
Required unless pipeline is provided.
limit: Maximum results per source (default 10, max 100)
sources: Comma-separated list of sources to search.
Available: "pubmed", "openalex", "semantic_scholar",
"europe_pmc", "crossref", "core".
Commercial connectors may also appear when enabled via env,
e.g. "scopus" when SCOPUS_ENABLED=true and
SCOPUS_API_KEY are configured, or "web_of_science"
when WEB_OF_SCIENCE_ENABLED=true and
WEB_OF_SCIENCE_API_KEY are configured.
Default: auto-select based on query complexity.
Supports "auto" and "all" with exclusions.
Source keys are exact and canonical; legacy hyphenated,
spaced, abbreviated, or case-folded aliases are rejected.
Examples: "pubmed,openalex", "auto,-semantic_scholar",
or "all,-crossref"
Global disable env: PUBMED_SEARCH_DISABLED_SOURCES
Example: PUBMED_SEARCH_DISABLED_SOURCES=semantic_scholar,core
ranking: Ranking strategy:
- "balanced": Default, considers all factors
- "impact": Prioritize high-citation papers
- "recency": Prioritize recent publications
- "quality": Prioritize publication-type heuristics (RCTs, meta-analyses); not a quality assessment
output_format: "markdown" (human-readable), "json", or "toon" (programmatic)
filters: Comma-separated key:value pairs for filtering results.
Supported keys:
year:2020-2025 ā publication year range
year:2020- ā from 2020 onwards
year:-2025 ā up to 2025
year:2024 ā from 2024 onwards
age_group: ā age group filter (PubMed).
Values: newborn, infant, preschool, child,
adolescent, young_adult, adult, middle_aged,
aged, aged_80
sex: ā sex filter: male, female
species: ā species filter: humans, animals
language: ā language filter: english, chinese, etc.
clinical_query:
ā clinical query filter (PubMed EBM).
Values: therapy, therapy_narrow, diagnosis,
diagnosis_narrow, prognosis, prognosis_narrow,
etiology, etiology_narrow,
clinical_prediction, clinical_prediction_narrow
Tokens, keys, and values use exact canonical spelling with
no surrounding whitespace.
Example: "year:2020-2025,age_group:aged,sex:female,clinical_query:therapy"
options: Comma-separated flags to toggle behaviors.
Supported flags:
preprints ā also search arXiv, medRxiv, bioRxiv
include_detected_preprints
ā retain records identified by the preprint
heuristic in otherwise selected sources;
this does not establish peer-review status
clinical_trials ā add a bounded ClinicalTrials.gov adjunct
section to Markdown output (explicit opt-in)
no_oa ā skip Unpaywall OA link enrichment
no_analysis ā hide query analysis section in output
no_scores ā hide ranking scores and rank percentiles
compact ā compact structured JSON/TOON output
no_next ā hide next-tool suggestions in structured output
no_provenance ā hide section provenance in structured output
no_relax ā disable auto-relaxation on 0 results
native_semantic ā use provider-native semantic retrieval;
currently OpenAlex, max 50 results
systematic ā use deterministic bulk/cursor retrieval where
supported (for example S2 and OpenAlex)
shallow ā disable deep search (faster, keyword-only)
native_semantic and systematic are mutually exclusive
Option tokens use exact canonical spelling with no
surrounding whitespace.
and automatically disable multi-strategy query expansion.
Tokens use exact canonical spelling without surrounding
whitespace or duplicates.
Example: "preprints,shallow" or "no_analysis,no_scores"
pipeline: YAML/JSON string defining a multi-step search pipeline.
When provided, other parameters (except output_format) are
ignored and the pipeline DAG is executed instead.
Accepts **YAML** (recommended, human-friendly) or **JSON** format.
**Template mode ā YAML** (shortcut for common workflows):
template: pico
template_params:
P: ICU patients
I: remimazolam
C: propofol
O: sedation
Other templates:
template: comprehensive
template_params:
query: CRISPR gene therapy
template: exploration
template_params:
pmid: "12345678"
template: gene_drug
template_params:
term: BRCA1
**Custom pipeline ā YAML** (full DAG control, max 20 steps):
name: My Custom Search
steps:
- id: s1
action: search
params:
query: remimazolam ICU
sources: [pubmed, europe_pmc]
limit: 50
- id: s2
action: search
params:
query: propofol ICU
sources: [pubmed]
limit: 50
- id: merged
action: merge
inputs: [s1, s2]
params:
method: rrf
- id: enriched
action: metrics
inputs: [merged]
output:
format: markdown
limit: 20
ranking: impact
Shared params:
globals: default params inherited only by actions that
declare the same canonical parameter key
variables: typed values available as ${name} placeholders;
embedded replacements must be strings
Debugging controls:
dry_run: validate/preview the pipeline without searches
stop_at: execute through one step id, e.g. "merged"
**JSON also supported** (for programmatic use):
{"template": "pico", "template_params": {"P": "ICU patients", "I": "remimazolam"}}
Available actions:
search ā literature search (params: query, sources, limit, min_year, max_year)
pico ā PICO elements (params: P, I, C, O)
expand ā MeSH/synonym expansion (params: topic)
details ā fetch article details (params: pmids)
related ā find related articles (params: pmid, limit)
citing ā find citing articles (params: pmid, limit)
references ā get article references (params: pmid, limit)
metrics ā enrich with iCite citation metrics (inputs only)
merge ā combine results (params: method=union|intersection|rrf)
filter ā post-filter (params: min_year, max_year, article_types, min_citations, has_abstract)Returns: Formatted search results with: - Query analysis (complexity, intent, PICO) - ICD code expansions (if detected) - Search statistics (sources, dedup count) - Ranked articles with metadata - Open access links where available - Preprints (if options includes "preprints") - Relaxation info (if auto_relax triggered) - Pipeline step summary (if pipeline mode)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| dry_run | No | ||
| filters | No | ||
| options | No | ||
| ranking | No | balanced | |
| sources | No | ||
| stop_at | No | ||
| pipeline | No | ||
| output_format | No | markdown |