Plant Genomics
PYPI · PLANT-GENOMICS-MCP
Plant genomics MCP — 58 tools across 24 backends with cross-source synthesis.
Available components
Last scanned (17 hours ago)
Scores higher than 82% of PyPI servers
Category Health and Science
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
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
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 →
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 →
alphafold_structure AlphaFold: Predicted 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | Resolved 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 |
| found | boolean | yes | True if a predicted model exists |
| gene | – | – | Gene name from UniProt |
| latest_version | – | – | Latest AlphaFold model version |
| locus | string | yes | – |
| 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_ranges | object | yes | Band -> [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 Synthesis: Locus Overview ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Locus name, e.g. AT1G01010 |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsed_s | number | yes | Total orchestrator wall time |
| input | object | yes | Echoed input arguments |
| result | – | – | Composed cross-source result; None if root step failed |
| started_at | string | yes | ISO 8601 UTC timestamp |
| steps | array | yes | Per-backend execution rows |
| tool | string | yes | Synthesis tool name, e.g. analyze_locus_synth |
No examples provided.
arabidopsis_natural_variation 1001 Genomes: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| locus | string | yes | Arabidopsis AGI locus, e.g. AT1G01060 (a bare AGI is transcript-scoped to .1) |
| organism | string|integer | – | Arabidopsis only (the 1001 Genomes panel is A. thaliana) |
| Name | Type | Req | Description |
|---|---|---|---|
| found | boolean | yes | True once the effects endpoint returned 200 |
| locus | string | yes | – |
| 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) |
| organism | string | yes | Always arabidopsis_thaliana |
| region | – | – | Genomic span, e.g. 'Chr1:33666..37840' |
| returned | integer | yes | Effect rows returned (post-cap) |
| total | integer | yes | How many variant effects exist upstream for this query, all pages (pre-cap) (#123) |
| transcript | string | yes | Transcript-scoped gene id used (e.g. AT1G01060.1) |
| truncated | boolean | yes | True if the effect list was capped |
| variant_count | integer | yes | Total effect rows (pre-cap) |
| variants | array | – | Per-effect {chr, position, accession_id, effect, impact, amino_acid_change, …} |
No examples provided.
aragwas_associations AraGWAS: GWAS 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| limit | integer | – | Max associations, strongest first (1–100, default 25) |
| locus | string | yes | Arabidopsis AGI locus, e.g. AT1G01060 |
| organism | string|integer | – | Arabidopsis only (the 1001 Genomes panel is A. thaliana) |
| Name | Type | Req | Description |
|---|---|---|---|
| association_count | integer | yes | Total associations (pre-cap) |
| associations | array | – | 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… |
| found | boolean | yes | True once the associations endpoint returned 200 |
| locus | string | yes | – |
| 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) |
| organism | string | yes | Always arabidopsis_thaliana |
| returned | integer | yes | Associations returned (post page-cap) |
| total | integer | yes | How many associations exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 ATTED-II: 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).
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Plant locus, e.g. AT1G01010 (Arabidopsis) or Os01g0100100 (rice) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| top_n | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| atted_release | string | yes | ATTED-II DB identifier, e.g. Ath-u.c4-0 (release version included) |
| locus | string | yes | – |
| neighbors | array | yes | – |
| returned | integer | yes | Rows in this payload (#123) |
| score_type | string | yes | The 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 BAR: Predicted 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | AGI locus (AT1G01010) for Arabidopsis or MSU locus (LOC_Os01g01080) for rice |
| organism | string|integer | – | arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Total rows returned (len of papers or partners) |
| kind | string | yes | Discriminator: grn_papers (Arabidopsis) or ppi_predictions (rice) |
| locus | string | yes | – |
| organism | string | yes | – |
| papers | array | – | GRN paper refs (populated when kind=grn_papers) |
| partners | array | – | PPI predictions (populated when kind=ppi_predictions) |
| source_url | string | yes | BAR 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 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).
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Arabidopsis AGI locus, e.g. AT1G01010 |
| Name | Type | Req | Description |
|---|---|---|---|
| ecotype_count | integer | yes | Number of ecotype rows in `ecotypes` |
| ecotypes | array | yes | – |
| locus | string | yes | – |
| probeset | – | – | Microarray probeset ID, uniform across ecotypes for one gene |
| source_url | string | yes | BAR world-eFP endpoint URL for traceability — a link for the client to open or fetch; no tool on this server dereferences it |
| species | string | yes | – |
No examples provided.
bar_gene_summary 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Arabidopsis AGI locus, e.g. AT1G01010 |
| Name | Type | Req | Description |
|---|---|---|---|
| agi | – | – | AGI primary identifier echoed by ThaleMine, e.g. "AT1G01010" |
| aliases | array | – | 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 |
| locus | string | yes | – |
| ncbi_gene_id | – | – | NCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref |
| source_url | string | yes | ThaleMine endpoint URL for traceability — a link for the client to open or fetch; no tool on this server dereferences it |
| species | string | yes | – |
| symbol | – | – | Gene symbol, e.g. "NAC001" |
| synonyms | array | – | 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 Batch: ATTED-II 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).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | – |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| top_n | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_bar_aiv_interactions Batch: BAR Predicted 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).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_bar_gene_summary 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.
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_ensembl_plants_lookup_locus Batch: Ensembl Plants Locus Metadata ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_get_gene_xrefs Batch: Gene Cross-References ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_gramene_homologs 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).
| Name | Type | Req | Description |
|---|---|---|---|
| homology_type | string | – | – |
| loci | array | yes | List of locus identifiers (max 50) |
| target_organism | string|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_organism | boolean | – | Add 'organism' (Gramene species slug, null when unknown) to every row without filtering; one extra call per 100 rows (#130) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_kegg_pathways 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).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | – |
| organism | string|integer | – | Plant organism — accepts canonical slug, scientific or common name, or NCBI taxid; see the tool description for which KEGG covers |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_locus_call Batch: Any Locus Tool ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| args | object | – | The tool's arguments other than 'locus' (and not 'cursor'), e.g. {"organism": "oryza_sativa"} |
| loci | array | yes | Locus identifiers (max 50) |
| tool | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_locus_go_annotations Batch: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max annotations per locus from QuickGO (1–100, default 50) |
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_locus_literature Batch: 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[]).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| size | integer | – | Max results per locus (1–25, default 10) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_phytozome_lookup_locus Batch: Phytozome Locus Metadata ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_resolve_locus_to_uniprot Batch: Resolve Locus → 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 + …).
| Name | Type | Req | Description |
|---|---|---|---|
| loci | array | yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
batch_string_interactions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| loci | array | yes | – |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number 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… |
| errors | object | yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | object | yes | locus → per-locus result dict (same shape as the single-locus tool) |
| tool | string | yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
No examples provided.
biological_context_synth Synthesis: Biological Context ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | – |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| top_n | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsed_s | number | yes | Total orchestrator wall time |
| input | object | yes | Echoed input arguments |
| result | – | – | Composed cross-source result; None if root step failed |
| started_at | string | yes | ISO 8601 UTC timestamp |
| steps | array | yes | Per-backend execution rows |
| tool | string | yes | Synthesis tool name, e.g. analyze_locus_synth |
No examples provided.
blast_sequence BLAST: Sequence Search (NCBI) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| database | string | – | NCBI BLAST database slug (e.g. swissprot, core_nt, refseq_protein). Defaults to swissprot for protein programs and core_nt for nucleotide programs. |
| expect | number | – | E-value threshold (default 10). |
| hitlist_size | integer | – | Max hits to return (default 10). |
| max_wait | number | – | Max seconds to wait for the search to finish before raising UpstreamUnavailableError with the RID preserved (default 600). |
| megablast | boolean | – | Enable megablast (blastn only). Default false. |
| poll_interval | number | – | Seconds between polls. Clamped up to NCBI's per-RID 60s floor. |
| program | string | – | BLAST program — default blastp. |
| sequence | string | yes | Raw or FASTA-formatted query sequence. |
| Name | Type | Req | Description |
|---|---|---|---|
| database | string | yes | NCBI BLAST database, e.g. swissprot, core_nt |
| elapsed_seconds | number | yes | Wall-clock from submit to READY |
| hitCount | integer | yes | Number of rows parsed from the alignment summary |
| hits | array | yes | Top alignments, sorted by BLAST default order |
| program | string | yes | blastn | blastp | blastx | tblastn | tblastx |
| raw_report_excerpt | string | yes | First 50 KB of the FORMAT_TYPE=Text report |
| raw_report_truncated | boolean | yes | True if the upstream report exceeded the cap |
| returned | integer | yes | Rows in this payload (#123) |
| rid | string | yes | NCBI BLAST request ID — re-usable via fetch_result() |
| status | string | yes | Always "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 Synthesis: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | – |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| top_n | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsed_s | number | yes | Total orchestrator wall time |
| input | object | yes | Echoed input arguments |
| result | – | – | Composed cross-source result; None if root step failed |
| started_at | string | yes | ISO 8601 UTC timestamp |
| steps | array | yes | Per-backend execution rows |
| tool | string | yes | Synthesis tool name, e.g. analyze_locus_synth |
No examples provided.
ensembl_plants_assembly 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).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| organism | string|integer | yes | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| assembly_accession | – | yes | INSDC assembly accession (GCA_...) |
| assembly_date | – | yes | Assembly date as Ensembl gives it (YYYY-MM); null when Ensembl gives none |
| assembly_name | – | yes | Assembly name, e.g. TAIR10, IRGSP-1.0 |
| karyotype | array | yes | The chromosomes, in Ensembl's karyotype order |
| organism | string | yes | Canonical organism slug |
| regions | array | yes | Karyotype regions first, in karyotype order; then the rest, longest first |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many top-level regions exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 Ensembl Plants: Locus Metadata ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| assembly_name | – | – | e.g. TAIR10 |
| biotype | – | – | protein_coding, lncRNA, miRNA, ... |
| canonical_transcript | – | – | – |
| db_type | – | – | Usually "core" |
| description | – | – | – |
| display_name | – | – | Human-readable gene symbol |
| end | – | – | – |
| id | string | yes | Locus identifier, e.g. AT1G01010 |
| logic_name | – | – | Source annotation pipeline |
| object_type | – | – | Usually "Gene" |
| organism | string | yes | Plant 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| locus | string | yes | e.g. AT1G19850 (Arabidopsis), Os04g0519700 (rice) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| counts_by_type | object | yes | Paralogues per type, counted before limit |
| found | boolean | yes | False when Compara keeps no homology record for this gene at all (e.g. a non-coding gene); true otherwise, even with no paralogue |
| locus | string | yes | The locus asked about |
| organism | string | yes | Canonical organism slug |
| paralogs | array | yes | Closest first (perc_id descending) |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many paralogues exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 Genomic Region → Features ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| end | integer | yes | 1-based inclusive end |
| feature | string | – | Feature type to return |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| region | string | yes | seq-region name (chromosome / contig), e.g. '1' or 'Chr1' |
| start | integer | yes | 1-based start |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number of overlapping features returned |
| feature | string | yes | Feature type queried |
| features | array | yes | Raw Ensembl overlap records |
| organism | string | yes | – |
| region | string | yes | seq_region:start-end, e.g. 1:3000-10000 |
No examples provided.
entry_members Family / Domain 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first |
| entry | string | yes | InterPro (IPR010525), Pfam (PF06507) or PANTHER family (PTHR31384) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| page_size | integer | – | – |
| reviewed_only | boolean | – | Only Swiss-Prot (curated) proteins |
| Name | Type | Req | Description |
|---|---|---|---|
| entry | string | yes | The entry asked about, e.g. IPR010525 |
| entry_database | string | yes | – |
| members | array | yes | – |
| next_cursor | – | – | Pass back as cursor= for the next page; null on the last |
| organism | string | yes | – |
| query | string | yes | The UniProt query that produced this answer |
| returned | integer | yes | Rows in this payload (#123) |
| reviewed_only | boolean | yes | – |
| taxid | integer | yes | – |
| total | integer | yes | How many proteins matching the UniProt query exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 ThaleMine: 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).
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | AGI locus, e.g. AT5G11260 (HY5) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only. |
| Name | Type | Req | Description |
|---|---|---|---|
| evidence_count | integer | yes | Total evidence records across all partners (pre-cap) — counted over every partner upstream, not only the partners listed here |
| found | boolean | yes | True if any curated interaction exists for this locus |
| gene_symbol | – | – | Gene symbol from ThaleMine |
| locus | string | yes | – |
| organism | string | yes | Canonical organism slug (Arabidopsis only) |
| partner_count | integer | yes | Total distinct partners (pre-cap) |
| partners | array | – | Partners ordered by evidence count, descending |
| returned | integer | yes | Rows in this payload (#123) |
| source_url | string | yes | ThaleMine gene report page — a link for the client to open or fetch; no tool on this server dereferences it |
| total | integer | yes | How many interaction partners exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the partner list was capped |
No examples provided.
experimental_structures PDBe: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | Resolved UniProt accession |
| entry_count | integer | yes | Distinct PDB entries among the rows; structure_count counts chains (#123) |
| found | boolean | yes | True if any experimental structure is deposited |
| locus | string | yes | – |
| returned | integer | yes | Rows in this payload (#123) |
| structure_count | integer | yes | PDBe rows, pre-cap — one per CHAIN, not per entry (see entry_count) |
| structures | array | – | Best-first {pdb_id, chain_id, experimental_method, resolution, coverage, …} |
| total | integer | yes | How many PDBe best_structures rows (one per chain) exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 Synthesis: Homolog Search ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| program | string | – | – |
| sequence | string | yes | Query sequence (protein or nucleotide) |
| top_n | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsed_s | number | yes | Total orchestrator wall time |
| input | object | yes | Echoed input arguments |
| result | – | – | Composed cross-source result; None if root step failed |
| started_at | string | yes | ISO 8601 UTC timestamp |
| steps | array | yes | Per-backend execution rows |
| tool | string | yes | Synthesis tool name, e.g. analyze_locus_synth |
No examples provided.
gene_report Synthesis: Gene Report (Markdown dossier) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Locus name, e.g. AT1G01010 |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| top_n | integer | – | Caps GO terms, pathways, interactors, xrefs, and papers per section |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsed_s | number | yes | Total orchestrator wall time |
| input | object | yes | Echoed input arguments |
| result | – | – | Composed cross-source result; None if root step failed |
| started_at | string | yes | ISO 8601 UTC timestamp |
| steps | array | yes | Per-backend execution rows |
| tool | string | yes | Synthesis tool name, e.g. analyze_locus_synth |
No examples provided.
gene_tree_members 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.
| Name | Type | Req | Description |
|---|---|---|---|
| gene_tree_id | string | – | e.g. EPlGT00940000167082. Omit when passing locus. |
| limit | integer | – | – |
| locus | string | – | Any member gene, e.g. AT1G01010; Ensembl finds its current tree. Omit when passing gene_tree_id. |
| organism | string|integer | – | The organism of locus — canonical slug, scientific or common name, or NCBI taxid. |
| target_organism | string|integer | – | Keep one organism's members — canonical slug, scientific or common name, or NCBI taxid. Omit for every species. |
| Name | Type | Req | Description |
|---|---|---|---|
| gene_tree_id | string | yes | The 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 |
| members | array | yes | – |
| organism | – | – | The organism of locus; null when asked by gene_tree_id |
| returned | integer | yes | Rows in this payload (#123) |
| target_organism | – | yes | The organism filter; null = every species |
| total | integer | yes | How many members after the organism filter exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True 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 Gene Cross-References ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| by_db | object | yes | dbname → primary_ids[]; e.g. {'Uniprot_gn': ['Q0WV96']} |
| count | integer | yes | Number of xref records returned |
| locus | string | yes | – |
| organism | string | yes | – |
| xrefs | array | yes | Raw Ensembl xref records |
No examples provided.
get_sequence Gene / CDS / Protein 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.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| seq_type | string | – | Sequence type to fetch |
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | – |
| ensembl_id | – | – | Resolved Ensembl stable id |
| length | integer | yes | Sequence length (residues for protein, bases otherwise) |
| locus | string | yes | – |
| molecule | – | – | "dna" or "protein" |
| organism | string | yes | Resolved canonical organism slug |
| sequence | string | yes | The sequence string; feed to blast_sequence |
| type | string | yes | Sequence type requested |
| version | – | – | Ensembl sequence version |
No examples provided.
go_enrichment GO / KEGG Enrichment (gene list) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| background | array | – | Optional custom statistical background gene set |
| loci | array | yes | Query gene set, e.g. ['AT2G46830', 'AT1G01060', ...] |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| sources | array | – | Annotation sources to test (default: all four) |
| top_n | integer | – | Max terms returned, sorted by p-value (1–200, default 50) |
| user_threshold | number | – | Significance cutoff, g:SCS-corrected (default 0.05) |
| Name | Type | Req | Description |
|---|---|---|---|
| enriched | array | yes | – |
| gprofiler_id | string | yes | g:Profiler organism ID used, e.g. athaliana |
| mapped | integer | yes | Loci g:Profiler recognized |
| organism | string | yes | Canonical organism slug |
| query_size | integer | yes | Number of loci submitted |
| returned | integer | yes | Terms in enriched[] after the top_n cap |
| sources | array | yes | Annotation sources queried |
| total_terms | integer | yes | Significant terms before the top_n cap |
| unmapped | array | yes | Loci g:Profiler could not map |
No examples provided.
gramene_homologs 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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| homology_type | string | – | Filter on homology kind |
| limit | integer | – | Max homolog rows to return. 'total' always reports the true pre-cap count and 'truncated' says whether the cap bit. |
| locus | string | yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) |
| target_organism | string|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_organism | boolean | – | Add 'organism' (Gramene species slug, null when unknown) to every row without filtering; one extra call per 100 rows (#130) |
| Name | Type | Req | Description |
|---|---|---|---|
| excluded_categories | object | yes | Homologs 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… |
| homologs | array | yes | – |
| locus | string | yes | – |
| 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) |
| release | string | yes | Gramene release identifier, e.g. v69 |
| returned | integer | yes | Rows in this payload (#123) |
| target_organism | – | – | Canonical organism the rows were filtered to, when target_organism was passed |
| total | integer | yes | How 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 |
| truncated | boolean | – | 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.
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
claude mcp add musharna-plant-genomics-mcp -- uvx plant-genomics-mcp
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.