nucleotide_archive_mcp
Allows finding RNA sequencing datasets associated with PubMed publications, retrieving PubMed IDs in study metadata, and discovering datasets linked to a specific PubMed ID.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nucleotide_archive_mcp find human cancer bulk RNA-seq datasets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RNA Dataset Search - MCP Server
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
search_rna_studies - Unified search with preset filters or advanced library strategy/source filtering
list_library_types - List all 50+ available library strategies and sources
get_study_details - Get comprehensive metadata for a specific study (includes PubMed IDs)
find_studies_by_publication - Find studies associated with a PubMed ID
search_studies_by_keywords - Flexible keyword search across study titles
Download & Access
get_download_urls - Get FTP download URLs for all data files in a study
generate_download_script - Generate bash scripts (wget/curl) for downloading data
Advanced
get_available_fields - Discover searchable and returnable fields for different data types
get_result_types - List all available data types in ENA
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_mcpOr from a Git repository:
uvx git+https://github.com/biocontext-ai/nucleotide_archive_mcp.git@main2. 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_mcp4. Install the latest development version:
pip install git+https://github.com/biocontext-ai/nucleotide_archive_mcp.git@mainConfiguration
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, CRITICALThese 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:
Direct URL:
https://www.ebi.ac.uk/ena/browser/view/<accession>
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 toolsbuild_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
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
MCP gateway federating 22 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
Related MCP Servers
- AlicenseCqualityDmaintenanceAn MCP server that enables single-cell RNA sequencing analysis through natural language, supporting data processing, visualization, and analysis tasks without requiring coding knowledge.5212BSD 3-Clause
- AlicenseNot gradedqualityDmaintenanceAn 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.16BSD 3-Clause
- AlicenseAqualityBmaintenanceAn MCP server that enables querying rare-disease data from Orphanet, including disease nomenclature, cross-references, classifications, gene associations, HPO phenotypes, epidemiology, and natural history.19MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for clinical and pharmaceutical data, enabling search of ClinicalTrials.gov, PubMed, FDA, and ICH guidelines without API keys.39 npmMIT