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 · SCANNED SEP 20

Plant genomics MCP — 50 tools across 23 backends with cross-source synthesis.

Available components

0 this week 86 Trust /100
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 Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 44 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability81
  • 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 9925 tokens (~183/item across 54 items; 50 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
  • 90% 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 50 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 51 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
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
// .cursor/mcp.json
{
  "mcpServers": {
    "musharna-plant-genomics-mcp": {
      "command": "uvx",
      "args": [
        "plant-genomics-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "musharna-plant-genomics-mcp": {
      "command": "uvx",
      "args": [
        "plant-genomics-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add musharna-plant-genomics-mcp -- uvx plant-genomics-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "musharna-plant-genomics-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "plant-genomics-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add musharna-plant-genomics-mcp --command uvx --arg plant-genomics-mcp
# ~/.hermes/config.yaml
mcp_servers:
  musharna-plant-genomics-mcp:
    command: "uvx"
    args: ["plant-genomics-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "musharna-plant-genomics-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "plant-genomics-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add musharna-plant-genomics-mcp -t stdio -c uvx -a plant-genomics-mcp
// mcp.json
{
  "mcpServers": {
    "musharna-plant-genomics-mcp": {
      "command": "uvx",
      "args": [
        "plant-genomics-mcp"
      ]
    }
  }
}
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.

  • 20 Sept 26 0
    • Stability: 0.97 → pass security
  • 19 Sept 26 +16
    • Malware scan: unverified → pass security
  • 17 Sept 26 −14
    • Malware scan: pass → unverified security
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −18
    • Malware scan: pass → unverified security
    • Stability: pass → 0.80 functional
  • 13 Sept 26 0
    • Stability: 0.97 → pass security
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

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 20 Sept 2026 · Analysed pypi/plant-genomics-mcp@1.21.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

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
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 50 exposed · ~9,711 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 ~235

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, modelled residue span, latest model version, and mmCIF / PDB / PAE download URLs. 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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
accessionstringyesResolved UniProt accession
cif_urlmmCIF model download URL
descriptionUniProt protein description
foundbooleanyesTrue if a predicted model exists
geneGene name from UniProt
latest_versionLatest AlphaFold model version
locusstringyes
mean_plddtGlobal mean pLDDT confidence (0–100)
model_createdModel creation date (ISO 8601)
model_entity_ide.g. AF-Q9SZ92-F1
organismOrganism scientific name
pae_image_urlPredicted-aligned-error image URL
pdb_urlPDB model download URL
plddt_bandsFraction of residues per confidence band
residue_rangeModelled residue span {start, end}

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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
resultComposed 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 ~189

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
locusstringyesArabidopsis AGI locus, e.g. AT1G01060 (a bare AGI is transcript-scoped to .1)
organismstring|integerArabidopsis only (the 1001 Genomes panel is A. thaliana)
NameTypeReqDescription
foundbooleanyesTrue once the effects endpoint returned 200
locusstringyes
organismstringyesAlways arabidopsis_thaliana
regionGenomic span, e.g. 'Chr1:33666..37840'
returnedintegeryesEffect rows returned (post-cap)
transcriptstringyesTranscript-scoped gene id used (e.g. AT1G01060.1)
truncatedbooleanyesTrue if the effect list was capped
variant_countintegeryesTotal effect rows (pre-cap)
variantsarrayPer-effect {chr, position, accession_id, effect, impact, amino_acid_change, …}

No examples provided.

aragwas_associations ~170

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 effect size (score), minor-allele frequency, the SNP's predicted molecular effect (impact, amino-acid change), and the phenotype/study it came from. association_count is the true total even when page-capped. ARABIDOPSIS-ONLY — any other organism raises OrganismNotSupported. Defaults to arabidopsis_thaliana.

NameTypeReqDescription
locusstringyesArabidopsis AGI locus, e.g. AT1G01060
organismstring|integerArabidopsis only (the 1001 Genomes panel is A. thaliana)
NameTypeReqDescription
association_countintegeryesTotal associations (pre-cap)
associationsarrayPer-hit {score, maf, mac, snp{…}, study{…}}
foundbooleanyesTrue once the associations endpoint returned 200
locusstringyes
organismstringyesAlways arabidopsis_thaliana
returnedintegeryesAssociations returned (post page-cap)
truncatedbooleanyesTrue if pagination was capped

No examples provided.

atted_coexpression ~217

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 + z-score (higher = stronger coexpression). The ATTED-II release (e.g. Ath-u.c4-0 for Arabidopsis, Osa-u.c1-0 for rice) is resolved per-organism; wheat, sorghum, barley, poplar, and brachypodium have no published release and raise OrganismNotSupported. 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|integerPlant 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

No examples provided.

bar_aiv_interactions ~241

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, comments, pipe-split tags); 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|integerarabidopsis_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
papersarrayGRN paper refs (populated when kind=grn_papers)
partnersarrayPPI predictions (populated when kind=ppi_predictions)
source_urlstringyesBAR AIV endpoint URL for traceability

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
probesetMicroarray probeset ID, uniform across ecotypes for one gene
source_urlstringyesBAR world-eFP endpoint URL for traceability
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
agiAGI primary identifier echoed by ThaleMine, e.g. "AT1G01010"
aliasesarrayCross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded.
brief_descriptionGene.briefDescription — short blurb (often same as full_name)
computational_descriptionGene.tairComputationalDescription — Araport11-sourced computed description
curator_summaryGene.tairCuratorSummary — the TAIR-curated functional summary prose
full_nameGene name from ThaleMine
locusstringyes
ncbi_gene_idNCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref
source_urlstringyesThaleMine endpoint URL for traceability
speciesstringyes
symbolGene symbol, e.g. "NAC001"
synonymsarrayTAIR aliases (CSV from Gene.tairAliases, split on commas + stripped)
tair_locus_idTAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935"
tair_short_descriptionGene.tairShortDescription — TAIR-specific short description

No examples provided.

batch_atted_coexpression ~76

Batch version of atted_coexpression. Up to 50 loci per call.

NameTypeReqDescription
lociarrayyes
organismstring|integerPlant 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|integerarabidopsis_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|integerPlant 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|integerPlant 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 ~80

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)
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 ~134

Batch version of kegg_pathways. Up to 50 loci per call. v1.1.0: only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for other plants and our cross-backend locus contract can't produce those yet, so a non-ath organism= raises OrganismNotSupported before any HTTP fan-out.

NameTypeReqDescription
lociarrayyes
organismstring|integerPlant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge lands
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
limitintegerMax 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|integerPlant 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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
sizeintegerMax 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|integerPlant 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|integerPlant 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 ~76

Batch version of string_interactions. Up to 50 inputs per call.

NameTypeReqDescription
limitinteger
loci_or_accessionsarrayyes
organismstring|integerPlant 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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
resultComposed 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 ~333

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 [NotFoundError] with the RID preserved so the client can re-poll. Set PLANT_GENOMICS_MCP_NCBI_EMAIL to identify the request per NCBI etiquette.

NameTypeReqDescription
databasestringNCBI BLAST database slug (e.g. swissprot, core_nt, refseq_protein). Defaults to swissprot for protein programs and core_nt for nucleotide programs.
expectnumberE-value threshold (default 10).
hitlist_sizeintegerMax hits to return (default 10).
max_waitnumberMax seconds to wait for the search to finish before raising NotFoundError with the RID preserved (default 600).
megablastbooleanEnable megablast (blastn only). Default false.
poll_intervalnumberSeconds between polls. Clamped up to NCBI's per-RID 60s floor.
programstringBLAST 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
ridstringyesNCBI BLAST request ID — re-usable via fetch_result()
statusstringyesAlways "READY" when this object is returned

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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_ninteger
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
resultComposed 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_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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
assembly_namee.g. TAIR10
biotypeprotein_coding, lncRNA, miRNA, ...
canonical_transcript
db_typeUsually "core"
description
display_nameHuman-readable gene symbol
end
idstringyesLocus identifier, e.g. AT1G01010
logic_nameSource annotation pipeline
object_typeUsually "Gene"
organismstringyesPlant organism canonical slug, e.g. arabidopsis_thaliana
seq_region_nameChromosome / contig name
source
start
strand1 forward, -1 reverse

No examples provided.

ensembl_region_query ~211

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. Defaults to arabidopsis_thaliana; pass organism= for other species.

NameTypeReqDescription
endintegeryes1-based inclusive end
featurestringFeature type to return
organismstring|integerPlant 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.

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|integerPlant 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_symbolGene symbol from ThaleMine
locusstringyes
organismstringyesCanonical organism slug (Arabidopsis only)
partner_countintegeryesTotal distinct partners (pre-cap)
partnersarrayPartners ordered by evidence count, descending
source_urlstringyesThaleMine gene report page
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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
accessionstringyesResolved UniProt accession
foundbooleanyesTrue if any experimental structure is deposited
locusstringyes
structure_countintegeryesTotal deposited structures (pre-cap)
structuresarrayBest-first {pdb_id, chain_id, experimental_method, resolution, coverage, …}
truncatedbooleanyesTrue if the structure list was capped

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
resultComposed 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 ~187

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. 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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
top_nintegerCaps GO terms, pathways, interactors, xrefs, and papers per section
NameTypeReqDescription
elapsed_snumberyesTotal orchestrator wall time
inputobjectyesEchoed input arguments
resultComposed 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.

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|integerPlant 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|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
seq_typestringSequence type to fetch
NameTypeReqDescription
description
ensembl_idResolved 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
versionEnsembl 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
backgroundarrayOptional custom statistical background gene set
lociarrayyesQuery gene set, e.g. ['AT2G46830', 'AT1G01060', ...]
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
sourcesarrayAnnotation sources to test (default: all four)
top_nintegerMax terms returned, sorted by p-value (1–200, default 50)
user_thresholdnumberSignificance 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 ~197

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. Returns target_locus + homology category (type) + shared gene_tree_id per hit. The fl=homology projection does not carry per-row taxon, identity, or protein ID; pair with resolve_locus_to_uniprot for protein-level enrichment and with blast_sequence for sequence similarity discovery.

NameTypeReqDescription
homology_typestringFilter on homology kind
limitintegerMax 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)
NameTypeReqDescription
homologsarrayyes
locusstringyes
releasestringyesGramene release identifier, e.g. v69
totalintegeryesNumber of homologs after filtering, BEFORE the row cap
truncatedbooleanTrue when the row list was capped (< total); pass limit= to change the cap

No examples provided.

interpro_domains ~245

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.

NameTypeReqDescription
locusstringyese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
accessionstringyesResolved UniProt accession
count_by_typeobjectyesRollup of entry count by type
domain_countintegeryesTotal InterPro entries (pre-cap)
domainsarrayyes
foundbooleanyesTrue once the locus resolved to a UniProt entry
locusstringyes
truncatedbooleanyesTrue if the row list was page-capped (< domain_count)
upstream_versionInterPro release that produced THIS response, as stated by the upstream's own header (e.g. '109.0'). null means InterPro did not state one — never that no release exists, and never inferred from a se…

No examples provided.

jaspar_motif ~162

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

NameTypeReqDescription
matrix_idstringyesJASPAR profile id, e.g. MA0570.1 or MA0570 (latest version)
NameTypeReqDescription
base_idVersion-less profile id, e.g. MA0570
collectionCORE / PBM / UNVALIDATED / …
consensusIUPAC consensus derived from the PFM, e.g. 'AAATATCT' (the Evening Element)
data_typeAssay the profile derives from: SELEX / ChIP-seq / PBM / DAP-seq
lengthMotif width in bases
matrix_idJASPAR profile id, e.g. MA0570.1
nameTF name as curated by JASPAR
pfmPosition-frequency matrix: per-base count vectors keyed A/C/G/T
pubmed_idsarraySupporting PubMed IDs
sequence_logoURL of the SVG sequence logo
speciesarraySource species [{tax_id, name}]
tf_classStructural class, e.g. ['Basic leucine zipper factors (bZIP)']
tf_familyTF family, e.g. ['MYB-related']
uniprot_idsarrayUniProt accessions JASPAR attributes the profile to
versionJASPAR release version of the profile
web_urlJASPAR profile page

No examples provided.

kegg_pathways ~239

Fetch KEGG pathway memberships for an Arabidopsis 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. Multi-organism caveat (v1.1.0): the organism= field accepts any plant in the matrix for symmetry with the other backends, but only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for rice/maize/etc. and our cross-backend locus contract can't produce those yet, so any other organism raises OrganismNotSupported before any HTTP call. KEGG v118+ is case-sensitive on the locus: pass AGI loci as uppercase.

NameTypeReqDescription
locusstringyesArabidopsis AGI locus, e.g. AT1G01010 (case preserved verbatim — KEGG v118+ is case-sensitive)
organismstring|integerPlant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge lands
NameTypeReqDescription
entrez_gene_idEntrez Gene ID from the non-Arabidopsis KEGG↔Entrez bridge; absent for ath.
errorsarrayPer-pathway step-2 failures (kept inline so the call doesn't abort)
kegg_gene_idstringyese.g. "ath:at1g01010"
locusstringyes
organismstringyesResolved canonical organism slug, e.g. arabidopsis_thaliana
pathwaysarrayyes

No examples provided.

locus_gene_rifs ~242

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.

NameTypeReqDescription
locusstringyesAGI locus, e.g. AT5G11260 (HY5)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only.
NameTypeReqDescription
foundbooleanyesTrue if the gene has at least one GeneRIF
gene_rifsarrayCurated statements in upstream order
gene_symbolGene symbol from ThaleMine
locusstringyes
organismstringyesCanonical organism slug (Arabidopsis only)
rif_countintegeryesTotal GeneRIFs (pre-cap)
source_urlstringyesThaleMine gene report page
truncatedbooleanyesTrue if the GeneRIF list was capped

No examples provided.

locus_go_annotations ~209

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.

NameTypeReqDescription
limitintegerMax annotations from QuickGO (1–100, default 50)
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
annotationsarrayyes
by_aspectobjectyesaspect → [{goId, goName}, ...], deduped on goId
locusstringyes
numberOfHitsintegeryesTotal annotations available upstream
returnedintegeryesNumber of annotations in annotations[]
uniprot_accessionstringyesUniProt accession used to query QuickGO

No examples provided.

locus_literature ~251

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, and abstract. 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.

NameTypeReqDescription
include_abstractbooleanSet false to null out abstractText, which is ~67% of this payload. The response echoes 'abstracts_included' so a null abstract is not mistaken for an article that has none.
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
sizeintegerMax results (1–25, default 10)
NameTypeReqDescription
abstracts_includedbooleanFalse when include_abstract=False was passed, in which case every abstractText is null because it was not requested — not because the article lacks one. Abstracts are ~67% of this payload.
hitCountintegeryesTotal hits available upstream (may exceed returned)
hitsarrayyes
locusstringyes
organismstringyes
querystringyesFinal query string sent to Europe PMC
returnedintegeryesNumber of hits actually in hits[]

No examples provided.

locus_plant_ontology ~306

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. Coverage is strong for arabidopsis, rice, maize, grape, soybean, tomato; other organisms return an empty list, not an error. Defaults to arabidopsis_thaliana; pass organism= for other species.

NameTypeReqDescription
limitintegerMax annotations from Planteome (1–200, default 100)
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
annotationsarrayyes
by_ontologyobjectyesnamespace → [{term_id, term_name}, ...], deduped on term_id
locusstringyes
numberOfHitsintegeryesTotal annotations available upstream
organismstringyesCanonical organism slug
returnedintegeryesNumber of annotations in annotations[]
taxonstringyesNCBI taxon filter applied, e.g. NCBITaxon:3702

No examples provided.

locus_variants ~232

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.

NameTypeReqDescription
limitintegerMax variant rows to return. 'variant_count' always reports the true pre-cap total and 'truncated' says whether the cap bit.
locusstringyese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismstring|integerPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid
NameTypeReqDescription
gene_endGene span end (1-based)
gene_startGene span start (1-based)
locusstringyes
organismstringyesResolved Ensembl species slug
regionstringyesQueried gene span, e.g. '1:33666-37840'
truncatedbooleanyesTrue if the variant list was capped
variant_countintegeryesTotal overlapping variants (pre-cap)
variantsarrayPer-variant {id, source, consequence_type, alleles, …}

No examples provided.

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, 50 tools across 23 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 86 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 50 tools: ensembl_plants_lookup_locus, get_gene_xrefs, get_sequence, ensembl_region_query, phytozome_lookup_locus, and 45 more. Their descriptions and schemas cost roughly 9,711 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 20 September 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.