unified_search
Analyzes your query and automatically searches across multiple academic sources, deduplicating and ranking results for comprehensive literature retrieval.
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:aged, clinical:therapy")
Include preprints + shallow search: unified_search("COVID-19 vaccine", options="preprints, shallow")
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: Your search query (natural language, ICD codes, or structured)
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.
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 high-evidence studies (RCTs, meta-analyses)
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: → 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
lang: → language filter: english, chinese, etc.
clinical: → clinical query filter (PubMed EBM).
Values: therapy, therapy_narrow, diagnosis,
diagnosis_narrow, prognosis, prognosis_narrow,
etiology, etiology_narrow,
clinical_prediction, clinical_prediction_narrow
Example: "year:2020-2025, age:aged, sex:female, clinical:therapy"
options: Comma-separated flags to toggle behaviors.
Supported flags:
preprints → also search arXiv, medRxiv, bioRxiv
all_types → include non-peer-reviewed articles
no_oa → skip Unpaywall OA link enrichment
no_analysis → hide query analysis section in output
no_scores → hide similarity/relevance scores
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
shallow → disable deep search (faster, keyword-only)
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
params:
P: ICU patients
I: remimazolam
C: propofol
O: sedation
Other templates:
template: comprehensive
params:
query: CRISPR gene therapy
template: exploration
params:
pmid: "12345678"
template: gene_drug
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 by every step
variables: values available as ${name} placeholders
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", "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 |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| sources | No | ||
| ranking | No | balanced | |
| output_format | No | markdown | |
| filters | No | ||
| options | No | ||
| pipeline | No | ||
| dry_run | No | ||
| stop_at | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |