Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Plant Genomics

PYPI · PLANT-GENOMICS-MCP

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

Available components

−15 this week 81 Trust /100

Last scanned (17 hours ago)

Scores higher than 82% of PyPI servers

Category Health and Science

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 2 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to musharna/plant-genomics-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 8 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 13419 tokens (~216/item across 62 items; 58 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage97
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 89% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 58 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 59 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 31 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 30 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 28 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 27 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
    • Package version: 1.29.3 → 1.30.0 functional
  • 23 Oct 26 0
    • Stability: 0.97 → pass security
  • 22 Oct 26 0
    • Stability: fail → 0.97 functional
  • 18 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/plant-genomics-mcp@1.30.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo musharna/plant-genomics-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/musharna/plant-genomics-mcp/.github/workflows/release.yml@refs/tags/v1.30.0
Rekor log index 3500429017
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:a2b90e8243c17dbf1aff867e67bbaf4652cddc273a9e79eef9659d2b23d100c9

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 32 packages
Packages resolved 32
Stale 1
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 58 exposed · ~13,205 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
alphafold_structure ~264

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.

NameTypeReqDescription
locusstringyese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
accessionstringyesResolved UniProt accession
cif_url––mmCIF model download URL — a link for the client to open or fetch; no tool on this server dereferences it
description––UniProt protein description
foundbooleanyesTrue if a predicted model exists
gene––Gene name from UniProt
latest_version––Latest AlphaFold model version
locusstringyes–
mean_plddt––Global mean pLDDT confidence (0–100)
model_created––Model creation date (ISO 8601)
model_entity_id––e.g. AF-Q9SZ92-F1
organism––Organism scientific name
pae_image_url––Predicted-aligned-error image URL — a link for the client to open or fetch; no tool on this server dereferences it
pdb_url––PDB model download URL — a link for the client to open or fetch; no tool on this server dereferences it
plddt_band_rangesobjectyesBand -> [lower, upper] pLDDT on the 0-100 scale, per EMBL-EBI: very_low <50, low 50-70, confident 70-90, very_high >90
plddt_bands––Fraction of residues per confidence band
residue_range––Modelled residue span {start, end}
upstream_version––AlphaFold DB release that produced THIS response, as stated by the entry's own latestVersion (e.g. '6'). null means AlphaFold DB did not state one — never that no release exists, and never inferred f…

No examples provided.

analyze_locus_synth ~128

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.

NameTypeReqDescription
locusstringyesLocus name, e.g. AT1G01010
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
result––Composed cross-source result; None if root step failed
started_atstringyesISO 8601 UTC timestamp
stepsarrayyesPer-backend execution rows
toolstringyesSynthesis tool name, e.g. analyze_locus_synth

No examples provided.

arabidopsis_natural_variation ~209

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous page; omit for the first (#123)
locusstringyesArabidopsis AGI locus, e.g. AT1G01060 (a bare AGI is transcript-scoped to .1)
organismstring|integer–Arabidopsis only (the 1001 Genomes panel is A. thaliana)
NameTypeReqDescription
foundbooleanyesTrue once the effects endpoint returned 200
locusstringyes–
next_cursor––Pass back as cursor= to get the rows after this page; null on the last page. Opaque, and bound to this tool and query (#123)
organismstringyesAlways arabidopsis_thaliana
region––Genomic span, e.g. 'Chr1:33666..37840'
returnedintegeryesEffect rows returned (post-cap)
totalintegeryesHow many variant effects exist upstream for this query, all pages (pre-cap) (#123)
transcriptstringyesTranscript-scoped gene id used (e.g. AT1G01060.1)
truncatedbooleanyesTrue if the effect list was capped
variant_countintegeryesTotal effect rows (pre-cap)
variantsarray–Per-effect {chr, position, accession_id, effect, impact, amino_acid_change, …}

No examples provided.

aragwas_associations ~279

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous page; omit for the first (#123)
limitinteger–Max associations, strongest first (1–100, default 25)
locusstringyesArabidopsis AGI locus, e.g. AT1G01060
organismstring|integer–Arabidopsis only (the 1001 Genomes panel is A. thaliana)
NameTypeReqDescription
association_countintegeryesTotal associations (pre-cap)
associationsarray–Per-hit {score, maf, mac, over_bonferroni, over_fdr, over_permutation, snp{…}, study{…, thresholds}}. score is -log10(p); study.thresholds holds that study's bonferroni_threshold05/01, bh_threshold a…
foundbooleanyesTrue once the associations endpoint returned 200
locusstringyes–
next_cursor––Pass back as cursor= to get the rows after this page; null on the last page. Opaque, and bound to this tool and query (#123)
organismstringyesAlways arabidopsis_thaliana
returnedintegeryesAssociations returned (post page-cap)
totalintegeryesHow many associations exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue if pagination was capped
upstream_version––AraGWAS release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='aragwas') reports the release its own endpoint calls curre…

No examples provided.

atted_coexpression ~304

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).

NameTypeReqDescription
locusstringyesPlant locus, e.g. AT1G01010 (Arabidopsis) or Os01g0100100 (rice)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger––
NameTypeReqDescription
atted_releasestringyesATTED-II DB identifier, e.g. Ath-u.c4-0 (release version included)
locusstringyes–
neighborsarrayyes–
returnedintegeryesRows in this payload (#123)
score_typestringyesThe coexpression index every neighbour's score is in, as ATTED-II declares it: 'z' for Ath-u.c4-0, 'LSmr' (logit score) for the other releases
total––Always null: the upstream returns the top coexpression neighbours asked for and states no total; null means unknown, never zero (#123)
truncated––Always null: without a stated total, truncation is unknown (#123)
upstream_version––ATTED-II release that produced THIS response, as stated by the db= pinned in the request (e.g. 'Ath-u.c4-0'); same value as atted_release. null means ATTED-II did not state one — never that no releas…

No examples provided.

bar_aiv_interactions ~261

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.

NameTypeReqDescription
locusstringyesAGI locus (AT1G01010) for Arabidopsis or MSU locus (LOC_Os01g01080) for rice
organismstring|integer–arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid
NameTypeReqDescription
countintegeryesTotal rows returned (len of papers or partners)
kindstringyesDiscriminator: grn_papers (Arabidopsis) or ppi_predictions (rice)
locusstringyes–
organismstringyes–
papersarray–GRN paper refs (populated when kind=grn_papers)
partnersarray–PPI predictions (populated when kind=ppi_predictions)
source_urlstringyesBAR AIV endpoint URL for traceability — a link for the client to open or fetch; no tool on this server dereferences it

No examples provided.

bar_efp_expression ~148

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).

NameTypeReqDescription
locusstringyesArabidopsis AGI locus, e.g. AT1G01010
NameTypeReqDescription
ecotype_countintegeryesNumber of ecotype rows in `ecotypes`
ecotypesarrayyes–
locusstringyes–
probeset––Microarray probeset ID, uniform across ecotypes for one gene
source_urlstringyesBAR world-eFP endpoint URL for traceability — a link for the client to open or fetch; no tool on this server dereferences it
speciesstringyes–

No examples provided.

bar_gene_summary ~175

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.

NameTypeReqDescription
locusstringyesArabidopsis AGI locus, e.g. AT1G01010
NameTypeReqDescription
agi––AGI primary identifier echoed by ThaleMine, e.g. "AT1G01010"
aliasesarray–Cross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded.
brief_description––Gene.briefDescription — short blurb (often same as full_name)
computational_description––Gene.tairComputationalDescription — Araport11-sourced computed description
curator_summary––Gene.tairCuratorSummary — the TAIR-curated functional summary prose
full_name––Gene name from ThaleMine
locusstringyes–
ncbi_gene_id––NCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref
source_urlstringyesThaleMine endpoint URL for traceability — a link for the client to open or fetch; no tool on this server dereferences it
speciesstringyes–
symbol––Gene symbol, e.g. "NAC001"
synonymsarray–TAIR aliases (CSV from Gene.tairAliases, split on commas + stripped)
tair_locus_id––TAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935"
tair_short_description––Gene.tairShortDescription — TAIR-specific short description

No examples provided.

batch_atted_coexpression ~141

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).

NameTypeReqDescription
lociarrayyes–
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger––
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_bar_aiv_interactions ~158

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).

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_bar_gene_summary ~111

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.

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_ensembl_plants_lookup_locus ~202

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.

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_get_gene_xrefs ~132

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).

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_gramene_homologs ~194

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).

NameTypeReqDescription
homology_typestring––
lociarrayyesList of locus identifiers (max 50)
target_organismstring|integer–Keep only homologs in this organism (slug, scientific/common name, or NCBI taxid), filtered BEFORE the cap so a hub gene's rice or wheat orthologs cannot be pushed past 'limit' by other species. Adds…
with_organismboolean–Add 'organism' (Gramene species slug, null when unknown) to every row without filtering; one extra call per 100 rows (#130)
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_kegg_pathways ~136

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).

NameTypeReqDescription
lociarrayyes–
organismstring|integer–Plant organism — accepts canonical slug, scientific or common name, or NCBI taxid; see the tool description for which KEGG covers
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_locus_call ~181

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.

NameTypeReqDescription
argsobject–The tool's arguments other than 'locus' (and not 'cursor'), e.g. {"organism": "oryza_sativa"}
lociarrayyesLocus identifiers (max 50)
toolstringyes–
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_locus_go_annotations ~152

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.

NameTypeReqDescription
limitinteger–Max annotations per locus from QuickGO (1–100, default 50)
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_locus_literature ~146

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[]).

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
sizeinteger–Max results per locus (1–25, default 10)
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_phytozome_lookup_locus ~138

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).

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_resolve_locus_to_uniprot ~150

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 + …).

NameTypeReqDescription
lociarrayyesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

batch_string_interactions ~93

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.

NameTypeReqDescription
limitinteger––
lociarrayyes–
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
countintegeryesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is d…
errorsobjectyeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsobjectyeslocus → per-locus result dict (same shape as the single-locus tool)
toolstringyesThe batch tool name, e.g. batch_resolve_locus_to_uniprot

No examples provided.

biological_context_synth ~118

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.

NameTypeReqDescription
locusstringyes–
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger––
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
result––Composed cross-source result; None if root step failed
started_atstringyesISO 8601 UTC timestamp
stepsarrayyesPer-backend execution rows
toolstringyesSynthesis tool name, e.g. analyze_locus_synth

No examples provided.

blast_sequence ~335

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.

NameTypeReqDescription
databasestring–NCBI BLAST database slug (e.g. swissprot, core_nt, refseq_protein). Defaults to swissprot for protein programs and core_nt for nucleotide programs.
expectnumber–E-value threshold (default 10).
hitlist_sizeinteger–Max hits to return (default 10).
max_waitnumber–Max seconds to wait for the search to finish before raising UpstreamUnavailableError with the RID preserved (default 600).
megablastboolean–Enable megablast (blastn only). Default false.
poll_intervalnumber–Seconds between polls. Clamped up to NCBI's per-RID 60s floor.
programstring–BLAST program — default blastp.
sequencestringyesRaw or FASTA-formatted query sequence.
NameTypeReqDescription
databasestringyesNCBI BLAST database, e.g. swissprot, core_nt
elapsed_secondsnumberyesWall-clock from submit to READY
hitCountintegeryesNumber of rows parsed from the alignment summary
hitsarrayyesTop alignments, sorted by BLAST default order
programstringyesblastn | blastp | blastx | tblastn | tblastx
raw_report_excerptstringyesFirst 50 KB of the FORMAT_TYPE=Text report
raw_report_truncatedbooleanyesTrue if the upstream report exceeded the cap
returnedintegeryesRows in this payload (#123)
ridstringyesNCBI BLAST request ID — re-usable via fetch_result()
statusstringyesAlways "READY" when this object is returned
total––Always null: the upstream returns the top hits asked for and states no total; null means unknown, never zero (#123)
truncated––Always null: without a stated total, truncation is unknown (#123)

No examples provided.

consensus_homologs ~128

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.

NameTypeReqDescription
locusstringyes–
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger––
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
result––Composed cross-source result; None if root step failed
started_atstringyesISO 8601 UTC timestamp
stepsarrayyesPer-backend execution rows
toolstringyesSynthesis tool name, e.g. analyze_locus_synth

No examples provided.

ensembl_plants_assembly ~245

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).

NameTypeReqDescription
limitinteger––
organismstring|integeryesPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
assembly_accession–yesINSDC assembly accession (GCA_...)
assembly_date–yesAssembly date as Ensembl gives it (YYYY-MM); null when Ensembl gives none
assembly_name–yesAssembly name, e.g. TAIR10, IRGSP-1.0
karyotypearrayyesThe chromosomes, in Ensembl's karyotype order
organismstringyesCanonical organism slug
regionsarrayyesKaryotype regions first, in karyotype order; then the rest, longest first
returnedintegeryesRows in this payload (#123)
totalintegeryesHow many top-level regions exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue when limit cut regions off
upstream_version––Ensembl release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='ensembl_plants') reports the release its own endpoint call…

No examples provided.

ensembl_plants_lookup_locus ~140

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).

NameTypeReqDescription
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
assembly_name––e.g. TAIR10
biotype––protein_coding, lncRNA, miRNA, ...
canonical_transcript–––
db_type––Usually "core"
description–––
display_name––Human-readable gene symbol
end–––
idstringyesLocus identifier, e.g. AT1G01010
logic_name––Source annotation pipeline
object_type––Usually "Gene"
organismstringyesPlant organism canonical slug, e.g. arabidopsis_thaliana
seq_region_name––Chromosome / contig name
source–––
start–––
strand––1 forward, -1 reverse
upstream_version––Ensembl Plants release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='ensembl_plants') reports the release its own endpoi…

No examples provided.

ensembl_plants_paralogs ~359

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.

NameTypeReqDescription
limitinteger––
locusstringyese.g. AT1G19850 (Arabidopsis), Os04g0519700 (rice)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
counts_by_typeobjectyesParalogues per type, counted before limit
foundbooleanyesFalse when Compara keeps no homology record for this gene at all (e.g. a non-coding gene); true otherwise, even with no paralogue
locusstringyesThe locus asked about
organismstringyesCanonical organism slug
paralogsarrayyesClosest first (perc_id descending)
returnedintegeryesRows in this payload (#123)
totalintegeryesHow many paralogues exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue when limit cut paralogues off
upstream_version––Ensembl release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='ensembl_plants') reports the release its own endpoint call…

No examples provided.

ensembl_region_query ~245

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.

NameTypeReqDescription
endintegeryes1-based inclusive end
featurestring–Feature type to return
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
regionstringyesseq-region name (chromosome / contig), e.g. '1' or 'Chr1'
startintegeryes1-based start
NameTypeReqDescription
countintegeryesNumber of overlapping features returned
featurestringyesFeature type queried
featuresarrayyesRaw Ensembl overlap records
organismstringyes–
regionstringyesseq_region:start-end, e.g. 1:3000-10000

No examples provided.

entry_members ~304

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous page; omit for the first
entrystringyesInterPro (IPR010525), Pfam (PF06507) or PANTHER family (PTHR31384)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
page_sizeinteger––
reviewed_onlyboolean–Only Swiss-Prot (curated) proteins
NameTypeReqDescription
entrystringyesThe entry asked about, e.g. IPR010525
entry_databasestringyes–
membersarrayyes–
next_cursor––Pass back as cursor= for the next page; null on the last
organismstringyes–
querystringyesThe UniProt query that produced this answer
returnedintegeryesRows in this payload (#123)
reviewed_onlybooleanyes–
taxidintegeryes–
totalintegeryesHow many proteins matching the UniProt query exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue when more members follow next_cursor
upstream_version––UniProt release that produced THIS response, as stated by its X-UniProt-Release header (e.g. '2026_02'). null means UniProt did not state one — never that no release exists, and never inferred from a…

No examples provided.

experimental_interactions ~293

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).

NameTypeReqDescription
locusstringyesAGI locus, e.g. AT5G11260 (HY5)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only.
NameTypeReqDescription
evidence_countintegeryesTotal evidence records across all partners (pre-cap) — counted over every partner upstream, not only the partners listed here
foundbooleanyesTrue if any curated interaction exists for this locus
gene_symbol––Gene symbol from ThaleMine
locusstringyes–
organismstringyesCanonical organism slug (Arabidopsis only)
partner_countintegeryesTotal distinct partners (pre-cap)
partnersarray–Partners ordered by evidence count, descending
returnedintegeryesRows in this payload (#123)
source_urlstringyesThaleMine gene report page — a link for the client to open or fetch; no tool on this server dereferences it
totalintegeryesHow many interaction partners exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue if the partner list was capped

No examples provided.

experimental_structures ~244

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.

NameTypeReqDescription
locusstringyese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
accessionstringyesResolved UniProt accession
entry_countintegeryesDistinct PDB entries among the rows; structure_count counts chains (#123)
foundbooleanyesTrue if any experimental structure is deposited
locusstringyes–
returnedintegeryesRows in this payload (#123)
structure_countintegeryesPDBe rows, pre-cap — one per CHAIN, not per entry (see entry_count)
structuresarray–Best-first {pdb_id, chain_id, experimental_method, resolution, coverage, …}
totalintegeryesHow many PDBe best_structures rows (one per chain) exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue if the structure list was capped
upstream_version––PDBe release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='pdbe') reports the release its own endpoint calls current at…

No examples provided.

find_homologs_synth ~97

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).

NameTypeReqDescription
programstring––
sequencestringyesQuery sequence (protein or nucleotide)
top_ninteger––
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
result––Composed cross-source result; None if root step failed
started_atstringyesISO 8601 UTC timestamp
stepsarrayyesPer-backend execution rows
toolstringyesSynthesis tool name, e.g. analyze_locus_synth

No examples provided.

gene_report ~265

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.

NameTypeReqDescription
locusstringyesLocus name, e.g. AT1G01010
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger–Caps GO terms, pathways, interactors, xrefs, and papers per section
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
result––Composed cross-source result; None if root step failed
started_atstringyesISO 8601 UTC timestamp
stepsarrayyesPer-backend execution rows
toolstringyesSynthesis tool name, e.g. analyze_locus_synth

No examples provided.

gene_tree_members ~340

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.

NameTypeReqDescription
gene_tree_idstring–e.g. EPlGT00940000167082. Omit when passing locus.
limitinteger––
locusstring–Any member gene, e.g. AT1G01010; Ensembl finds its current tree. Omit when passing gene_tree_id.
organismstring|integer–The organism of locus — canonical slug, scientific or common name, or NCBI taxid.
target_organismstring|integer–Keep one organism's members — canonical slug, scientific or common name, or NCBI taxid. Omit for every species.
NameTypeReqDescription
gene_tree_idstringyesThe tree answered, e.g. EPlGT00940000167082: the id asked for, or the tree Ensembl holds the locus in now
locus––The member locus asked by; null when asked by gene_tree_id
membersarrayyes–
organism––The organism of locus; null when asked by gene_tree_id
returnedintegeryesRows in this payload (#123)
target_organism–yesThe organism filter; null = every species
totalintegeryesHow many members after the organism filter exist upstream for this query, all pages (pre-cap) (#123)
truncatedbooleanyesTrue when limit cut members off
upstream_version––Ensembl release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='ensembl_plants') reports the release its own endpoint call…

No examples provided.

get_gene_xrefs ~167

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.

NameTypeReqDescription
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
by_dbobjectyesdbname → primary_ids[]; e.g. {'Uniprot_gn': ['Q0WV96']}
countintegeryesNumber of xref records returned
locusstringyes–
organismstringyes–
xrefsarrayyesRaw Ensembl xref records

No examples provided.

get_sequence ~166

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.

NameTypeReqDescription
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
seq_typestring–Sequence type to fetch
NameTypeReqDescription
description–––
ensembl_id––Resolved Ensembl stable id
lengthintegeryesSequence length (residues for protein, bases otherwise)
locusstringyes–
molecule––"dna" or "protein"
organismstringyesResolved canonical organism slug
sequencestringyesThe sequence string; feed to blast_sequence
typestringyesSequence type requested
version––Ensembl sequence version

No examples provided.

go_enrichment ~362

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.

NameTypeReqDescription
backgroundarray–Optional custom statistical background gene set
lociarrayyesQuery gene set, e.g. ['AT2G46830', 'AT1G01060', ...]
organismstring|integer–Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
sourcesarray–Annotation sources to test (default: all four)
top_ninteger–Max terms returned, sorted by p-value (1–200, default 50)
user_thresholdnumber–Significance cutoff, g:SCS-corrected (default 0.05)
NameTypeReqDescription
enrichedarrayyes–
gprofiler_idstringyesg:Profiler organism ID used, e.g. athaliana
mappedintegeryesLoci g:Profiler recognized
organismstringyesCanonical organism slug
query_sizeintegeryesNumber of loci submitted
returnedintegeryesTerms in enriched[] after the top_n cap
sourcesarrayyesAnnotation sources queried
total_termsintegeryesSignificant terms before the top_n cap
unmappedarrayyesLoci g:Profiler could not map

No examples provided.

gramene_homologs ~456

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous page; omit for the first (#123)
homology_typestring–Filter on homology kind
limitinteger–Max homolog rows to return. 'total' always reports the true pre-cap count and 'truncated' says whether the cap bit.
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
target_organismstring|integer–Keep only homologs in this organism (slug, scientific/common name, or NCBI taxid), filtered BEFORE the cap so a hub gene's rice or wheat orthologs cannot be pushed past 'limit' by other species. Adds…
with_organismboolean–Add 'organism' (Gramene species slug, null when unknown) to every row without filtering; one extra call per 100 rows (#130)
NameTypeReqDescription
excluded_categoriesobjectyesHomologs Gramene returned that homology_type left out, counted per category (e.g. {'within_species_paralog': 3, 'homoeolog_one2one': 2} under 'ortholog'); empty under 'all'. Counted over every organi…
homologsarrayyes–
locusstringyes–
next_cursor––Pass back as cursor= to get the rows after this page; null on the last page. Opaque, and bound to this tool and query (#123)
releasestringyesGramene release identifier, e.g. v69
returnedintegeryesRows in this payload (#123)
target_organism––Canonical organism the rows were filtered to, when target_organism was passed
totalintegeryesHow many homologs (after any target_organism filter) exist upstream for this query, all pages (pre-cap) (#123)
total_all_organisms––Homolog total before the organism filter; present only when filtered
truncatedboolean–True when the row list was capped (< total); pass limit= to change the cap
upstream_version––Gramene release that produced THIS response, as stated by the release pinned in the request path (e.g. 'v69'); same value as release. null means Gramene did not state one — never that no release exis…

No examples provided.

Install

How do I install the Plant Genomics MCP server?

Plant Genomics runs locally as a PyPI package, launched with uvx plant-genomics-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · plant-genomics-mcp

# add to Claude Code
claude mcp add musharna-plant-genomics-mcp -- uvx plant-genomics-mcp
Common questions

What is the Plant Genomics MCP server?

Plant Genomics is an MCP server listed in the public MCP registry as io.github.musharna/plant-genomics-mcp. Plant genomics MCP, 58 tools across 24 backends with cross-source synthesis. This page covers its PyPI package (plant-genomics-mcp).

Is the Plant Genomics MCP server safe to use?

Plant Genomics scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Plant Genomics MCP server expose?

Plant Genomics exposes 58 tools: ensembl_plants_lookup_locus, get_gene_xrefs, get_sequence, ensembl_region_query, phytozome_lookup_locus, and 53 more. Their descriptions and schemas cost roughly 13,205 tokens of context every time the server is loaded.

Is the Plant Genomics MCP server still maintained?

Plant Genomics is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Plant Genomics MCP server under?

Plant Genomics declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.