Skip to main content
Glama
nucleotide_archive_mcp

nucleotide_archive_mcp

RNA Dataset Search - MCP Server

BioContextAI - Registry Tests Documentation

A Model Context Protocol (MCP) server for searching and accessing RNA sequencing datasets from the European Nucleotide Archive (ENA). Find publicly available bulk RNA-seq and single-cell RNA-seq datasets to validate research hypotheses or reproduce published analyses.

Optimized for: Human and mouse disease-related RNA-seq studies with support for bulk, single-cell, and spatial transcriptomics.

Features

  • Disease-Focused Search: Find datasets by disease, organism, and tissue type

  • Advanced Technology Filtering:

    • Simple presets: bulk, single-cell, small-rna, ribo-seq, rna-all

    • Granular control: Filter by 50+ library strategies (RNA-Seq, miRNA-Seq, ChIP-Seq, ATAC-seq, etc.)

    • Source filtering: TRANSCRIPTOMIC, GENOMIC, METAGENOMIC, etc.

  • Common Organism Names: Use "human", "mouse", "rat" instead of scientific names

  • Download Support: Generate wget/curl scripts for downloading FASTQ files

  • Study Metadata: Retrieve comprehensive metadata including PubMed IDs

  • Publication Links: Discover datasets associated with PubMed publications

  • Flexible Queries: Build custom queries with multiple field conditions

  • Field Discovery: Explore available search and return fields

  • Environment Configuration: Customize API endpoints, timeouts, and logging via environment variables

Related MCP server: SCMCP

Available Tools

The MCP server provides 10 specialized tools:

Search & Discovery

  1. search_rna_studies - Unified search with preset filters or advanced library strategy/source filtering

  2. list_library_types - List all 50+ available library strategies and sources

  3. get_study_details - Get comprehensive metadata for a specific study (includes PubMed IDs)

  4. find_studies_by_publication - Find studies associated with a PubMed ID

  5. search_studies_by_keywords - Flexible keyword search across study titles

Download & Access

  1. get_download_urls - Get FTP download URLs for all data files in a study

  2. generate_download_script - Generate bash scripts (wget/curl) for downloading data

Advanced

  1. get_available_fields - Discover searchable and returnable fields for different data types

  2. get_result_types - List all available data types in ENA

  3. build_custom_query - Construct advanced queries with multiple field conditions

Example Use Cases

Simple Searches (Preset Filters)

  • Find human cancer bulk RNA-seq datasets: disease="cancer"

  • Search for single-cell RNA-seq in mouse brain: organism="mouse", tissue="brain", technology="single-cell"

  • Find small RNA sequencing studies: technology="small-rna"

  • Ribosome profiling experiments: technology="ribo-seq"

Advanced Searches (Specific Library Types)

  • ChIP-Seq chromatin studies: library_strategies=["ChIP-Seq"]

  • ATAC-seq accessibility data: library_strategies=["ATAC-seq"]

  • Combined small RNA types: library_strategies=["miRNA-Seq", "ncRNA-Seq"]

  • Any single-cell data: library_sources=["TRANSCRIPTOMIC SINGLE CELL"]

  • Metagenomic RNA: library_sources=["METATRANSCRIPTOMIC"]

Workflow Examples

  • Download FASTQ files from a specific study

  • Discover datasets from a specific publication

  • Generate download scripts with MD5 verification

  • List all available sequencing technologies: list_library_types()

Getting started

Please refer to the documentation, in particular, the API documentation.

You can also find the project on BioContextAI, the community-hub for biomedical MCP servers: nucleotide_archive_mcp on BioContextAI.

Installation

You need to have Python 3.11 or newer installed on your system. If you don't have Python installed, we recommend installing uv.

There are several alternative options to install nucleotide_archive_mcp:

1. Use uvx to run it immediately

After publication to PyPI:

uvx nucleotide_archive_mcp

Or from a Git repository:

uvx git+https://github.com/biocontext-ai/nucleotide_archive_mcp.git@main

2. Include it in one of various clients that supports the mcp.json standard

If your MCP server is published to PyPI, use the following configuration:

{
  "mcpServers": {
    "nucleotide_archive_mcp": {
      "command": "uvx",
      "args": ["nucleotide_archive_mcp"]
    }
  }
}

In case the MCP server is not yet published to PyPI, use this configuration:

{
  "mcpServers": {
    "nucleotide_archive_mcp": {
      "command": "uvx",
      "args": ["git+https://github.com/biocontext-ai/nucleotide_archive_mcp.git@main"]
    }
  }
}

For purely local development (e.g., in Cursor or VS Code), use the following configuration:

{
  "mcpServers": {
    "nucleotide_archive_mcp": {
      "command": "uvx",
      "args": [
        "--refresh",
        "--from",
        "path/to/repository",
        "nucleotide_archive_mcp"
      ]
    }
  }
}

If you want to reuse and existing environment for local development, use the following configuration:

{
  "mcpServers": {
    "nucleotide_archive_mcp": {
      "command": "uv",
      "args": ["run", "--directory", "path/to/repository", "nucleotide_archive_mcp"]
    }
  }
}

3. Install it through pip:

pip install --user nucleotide_archive_mcp

4. Install the latest development version:

pip install git+https://github.com/biocontext-ai/nucleotide_archive_mcp.git@main

Configuration

The server can be configured via environment variables. Copy .env.example to .env and customize:

# ENA API Configuration
ENA_PORTAL_API_BASE=https://www.ebi.ac.uk/ena/portal/api  # Override API base URL
ENA_BROWSER_API_BASE=https://www.ebi.ac.uk/ena/browser/api
ENA_TIMEOUT=30.0                # Request timeout in seconds
ENA_SEARCH_LIMIT=20            # Default search result limit
ENA_MAX_RPS=10.0               # Rate limiting (requests per second)

# Logging
LOG_LEVEL=INFO                 # DEBUG, INFO, WARNING, ERROR, CRITICAL

These settings allow you to:

  • Use custom or mirror ENA API endpoints

  • Adjust timeouts for slow connections

  • Control default result limits

  • Configure rate limiting for large batch operations

  • Set logging verbosity for debugging

Data Citation and Attribution

When using data from ENA in publications, please cite the data appropriately:

How to Cite ENA Data

The top-level Project accession should be cited along with a link to the data in the ENA browser:

"The data for this study have been deposited in the European Nucleotide Archive (ENA) at EMBL-EBI under accession number PRJEBxxxx (https://www.ebi.ac.uk/ena/browser/view/PRJEBxxxx)."

Replace PRJEBxxxx with the actual study accession number from your search results.

Accessing Data in ENA Browser

All accessions can be viewed in the ENA browser:

ORCID Data Claiming

ENA studies can be claimed against your ORCID ID through the EBI Search interface. Search for your projects and click "Claim to ORCID" to link them to your ORCID profile.

Data Policy and Usage

ENA/INSDC Data Policy

This tool accesses data from the European Nucleotide Archive (ENA), which is part of the International Nucleotide Sequence Database Collaboration (INSDC) with DDBJ and GenBank.

Key Points:

  • Open Access: All data in ENA/INSDC databases are freely and publicly accessible

  • No Restrictions: Data have no use restrictions or licensing requirements

  • Redistribution: Free redistribution and use of data is permitted

  • Permanence: All submitted records remain permanently accessible

  • Attribution: Proper citation of original submissions is expected (see above)

Data Availability

Data in ENA can be:

  • Public: Freely accessible through this tool and ENA browser

  • Confidential: Pre-publication data not yet publicly available (not searchable through this tool)

Released data should be cited appropriately in publications and claimed via ORCID where applicable.

Data Standards

ENA promotes data harmonization through:

  • Sample Checklists: Minimum information standards for different data types

  • MIxS Standards: Genomic Standards Consortium (GSC) minimum information standards

  • Community Standards: Research community-developed reporting standards

For more information, see the ENA Data Standards documentation.

Disclaimer

This tool provides access to data from the European Nucleotide Archive (ENA) at EMBL-EBI. The tool is:

  • Independent: Not officially affiliated with or endorsed by ENA, EMBL-EBI, or INSDC

  • Quality: Data quality and accuracy are the responsibility of the original submitters

  • Updates: ENA data and APIs may change; this tool is maintained to reflect current ENA services

  • Support: For issues with ENA data or services, contact ENA Support

The European Nucleotide Archive is developed and maintained at EMBL-EBI under the guidance of the INSDC International Advisory Committee.

Contact

If you found a bug with this MCP server, please use the issue tracker.

For questions about ENA data or services, contact ENA Support.

Acknowledgments

This tool accesses data from:

  • European Nucleotide Archive (ENA) at EMBL-EBI

  • International Nucleotide Sequence Database Collaboration (INSDC)

Special thanks to the ENA team for maintaining the public API and comprehensive documentation.

Available Tools

11 tools
build_custom_queryA

Build a custom ENA query from field conditions.

Usage Tips

Advanced tool for constructing complex queries by combining multiple field conditions with logical operators. Use for precise filtering beyond what search_rna_studies() offers. Call get_available_fields() first to discover searchable field names.

Returns

dict Dictionary containing: - query: The constructed ENA query string - field_count: Number of conditions used - operator: Logical operator used - example_usage: How to use this query with other tools - error: Error message if any

Inputs: field_conditions (required), operator. Returns: object

find_studies_by_publicationA

Find ENA studies by PubMed ID (API limitation - returns error with workaround).

Usage Tips

ENA Portal API doesn't expose pubmed_id as a searchable field. This tool documents the limitation for LLM awareness. Instead: use search_studies_by_keywords() with publication terms, then call get_study_details() to check the publications array for matching PubMed IDs.

Returns

dict Dictionary containing: - error: API limitation message with recommended workflow - pubmed_id: Provided PubMed ID - count: Always 0 - studies: Always empty list

Inputs: pubmed_id (required). Returns: object

generate_download_scriptA

Generate executable bash script to download all study data files.

Usage Tips

After identifying interesting studies, generate a download script for the user to execute. Returns script content and optionally saves to file. Script includes MD5 verification commands. Typical workflow: search_rna_studies() → get_study_details() → generate_download_script().

Returns

dict Dictionary containing: - study_accession: Queried study - script_content: Complete bash script ready to execute - file_count: Number of files the script will download - total_size_gb: Total download size in GB - script_path: Save location (if output_path provided) - message: Success message (if saved to file) - error: Error message if any

Inputs: study_accession (required), output_path, script_type, file_format. Returns: object

get_available_fieldsA

Get available search and return fields for an ENA result type.

Usage Tips

Use to discover what fields you can search on and what metadata fields are available for a given data type in ENA. Helpful for building custom queries with build_custom_query().

Returns

dict Dictionary containing: - result_type: The queried result type - search_fields: List of searchable fields with id, description, type (if requested) - search_fields_count: Number of search fields (if requested) - return_fields: List of returnable fields with id, description, type (if requested) - return_fields_count: Number of return fields (if requested) - error: Error message if any

Inputs: result_type, field_category. Returns: object

get_download_urlsA

Get FTP download URLs for all sequencing data files in a study.

Usage Tips

Call after search_rna_studies() to get download URLs for selected studies. Returns FTP URLs that can be used with wget/curl or passed to generate_download_script().

Returns

dict Dictionary containing: - study_accession: Queried study - file_count: Total number of files - total_size_gb: Total download size in GB - runs: List of per-run file info, each with: - run_accession: Run identifier - file_count: Files in this run (2 for paired-end) - size_gb: Run size in GB - urls: List of FTP URLs (ftp://...) - md5_checksums: List of MD5 hashes (if include_md5=True) - message: Info message if no files found - error: Error message if any

Inputs: study_accession (required), file_format, include_md5. Returns: object

get_result_typesA

Get all available result types (data categories) in ENA.

Usage Tips

Use to discover what types of data you can search for in the European Nucleotide Archive. Most users will use read_study or study for RNA-seq searches.

Returns

dict Dictionary containing: - count: Number of available result types - result_types: List of result types with id, description, primaryAccessionType, recordCount, lastUpdated - recommended_for_rna_studies: Recommended types for RNA studies - error: Error message if any

Inputs: no named parameters. Returns: object

get_study_detailsA

Get comprehensive metadata for a specific ENA study including publications.

Usage Tips

Call after search_rna_studies() to verify a study matches your research needs before downloading. Returns detailed study description, publication links, and institutional metadata. Use this to check publications array for PubMed IDs.

Returns

dict Dictionary containing: - accession: Study accession - title: Brief study title - description: Detailed study description (full abstract/methods) - publications: List of publications with pubmed_id and source - center_name: Submitting institution - alias: Submitter's study name (often GSE accession for GEO) - data_type: Usually "STUDY" - status: "public" or "private" - first_public: Date made public (YYYY-MM-DD) - last_updated: Last modification date (YYYY-MM-DD) - file_report_links: Direct API links for file reports - error: Error message if study not found or if request fails

Inputs: study_accession (required). Returns: object

get_study_publicationsA

Get detailed publication information for a study from ENA and Europe PMC.

Usage Tips

Call after search_rna_studies() to get full publication metadata including author ORCID IDs, affiliations, citation counts, and full-text links. Enriches basic publication info from get_study_details() with complete bibliographic data from Europe PMC.

Returns

dict Dictionary containing: - accession: Study accession - publication_count: Number of publications found - publications: List of detailed publication objects, each with: - pubmed_id: PubMed ID - pmcid: PubMed Central ID (if available) - doi: Digital Object Identifier (if available) - title: Publication title - authors: List of author names - first_author: First author name - last_author: Last author name - author_details: Detailed author info with ORCID and affiliations - journal: Journal name - journal_issn: Journal ISSN - publication_year: Year published - publication_date: Full publication date - abstract: Publication abstract - citation_count: Times cited - is_open_access: Whether open access - in_epmc: Whether in Europe PMC - in_pmc: Whether in PubMed Central - has_pdf: Whether PDF available - full_text_urls: Available full text links - error: Error message if any

Inputs: study_accession (required). Returns: object

list_library_typesA

List all available library strategies and sources for ENA searches.

Usage Tips

Use to discover available library types for filtering in search_rna_studies(). Returns all controlled vocabulary values for library_strategy and library_source. Call this before using the advanced library_strategies or library_sources parameters in search_rna_studies().

Returns

dict Dictionary with keys: - library_strategies: List of all strategies with "value" and "name" - library_sources: List of all sources with "value" and "name" - rna_strategies: Filtered list of RNA-related strategies only - summary: Counts of available options - usage_hint: How to use values in search_rna_studies()

Inputs: no named parameters. Returns: object

search_rna_studiesA

Search for RNA sequencing studies by disease, tissue, and organism.

When to use this tool: Primary search tool for finding RNA-seq datasets when you know the disease/condition OR tissue/cell-type you're interested in. Use search_studies_by_keywords() for broader searches by biological processes or methodology.

Default behavior: Searches across ALL organisms unless you specify one. This helps find relevant datasets across multiple species (human, mouse, rat, etc.).

Search tips:

  • Try different keyword variations if no results (e.g., "ALS" vs "amyotrophic lateral sclerosis")

  • Try broader terms (e.g., "neurodegeneration" instead of specific disease)

  • Search all organisms first (organism=None), then filter to specific species if needed

  • Use tissue parameter to narrow results to specific anatomical sites

Returns

dict Search results containing: - count: How many total studies match your search - returned: How many studies are in this response - studies: List of matching studies with titles, sample counts, and publication info - query_used: The exact search query that was executed - filters: What filters were applied to your search

Inputs: disease, organism, technology, tissue, +3 more. Returns: object

search_studies_by_keywordsA

Search for studies using flexible keyword matching across titles and descriptions.

When to use this tool: Use this for broad exploratory searches when search_rna_studies() is too restrictive. Good for:

  • Searching by biological processes, pathways, or molecular mechanisms

  • Finding studies about specific genes, proteins, or complexes

  • Searching by methodology when you don't know the specific disease

  • General exploratory searches across many study types

Important notes:

  • Searches both study-level titles AND sample-level descriptions

  • Multi-word keywords are split: "breast cancer" searches for "breast" AND "cancer"

  • May return studies where only one sample mentions your keywords

  • Results can be broader than search_rna_studies() disease/tissue filters

Search tips:

  • Try keyword variations and abbreviations if no results (e.g., "immune response" vs "immunity")

  • Try broader or narrower terms (e.g., "transcription" vs "transcription factor binding")

  • Consider searching multiple organisms if limited results in one species

  • Use organism filter to narrow down results to specific species

Returns

dict Search results containing: - count: How many total studies match - returned: How many studies in this response - keywords_used: What keywords were searched - organism_filter: What organism filter was applied (if any) - studies: List of matching studies with accession, title, organism, and other metadata

Inputs: keywords (required), include_title, include_description, organism, +1 more. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 11 tools

    Disambiguation4/5

    Tools are mostly distinct, with some overlap between metadata retrieval tools like get_available_fields and list_library_types, and between get_study_details and get_study_publications. However, clear descriptions clarify when to use each, reducing ambiguity.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., search_rna_studies, get_study_details). Deviations like find_studies_by_publication still follow a predictable verb_noun_by_phrase structure.

    Tool Count5/5

    With 11 tools, the set is well-scoped for accessing the European Nucleotide Archive. Each tool serves a distinct purpose in the workflow: discovery, search, metadata retrieval, and download.

    Completeness4/5

    The tools cover the essential workflow from discovery to download. Minor gaps exist, such as the absence of direct date-based search and the find_studies_by_publication tool being a documented dead end, but these are acceptable for a read-only archive interface.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      D
      maintenance
      An MCP server that enables single-cell RNA sequencing analysis through natural language, supporting data processing, visualization, and analysis tasks without requiring coding knowledge.
      52
      12
      BSD 3-Clause
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables scRNA-Seq analysis through natural language, providing tools for data preprocessing, clustering, and biological visualization. It supports both predefined function execution and a flexible code mode powered by a Jupyter backend for automated single-cell transcriptomics workflows.
      16
      BSD 3-Clause
    • A
      license
      A
      quality
      B
      maintenance
      An MCP server that enables querying rare-disease data from Orphanet, including disease nomenclature, cross-references, classifications, gene associations, HPO phenotypes, epidemiology, and natural history.
      19
      MIT