Skip to main content
Glama
musharna

data-aggregator-mcp

by musharna

search

Read-only

Search multiple public research archives and omics registries for datasets, publications, and sequencing data with ontology-based query expansion and cross-repo deduplication.

Instructions

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), and CZ CELLxGENE (single-cell datasets). Returns compact DataResource records; 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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindNoKeep only results of this kind.
rankNoResult ordering. 'relevance' (default) = upstream/merged order. 'semantic' re-ranks the fetched page by embedding similarity to the query (needs EMBEDDING_API_BASE; degrades to relevance order with an errors['semantic'] note if unconfigured). In semantic mode pagination is window-based (each page consumes its full fetched window).relevance
sizeNoMax results (1-50, default 10)
assayNoOptional assay/method name. Resolved via EDAM topics (EBI OLS); the query is expanded with the canonical name + exact synonyms (e.g. 'ChIP-seq' also matches 'ChIP-sequencing'/'ChIP-exo'). An unknown term yields no expansion; an OLS failure surfaces in errors. The expansion is echoed in assay_expansion.
queryNoFree-text search query
cursorNoOpaque pagination token from a prior search's next_cursor. When set, all other search params are read from the cursor.
tissueNoOptional tissue/anatomy name. Resolved via UBERON (EBI OLS); the query is expanded with the canonical term + exact synonyms (e.g. 'liver' also matches 'iecur'/'jecur'). The expansion is echoed in tissue_expansion.
diseaseNoOptional disease/phenotype name. Resolved via MeSH (NCBI E-utilities); the query is expanded with the canonical descriptor + entry-term synonyms (e.g. 'breast cancer' also matches 'Breast Neoplasms'). The expansion is echoed in mesh_expansion.
sourcesNoRestrict fan-out to these sources (default: all). Available: zenodo, dataone, gbif, cellxgene, datacite, dandi, omics, literature, huggingface, datagov, nasacmr, omicsdi, openml, pdb, uniprot, gwas, biostudies
chemicalNoOptional chemical/compound name. Resolved via ChEBI (EBI OLS); the query is expanded with the canonical name + exact synonyms (e.g. 'caffeine' also matches '1,3,7-trimethylxanthine'), capped to a bounded number of synonyms. An unknown term yields no expansion; an OLS failure surfaces in errors. The expansion is echoed in chemical_expansion.
organismNoOptional organism name. Resolved via NCBI Taxonomy; the query is expanded with the canonical name + synonyms (e.g. 'Orobanche aegyptiaca' also matches 'Phelipanche aegyptiaca'). The expansion is echoed in taxon_expansion.
provenanceNoOpt into a whole-search RO-Crate 1.1 Run Crate (default false). Attaches provenance_crate{} — a machine-readable manifest documenting this search: the query, the sources queried, the ontology expansions that fired, the per-source errors (a partial search is disclosed), and per-hit provenance for every result (version-currency, licence + normalized SPDX, FAIR score). Per-hit RETRACTION is omitted — it would need one Crossref call per hit; use per-record resolve(format=provenance) for that. Covers THIS search page only (intra-page; each page of a paginated search gets its own crate).
understandNoOpt into LLM query understanding: a free-text query is rewritten into a keyword core + structured params (organism/disease/tissue/chemical/assay, kind, year) before fan-out; extracted entities are validated by the same ontology resolvers (a hallucinated entity that doesn't resolve is simply dropped), explicit params you pass always win, and the interpretation is echoed in query_understanding. Requires an LLM endpoint (LLM_API_BASE); with none configured the search runs unchanged and notes it in errors['understand'].
multi_queryNoOpt into diverse multi-query recall expansion: an LLM generates up to a few deliberately-diverse reformulations of your query, each is fanned out across all sources, and the deduped union is re-ranked against your original query — surfacing relevant records a single keyword query would miss. Costs N× the upstream calls (bounded). Requires an LLM endpoint (LLM_API_BASE); with none configured the search runs as a normal single query and notes it in errors['multi_query']. The variants used are echoed in query_expansion. Composes with understand=. NOTE: multi_query=true ALWAYS applies semantic re-ranking of the window internally regardless of rank=; the rank= param has no effect in this mode.
published_afterNoKeep results with year >= this.
collapse_mirrorsNoOpt into conservative cross-repo content dedup (default false). On top of the always-on exact-DOI dedup, folds records that are the SAME dataset deposited under different (or no) DOIs — e.g. a Zenodo mirror of a figshare deposit, GEO<->ArrayExpress — into one record, annotating the survivor with the folded copies under mirrors[]. Conservative: a merge needs a shared file checksum OR identical (normalized-title, first-author-surname, year); title-only or partial matches never merge. Intra-page / best-effort only (a mirror on a different page is not collapsed), so a page may return fewer than size items; pagination is unaffected.
published_beforeNoKeep results with year <= this.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYes
queryYes
totalYes
errorsNo
resultsNo
unresolvedNo
next_cursorNo
mesh_expansionNo
assay_expansionNo
query_expansionNo
taxon_expansionNo
provenance_crateNo
tissue_expansionNo
chemical_expansionNo
query_understandingNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.45.1
  2. Removedv0.43.0
  3. Changed4 schema fields changedv0.42.0
    • changedInput schema / properties / sources / description
      Previous value: -"Restrict fan-out to these sources (default: all). Available: zenodo, dataone, cellxgene, datacite, dandi, omics, literature, huggingface, omicsdi, openml, pdb, uniprot, gwas"New value: +"Restrict fan-out to these sources (default: all). Available: zenodo, dataone, gbif, cellxgene, datacite, dandi, omics, literature, huggingface, datagov, nasacmr, omicsdi, openml, pdb, uniprot, gwas, biostudies"
    • addedOutput schema / $defs / QueryUnderstanding / properties / confidence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Confidence"
      +}
    • addedOutput schema / $defs / UnresolvedEntity
      Added value: +{
      +  "description": "Echo of an ontology-typed search param that was supplied but matched NO term,\nso the query ran WITHOUT that expansion.\n\nDistinct from ``SearchResult.errors``: an entry there means the ontology LOOKUP\nFAILED (HTTP/parse) and the two are mutually exclusive per field. An entry here\nmeans the lookup SUCCEEDED and legitimately returned no match — the common case\nfor a common name the registry does not index (NCBI Taxonomy has no ``yeast``,\n``oak`` or ``cedar``; UBERON has no bare ``root``).\n\nWithout this echo the response for a silently-dropped param is byte-identical to\none where the param was never passed, so the caller cannot tell that the filter\nthey asked for was not applied.",
      +  "properties": {
      +    "field": {
      +      "title": "Field",
      +      "type": "string"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "note": {
      +      "title": "Note",
      +      "type": "string"
      +    },
      +    "ontology": {
      +      "title": "Ontology",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "field",
      +    "input",
      +    "ontology",
      +    "note"
      +  ],
      +  "title": "UnresolvedEntity",
      +  "type": "object"
      +}
    • addedOutput schema / properties / unresolved
      Added value: +{
      +  "items": {
      +    "$ref": "#/$defs/UnresolvedEntity"
      +  },
      +  "title": "Unresolved",
      +  "type": "array"
      +}
  4. Changed1 schema field changedv0.41.1
    • changedInput schema / properties / sources / description
      Previous value: -"Restrict fan-out to these sources (default: all). Available: zenodo, dataone, cellxgene, datacite, dandi, omics, literature, huggingface, omicsdi, openml, pdb, gwas"New value: +"Restrict fan-out to these sources (default: all). Available: zenodo, dataone, cellxgene, datacite, dandi, omics, literature, huggingface, omicsdi, openml, pdb, uniprot, gwas"
  5. Changed31 schema fields changedv0.40.0
    • addedInput schema / properties / assay
      Added value: +{
      +  "description": "Optional assay/method name. Resolved via EDAM topics (EBI OLS); the query is expanded with the canonical name + exact synonyms (e.g. 'ChIP-seq' also matches 'ChIP-sequencing'/'ChIP-exo'). An unknown term yields no expansion; an OLS failure surfaces in errors. The expansion is echoed in assay_expansion.",
      +  "type": "string"
      +}
    • addedInput schema / properties / chemical
      Added value: +{
      +  "description": "Optional chemical/compound name. Resolved via ChEBI (EBI OLS); the query is expanded with the canonical name + exact synonyms (e.g. 'caffeine' also matches '1,3,7-trimethylxanthine'), capped to a bounded number of synonyms. An unknown term yields no expansion; an OLS failure surfaces in errors. The expansion is echoed in chemical_expansion.",
      +  "type": "string"
      +}
    • addedInput schema / properties / collapse_mirrors
      Added value: +{
      +  "default": false,
      +  "description": "Opt into conservative cross-repo content dedup (default false). On top of the always-on exact-DOI dedup, folds records that are the SAME dataset deposited under different (or no) DOIs — e.g. a Zenodo mirror of a figshare deposit, GEO<->ArrayExpress — into one record, annotating the survivor with the folded copies under mirrors[]. Conservative: a merge needs a shared file checksum OR identical (normalized-title, first-author-surname, year); title-only or partial matches never merge. Intra-page / best-effort only (a mirror on a different page is not collapsed), so a page may return fewer than size items; pagination is unaffected.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / disease
      Added value: +{
      +  "description": "Optional disease/phenotype name. Resolved via MeSH (NCBI E-utilities); the query is expanded with the canonical descriptor + entry-term synonyms (e.g. 'breast cancer' also matches 'Breast Neoplasms'). The expansion is echoed in mesh_expansion.",
      +  "type": "string"
      +}
    • addedInput schema / properties / multi_query
      Added value: +{
      +  "default": false,
      +  "description": "Opt into diverse multi-query recall expansion: an LLM generates up to a few deliberately-diverse reformulations of your query, each is fanned out across all sources, and the deduped union is re-ranked against your original query — surfacing relevant records a single keyword query would miss. Costs N× the upstream calls (bounded). Requires an LLM endpoint (LLM_API_BASE); with none configured the search runs as a normal single query and notes it in errors['multi_query']. The variants used are echoed in query_expansion. Composes with understand=. NOTE: multi_query=true ALWAYS applies semantic re-ranking of the window internally regardless of rank=; the rank= param has no effect in this mode.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / provenance
      Added value: +{
      +  "default": false,
      +  "description": "Opt into a whole-search RO-Crate 1.1 Run Crate (default false). Attaches provenance_crate{} — a machine-readable manifest documenting this search: the query, the sources queried, the ontology expansions that fired, the per-source errors (a partial search is disclosed), and per-hit provenance for every result (version-currency, licence + normalized SPDX, FAIR score). Per-hit RETRACTION is omitted — it would need one Crossref call per hit; use per-record resolve(format=provenance) for that. Covers THIS search page only (intra-page; each page of a paginated search gets its own crate).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / sources / description
      Previous value: -"Restrict fan-out to these sources (default: all). Available: zenodo, datacite, omics, literature, huggingface, dataone, omicsdi"New value: +"Restrict fan-out to these sources (default: all). Available: zenodo, dataone, cellxgene, datacite, dandi, omics, literature, huggingface, omicsdi, openml, pdb, gwas"
    • addedInput schema / properties / tissue
      Added value: +{
      +  "description": "Optional tissue/anatomy name. Resolved via UBERON (EBI OLS); the query is expanded with the canonical term + exact synonyms (e.g. 'liver' also matches 'iecur'/'jecur'). The expansion is echoed in tissue_expansion.",
      +  "type": "string"
      +}
    • addedInput schema / properties / understand
      Added value: +{
      +  "default": false,
      +  "description": "Opt into LLM query understanding: a free-text query is rewritten into a keyword core + structured params (organism/disease/tissue/chemical/assay, kind, year) before fan-out; extracted entities are validated by the same ontology resolvers (a hallucinated entity that doesn't resolve is simply dropped), explicit params you pass always win, and the interpretation is echoed in query_understanding. Requires an LLM endpoint (LLM_API_BASE); with none configured the search runs unchanged and notes it in errors['understand'].",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / AssayExpansion
      Added value: +{
      +  "description": "Echo of EDAM assay-synonym expansion that fired for a search (transparency).",
      +  "properties": {
      +    "canonical_name": {
      +      "title": "Canonical Name",
      +      "type": "string"
      +    },
      +    "edam_id": {
      +      "title": "Edam Id",
      +      "type": "string"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "synonyms": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Synonyms",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "edam_id",
      +    "canonical_name",
      +    "synonyms"
      +  ],
      +  "title": "AssayExpansion",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ChemicalExpansion
      Added value: +{
      +  "description": "Echo of ChEBI chemical-synonym expansion that fired for a search (transparency).",
      +  "properties": {
      +    "canonical_name": {
      +      "title": "Canonical Name",
      +      "type": "string"
      +    },
      +    "chebi_id": {
      +      "title": "Chebi Id",
      +      "type": "string"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "synonyms": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Synonyms",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "chebi_id",
      +    "canonical_name",
      +    "synonyms"
      +  ],
      +  "title": "ChemicalExpansion",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / DataResource / properties / fair
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/FairAssessment"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / DataResource / properties / license_compat
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/LicenseVerdict"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / DataResource / properties / mirrors
      Added value: +{
      +  "items": {
      +    "$ref": "#/$defs/Mirror"
      +  },
      +  "title": "Mirrors",
      +  "type": "array"
      +}
    • addedOutput schema / $defs / DataResource / properties / provenance
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Provenance"
      +}
    • addedOutput schema / $defs / DataResource / properties / trust
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/TrustSignals"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / FairAssessment
      Added value: +{
      +  "description": "FAIRness assessment attached on resolve(fair=True). PURE-function output:\na 0–100 overall score plus 0–100 per-dimension sub-scores, grounded in the\nmachine-evaluable subset of the RDA FAIR Data Maturity Model. ``assessed`` is\nthe count of indicators actually evaluated (transparency — we never score what\nthe metadata can't show). ``gaps`` are failed-indicator reasons, each naming its\nRDA indicator id and framed as a metadata-exposure gap, not a value judgement.",
      +  "properties": {
      +    "accessible": {
      +      "title": "Accessible",
      +      "type": "integer"
      +    },
      +    "assessed": {
      +      "title": "Assessed",
      +      "type": "integer"
      +    },
      +    "findable": {
      +      "title": "Findable",
      +      "type": "integer"
      +    },
      +    "gaps": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Gaps",
      +      "type": "array"
      +    },
      +    "interoperable": {
      +      "title": "Interoperable",
      +      "type": "integer"
      +    },
      +    "reusable": {
      +      "title": "Reusable",
      +      "type": "integer"
      +    },
      +    "score": {
      +      "title": "Score",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "score",
      +    "findable",
      +    "accessible",
      +    "interoperable",
      +    "reusable",
      +    "assessed"
      +  ],
      +  "title": "FairAssessment",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / LicenseVerdict
      Added value: +{
      +  "description": "Licence-compatibility advisory attached on resolve(use=<intent>). PURE-function\noutput: an ALLOW / REVIEW / DENY verdict for an intended use of the resolved record,\ncomputed from a bundled licence matrix (choosealicense.com flag vocabulary) keyed on\nthe normalized SPDX id. ``spdx_id`` is None exactly when the licence was unrecognized\nor absent (→ REVIEW, never a fabricated ALLOW/DENY). ``reason`` names the governing\nclause; ``disclaimer`` states this is a metadata-derived advisory, not legal advice.",
      +  "properties": {
      +    "disclaimer": {
      +      "title": "Disclaimer",
      +      "type": "string"
      +    },
      +    "license_raw": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "License Raw"
      +    },
      +    "reason": {
      +      "title": "Reason",
      +      "type": "string"
      +    },
      +    "spdx_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Spdx Id"
      +    },
      +    "use": {
      +      "title": "Use",
      +      "type": "string"
      +    },
      +    "verdict": {
      +      "enum": [
      +        "ALLOW",
      +        "REVIEW",
      +        "DENY"
      +      ],
      +      "title": "Verdict",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "use",
      +    "verdict",
      +    "spdx_id",
      +    "license_raw",
      +    "reason",
      +    "disclaimer"
      +  ],
      +  "title": "LicenseVerdict",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / MeshExpansion
      Added value: +{
      +  "description": "Echo of MeSH-synonym expansion that fired for a search (transparency).",
      +  "properties": {
      +    "canonical_name": {
      +      "title": "Canonical Name",
      +      "type": "string"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "mesh_ui": {
      +      "title": "Mesh Ui",
      +      "type": "string"
      +    },
      +    "synonyms": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Synonyms",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "mesh_ui",
      +    "canonical_name",
      +    "synonyms"
      +  ],
      +  "title": "MeshExpansion",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Mirror
      Added value: +{
      +  "description": "A same-dataset copy folded into this record by content dedup (resolve the\nmirror's id to reach the original deposit). Only populated when a search ran\nwith the opt-in ``collapse_mirrors`` flag.",
      +  "properties": {
      +    "doi": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Doi"
      +    },
      +    "id": {
      +      "title": "Id",
      +      "type": "string"
      +    },
      +    "source": {
      +      "title": "Source",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "id"
      +  ],
      +  "title": "Mirror",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / QueryExpansion
      Added value: +{
      +  "description": "Transparency echo of A2.P2 multi-query recall expansion (search multi_query=true).\n\nWhen enabled and an LLM endpoint is configured, the LLM generates deliberately-diverse\nreformulations of the query; each variant is fanned out across all sources, and the\ndeduped union is re-ranked against the ORIGINAL query. ``variants`` lists the RAW variants\nactually fanned out, the original query first. Each variant received the same ontology\nexpansion (shown by the ``*_expansion`` echoes); results are the deduped union re-ranked\nagainst ``input``.",
      +  "properties": {
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "variants": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Variants",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "variants"
      +  ],
      +  "title": "QueryExpansion",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / QueryUnderstanding
      Added value: +{
      +  "description": "Echo of the LLM query-understanding rewrite that fired (transparency, A2.P1).\n\nThe LLM proposes; explicit caller params win; the ontology resolvers then VALIDATE the\nproposed entities. ``applied`` lists the fields the caller left None that were FED into\nthis search as parameters — for ontology entities (organism/disease/tissue/chemical/\nassay) this means \"passed to the resolver\", NOT \"resolved\": whether it actually expanded\nis shown by the corresponding ``*_expansion`` echo (None there ⇒ the entity did not\nresolve, and was never silently treated as a match). ``overridden`` lists fields the LLM\nproposed but the caller had set explicitly (so the LLM's value was ignored).",
      +  "properties": {
      +    "applied": {
      +      "additionalProperties": true,
      +      "title": "Applied",
      +      "type": "object"
      +    },
      +    "extracted": {
      +      "additionalProperties": true,
      +      "title": "Extracted",
      +      "type": "object"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "keyword_core": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Keyword Core"
      +    },
      +    "overridden": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Overridden",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "keyword_core"
      +  ],
      +  "title": "QueryUnderstanding",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / TissueExpansion
      Added value: +{
      +  "description": "Echo of UBERON tissue-synonym expansion that fired for a search (transparency).",
      +  "properties": {
      +    "canonical_name": {
      +      "title": "Canonical Name",
      +      "type": "string"
      +    },
      +    "input": {
      +      "title": "Input",
      +      "type": "string"
      +    },
      +    "synonyms": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Synonyms",
      +      "type": "array"
      +    },
      +    "uberon_id": {
      +      "title": "Uberon Id",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "input",
      +    "uberon_id",
      +    "canonical_name",
      +    "synonyms"
      +  ],
      +  "title": "TissueExpansion",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / TrustSignals
      Added value: +{
      +  "description": "Integrity/provenance signals attached on resolve(trust=True). All nullable:\nNone = not checked or not determinable (e.g. a DOI Crossref doesn't register) —\nNEVER a negative claim. A *found* Crossref work yields definitive booleans.",
      +  "properties": {
      +    "concern": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Concern"
      +    },
      +    "retracted": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Retracted"
      +    },
      +    "retraction_doi": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Retraction Doi"
      +    }
      +  },
      +  "title": "TrustSignals",
      +  "type": "object"
      +}
    • addedOutput schema / properties / assay_expansion
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/AssayExpansion"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / chemical_expansion
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/ChemicalExpansion"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / mesh_expansion
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/MeshExpansion"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / provenance_crate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Provenance Crate"
      +}
    • addedOutput schema / properties / query_expansion
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/QueryExpansion"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / query_understanding
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/QueryUnderstanding"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / tissue_expansion
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/TissueExpansion"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  6. Changed9 schema fields changedv0.20.0
    • changedInput schema / properties / sources / description
      Previous value: -"Restrict fan-out to these sources (default: all). Available: zenodo, datacite, omics, literature, huggingface"New value: +"Restrict fan-out to these sources (default: all). Available: zenodo, datacite, omics, literature, huggingface, dataone, omicsdi"
    • addedOutput schema / $defs / DataResource / properties / access_modes
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Access Modes",
      +  "type": "array"
      +}
    • addedOutput schema / $defs / DataResource / properties / croissant
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Croissant"
      +}
    • addedOutput schema / $defs / DataResource / properties / is_latest
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Is Latest"
      +}
    • addedOutput schema / $defs / DataResource / properties / last_updated
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Last Updated"
      +}
    • addedOutput schema / $defs / DataResource / properties / metrics
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Metrics"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / DataResource / properties / ro_crate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Ro Crate"
      +}
    • addedOutput schema / $defs / DataResource / properties / superseded_by
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Superseded By"
      +}
    • addedOutput schema / $defs / Metrics
      Added value: +{
      +  "description": "Usage/impact signals, each a separate axis — NO blended score. All\nnullable: a source that does not expose an axis leaves it None.",
      +  "properties": {
      +    "citations": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Citations"
      +    },
      +    "downloads": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Downloads"
      +    },
      +    "likes": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Likes"
      +    },
      +    "views": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Views"
      +    }
      +  },
      +  "title": "Metrics",
      +  "type": "object"
      +}
  7. Changed12 schema fields changedv0.16.0
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "Opaque pagination token from a prior search's next_cursor. When set, all other search params are read from the cursor.",
      +  "type": "string"
      +}
    • addedInput schema / properties / kind
      Added value: +{
      +  "description": "Keep only results of this kind.",
      +  "enum": [
      +    "dataset",
      +    "sequencing_run",
      +    "study",
      +    "publication",
      +    "software"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / published_after
      Added value: +{
      +  "description": "Keep results with year >= this.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / published_before
      Added value: +{
      +  "description": "Keep results with year <= this.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / rank
      Added value: +{
      +  "default": "relevance",
      +  "description": "Result ordering. 'relevance' (default) = upstream/merged order. 'semantic' re-ranks the fetched page by embedding similarity to the query (needs EMBEDDING_API_BASE; degrades to relevance order with an errors['semantic'] note if unconfigured). In semantic mode pagination is window-based (each page consumes its full fetched window).",
      +  "enum": [
      +    "relevance",
      +    "semantic"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / sources / description
      Previous value: -"Restrict fan-out to these sources (default: all). Available: zenodo, datacite, omics, literature"New value: +"Restrict fan-out to these sources (default: all). Available: zenodo, datacite, omics, literature, huggingface"
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
    • addedOutput schema / $defs / Creator
      Added value: +{
      +  "properties": {
      +    "name": {
      +      "title": "Name",
      +      "type": "string"
      +    },
      +    "orcid": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Orcid"
      +    }
      +  },
      +  "required": [
      +    "name"
      +  ],
      +  "title": "Creator",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / DataResource / properties / creators / items / $ref
      Added value: +"#/$defs/Creator"
    • removedOutput schema / $defs / DataResource / properties / creators / items / type
      Removed value: -"string"
    • addedOutput schema / $defs / DataResource / properties / funding
      Added value: +{
      +  "items": {
      +    "$ref": "#/$defs/FundingRef"
      +  },
      +  "title": "Funding",
      +  "type": "array"
      +}
    • addedOutput schema / $defs / FundingRef
      Added value: +{
      +  "properties": {
      +    "award": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Award"
      +    },
      +    "funder": {
      +      "title": "Funder",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "funder"
      +  ],
      +  "title": "FundingRef",
      +  "type": "object"
      +}
  8. First observedv0.11.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: fan-out across sources, error reporting, ontology expansions, fallback behavior when LLM endpoints are missing, and pagination details. No contradiction with readOnlyHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded, but somewhat lengthy. Every sentence adds value, but could be slightly more concise. Still, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all aspects: purpose, usage, parameters, edge cases, and output. Given the complexity (17 parameters, multiple source integrations), the description is thorough and leaves no major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value by explaining the semantic meaning of each parameter (e.g., how ontology expansions work, the effect of collapse_mirrors, and the interaction between rank and multi_query).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching across multiple public research archives for various data types. It lists specific sources and result kinds, distinguishing it from sibling tools like resolve and fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool (for searches) and when to use siblings (resolve for full records, fetch for downloads). Also explains usage of advanced parameters like collapse_mirrors, understand, and multi_query with conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools