Plant Genomics
PYPI · PLANT-GENOMICS-MCP
Plant genomics MCP — 58 tools across 24 backends with cross-source synthesis.
Available components
Last scanned (20 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 →
interpro_domains InterPro: Protein 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.
| 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 |
| count_by_type | object | yes | Rollup of entry count by type |
| domain_count | integer | yes | Total InterPro entries (pre-cap) |
| domains | array | yes | – |
| found | boolean | yes | True once the locus resolved to a UniProt entry |
| locus | string | yes | – |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many InterPro entries on this protein exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the row list was page-capped (< domain_count) |
| upstream_version | – | – | InterPro 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 JASPAR: Motif Matrix ~178
Fetch one JASPAR binding profile by matrix id, including its raw position-frequency matrix (PFM: per-base count vectors keyed A/C/G/T) plus TF class/family, assay type, source species, UniProt accessions, PubMed refs, IUPAC consensus, and the sequence-logo URL (a link for the client to fetch; no tool on this server retrieves it). The drill-down companion to tf_binding_motifs, which returns the derived consensus but not the matrix. Accepts a versioned id (MA0570.1) or a bare base id (MA0570, which resolves to the newest version). Unknown ids raise a typed NotFoundError.
| Name | Type | Req | Description |
|---|---|---|---|
| matrix_id | string | yes | JASPAR profile id, e.g. MA0570.1 or MA0570 (latest version) |
| Name | Type | Req | Description |
|---|---|---|---|
| base_id | – | – | Version-less profile id, e.g. MA0570 |
| collection | – | – | CORE / PBM / UNVALIDATED / … |
| consensus | – | – | IUPAC consensus derived from the PFM, e.g. 'AAATATCT' (the Evening Element) |
| data_type | – | – | Assay the profile derives from: SELEX / ChIP-seq / PBM / DAP-seq |
| length | – | – | Motif width in bases |
| matrix_id | – | – | JASPAR profile id, e.g. MA0570.1 |
| name | – | – | TF name as curated by JASPAR |
| pfm | – | – | Position-frequency matrix: per-base count vectors keyed A/C/G/T |
| pubmed_ids | array | – | Supporting PubMed IDs |
| sequence_logo | – | – | URL of the SVG sequence logo — a link for the client to open or fetch; no tool on this server dereferences it |
| species | array | – | Source species [{tax_id, name}] |
| tf_class | – | – | Structural class, e.g. ['Basic leucine zipper factors (bZIP)'] |
| tf_family | – | – | TF family, e.g. ['MYB-related'] |
| uniprot_ids | array | – | UniProt accessions JASPAR attributes the profile to |
| version | – | – | JASPAR release version of the profile |
| web_url | – | – | JASPAR profile page — a link for the client to open or fetch; no tool on this server dereferences it |
No examples provided.
kegg_pathways KEGG Pathways ~272
Fetch KEGG pathway memberships for a plant locus from rest.kegg.jp. Returns a list of pathway IDs + names + KEGG category classes the locus participates in. Pairs with locus_go_annotations for the GO-level functional view. Covers: arabidopsis_thaliana, brachypodium_distachyon, glycine_max, hordeum_vulgare, oryza_sativa, populus_trichocarpa, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms). Non-Arabidopsis loci are bridged to the NCBI Entrez Gene ID KEGG indexes (returned as entrez_gene_id). A gene KEGG knows with no pathway memberships is an ok answer with pathways=[]; a gene KEGG has no record of raises NotFoundError. KEGG v118+ is case-sensitive on the locus: pass AGI loci as uppercase.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | Arabidopsis AGI locus, e.g. AT1G01010 (case preserved verbatim — KEGG v118+ is case-sensitive) |
| 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 |
|---|---|---|---|
| entrez_gene_id | – | – | Entrez Gene ID from the non-Arabidopsis KEGG↔Entrez bridge; absent for ath. |
| errors | array | – | Per-pathway step-2 failures (kept inline so the call doesn't abort) |
| kegg_gene_id | string | yes | e.g. "ath:at1g01010" |
| locus | string | yes | – |
| organism | string | yes | Resolved canonical organism slug, e.g. arabidopsis_thaliana |
| pathways | array | yes | – |
| upstream_version | – | – | KEGG release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='kegg') reports the release its own endpoint calls current at… |
No examples provided.
locus_gene_rifs GeneRIF Functional Statements ~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.
| 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 |
|---|---|---|---|
| found | boolean | yes | True if the gene has at least one GeneRIF |
| gene_rifs | array | – | Curated statements in upstream order |
| gene_symbol | – | – | Gene symbol from ThaleMine |
| locus | string | yes | – |
| organism | string | yes | Canonical organism slug (Arabidopsis only) |
| returned | integer | yes | Rows in this payload (#123) |
| rif_count | integer | yes | Total GeneRIFs (pre-cap) |
| 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 GeneRIFs exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the GeneRIF list was capped |
No examples provided.
locus_go_annotations GO Annotations ~261
Fetch Gene Ontology annotations for a plant locus from QuickGO (EBI). Free, no API key. The locus is first resolved to a UniProt accession via the same logic as resolve_locus_to_uniprot, then QuickGO is queried by geneProductId. Returns annotations[] with goId/goName/goAspect/qualifier/evidence + a by_aspect rollup ({molecular_function: [{goId, goName}, ...], biological_process: [...], cellular_component: [...]}) deduped on goId so the high-level term set is one read away; by_aspect_deduped_on names that key in the payload. truncated is true when numberOfHits exceeds returned — raise limit (max 100).
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| limit | integer | – | Max annotations from QuickGO (1–100, default 50) |
| 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 |
|---|---|---|---|
| annotations | array | yes | – |
| by_aspect | object | yes | aspect → [{goId, goName}, ...], deduped on goId, over annotations[] only |
| by_aspect_deduped_on | string | yes | The key by_aspect collapses annotations[] on: a dedup, not a truncation |
| 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) |
| numberOfHits | integer | yes | Total annotations available upstream |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many GO annotations (QuickGO numberOfHits) exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True when numberOfHits exceeds returned (raise `limit`) |
| uniprot_accession | string | yes | UniProt accession used to query QuickGO |
| upstream_version | – | – | QuickGO release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='quickgo') reports the release its own endpoint calls curre… |
| with_from_included | boolean | – | False when withFrom was not asked for (gene_report's GO section), in which case every withFrom is null because it was left out — not because the annotation has no partner or source cross-ref. |
No examples provided.
locus_literature Literature (Europe PMC) ~293
Search Europe PMC for literature mentioning a plant locus. Free, no API key. Returns up to `size` results (default 10, capped at 25) with title, authors, journal, year, DOI, PMID, open-access status, citation count, abstract, and the article's web_url (a link for the client to open; no tool on this server retrieves it). For non-Arabidopsis species the species common name is appended to the query to disambiguate locus IDs (rice, maize, ...). Pair with resolve_locus_to_uniprot or ensembl_plants_lookup_locus to ground the locus before fanning out to the literature.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| include_abstract | boolean | – | Set 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. |
| 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 |
| size | integer | – | Max results (1–25, default 10) |
| Name | Type | Req | Description |
|---|---|---|---|
| abstracts_included | boolean | – | False 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. |
| hitCount | integer | yes | Total hits available upstream (may exceed returned) |
| hits | 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) |
| organism | string | yes | – |
| query | string | yes | Final query string sent to Europe PMC |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many papers (Europe PMC hitCount) exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True when total > returned: more exist upstream than came back (#123) |
| upstream_version | – | – | Europe PMC release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='europe_pmc') reports the release its own endpoint calls… |
No examples provided.
locus_plant_ontology Plant Ontology (PO/TO) Terms ~317
Fetch Plant Ontology (PO) + Trait Ontology (TO) + experimental-condition (PECO) annotations for a plant locus from Planteome (browser.planteome.org, AmiGO2/GOlr; free, no API key). Complements locus_go_annotations: QuickGO serves GO (species-agnostic), Planteome serves the plant-specific ontologies — PO (anatomy + developmental stage), TO (traits). The locus is matched across Planteome's searchable bioentity fields and filtered by the organism's NCBI taxon. Returns annotations[] (term_id / term_name / ontology / aspect / evidence / reference) + a by_ontology rollup ({PO: [{term_id, term_name}, ...], TO: [...], PECO: [...]}) deduped on term_id. Planteome names genes by these locus ids for arabidopsis, rice, wheat and tomato only; other organisms are refused, and a gene Planteome has no record of is not found. Defaults to arabidopsis_thaliana; pass organism= for other species.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max annotations from Planteome (1–200, default 100) |
| 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 |
|---|---|---|---|
| annotations | array | yes | – |
| by_ontology | object | yes | namespace → [{term_id, term_name}, ...], deduped on term_id |
| locus | string | yes | – |
| numberOfHits | integer | yes | Total annotations available upstream |
| organism | string | yes | Canonical organism slug |
| returned | integer | yes | Rows in this payload (#123) |
| taxon | string | yes | NCBI taxon filter applied, e.g. NCBITaxon:3702 |
| total | integer | yes | How many annotations (Planteome numFound) exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True when total > returned: more exist upstream than came back (#123) |
No examples provided.
locus_variants Known 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max variant rows to return. 'variant_count' always reports the true pre-cap total and 'truncated' says whether the cap bit. |
| locus | string | yes | e.g. AT1G01010 (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 |
|---|---|---|---|
| gene_end | – | – | Gene span end (1-based) |
| gene_start | – | – | Gene span start (1-based) |
| locus | string | yes | – |
| organism | string | yes | Resolved Ensembl species slug |
| region | string | yes | Queried gene span, e.g. '1:33666-37840' |
| returned | integer | yes | Rows in this payload (#123) |
| total | integer | yes | How many variants overlapping the gene exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the variant list was capped |
| variant_count | integer | yes | Total overlapping variants (pre-cap) |
| variants | array | – | Per-variant {id, source, consequence_type, alleles, …} |
No examples provided.
maize_gene_model_translation MaizeGDB: B73 v4 ↔ v5 Gene-Model Translation ~275
Translate maize B73 gene-model IDs between RefGen_v4 (Zm00001d) and RefGen_v5 (Zm00001eb) with MaizeGDB's published translation table. UniProt and Ensembl Plants know only v5 IDs, so a v4 ID answers nothing there until it is translated. direction v4_to_v5 (default) or v5_to_v4. Each ID comes back mapped (targets: one, or several when the model split or merged), no_counterpart (MaizeGDB lists it with no model in the other assembly: report it as unmappable), or not_in_table (MaizeGDB does not list it, so this source says nothing about it). Gene-model IDs only, no transcript suffix; up to 1000 per call. source gives the table's URL (a link for the client to open; no tool on this server retrieves it), its Last-Modified date and sha256, so an answer can be tied to one release of the table.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | v4_to_v5 (Zm00001d → Zm00001eb) or v5_to_v4 |
| ids | array | yes | Gene-model IDs, e.g. ['Zm00001d022051'] for v4_to_v5 |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Distinct IDs queried (duplicates collapsed) |
| direction | string | yes | – |
| from_assembly | string | yes | RefGen_v4 or RefGen_v5 |
| mapped | integer | yes | Results with status mapped |
| no_counterpart | integer | yes | Results with status no_counterpart |
| not_in_table | integer | yes | Results with status not_in_table |
| results | array | yes | – |
| source | – | yes | – |
| to_assembly | string | yes | RefGen_v5 or RefGen_v4 |
| upstream_version | – | – | MaizeGDB release that produced THIS response, as stated by the table's Last-Modified header (MaizeGDB numbers no release). null means MaizeGDB did not state one — never that no release exists, and ne… |
No examples provided.
orthodb_orthologs OrthoDB: Orthologs ~409
Resolve a locus to its OrthoDB ortholog group and cross-species member genes (data.orthodb.org; free, no key). Searches at the Viridiplantae level, then returns the group metadata (name, evolutionary rate) and member genes grouped by organism (organism, gene id, description). organism_count is the true cluster total; the member list is capped with truncated flagged. found=false when the locus maps to no ortholog group. Works for all 12 organisms. NOTE: unlike the other locus tools, organism= does NOT scope the search — the group is resolved from the locus id alone at the Viridiplantae level, and organism is only validated and echoed back. Passing a mismatched organism therefore still returns the locus's real group. target_organism= DOES filter: it keeps only that organism's members, before the cap, so a 2,000-member group cannot hide rice or wheat behind 'limit'.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous page; omit for the first (#123) |
| limit | integer | – | Max ortholog member rows to return. 'member_count' always reports the true pre-cap total and 'truncated' says whether the cap bit. |
| locus | string | yes | e.g. AT1G01060 (Arabidopsis), Os01g0100100 (rice RAP-DB) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. Validated and echoed only: it does NOT scope the OrthoDB search, which keys on the locus id a… |
| target_organism | string|integer | – | Keep only this organism's members (slug, scientific/common name, or NCBI taxid), filtered BEFORE the cap. Adds 'member_count_all_organisms' for the whole group. |
| Name | Type | Req | Description |
|---|---|---|---|
| found | boolean | yes | True if the locus maps to an ortholog group |
| group | – | – | Group metadata {id, name, evolutionary_rate, level_name, …} |
| locus | string | yes | – |
| member_count | integer | yes | Member genes before the cap (pre-cap; = total) |
| member_count_all_organisms | – | – | Whole-group member total (pre-filter, pre-cap); present only when filtered |
| members | array | – | Per-gene {organism, gene_id, xref, description} |
| 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 | Canonical organism as requested — echoed, not inferred from the hit. Does not scope the search (see class docstring) |
| organism_count | integer | yes | Number of member organisms in the whole ortholog group (pre-cap) — the true cluster total, unaffected by the member cap below |
| returned | integer | yes | Rows in this payload (#123) |
| target_organism | – | – | Canonical organism the members were filtered to, when target_organism was passed |
| total | integer | yes | How many members (all organisms, or target_organism when given) exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the member list was capped |
| upstream_version | – | – | OrthoDB release that produced THIS response, as stated by the release pinned in every request path (/v12/). null means OrthoDB did not state one — never that no release exists, and never inferred fro… |
No examples provided.
panther_family PANTHER: Protein Family ~222
Fetch the PANTHER protein-family classification for a locus (pantherdb.org; free, no key). Returns the PANTHER family and subfamily (id + name) plus curated GO terms grouped by aspect (molecular_function / biological_process / cellular_component), the PANTHER protein class, and pathways. found=false when PANTHER cannot map the locus; a mapped locus can still have a null family or subfamily, which means PANTHER assigns it none. Complements the sequence-homology tools (gramene_homologs / consensus_homologs) with an evolutionary-family view. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT1G01060 (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 | – | – | PANTHER mapped accession |
| family_id | – | – | PANTHER family id, e.g. PTHR12802; null when PANTHER assigns no family |
| family_name | – | – | – |
| found | boolean | yes | True if PANTHER mapped the locus; the family fields can still be null |
| go_biological_process | array | – | – |
| go_cellular_component | array | – | – |
| go_molecular_function | array | – | – |
| locus | string | yes | – |
| pathways | array | – | – |
| protein_class | array | – | – |
| subfamily_id | – | – | e.g. PTHR12802:SF176; null when PANTHER assigns no subfamily, which is PANTHER's answer, not a failed lookup |
| subfamily_name | – | – | – |
| upstream_version | – | – | PANTHER release that produced THIS response, as stated by the answer's search.product.version. null means PANTHER did not state one — never that no release exists, and never inferred from a separate… |
No examples provided.
phytozome_lookup_locus Phytozome: Locus Metadata ~193
Fetch a gene record from Phytozome BioMart (phytozome-next.jgi.doe.gov). Defaults to arabidopsis_thaliana; pass organism= for other Phytozome proteomes (slug, scientific/common name, or NCBI taxid — e.g. glycine_max, sorghum_bicolor). Locus is the source-genome gene name (e.g. AT1G01010, Glyma.01G000100). Returns organism_name, gene_name, chromosome, gene_start, gene_end, strand, description.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT1G01010 (Arabidopsis), Glyma.01G000100 (soybean) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| chromosome | string | yes | – |
| description | string | yes | – |
| gene_end | string | yes | String — BioMart TSV is untyped |
| gene_name | string | yes | – |
| gene_start | string | yes | String — BioMart TSV is untyped |
| organism_name | string | yes | – |
| strand | string | yes | String — typically "1" or "-1" |
No examples provided.
plantcyc_locus_info PlantCyc: Metabolic Pathways ~297
Fetch metabolic annotation for a locus from PlantCyc / the Plant Metabolic Network (pmn.plantcyc.org; free BioCyc web-services API, no key). Walks gene → enzyme → catalyzed reactions → PlantCyc pathways in the organism's PGDB, returning enzymes[] + reactions[] (id/name) + pathways[] (id/name) — the metabolic-pathway view KEGG and GO don't provide. A non-enzymatic gene (e.g. a transcription factor) returns found=false with empty lists, not an error. reaction_count is the true total even when the lists are capped; pathway_count is too, or null (unknown) when the gene catalyzes more reactions than are walked for pathways. 11 organisms have a PGDB (arabidopsis, rice, maize, soybean, grape, poplar, tomato, barley, sorghum, medicago, brachypodium); wheat is not yet mapped. Defaults to arabidopsis_thaliana (AraCyc, the best-curated); pass organism= for other species.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT3G51240 (Arabidopsis), Os11g0530600 (rice RAP-DB) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| enzymes | array | yes | Product monomer (enzyme) frame ids |
| found | boolean | yes | True if the locus resolved to a metabolic gene |
| gene_common_name | – | – | Gene common name in the PGDB |
| gene_frame | – | – | Resolved PGDB gene frame id |
| locus | string | yes | – |
| organism | string | yes | Canonical organism slug |
| orgid | string | yes | PlantCyc PGDB org id, e.g. ARA (AraCyc) |
| pathway_count | – | yes | Total distinct pathways (pre-cap); null (unknown) when the gene catalyzes more reactions than are walked for pathways |
| pathways | array | yes | – |
| reaction_count | integer | yes | Total distinct reactions (pre-cap) |
| reactions | array | yes | – |
No examples provided.
resolve_locus_to_uniprot Resolve Locus → UniProt ~262
Resolve a plant locus to its canonical UniProtKB record. Prefers reviewed (Swiss-Prot) entries; falls back to unreviewed (TrEMBL) when no curated record exists (common for non-Arabidopsis plants). organism accepts a canonical slug, scientific/common name, or NCBI taxid (default arabidopsis_thaliana; e.g. oryza_sativa, zea_mays). A gene symbol answers only when it names one locus; a symbol shared by several loci (ARF1) is InvalidArguments listing them. Returns primaryAccession, uniProtkbId, entryType, recommendedName, geneNames, organism, taxonId, sequenceLength, web_url (a link for the client to open; no tool on this server retrieves it). This is the protein-side entry point — pair with InterPro / AlphaFold / Reactome / structural-bio tools.
| 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 |
|---|---|---|---|
| entryType | string | yes | e.g. 'UniProtKB reviewed (Swiss-Prot)' or '... (TrEMBL)' |
| geneNames | array | – | Gene symbols, e.g. ['NAC001'] |
| locus_query | string | yes | The locus identifier the user asked about |
| organism | – | – | Scientific name |
| primaryAccession | string | yes | UniProt accession, e.g. Q0WV96 |
| recommendedName | – | – | Recommended protein name |
| reviewed | boolean | yes | True if Swiss-Prot (curated) |
| sequenceLength | – | – | Protein length in residues |
| taxonId | – | – | NCBI taxonomy ID |
| uniProtkbId | string | yes | UniProtKB ID, e.g. NAC1_ARATH |
| upstream_version | – | – | UniProt release that produced THIS record, as stated by the upstream's own header (e.g. '2026_02'). null means UniProt did not state one — never that no release exists, and never inferred from a sepa… |
| web_url | – | – | Browser URL for the UniProt entry — a link for the client to open or fetch; no tool on this server dereferences it |
No examples provided.
string_interactions STRING: Interaction Network ~215
Fetch protein-protein interaction partners from STRING-DB (string-db.org). Accepts either a UniProt accession or a locus identifier. A locus goes to STRING's own resolver, except for wheat, whose STRING proteins carry no locus alias: a wheat locus is resolved via UniProt first. Defaults to arabidopsis_thaliana; pass organism= for other plant species (slug, scientific/common name, or NCBI taxid). Returns first-neighbor partners with the combined STRING score plus per-channel sub-scores (experimental, database, textmining, predicted). The argument was called locus_or_accession before #129; that name is still accepted, deprecated.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of partners to return |
| locus | string | yes | Locus (AT1G01010) or UniProt accession (Q0WV96) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession actually queried at STRING |
| organism | string | yes | Plant organism canonical slug, e.g. arabidopsis_thaliana |
| partners | array | yes | – |
| query | string | yes | The locus or accession the user passed |
| returned | integer | yes | Rows in this payload (#123) |
| total | – | – | Always null: the upstream returns the top partners 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 | – | – | STRING release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='string') reports the release its own endpoint calls current… |
No examples provided.
tair_locus_info TAIR-Style Locus Summary ~131
Fetch the TAIR curator-vetted Arabidopsis locus summary. Served via BAR/ThaleMine (U Toronto, Global Core Biodata Resource 2023) since TAIR's free per-locus REST API is gated behind a paid Phoenix Bioinformatics subscription. Returns TAIR curator summary + Araport11 computational description + NCBI Gene ID + cross-DB aliases (RefSeq, UniProt, TIGR locus-model IDs). Arabidopsis only. Alias of bar_gene_summary.
| 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.
tf_binding_motifs JASPAR: TF Binding Motifs ~414
Fetch curated transcription-factor DNA binding motifs for a locus from JASPAR (jaspar.elixir.no; free, no key) — the cis-regulatory view. Resolves the locus → UniProt accession + gene symbol, searches JASPAR by symbol scoped to the organism's taxid, then CONFIRMS each candidate by matching the accession against the profile's uniprot_ids. Returns per motif the JASPAR matrix id, TF class/family, assay type (SELEX / ChIP-seq / PBM / DAP-seq), an IUPAC consensus derived from the position-frequency matrix (e.g. CACGTG, the G-box/ABRE core), motif length, PubMed refs, and the SVG sequence_logo and JASPAR web_url — links for the client to fetch; no tool on this server retrieves them. IMPORTANT: JASPAR's name search is fuzzy, so name-similarity hits belonging to a DIFFERENT gene are returned separately in name_only_matches and must NOT be attributed to this locus; only `motifs` is UniProt-confirmed. found=false means the gene has no curated profile (not a TF, or its family is unprofiled for that species) — a normal outcome, not an error. Use jaspar_motif to retrieve the raw matrix for any matrix_id. Coverage is Arabidopsis-heavy (1236 profiles) and thin elsewhere (maize 131, soybean 91, wheat 58, tomato 51, rice 10; Brachypodium and sorghum have none). Defaults to arabidopsis_thaliana; pass organism= for other species.
| Name | Type | Req | Description |
|---|---|---|---|
| locus | string | yes | e.g. AT2G46830 (Arabidopsis CCA1), 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 |
| found | boolean | yes | True if any profile was UniProt-confirmed for this locus |
| gene_names_searched | array | – | Gene symbols used as JASPAR search keys |
| locus | string | yes | – |
| motif_count | integer | yes | Total confirmed profiles (pre-cap) |
| motifs | array | – | UniProt-confirmed binding profiles |
| name_only_matches | array | – | Name-similarity hits belonging to a DIFFERENT gene [{matrix_id, name, uniprot_ids}] — not this locus's motifs |
| returned | integer | yes | Rows in this payload (#123) |
| tax_id | integer | yes | NCBI taxid the JASPAR search was scoped to |
| total | integer | yes | How many UniProt-confirmed JASPAR profiles exist upstream for this query, all pages (pre-cap) (#123) |
| truncated | boolean | yes | True if the motif list was capped |
| upstream_version | – | – | JASPAR release that produced THIS response, — always null today: this backend states no release on its responses; upstream_release(backend='jaspar') reports the release its own endpoint calls current… |
No examples provided.
uniprot_id_mapping UniProt: ID Mapping (batch, every entry) ~287
Map a batch of gene, transcript or protein IDs to EVERY UniProtKB entry UniProt's own ID mapping service returns, one job for the whole batch. Use it when a question asks for all accessions, or for many IDs at once: resolve_locus_to_uniprot returns one entry per locus (its best search hit), so a gene with several entries loses the rest. from_db names the IDs' source as UniProt does: Ensembl_Genomes for plant gene IDs such as maize Zm00001eb, rice Os01g, wheat TraesCS (the default), Ensembl_Genomes_Transcript, Ensembl_Genomes_Protein, or Araport for Arabidopsis AGIs. Each ID comes back mapped (accessions, each with entry_type and reviewed) or unmapped (UniProt lists it as failed: it maps to no entry). Up to 500 IDs per call; duplicates are collapsed. upstream_version is the UniProt release. Maize RefGen_v4 IDs (Zm00001d) are not in UniProt: translate them first with maize_gene_model_translation.
| Name | Type | Req | Description |
|---|---|---|---|
| from_db | string | – | UniProt's name for the IDs' source database |
| ids | array | yes | IDs from from_db, e.g. ['Zm00001eb326750', 'Zm00001eb181120'] |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Distinct IDs queried (duplicates collapsed) |
| from_db | string | yes | UniProt's name for the source database |
| mapped | integer | yes | Results with status mapped |
| obsolete_count | – | yes | UniProt's obsoleteCount for the job: mapped entries now obsolete |
| results | array | yes | – |
| to_db | string | yes | Always UniProtKB |
| unmapped | integer | yes | Results with status unmapped |
| upstream_version | – | – | UniProt release that produced THIS response, as stated by the x-uniprot-release header. null means UniProt did not state one — never that no release exists, and never inferred from a separate metadat… |
No examples provided.
upstream_release Upstream Release ~244
Report the release a backend's own release endpoint calls current, for the backends whose answers state none (their tools' upstream_version is always null). It is read by a SEPARATE request at query time, so it is not proof of the release that answered any one call: read it before and after a run, and equal values mean no release changed in between. Never cached. ensembl_plants: the Ensembl Genomes release (e.g. '63'); string: the STRING release ('12.0'); quickgo: the GO annotation load date and the GO ontology date; jaspar: the newest ACTIVE release (several are active at once); kegg: the pathway and genes last-update dates (KEGG has no release number). pdbe, aragwas and europe_pmc publish no data release: release is null and reason says why. Backends whose answers state or pin their release (UniProt, InterPro, PANTHER, AlphaFold, Gramene, ATTED-II, OrthoDB) are not listed: read upstream_version on their answers instead.
| Name | Type | Req | Description |
|---|---|---|---|
| backend | string | yes | The backend whose current release to read |
| Name | Type | Req | Description |
|---|---|---|---|
| backend | string | yes | The backend asked about |
| components | object | yes | The release's parts by name, e.g. QuickGO annotation + go dates; {} when null |
| endpoints | array | yes | Full URLs of the release endpoints read, as provenance; [] when the backend publishes none — a link for the client to open or fetch; no tool on this server dereferences it |
| observed_at | string | yes | UTC time the endpoints were read (ISO 8601) |
| reason | string | yes | What the value is, or why there is none |
| release | – | yes | The release its own endpoint calls current at query time — a DIFFERENT request from any data call, so not proof of the release that answered one. null when the backend publishes no data release (see… |
No examples provided.
vep_annotate VEP: Variant Effect ~250
Predict a variant's molecular consequences with Ensembl VEP (rest.ensembl.org; free, no key). Variant-first (not locus-first): supply an Ensembl region (chr:start-end:strand, e.g. '1:10000-10000:1') and an alternate allele (e.g. 'C'); returns the most-severe consequence plus one row per overlapping transcript (consequence terms, IMPACT, and SIFT when the variant is coding-missense; the polyphen fields stay null, as Ensembl runs PolyPhen for human only). found=false when Ensembl reports no overlapping feature. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.
| Name | Type | Req | Description |
|---|---|---|---|
| allele | string | yes | Alternate allele, e.g. 'C' (or 'A/C', an insertion, etc.) |
| organism | string|integer | – | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid |
| region | string | yes | Ensembl region chr:start-end:strand, e.g. '1:10000-10000:1' |
| Name | Type | Req | Description |
|---|---|---|---|
| allele | string | yes | Alternate allele, e.g. 'C' |
| allele_string | – | – | – |
| assembly_name | – | – | Assembly the call is against |
| end | – | – | – |
| found | boolean | yes | True if VEP returned an overlapping feature |
| input | – | – | VEP echo of the parsed input |
| most_severe_consequence | – | – | Most severe SO term |
| organism | string | yes | Resolved Ensembl species slug |
| region | string | yes | Ensembl region, e.g. '1:10000-10000:1' |
| seq_region_name | – | – | – |
| start | – | – | – |
| transcript_consequences | array | – | Per-transcript {gene_id, transcript_id, consequence_terms, impact, sift_*, …} |
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.