@pipeworx/ena
Connect: https://gateway.pipeworx.io/ena/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 3
The European Nucleotide Archive (EMBL-EBI) — the public record of raw sequencing runs, assemblies and annotated sequence, searchable by organism, study, platform, collection country or date, with FASTQ/BAM download URLs and checksums for every run.
Tools
ena_search(result?, query?, fields?, sortFields?, limit?)— search any ENA result type with ENA’s own query grammar (tax_eq(2697049),tax_tree(9606) AND library_strategy="WGS",country="Kenya"). Answers “what public sequencing data exists for this organism / disease / place”.ena_filereport(accession, result?, fields?, limit?)— every data file behind a study, run, sample or experiment accession, with direct download URLs, byte sizes and MD5s. Answers “where do I get the reads”.ena_results_types(result?)— the schema-discovery step: every searchable result type with its live record count, and for one named type, every field it accepts. Call this before composing a query.
Auth
Keyless. No registration step.
Data sources
- https://www.ebi.ac.uk/ena/portal/api/search — typed search over result types.
- https://www.ebi.ac.uk/ena/portal/api/filereport — per-accession file listing.
- https://www.ebi.ac.uk/ena/portal/api/results — result types + live counts.
- https://www.ebi.ac.uk/ena/portal/api/returnFields — fields per result type.
Things that cost time to rediscover (measured 2026-09-17)
format=jsonis not the default. Without it you get TSV, which downstream reads as a single malformed string rather than as an error.limit=0means UNLIMITED, the opposite of the usual convention. Onread_runthat is tens of millions of rows. This pack never sends 0.- Numeric columns are strings on the wire (
"read_count":"4547927"). - A search with no
fieldsreturns the accession column alone — a valid-looking, useless answer. The pack sends a default field set per result type. filereportrejects a mismatched accession with HTTP 200 and a{"message": ...}body naming the accepted regexes. We raise that message; returning an empty list would read as “this study has no runs”.
Tools
- ena_search — Search the European Nucleotide Archive for sequencing runs, studies, samples, assemblies or annotated sequence using ENA’s own query grammar. AUTHORITATIVE for “which public sequencing data exists for
- ena_filereport — List every sequencing data file behind an ENA accession, with direct FASTQ/BAM/CRAM download URLs, byte sizes and MD5 checksums. AUTHORITATIVE for “where do I actually download the reads for this stud
- ena_results_types — List every ENA result type you can search — with its live record count and last-updated date — and, for one named result type, every field you may query or return. This is the schema-discovery step fo
Tools
ena_filereport— List every sequencing data file behind an ENA accession, with direct FASTQ/BAM/CRAM download URLs, byte sizes and MD5 checksums. AUTHORITATIVE for where do I actually download the reads for this studyena_results_types— List every ENA result type you can search — with its live record count and last-updated date — and, for one named result type, every field you may query or return. This is the schema-discovery step foena_search— Search the European Nucleotide Archive for sequencing runs, studies, samples, assemblies or annotated sequence using ENA's own query grammar. AUTHORITATIVE for which public sequencing data exists for