data-aggregator-mcp
Search, resolve, download, and inspect research data across 21 public sources through one MCP server.
Search archives, omics registries, literature, and ML datasets in parallel, with DOI/mirror deduplication, pagination, source/date/kind filters, and optional semantic or multi-query ranking.
Expand queries using NCBI Taxonomy, MeSH, UBERON, ChEBI, and EDAM synonym resolvers; unresolved terms and per-source failures are reported.
Resolve ids/DOIs to full records with file manifests, identifiers, links, taxa, citations, FAIR scores, trust/retraction checks, license-compatibility advice, and Croissant/RO-Crate/provenance exports.
Fetch files to local disk with checksum verification where available, size limits, archive extraction, and a metadata sidecar.
Inspect remote Parquet/CSV/TSV files without downloading: schema, preview, head, SQL SELECT, and column profiling.
Relate 2–10 resources to find shared accessions, identifiers, explicit links, and version lineage.
List wired sources with capabilities, filters, auth/rate-limit details, and optional health checks.
Integrates with Figshare via DataCite for discovering and downloading research outputs, including md5 checksum verification.
Provides discovery of Mendeley records through DataCite integration, though fetching is not supported.
Supports search and file retrieval from OSF via DataCite, with md5 verification on downloads.
Enables searching PubMed articles and resolving them to open-access full text, with citation and cross-links to related data.
Enables searching for datasets and files on Zenodo, with support for fetching and checksum verification.
data-aggregator-mcp
data-aggregator-mcp is an MCP server that lets AI agents search 21 public research-data sources at once and get back one deduplicated list.
Install
Claude Code:
claude mcp add data-aggregator -- uvx data-aggregator-mcpOne-click install for VS Code or Cursor:
Any other MCP client: run uvx data-aggregator-mcp as a stdio server.
Claude Desktop (claude_desktop_config.json) and most other clients:
{
"mcpServers": {
"data-aggregator": {
"command": "uvx",
"args": ["data-aggregator-mcp"],
"env": { "NCBI_API_KEY": "your-optional-key" }
}
}
}With pip:
pip install data-aggregator-mcp
data-aggregator-mcp # or: python -m data_aggregator_mcpoperate (SQL and previews over remote files) needs an optional extra:
pip install "data-aggregator-mcp[operate]".
Related MCP server: plant-genomics-mcp
What you can ask
"Find transcriptomes for Orobanche aegyptiaca." The species was renamed; NCBI Taxonomy maps it to Phelipanche aegyptiaca, and the sources that accept synonyms match both names (the demo above).
"What data came out of this paper?"
resolve("pubmed:40098680")
links geo:GSE284240, bioproject:PRJNA1198054, and 18 sra: experiments
files PMC11910882.xml (open-access full text)"Can I train a model on this dataset?"
resolve("hf:scikit-learn/iris", use="ml-training")
license_compat ALLOW: "CC0-1.0 grants the permission(s) required for
ml-training: commercial-use, modifications"The verdict is read from the record's license metadata; it is advice, not a legal
opinion. resolve also renders citations in any CSL style, checks Crossref for
retractions, scores FAIRness, and exports Croissant or RO-Crate. relate reports
how a set of records connect (a shared accession, DOI or explicit link).
How a search runs
A source that fails is named in the result's errors, never dropped silently.
What each source can fetch, and which checksum it is verified against: docs/sources.md.
What the benchmark shows
An agent using this server was compared with the same agent using web search, on held-out dataset-finding tasks scored by recall against independently built answer keys, 3 runs per task. Mean recall, server against web search: Claude Haiku 5.5 0.47 against 0.32 (higher on 8 of 10 tasks), Sonnet 5.5 0.54 against 0.52 (5 of 10), Opus 5.5 0.72 against 0.58 (6 of 10). With Haiku the server met round 5's pre-registered "better" rule (higher on at least 8 of 10 tasks, interval above 0) but not the stricter bar for a win across model tiers (9 of 10, Holm-adjusted sign test, p = 0.22); Sonnet and Opus met neither. With Opus it returned fewer wrong entries and answered in about a third of the time; with Sonnet it was faster on 9 of 10 tasks; with Haiku it cost less on 9 of 10.
The two latest Opus 5.5 rounds (2026-10-19, rules written before the runs):
Tools given to the agent | Round 4 (5 tasks) | Round 5 (10 tasks) |
this server | 0.66 | 0.72 |
web search | 0.66 | 0.58 |
ToolUniverse | 0.59 | 0.63 |
no tools (memory only) | 0.02 | 0.09 |
In round 5 this server was higher on 6 of 10 tasks, where the pre-set rule needed 8. Web search hit the 15-minute limit in 11 of 30 runs, and a run that times out scores 0. In runs that finished, web search found more (0.90). The server answered in 203 s against 599 s (median), with fewer tool calls and fewer wrong entries (precision 0.95 against 0.62). It cost more per run than web search ($2.08 against $1.51, API-equivalent).
We chose the tasks and ran the benchmark ourselves; an outside re-run is welcome. Method and controls: benchmarks/h2h; the Haiku and Sonnet runs: 2026-10-20 re-run.
Compared with other servers
Server | Searches | One search | Checksum | Remote SQL | License check |
data-aggregator-mcp | 21 sources: data archives, omics, papers | yes, DOI dedup | where published | yes | yes |
20 general and ML data platforms | yes | — | row preview | yes | |
papers: arXiv, PubMed, OpenAlex, Crossref and more | yes, deduplicated | — | — | — | |
1000+ tools: models, datasets, APIs, packages | papers | — | — | — | |
genes, variants, trials, drugs, proteins, papers | yes ( | — | — | — |
— means the project's README doesn't describe it (READMEs read 2026-10-04). Where they are ahead: BioMCP reaches clinical trials, ChEMBL and AlphaFold; ToolUniverse covers far more ground overall; paper-search-mcp covers far more literature sources; Mobus also compares datasets and checks schema compatibility. More: docs/POSITIONING.md.
Reference and development
Every tool and parameter, the HTTP transport (--transport http) and the
environment variables:
docs/reference.md.
Sources that need every word of a query, and how they are searched:
every-word sources.
Tests, linting and the live API probes:
CONTRIBUTING.md.
License
MIT. See LICENSE.
Available Tools
6 toolsfetchA
Download a resource's files to local disk and return the PATHS (never the file contents). Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. Fetchable backends: Zenodo (md5-verified); SRA via ENA FASTQ (md5-verified); GEO supplementary files (unverified); DataCite sub-repos — Figshare/Dataverse/OSF (md5-verified), OpenNeuro (snapshot manifest, unverified), Dryad is manifest-only (resolve lists files, fetch fails loud), Mendeley + other DataCite repos fail loud; PubMed/OpenAIRE open-access full text (EuropePMC XML / Unpaywall PDF, unverified); HuggingFace Hub (unverified); DataONE Member-Node objects (md5/SHA-256-verified); OmicsDI — PRIDE (unverified) + MetaboLights (sha-256-verified) only, MassIVE/jPOST/iProX/PeptideAtlas/Panorama Public/GNPS/Metabolomics Workbench fail loud; DANDI dandisets (302→S3, sha-256-verified); CZ CELLxGENE H5AD/RDS assets (unverified); OpenML ARFF (md5-verified); RCSB PDB .cif/.pdb structure files (unverified); UniProtKB FASTA (unverified); BioStudies study files (unverified); GBIF Darwin Core Archives (unverified); data.gov dataset distributions (unverified). Fails loud if selected files exceed max_bytes unless force=true. Verifies md5/SHA-256 where the source publishes one; files marked unverified get no integrity check. Writes a .dataresource.json sidecar.
Inputs: id (required), dest, files, force, +2 more. Returns: bytes, paths, resumed, skipped, +1 more
list_sourcesARead-only
List wired data sources and their capabilities (layer, kinds, supported filters, auth requirement, rate limit, status). Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. filters_supported names the search parameters a source applies itself: cursor = it pages past page 1; published_after/published_before/kind = filtered upstream, so its total is filtered (any other source is filtered after fetch); organism/disease/tissue/chemical/assay = the synonym expansion reaches its query.
Inputs: check_health. Returns: sources
operateARead-only
Inspect or query a remote tabular file (Parquet/CSV/TSV) WITHOUT downloading it. op='schema' returns columns+types; 'preview' a small sample; 'head' the first n rows; 'sql' a read-only SELECT against the file (exposed as the view 'data', e.g. "SELECT * FROM data WHERE x > 1"). op='peek' profiles every column WITHOUT downloading — type, null-rate, approximate distinct count, min/max, and numeric quartiles (a DuckDB SUMMARIZE; like head/sql it reads the whole file, so it honors the source-size ceiling). Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. Addresses a file by catalog id + file name (resolve the id first to see files[] and access_modes). Requires the [operate] extra; fails loud if the file is not an operable tabular file.
Inputs: id (required), op (required), n, file, +2 more.
relateARead-only
Given 2-10 resource ids, return metadata-level join/harmonization HINTS: how the datasets relate and on what key they could be joined. Detects shared accessions (BioProject/SRA/GEO), shared cross-identifiers (doi/pmid/pmcid), explicit links between the inputs, and version lineage. Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. HINTS ONLY — it does not read file columns, fetch files, or execute any join/merge/conversion; each hint names the shared value as evidence. Resolve ids first if you only have a search result. Per-id resolve failures are reported, not fatal.
Inputs: ids (required). Returns: Result of `relate(ids)` — metadata-level join/harmonization hints across a reso…
resolveARead-only
Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. Fetch the full DataResource for a known id (e.g. 'zenodo:1254563', 'datacite:10.5061/dryad.t4b8gtjgj', 'hf:davidcechak/Arabidopsis_thaliana_DNA_v0', a bare Zenodo record id, or a DOI), including the complete files[] manifest. Publication resolve also attaches normalized identifiers (pmid/pmcid/doi) and, when open access, a full-text file. Pass cite= to render a citation onto the result (citation field); omitted means no citation. Pass trust=true to attach retraction status (via Crossref) under trust{}. Pass fair=true to attach an RDA-grounded FAIRness score (0–100 + F/A/I/R sub-scores + actionable gaps) computed from the record under fair{}. Pass use= (commercial/redistribute/modify/ml-training) to attach a licence-compatibility advisory (ALLOW/REVIEW/DENY, not legal advice) under license_compat{}. Pass format=provenance for a one-call RO-Crate 1.1 data-availability dossier (under provenance{}) composing version-currency, licence+SPDX, FAIR score, retraction status, and the source/DOI/ID chain — it auto-attaches fair + trust.
Inputs: id (required), use, cite, fair, +2 more. Returns: id, doi, fair, kind, +32 more
searchARead-only
Search public research-data archives, omics registries, and the literature for datasets, software, publications, and sequencing data. Fans out across Zenodo, DataCite (Dryad, Figshare, Dataverse, OSF, Mendeley, OpenNeuro), NCBI omics (GEO, SRA, BioProject), literature (PubMed + OpenAIRE), HuggingFace Hub (datasets), DataONE (eco/environmental federation), OmicsDI (proteomics/metabolomics), RCSB PDB (macromolecular structures), GWAS Catalog (genotype-phenotype studies), OpenML (ML datasets), DANDI (neurophysiology dandisets), CZ CELLxGENE (single-cell datasets), GBIF (biodiversity datasets), data.gov (US government open data), NASA CMR (Earth-science collections), UniProt (protein entries), BioStudies (EMBL-EBI study records), NGDC (BioProjects deposited in China, with their GSA read sets), the Metabolomics Workbench (metabolomics studies), MassIVE (mass-spectrometry datasets: GNPS metabolomics, proteomics), and Kaggle (machine-learning datasets, many with no DOI). Tool names in this text are this server's own; your client may list them with a prefix (in Claude Code, mcp__data-aggregator__resolve): call the name it lists. DataCite, OmicsDI, NCBI omics, CELLxGENE, the Metabolomics Workbench, MassIVE and Kaggle match only records holding every query word: errors.all_words names one that matched none, and a hit of theirs lists in unshown_terms the query words it matched in text the hit leaves out, such as a protocol, which resolve shows. DataCite, OmicsDI, CELLxGENE, the Workbench and MassIVE are also searched for records holding only some of the words, ranked below hits naming more; keep queries to NCBI omics and Kaggle short. Returns compact DataResource records (fields with no value left out; long lists cut to their first few, named in truncated{}); a page holds what fits in one tool result, so it can return fewer than size hits, with errors.page_size saying so and next_cursor continuing; errors.next_page counts hits already fetched that name every query word and come on the next page, so to find every match, page while it is there; per-source failures are reported in errors{}. Use resolve for the full record (SRA resolve attaches the ENA FASTQ manifest; publication resolve attaches links[] to datasets/accessions, normalized identifiers (pmid/pmcid/doi), and — when open access — a full-text file), then fetch to download files. Pass organism= to expand the query with NCBI-Taxonomy synonyms; results carry normalized taxa[] + plant cross-links. Pass disease= to expand the query with MeSH descriptor synonyms (e.g. 'breast cancer' also matches 'Breast Neoplasms'); the expansion is echoed in mesh_expansion. Pass tissue= to expand the query with UBERON synonyms (e.g. 'liver' also matches 'iecur'/'jecur'); the expansion is echoed in tissue_expansion. Pass chemical= to expand the query with ChEBI compound synonyms (e.g. 'caffeine' also matches '1,3,7-trimethylxanthine'); the expansion is echoed in chemical_expansion. Pass assay= to expand the query with EDAM assay/method synonyms (e.g. 'ChIP-seq' also matches 'ChIP-sequencing'); echoed in assay_expansion. Pass collapse_mirrors=true to opt into conservative cross-repo mirror collapse: same-dataset copies under different/no DOIs are folded into one record, with the folded copies annotated under mirrors[]. An ontology param that matches no term in its registry (e.g. organism='yeast' — NCBI Taxonomy indexes no such common name) is reported in unresolved[] and the search runs WITHOUT that expansion, so a dropped filter is never silent. Clients that support form elicitation are asked for a replacement term before the search runs.
Inputs: kind, rank, size, assay, +13 more. Returns: count, query, total, errors, +11 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a distinct role: search discovers resources, resolve expands a known id, fetch downloads files, list_sources introspects coverage, operate analyzes remote tabular files without downloading, and relate compares resource ids. The adjacent file-related operations (resolve/fetch/operate) are explicitly scoped by description, so an agent can tell them apart.
Five tools are bare lowercase verbs (search, resolve, fetch, operate, relate) and one is a snake_case verb_noun (list_sources), so the pattern is not perfectly uniform. It remains predictable and readable, with no chaotic mixing of camelCase or vague synonym pileups.
Six tools is well-scoped for a read-only multi-archive research-data aggregator, and each tool covers a distinct workflow stage rather than duplicating another. The surface is neither thin nor bloated, and no obvious filler tool is present.
The set covers discovery, detailed record resolution, file download, source capability introspection, remote tabular inspection, and cross-resource relation hints, which is strong lifecycle coverage for this domain. Write/update operations are not expected for a read-only aggregation server, and remaining gaps look like minor conveniences rather than dead ends.
Maintenance
Related MCP Connectors
Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations.
arXiv, PubMed, Crossref and OpenAlex scholarly metadata.
Search and resolve Zenodo datasets, software, and publications by DOI; trace versions and funding.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables searching and downloading academic papers from 14 platforms including arXiv, PubMed, Google Scholar, Web of Science, Springer, and Sci-Hub with unified data format and intelligent rate limiting.21279 npm191MIT
- AlicenseAqualityBmaintenance▎ Provides 32 tools for plant-genomics locus lookup across 11 free public backends (Ensembl Plants, Phytozome, UniProtKB, Europe PMC, QuickGO, NCBI BLAST, Gramene, KEGG, STRING-DB, ATTED-II, BAR). Takes a TAIR-style locus plus optional organism and returns gene metadata, functional/pathway annotation, interactions, co-expression, and literature — in single-locus, batch, and cross-source synthesis.58106 PyPI8MIT
- AlicenseAqualityDmaintenanceEnables searching scholarly literature across CrossRef, ERIC, Semantic Scholar, and OpenAlex, and retrieving open-access PDFs via Unpaywall.9MIT
- AlicenseAqualityCmaintenanceEnables users to search multiple public life-science data repositories (GEO, ENA, CELLxGENE, PRIDE, DataCite) with a single query, returning a unified ranked list of datasets with ontology-expanded terms and per-source error reporting.3MIT