Plant Genomics

io.github.musharnaPublished by GitHub account musharnav1.30.0Updated Nov 3, 2026

Plant genomics MCP — 58 tools across 24 backends with cross-source synthesis.

Overview

AI-generated overview

Local MCP server giving assistants 58 read-only tools to look up plant genes across 24 free public genomics databases.

What you can do
  • Look up gene records, cross-references and sequences from Ensembl Plants, Phytozome, TAIR/BAR and MaizeGDB, including maize v4-to-v5 ID translation
  • Resolve loci to UniProt, map IDs, and fetch InterPro domains, PANTHER families, AlphaFold models and experimental PDB structures
  • Retrieve GO, Plant Ontology, GeneRIF, KEGG and PlantCyc annotations, run GO/KEGG enrichment on gene lists, and search Europe PMC literature
  • Fetch interaction partners, co-expression and expression data, homologs, paralogs, ortholog groups and gene-tree members
  • Annotate variants and GWAS hits, query genomic regions and assemblies, and run batch lookups plus cross-source synthesis reports
When to use it
Useful when an assistant must answer plant biology questions from authoritative databases rather than web search: gene function dossiers, ortholog and family comparisons, variant and GWAS interpretation, or enrichment analysis of gene lists. It is aimed at Arabidopsis and 11 other curated plants, with other species reachable by organism name.
Requirements
Runs locally over stdio as a PyPI package (uvx or pipx), a Docker image, or from source with Python. The default stdio mode needs no configuration or API keys. The optional HTTP mode requires PLANT_GENOMICS_MCP_HTTP_TOKEN of at least 32 characters, and BLAST use expects PLANT_GENOMICS_MCP_NCBI_EMAIL. Network access to the public databases is required.
Before you install
Tools are documented as read-only, but queries go to third-party services, so locus identifiers and gene lists are sent to those databases. The HTTP transport has no public endpoint and must be run behind your own bearer token. BLAST calls without PLANT_GENOMICS_MCP_NCBI_EMAIL may be throttled by NCBI. Answers reflect upstream database content, which the server does not verify.

Installation

In SourceWeft

  1. Open Plant Genomics in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

plant-genomics-mcp

plant-genomics-mcp is an MCP server that lets AI agents look up plant genes in 24 free public databases, from Ensembl Plants and UniProt to KEGG, STRING and AlphaFold, with curated coverage of 12 plants.

[CI] [PyPI] [Python] [License] [DOI] [Glama]

[Claude Code (Opus 5.5) with plant-genomics-mcp 1.29.1 answering a prompt about Arabidopsis NAC001 (AT1G01010): the Ensembl Plants record (Chr 1:3,631-5,899, protein_coding) and UniProtKB entry Q0WV96 (NAC1_ARATH, reviewed, 429 aa). Real output, trimmed]

Install

bash
# uv fetches and runs it on demandclaude mcp add plant-genomics --scope local -- uvx plant-genomics-mcp
Other install paths (pipx, Docker, from source)
bash
# pipx — installs the CLI onto your PATHpipx install plant-genomics-mcpclaude mcp add plant-genomics --scope local -- plant-genomics-mcp
# GHCR Docker imagedocker pull ghcr.io/musharna/plant-genomics-mcp:latestclaude mcp add plant-genomics --scope local -- \  docker run --rm -i ghcr.io/musharna/plant-genomics-mcp:latest
# From sourcegit clone https://github.com/musharna/plant-genomics-mcp.gitcd plant-genomics-mcppython -m venv .venv && .venv/bin/pip install -e .claude mcp add plant-genomics --scope local -- "$(pwd)/.venv/bin/plant-genomics-mcp"

Try it

Ask in plain language; the client picks the tools:

"Tell me everything about the Arabidopsis gene AT1G01010 — its function, GO terms, KEGG pathways, protein-interaction partners, and recent papers."

For another species, name it or pass organism= (e.g. rice Os01g0100100, oryza_sativa). A recorded ortholog run, where Claude checked three sources and said which one does not back the rice match:

[Claude Code (Opus 5.5) after 6 plant-genomics-mcp calls: AT1G01010's rice ortholog is Os07g0683200 (Gramene v69 ortholog_one2many, the only rice member of Ensembl gene tree EPlGT01160000455820); no maize ortholog in either; OrthoDB's NAC group has no rice or maize member, so it does not back the rice match]

Prompts and full answers for both screenshots: examples/assets/cards/RUN.md.

A worked 64-call run over 114 genes in three organisms, with the 51 gaps it logged (39 since closed), is in examples/arf_family/PAGE.md. Per-tool walkthroughs, including the one-call gene dossier gene_report_AT1G01010.md, are in examples/.

What the benchmark shows

Claude with the server was compared with Claude using web search. On 36 multi-step gene questions, 3 runs each, Haiku 5.5 got 31 right in every run with the server and 9 with web search: a pre-registered win (Holm-adjusted McNemar p = 2.1e-5), at 0.07 times the cost. Sonnet 5.5 tied (35 and 35; 0.65× the time, 1.49× the cost). With Opus 5.5 (the re-run 2026-10-18) both got all 108 right; the server was faster at the median (0.77×, 95% CI 0.64 to 0.96) and dearer (1.72×, 1.46 to 2.24). On a harder task, 25 maize v4 gene IDs to v5 genes and every UniProt accession (10 held-out questions, Sonnet 5.5), the server got 10 right and web search 0, declining each (sign test p = 0.002; results).

[Stacked bar chart of right, wrong and declined answers, 156 per setup. Claude alone: 36 right, 3 wrong, 117 declined. Claude with web search: 151 right, 4 wrong, 1 declined. Claude with plant-genomics-mcp: 156 right. Two no-model baselines: one constant answer per kind of question, 3 of 52 right; chromosome read from the gene ID, 0 of 12 right]

The chart: Opus 5.5 on 52 plant gene-lookup questions, 151 of 156 right with web search and 156 of 156 with the server, not separated (McNemar p = 0.125). The key comes from the databases the server reads, so this tests the lookups, not whether the databases are right. We wrote the questions; an outside re-run is welcome. Method; Haiku and Sonnet.

Tools

58 tools across 24 backends:

AreaTools
Gene recordsensembl_plants_lookup_locus, phytozome_lookup_locus, get_gene_xrefs, bar_gene_summary, tair_locus_info, maize_gene_model_translation
Sequenceget_sequence, blast_sequence
Protein and structureresolve_locus_to_uniprot, uniprot_id_mapping, interpro_domains, alphafold_structure, experimental_structures
Functionlocus_go_annotations, locus_plant_ontology, locus_gene_rifs, go_enrichment, locus_literature
Pathwayskegg_pathways, plantcyc_locus_info
Interactions and expressionstring_interactions, experimental_interactions, bar_aiv_interactions, atted_coexpression, bar_efp_expression
Homology and familiesgramene_homologs, ensembl_plants_paralogs, orthodb_orthologs, panther_family, gene_tree_members, entry_members
TF motifstf_binding_motifs, jaspar_motif
Variationlocus_variants, vep_annotate, aragwas_associations, arabidopsis_natural_variation
Regions and assembliesensembl_region_query, ensembl_plants_assembly
Provenanceupstream_release
Batch and synthesisbatch_* (12), batch_locus_call, *_synth (3), consensus_homologs, gene_report

Most take a locus (e.g. AT1G01010) and an optional organism=. Every tool is marked read-only. What each tool does, the list of backends, the MCP resources and prompts, all environment variables and the error model: docs/reference.md.

Configuration

stdio (plant-genomics-mcp, the default) needs no configuration. plant-genomics-mcp-http serves streamable HTTP at http://host:port/mcp; there is no public endpoint, so you run it yourself, behind your own token.

VariableWhenEffect
PLANT_GENOMICS_MCP_HTTP_TOKENHTTP transport onlyBearer token for /mcp; must be ≥32 chars or the HTTP server aborts at startup. Generate openssl rand -hex 32.
PLANT_GENOMICS_MCP_NCBI_EMAILIf you use BLASTNCBI etiquette contact. Unset → placeholder + per-call warning; NCBI may throttle.

Development

bash
.venv/bin/pip install -e '.[dev]'                         # or: uv sync --extra dev.venv/bin/pytest -q                                       # unit testsPLANT_GENOMICS_MCP_LIVE=1 .venv/bin/pytest -q             # adds live network probesPLANT_GENOMICS_MCP_STDIO_SMOKE=1 .venv/bin/pytest -q      # adds stdio smoke.venv/bin/ruff check .

A bare uv sync omits the test dependencies. CI runs the unit suite and the stdio smoke on Python 3.11–3.14 with the network blocked. A weekly job checks 27 loci against a frozen snapshot and pages on drift (docs/benchmarking.md). Setup: CONTRIBUTING.md. Release notes: CHANGELOG.md.

License

MIT, see LICENSE. The underlying services (Ensembl Plants, Phytozome, TAIR, PlantCyc, BAR) have their own terms of use; check them before bulk querying.

Source: README.md at commit 20593d4

Tools

58

ensembl_plants_lookup_locus

Ensembl Plants: Locus Metadata

Fetch metadata for a plant locus identifier from Ensembl Plants. Defaults to arabidopsis_thaliana; pass organism= for other plant species (oryza_sativa, zea_mays, ...). Locus is the TAIR-style identifier (e.g. AT1G01010 for Arabidopsis NAC001).

Parameterslocusrequiredorganism

get_gene_xrefs

Gene Cross-References

Fetch cross-database references (UniProt, NCBI Gene, TAIR, ArrayExpress, …) for a plant locus from Ensembl Plants. Defaults to arabidopsis_thaliana; pass organism= for other Ensembl Plants species. Returns count + raw xref list + a by_db rollup keyed on Ensembl's dbname (e.g. 'Uniprot_gn', 'EntrezGene') for fast lookup of a single foreign identifier.

Parameterslocusrequiredorganism

get_sequence

Gene / CDS / Protein Sequence

Fetch a locus's sequence from Ensembl Plants. seq_type is one of genomic / cds / cdna / protein (default protein — the canonical-transcript product). Closes the lookup → fetch → BLAST loop: feed the returned `sequence` straight to blast_sequence (protein for blastp, cds/cdna for blastn). Defaults to arabidopsis_thaliana; pass organism= for other plant species.

Parameterslocusrequiredorganismseq_type

ensembl_region_query

Genomic Region → Features

List features overlapping a genomic interval via Ensembl Plants /overlap/region. region is the seq-region name (chromosome / contig, e.g. '1'); start and end are 1-based inclusive. feature is one of gene / transcript / cds / exon (default gene). Answers 'what genes are in this QTL interval / assembly window' without a per-locus lookup. Ensembl caps the span — oversized regions error. ensembl_plants_assembly lists an organism's region names and their lengths; a region outside that list, or a start past its length, is an error here. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parametersendrequiredstartrequiredregionrequiredfeatureorganism

phytozome_lookup_locus

Phytozome: Locus Metadata

Fetch a gene record from Phytozome BioMart (phytozome-next.jgi.doe.gov). Defaults to arabidopsis_thaliana; pass organism= for other Phytozome proteomes (slug, scientific/common name, or NCBI taxid — e.g. glycine_max, sorghum_bicolor). Locus is the source-genome gene name (e.g. AT1G01010, Glyma.01G000100). Returns organism_name, gene_name, chromosome, gene_start, gene_end, strand, description.

Parameterslocusrequiredorganism

resolve_locus_to_uniprot

Resolve Locus → UniProt

Resolve a plant locus to its canonical UniProtKB record. Prefers reviewed (Swiss-Prot) entries; falls back to unreviewed (TrEMBL) when no curated record exists (common for non-Arabidopsis plants). organism accepts a canonical slug, scientific/common name, or NCBI taxid (default arabidopsis_thaliana; e.g. oryza_sativa, zea_mays). A gene symbol answers only when it names one locus; a symbol shared by several loci (ARF1) is InvalidArguments listing them. Returns primaryAccession, uniProtkbId, entryType, recommendedName, geneNames, organism, taxonId, sequenceLength, web_url (a link for the client to open; no tool on this server retrieves it). This is the protein-side entry point — pair with InterPro / AlphaFold / Reactome / structural-bio tools.

Parameterslocusrequiredorganism

uniprot_id_mapping

UniProt: ID Mapping (batch, every entry)

Map a batch of gene, transcript or protein IDs to EVERY UniProtKB entry UniProt's own ID mapping service returns, one job for the whole batch. Use it when a question asks for all accessions, or for many IDs at once: resolve_locus_to_uniprot returns one entry per locus (its best search hit), so a gene with several entries loses the rest. from_db names the IDs' source as UniProt does: Ensembl_Genomes for plant gene IDs such as maize Zm00001eb, rice Os01g, wheat TraesCS (the default), Ensembl_Genomes_Transcript, Ensembl_Genomes_Protein, or Araport for Arabidopsis AGIs. Each ID comes back mapped (accessions, each with entry_type and reviewed) or unmapped (UniProt lists it as failed: it maps to no entry). Up to 500 IDs per call; duplicates are collapsed. upstream_version is the UniProt release. Maize RefGen_v4 IDs (Zm00001d) are not in UniProt: translate them first with maize_gene_model_translation.

Parametersidsrequiredfrom_db

maize_gene_model_translation

MaizeGDB: B73 v4 ↔ v5 Gene-Model Translation

Translate maize B73 gene-model IDs between RefGen_v4 (Zm00001d) and RefGen_v5 (Zm00001eb) with MaizeGDB's published translation table. UniProt and Ensembl Plants know only v5 IDs, so a v4 ID answers nothing there until it is translated. direction v4_to_v5 (default) or v5_to_v4. Each ID comes back mapped (targets: one, or several when the model split or merged), no_counterpart (MaizeGDB lists it with no model in the other assembly: report it as unmappable), or not_in_table (MaizeGDB does not list it, so this source says nothing about it). Gene-model IDs only, no transcript suffix; up to 1000 per call. source gives the table's URL (a link for the client to open; no tool on this server retrieves it), its Last-Modified date and sha256, so an answer can be tied to one release of the table.

Parametersidsrequireddirection

locus_literature

Literature (Europe PMC)

Search Europe PMC for literature mentioning a plant locus. Free, no API key. Returns up to `size` results (default 10, capped at 25) with title, authors, journal, year, DOI, PMID, open-access status, citation count, abstract, and the article's web_url (a link for the client to open; no tool on this server retrieves it). For non-Arabidopsis species the species common name is appended to the query to disambiguate locus IDs (rice, maize, ...). Pair with resolve_locus_to_uniprot or ensembl_plants_lookup_locus to ground the locus before fanning out to the literature.

Parameterssizelocusrequiredcursororganisminclude_abstract

locus_go_annotations

GO Annotations

Fetch Gene Ontology annotations for a plant locus from QuickGO (EBI). Free, no API key. The locus is first resolved to a UniProt accession via the same logic as resolve_locus_to_uniprot, then QuickGO is queried by geneProductId. Returns annotations[] with goId/goName/goAspect/qualifier/evidence + a by_aspect rollup ({molecular_function: [{goId, goName}, ...], biological_process: [...], cellular_component: [...]}) deduped on goId so the high-level term set is one read away; by_aspect_deduped_on names that key in the payload. truncated is true when numberOfHits exceeds returned — raise limit (max 100).

Parameterslimitlocusrequiredcursororganism

locus_plant_ontology

Plant Ontology (PO/TO) Terms

Fetch Plant Ontology (PO) + Trait Ontology (TO) + experimental-condition (PECO) annotations for a plant locus from Planteome (browser.planteome.org, AmiGO2/GOlr; free, no API key). Complements locus_go_annotations: QuickGO serves GO (species-agnostic), Planteome serves the plant-specific ontologies — PO (anatomy + developmental stage), TO (traits). The locus is matched across Planteome's searchable bioentity fields and filtered by the organism's NCBI taxon. Returns annotations[] (term_id / term_name / ontology / aspect / evidence / reference) + a by_ontology rollup ({PO: [{term_id, term_name}, ...], TO: [...], PECO: [...]}) deduped on term_id. Planteome names genes by these locus ids for arabidopsis, rice, wheat and tomato only; other organisms are refused, and a gene Planteome has no record of is not found. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslimitlocusrequiredorganism

go_enrichment

GO / KEGG Enrichment (gene list)

GO + KEGG over-representation analysis for a gene LIST via g:Profiler g:GOSt (biit.cs.ut.ee/gprofiler; free, no API key). Unlike locus_go_annotations (one locus → its terms), this answers 'what is my gene SET enriched for?' — the dominant question for a differential-expression or co-expression cluster. loci is the query gene list (e.g. AT-codes for Arabidopsis, RAP-DB IDs for rice). sources defaults to GO:BP/GO:MF/GO:CC + KEGG; user_threshold is the g:SCS-corrected significance cutoff (default 0.05). Optional background sets a custom statistical domain (default: all annotated genes). Returns enriched[] (term_id/name/p_value/intersection_size/…, capped at top_n by p-value) plus unmapped[] — query loci g:Profiler could not recognize, surfaced so a locus-namespace mismatch is visible. Defaults to arabidopsis_thaliana; pass organism= for any of the 12 species.

Parameterslocirequiredtop_nsourcesorganismbackgrounduser_threshold

gramene_homologs

Gramene Homologs

Fetch orthologs and paralogs for a plant locus from Gramene compara (data.gramene.org v69). Default homology_type='ortholog'; pass 'paralog' for in-species duplicates or 'all' for everything. 'ortholog' includes syntenic_ortholog_* rows; homoeologs (polyploid subgenome copies) come back only under 'all', and excluded_categories counts every category the filter left out. Returns target_locus + homology category (type) + shared gene_tree_id per hit (Gramene's tree id; for the tree's members pass the locus to gene_tree_members). Rows carry no taxon unless with_organism=true (adds 'organism' per row) or target_organism is given, which filters to one organism before the cap and adds 'organism' per row. Paralogs here are within_species_paralog only: Gramene drops Compara's other_paralog ('ancient paralogues'); ensembl_plants_paralogs lists both. Pair with resolve_locus_to_uniprot for protein-level enrichment and with blast_sequence for sequence similarity discovery.

Parameterslimitlocusrequiredcursorhomology_typewith_organismtarget_organism

kegg_pathways

KEGG Pathways

Fetch KEGG pathway memberships for a plant locus from rest.kegg.jp. Returns a list of pathway IDs + names + KEGG category classes the locus participates in. Pairs with locus_go_annotations for the GO-level functional view. Covers: arabidopsis_thaliana, brachypodium_distachyon, glycine_max, hordeum_vulgare, oryza_sativa, populus_trichocarpa, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms). Non-Arabidopsis loci are bridged to the NCBI Entrez Gene ID KEGG indexes (returned as entrez_gene_id). A gene KEGG knows with no pathway memberships is an ok answer with pathways=[]; a gene KEGG has no record of raises NotFoundError. KEGG v118+ is case-sensitive on the locus: pass AGI loci as uppercase.

Parameterslocusrequiredorganism

bar_gene_summary

BAR: Gene Summary

Fetch the BAR (Bio-Analytic Resource, U Toronto) merged ThaleMine + GAIA-aliases summary for an Arabidopsis locus. Returns the TAIR curator summary + Araport11 computational description from /thalemine/gene_information/ together with the NCBI Gene ID and cross-DB aliases (RefSeq, UniProt, TIGR locus-model IDs) from /gaia/aliases/. Arabidopsis only — ThaleMine carries taxon 3702 plus yeast/human for ortholog cross-reference. BAR is keyless and a Global Core Biodata Resource (2023); replaces the v0.9 subscription-gated tair_locus_info stub for the curator-summary use case.

Parameterslocusrequired

bar_efp_expression

BAR: eFP Expression

Fetch BAR/eFP world-map natural-variation expression for an Arabidopsis locus. Wraps the world-eFP view at /microarray_gene_expression/world_efp/arabidopsis/{locus} — returns expression across ~36 ecotypes (Bay-0, Col-0, Cvi-1, Ler-2, ...) with per-replicate values, control samples, collection lat/lng, and a per-ecotype mean computed client-side. Arabidopsis only. BAR is keyless and a Global Core Biodata Resource (2023).

Parameterslocusrequired

bar_aiv_interactions

BAR: Predicted Interactions

Fetch BAR AIV (Arabidopsis Interactions Viewer) interactions for an Arabidopsis or rice locus. Dispatches by organism: Arabidopsis returns curated GRN paper refs from /interactions/get_paper_by_agi/{locus} (PubMed ID, title, image URL, comments, pipe-split tags; the image is a link for the client to fetch, no tool on this server retrieves it); rice returns predicted PPI partners from /interactions/rice/{locus} with Pearson co-expression r (pcc), evidence hits, and quality score. The `kind` field discriminates the response shape (grn_papers vs ppi_predictions). Rice requires the MSU LOC_Os* locus format — RAP-DB Os*g* is rejected upstream. Only Arabidopsis and rice are supported by AIV; other organisms raise OrganismNotSupported.

Parameterslocusrequiredorganism

string_interactions

STRING: Interaction Network

Fetch protein-protein interaction partners from STRING-DB (string-db.org). Accepts either a UniProt accession or a locus identifier. A locus goes to STRING's own resolver, except for wheat, whose STRING proteins carry no locus alias: a wheat locus is resolved via UniProt first. Defaults to arabidopsis_thaliana; pass organism= for other plant species (slug, scientific/common name, or NCBI taxid). Returns first-neighbor partners with the combined STRING score plus per-channel sub-scores (experimental, database, textmining, predicted). The argument was called locus_or_accession before #129; that name is still accepted, deprecated.

Parameterslimitlocusrequiredorganism

tair_locus_info

TAIR-Style Locus Summary

Fetch the TAIR curator-vetted Arabidopsis locus summary. Served via BAR/ThaleMine (U Toronto, Global Core Biodata Resource 2023) since TAIR's free per-locus REST API is gated behind a paid Phoenix Bioinformatics subscription. Returns TAIR curator summary + Araport11 computational description + NCBI Gene ID + cross-DB aliases (RefSeq, UniProt, TIGR locus-model IDs). Arabidopsis only. Alias of bar_gene_summary.

Parameterslocusrequired

plantcyc_locus_info

PlantCyc: Metabolic Pathways

Fetch metabolic annotation for a locus from PlantCyc / the Plant Metabolic Network (pmn.plantcyc.org; free BioCyc web-services API, no key). Walks gene → enzyme → catalyzed reactions → PlantCyc pathways in the organism's PGDB, returning enzymes[] + reactions[] (id/name) + pathways[] (id/name) — the metabolic-pathway view KEGG and GO don't provide. A non-enzymatic gene (e.g. a transcription factor) returns found=false with empty lists, not an error. reaction_count is the true total even when the lists are capped; pathway_count is too, or null (unknown) when the gene catalyzes more reactions than are walked for pathways. 11 organisms have a PGDB (arabidopsis, rice, maize, soybean, grape, poplar, tomato, barley, sorghum, medicago, brachypodium); wheat is not yet mapped. Defaults to arabidopsis_thaliana (AraCyc, the best-curated); pass organism= for other species.

Parameterslocusrequiredorganism

alphafold_structure

AlphaFold: Predicted Structure

Fetch the AlphaFold DB predicted-structure summary for a locus (alphafold.ebi.ac.uk; free, no key). Resolves the locus → UniProt accession, then returns the predicted model's global mean pLDDT confidence, the per-band pLDDT distribution with each band's pLDDT range (plddt_band_ranges), modelled residue span, latest model version, and mmCIF / PDB / PAE download URLs — links for the client to fetch; no tool on this server retrieves them. A valid protein with no deposited model returns found=false (a normal outcome, not an error); a locus with no UniProt entry raises a typed NotFoundError. Works for all 12 organisms (UniProt-keyed). Complements resolve_locus_to_uniprot (sequence-level) with the structure-level view. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslocusrequiredorganism

experimental_structures

PDBe: Experimental Structures

Fetch experimentally-solved (X-ray / cryo-EM / NMR) protein structures for a locus from PDBe (www.ebi.ac.uk/pdbe; free, no key). Resolves the locus → UniProt accession, then returns PDBe's best_structures mapping ranked best-first: per entry the PDB id, chain, experimental method, resolution, coverage, and modelled residue span. Most plant proteins have NO deposited structure — that returns found=false (a normal outcome, not an error); a locus with no UniProt entry raises a typed NotFoundError. structure_count is the true total even when the list is capped. Complements alphafold_structure (the predicted view). Works for all 12 organisms (UniProt-keyed). Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslocusrequiredorganism

tf_binding_motifs

JASPAR: TF Binding Motifs

Fetch curated transcription-factor DNA binding motifs for a locus from JASPAR (jaspar.elixir.no; free, no key) — the cis-regulatory view. Resolves the locus → UniProt accession + gene symbol, searches JASPAR by symbol scoped to the organism's taxid, then CONFIRMS each candidate by matching the accession against the profile's uniprot_ids. Returns per motif the JASPAR matrix id, TF class/family, assay type (SELEX / ChIP-seq / PBM / DAP-seq), an IUPAC consensus derived from the position-frequency matrix (e.g. CACGTG, the G-box/ABRE core), motif length, PubMed refs, and the SVG sequence_logo and JASPAR web_url — links for the client to fetch; no tool on this server retrieves them. IMPORTANT: JASPAR's name search is fuzzy, so name-similarity hits belonging to a DIFFERENT gene are returned separately in name_only_matches and must NOT be attributed to this locus; only `motifs` is UniProt-confirmed. found=false means the gene has no curated profile (not a TF, or its family is unprofiled for that species) — a normal outcome, not an error. Use jaspar_motif to retrieve the raw matrix for any matrix_id. Coverage is Arabidopsis-heavy (1236 profiles) and thin elsewhere (maize 131, soybean 91, wheat 58, tomato 51, rice 10; Brachypodium and sorghum have none). Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslocusrequiredorganism

jaspar_motif

JASPAR: Motif Matrix

Fetch one JASPAR binding profile by matrix id, including its raw position-frequency matrix (PFM: per-base count vectors keyed A/C/G/T) plus TF class/family, assay type, source species, UniProt accessions, PubMed refs, IUPAC consensus, and the sequence-logo URL (a link for the client to fetch; no tool on this server retrieves it). The drill-down companion to tf_binding_motifs, which returns the derived consensus but not the matrix. Accepts a versioned id (MA0570.1) or a bare base id (MA0570, which resolves to the newest version). Unknown ids raise a typed NotFoundError.

Parametersmatrix_idrequired

experimental_interactions

ThaleMine: Experimental Interactions

Fetch CURATED EXPERIMENTAL protein/genetic interaction partners for an Arabidopsis locus from ThaleMine (BAR's InterMine instance; free, no key), sourced from BioGRID, IntAct and PSI-MI. Unlike string_interactions (predicted / text-mined, scored) and bar_aiv_interactions (which returns GRN *paper references* for Arabidopsis, not partner pairs), every partner here carries the actual experimental provenance: detection method (two hybrid, pull down, genetic interference, ...), PSI-MI relationship type, physical vs genetic class, source database, and the PubMed IDs that reported it. ThaleMine emits one row per evidence record, so rows are aggregated to one entry per partner with evidence_count as a crude support signal; partners are ordered by that count. found=false means the gene is real but has no curated interaction on record — a normal outcome; an unknown locus raises a typed NotFoundError. Arabidopsis only (ThaleMine carries genes for taxon 3702; other organisms raise OrganismNotSupported).

Parameterslocusrequiredorganism

locus_gene_rifs

GeneRIF Functional Statements

Fetch curated GeneRIF functional statements for an Arabidopsis locus from ThaleMine (free, no key). A GeneRIF is a one-sentence, manually curated statement of what the gene does, each anchored to the PubMed ID of the publication that demonstrated it — dense, directly citable functional context that GO terms (locus_go_annotations) and raw abstracts (locus_literature) do not provide. Well-studied genes have many: HY5 (AT5G11260) has 114. Upstream order is preserved because ThaleMine supplies no meaningful ranking, so `truncated` means later statements were cut, not that they were less relevant. found=false means the gene exists but has no GeneRIF; an unknown locus raises a typed NotFoundError. Arabidopsis only.

Parameterslocusrequiredorganism

interpro_domains

InterPro: Protein Domains

Fetch the InterPro domain / family architecture for a locus (www.ebi.ac.uk/interpro; free, no key). Resolves the locus → UniProt accession, then returns the protein's InterPro entries — each with accession, name, type (domain / family / homologous_superfamily / …), source_database (Pfam appears here as source_database='pfam', not a separate tool), the integrated InterPro accession, and residue spans — plus a count_by_type rollup. A protein with no annotated domains returns found=true with an empty list; a locus with no UniProt entry raises a typed NotFoundError. domain_count is the true total even when the row list is page-capped. Works for all 12 organisms (UniProt-keyed). Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslocusrequiredorganism

locus_variants

Known Variants

List natural (germline) variants overlapping a locus's genomic span via Ensembl (rest.ensembl.org; free, no key). Resolves the locus → gene coordinates, then returns EVA/dbSNP-sourced SNPs and indels with id, source, consequence class, alleles, and clinical significance. variant_count is the true overlap total; the variant list is capped for payload size with truncated flagged. Opens the variation axis (distinct from get_sequence / ensembl_region_query). Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslimitlocusrequiredorganism

vep_annotate

VEP: Variant Effect

Predict a variant's molecular consequences with Ensembl VEP (rest.ensembl.org; free, no key). Variant-first (not locus-first): supply an Ensembl region (chr:start-end:strand, e.g. '1:10000-10000:1') and an alternate allele (e.g. 'C'); returns the most-severe consequence plus one row per overlapping transcript (consequence terms, IMPACT, and SIFT when the variant is coding-missense; the polyphen fields stay null, as Ensembl runs PolyPhen for human only). found=false when Ensembl reports no overlapping feature. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parametersallelerequiredregionrequiredorganism

panther_family

PANTHER: Protein Family

Fetch the PANTHER protein-family classification for a locus (pantherdb.org; free, no key). Returns the PANTHER family and subfamily (id + name) plus curated GO terms grouped by aspect (molecular_function / biological_process / cellular_component), the PANTHER protein class, and pathways. found=false when PANTHER cannot map the locus; a mapped locus can still have a null family or subfamily, which means PANTHER assigns it none. Complements the sequence-homology tools (gramene_homologs / consensus_homologs) with an evolutionary-family view. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

Parameterslocusrequiredorganism

entry_members

Family / Domain Members

List every protein in one organism that carries an InterPro, Pfam or PANTHER entry, with the gene locus each maps to — the reverse of interpro_domains / panther_family (entry -> genes, not gene -> entries). One UniProt query (rest.uniprot.org; free, no key). Each member gives accession, symbol and locus; locus is the id the locus-keyed tools accept, or null when UniProt links the protein to no gene (e.g. an old cDNA submission). reviewed_only=true (default) keeps Swiss-Prot entries: complete for Arabidopsis and rice, empty for most other crops, so pass reviewed_only=false there. total is UniProt's count across all pages; when truncated=true, pass next_cursor back as cursor= for the next page. An entry absent from the organism is ok with total 0. Defaults to arabidopsis_thaliana.

Parametersentryrequiredcursororganismpage_sizereviewed_only

gene_tree_members

Gene Tree Members

List the member genes of an Ensembl Compara (plants) gene tree (rest.ensembl.org /genetree; free, no key). Name the tree by locus= (any member gene, with organism=) and Ensembl finds the tree that gene is in now, or by gene_tree_id=; exactly one. A gramene_homologs gene_tree_id comes from an older Compara release and may not exist here, so prefer locus=. Each member gives the locus (the id the locus-keyed tools accept), protein_id, species and taxid, and organism (the canonical slug, or null for a species outside this server's 12). target_organism= keeps one organism's members; omit it for every species. total counts members before limit; truncated=true when limit cut some off. gene_tree_id in the answer is the tree served. An unknown tree id, or a locus in no tree, is a not-found error.

Parameterslimitlocusorganismgene_tree_idtarget_organism

ensembl_plants_paralogs

Ensembl Plants: Paralogs

List the paralogues Ensembl Compara (plants) records for a plant locus (rest.ensembl.org /homology, type=paralogues; free, no key). Each row gives the paralogue's locus, its type — within_species_paralog, or other_paralog: Ensembl's 'ancient paralogues', inferred across a super tree, so the two genes can sit in different gene trees — the taxonomy_level of the duplication, perc_id/perc_pos and protein_id, closest first. gramene_homologs carries only within_species_paralog, so a gene can have paralogues here and none there. A paralogue list is not a family list: other_paralog can name a gene outside the family (AT2G23390, an acyl-CoA N-acyltransferase-like gene, is an other_paralog of the ARFs); test membership with interpro_domains. An empty list means Compara records no paralogue, not that the gene is single-copy (FLS2, AT5G46330, has none). found=false when Compara keeps no homology record for the gene at all (e.g. a non-coding gene); an id Ensembl does not know is a not-found error. total and counts_by_type count before limit; truncated=true when limit cut some off.

Parameterslimitlocusrequiredorganism

ensembl_plants_assembly

Ensembl Plants: Assembly

Describe an organism's Ensembl assembly (rest.ensembl.org /info/assembly; free, no key): assembly name, GCA accession and date, the karyotype, and every top-level seq-region with its length. The names are the region values ensembl_region_query takes, and a start past a region's length is refused there, so a region walk can be planned before the first call. Karyotype regions come first, in karyotype order, then unplaced scaffolds and contigs, longest first. Names are Ensembl's: tomato's chromosomes are CM001064.4 and so on, not '1'. coord_system labels differ between assemblies (chromosome, scaffold, supercontig, primary_assembly), so in_karyotype, not coord_system, says which regions are chromosomes. total counts every region before limit; truncated=true when limit cut some off (soybean has over 1,100).

Parameterslimitorganismrequired

upstream_release

Upstream Release

Report the release a backend's own release endpoint calls current, for the backends whose answers state none (their tools' upstream_version is always null). It is read by a SEPARATE request at query time, so it is not proof of the release that answered any one call: read it before and after a run, and equal values mean no release changed in between. Never cached. ensembl_plants: the Ensembl Genomes release (e.g. '63'); string: the STRING release ('12.0'); quickgo: the GO annotation load date and the GO ontology date; jaspar: the newest ACTIVE release (several are active at once); kegg: the pathway and genes last-update dates (KEGG has no release number). pdbe, aragwas and europe_pmc publish no data release: release is null and reason says why. Backends whose answers state or pin their release (UniProt, InterPro, PANTHER, AlphaFold, Gramene, ATTED-II, OrthoDB) are not listed: read upstream_version on their answers instead.

Parametersbackendrequired

orthodb_orthologs

OrthoDB: Orthologs

Resolve a locus to its OrthoDB ortholog group and cross-species member genes (data.orthodb.org; free, no key). Searches at the Viridiplantae level, then returns the group metadata (name, evolutionary rate) and member genes grouped by organism (organism, gene id, description). organism_count is the true cluster total; the member list is capped with truncated flagged. found=false when the locus maps to no ortholog group. Works for all 12 organisms. NOTE: unlike the other locus tools, organism= does NOT scope the search — the group is resolved from the locus id alone at the Viridiplantae level, and organism is only validated and echoed back. Passing a mismatched organism therefore still returns the locus's real group. target_organism= DOES filter: it keeps only that organism's members, before the cap, so a 2,000-member group cannot hide rice or wheat behind 'limit'.

Parameterslimitlocusrequiredcursororganismtarget_organism

aragwas_associations

AraGWAS: GWAS Associations

Fetch AraGWAS genome-wide association study hits for an Arabidopsis locus (aragwas.1001genomes.org; free, no key). Returns each significant SNP association overlapping the gene with its score (-log10 p), minor-allele frequency, the SNP's predicted molecular effect (impact, amino-acid change), and the phenotype/study it came from, including the study's own significance thresholds on the score's scale (study.thresholds), which the over_bonferroni / over_fdr / over_permutation flags are taken against. Rows come strongest first, 25 per answer by default (limit, up to 100); next_cursor resumes at the first row not returned. association_count is the true total even when page-capped. ARABIDOPSIS-ONLY — any other organism raises OrganismNotSupported. Defaults to arabidopsis_thaliana.

Parameterslimitlocusrequiredcursororganism

arabidopsis_natural_variation

1001 Genomes: Natural Variation

Fetch 1001 Genomes natural-variation SNP effects for an Arabidopsis locus (tools.1001genomes.org; free, no key) — the variation observed across 1135 resequenced natural accessions. Returns per-SNP effect rows (chromosome, position, accession id, effect, impact, amino-acid change, transcript) plus the gene's genomic span. variant_count is the true row total even when capped. ARABIDOPSIS-ONLY — any other organism raises OrganismNotSupported. Defaults to arabidopsis_thaliana.

Parameterslocusrequiredcursororganism

batch_ensembl_plants_lookup_locus

Batch: Ensembl Plants Locus Metadata

Batch variant of ensembl_plants_lookup_locus. Uses Ensembl's native POST /lookup/id endpoint — one HTTP round-trip for up to 50 loci, materially cheaper than N parallel GETs. Successes in results[] with the same shape as the single-locus tool. Retries 429/5xx via the shared `_http` helper (Retry-After capped at 60 s). Misses (loci with no record) still land in `errors[]` with the `[NotFoundError]` prefix; the whole batch only fails when the retry budget is exhausted.

Parameterslocirequiredorganism

batch_get_gene_xrefs

Batch: Gene Cross-References

Batch variant of get_gene_xrefs. Fans out per-locus xref lookups over Ensembl Plants in parallel (up to 50 loci). Each results[locus] is the full single-locus shape (count + xrefs[] + by_db rollup).

Parameterslocirequiredorganism

batch_phytozome_lookup_locus

Batch: Phytozome Locus Metadata

Batch variant of phytozome_lookup_locus. Fans out per-locus BioMart queries in parallel (up to 50 loci). Each results[locus] is the full single-locus row (organism_name, gene_name, chromosome, start/end/strand, description).

Parameterslocirequiredorganism

batch_resolve_locus_to_uniprot

Batch: Resolve Locus → UniProt

Batch variant of resolve_locus_to_uniprot. Fans out per-locus UniProtKB searches in parallel (up to 50 loci). Each results[locus] is the full single-locus record (primaryAccession + uniProtkbId + entryType + geneNames + organism + sequenceLength + web_url + …).

Parameterslocirequiredorganism

batch_locus_literature

Batch: Literature

Batch variant of locus_literature. Fans out per-locus Europe PMC searches in parallel (up to 50 loci). Each results[locus] is the full single-locus payload (query + hitCount + returned + hits[]).

Parameterslocirequiredsizeorganism

blast_sequence

BLAST: Sequence Search (NCBI)

Run a BLAST sequence-similarity search against NCBI BLAST URLAPI. Async Put/Get under the hood — submits the query, polls the RID (honoring NCBI's per-RID 60s floor), and returns the parsed top hits + raw text report excerpt. Programs: blastn / blastp / blastx / tblastn / tblastx. Database defaults to swissprot for protein programs, core_nt for nucleotide. Emits notifications/progress on each poll. Long searches (>10 min) raise [UpstreamUnavailableError] with the RID preserved so the client can re-poll. Set PLANT_GENOMICS_MCP_NCBI_EMAIL to identify the request per NCBI etiquette.

Parametersexpectprogramdatabasemax_waitsequencerequiredmegablasthitlist_sizepoll_interval

batch_locus_go_annotations

Batch: GO Annotations

Batch variant of locus_go_annotations. Two-stage fanout — each locus is resolved to UniProt and then queried in QuickGO. Per-locus NotFoundError from either stage lands in errors[] with the typed prefix preserved. Capped at 50 loci.

Parameterslocirequiredlimitorganism

batch_gramene_homologs

Batch: Gramene Homologs

Batch version of gramene_homologs. Up to 50 loci per call; shares the homology_type filter across all loci. Returns the standard batch envelope (count + results dict + errors dict).

Parameterslocirequiredhomology_typewith_organismtarget_organism

batch_kegg_pathways

Batch: KEGG Pathways

Batch version of kegg_pathways. Up to 50 loci per call. Covers: arabidopsis_thaliana, brachypodium_distachyon, glycine_max, hordeum_vulgare, oryza_sativa, populus_trichocarpa, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms).

Parameterslocirequiredorganism

batch_bar_gene_summary

Batch: BAR Gene Summary

Batch variant of bar_gene_summary. Fans out per-locus BAR ThaleMine + GAIA-aliases calls in parallel (up to 50 loci). Each results[locus] is the full single-locus payload (curator summary, computational description, NCBI Gene ID, cross-DB aliases). Arabidopsis only.

Parameterslocirequired

batch_bar_aiv_interactions

Batch: BAR Predicted Interactions

Batch variant of bar_aiv_interactions. Fans out per-locus BAR AIV calls in parallel (up to 50 loci); all loci in a single call share the same organism. Each results[locus] is the full single-locus payload (kind=grn_papers for Arabidopsis with `papers` list, kind=ppi_predictions for rice with `partners` list).

Parameterslocirequiredorganism

batch_string_interactions

Batch: STRING Interactions

Batch version of string_interactions. Up to 50 inputs per call. The argument was called loci_or_accessions before #129; that name is still accepted, deprecated.

Parameterslocirequiredlimitorganism

atted_coexpression

ATTED-II: Coexpression

Fetch co-expressed gene neighbors from ATTED-II (atted.jp, API v5) for a plant locus. Returns top_n neighbors with target locus + NCBI Entrez gene ID + score (higher = stronger coexpression), in the index the release declares as score_type: 'z' for Ath-u.c4-0, 'LSmr' (logit score) for the other releases. The ATTED-II release (e.g. Ath-u.c4-0 for Arabidopsis, Osa-u.c1-0 for rice) is resolved per-organism. Covers: arabidopsis_thaliana, glycine_max, medicago_truncatula, oryza_sativa, solanum_lycopersicum, vitis_vinifera, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms). A locus that is not in the organism's release raises NotFoundError. Pairs with string_interactions to surface high-confidence functional partners (interactors that are also coexpressed).

Parameterslocusrequiredtop_norganism

batch_atted_coexpression

Batch: ATTED-II Coexpression

Batch version of atted_coexpression. Up to 50 loci per call. Covers: arabidopsis_thaliana, glycine_max, medicago_truncatula, oryza_sativa, solanum_lycopersicum, vitis_vinifera, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms).

Parameterslocirequiredtop_norganism

analyze_locus_synth

Synthesis: Locus Overview

Synthesis: one-call equivalent of the analyze_locus prompt. Resolves a locus through Ensembl Plants, then fans out to xrefs, UniProt, Europe PMC, and QuickGO in parallel. Returns a SynthesisEnvelope with per-step status and a reconciled summary flagging cross-source name/accession disagreements.

Parameterslocusrequiredorganism

find_homologs_synth

Synthesis: Homolog Search

Synthesis: one-call equivalent of the find_homologs prompt. Runs BLAST then resolves UniProt-shaped subject accessions via the batch UniProt helper. Returns ranked hits each annotated with their UniProt record (or null if subject_id is not a UniProt accession).

Parameterstop_nprogramsequencerequired

biological_context_synth

Synthesis: Biological Context

Synthesis: one-call equivalent of the biological_context prompt. Resolves UniProt accession, then fans out to Gramene homologs, KEGG pathways, STRING-DB partners, and ATTED-II coexpression in parallel. Adds a consensus_partners ranking that merges STRING + ATTED scores.

Parameterslocusrequiredtop_norganism

consensus_homologs

Synthesis: Consensus Homologs

Synthesis: cross-source homology consensus. Resolves UniProt + FASTA sequence, then runs Gramene homology calls and NCBI BLAST in parallel. Dedupes hits by normalized locus token and scores by n_sources * mean_identity — Gramene contributes identity=1.0, BLAST contributes pident/100.

Parameterslocusrequiredtop_norganism

gene_report

Synthesis: Gene Report (Markdown dossier)

Synthesis: one-shot 'tell me about this gene' dossier. Resolves a locus through Ensembl Plants + UniProt, then fans out to cross-references, KEGG pathways, STRING interactors, Europe PMC literature, and QuickGO GO terms. Returns a SynthesisEnvelope whose result.markdown is a rendered Markdown gene dossier (the headline output) alongside a structured result.sections mirror; each backend payload appears once, under sections, while steps[] carries status and per-step timing only. The literature section carries no abstracts (abstracts_included: false) and the GO section no withFrom (with_from_included: false); locus_literature and locus_go_annotations return them. result.gene_names labels the Ensembl and UniProt gene names separately when they differ. Any single backend failure degrades that section to an 'Unavailable' note; the rest of the dossier still renders.

Parameterslocusrequiredtop_norganism

batch_locus_call

Batch: Any Locus Tool

Run one locus-keyed tool over up to 50 loci in one call (#131). 'tool' names any tool whose only required argument is 'locus' (interpro_domains, alphafold_structure, panther_family, orthodb_orthologs, gene_report, ...); 'args' holds that tool's other arguments, shared by every locus and checked against its schema once before any call. Returns the standard batch envelope: results keyed by locus, each exactly what the single tool returns, and per-locus errors. The dedicated batch_* tools remain.

Parametersargslocirequiredtoolrequired

Version history

13
  1. v1.30.0LatestOct 29, 2026
  2. v1.29.3Oct 17, 2026
  3. v1.29.2Oct 16, 2026
  4. v1.29.1Oct 16, 2026
  5. v1.29.0Oct 1, 2026
  6. v1.28.0Sep 27, 2026
  7. v1.27.0Sep 27, 2026
  8. v1.26.0Sep 26, 2026
  9. v1.25.0Sep 26, 2026
  10. v1.24.0Sep 26, 2026
  11. v1.23.0Sep 25, 2026
  12. v1.22.0Sep 23, 2026
  13. v1.21.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts