plant-genomics-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PLANT_GENOMICS_MCP_CACHE_TTL | No | Per-backend TTL+LRU cache entry lifetime, in seconds (200-only responses). | 600 |
| PLANT_GENOMICS_MCP_HTTP_HOST | No | HTTP bind address. | 127.0.0.1 |
| PLANT_GENOMICS_MCP_HTTP_JSON | No | 0 switches the response shape to streaming SSE events. | 1 |
| PLANT_GENOMICS_MCP_HTTP_PORT | No | HTTP TCP port. | 8765 |
| PLANT_GENOMICS_MCP_CACHE_SIZE | No | Max entries per backend before LRU eviction. | 256 |
| PLANT_GENOMICS_MCP_HTTP_TOKEN | No | Bearer token for HTTP transport; must be ≥32 chars or HTTP server aborts at startup. | |
| PLANT_GENOMICS_MCP_NCBI_EMAIL | No | NCBI etiquette contact for BLAST queries. Unset → placeholder + per-call warning; NCBI may throttle. | |
| PLANT_GENOMICS_MCP_HTTP_MAX_BODY | No | Reject POSTs with Content-Length larger than this (in bytes). | 2097152 |
| PLANT_GENOMICS_MCP_CACHE_DISABLED | No | Any non-empty value makes every cache a no-op. | |
| PLANT_GENOMICS_MCP_HTTP_STATELESS | No | 0 keeps per-client session state (SSE-style). | 1 |
| PLANT_GENOMICS_MCP_BLAST_CONCURRENCY | No | Max in-flight BLAST searches per process (NCBI per-IP rate limit). | 2 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ensembl_plants_lookup_locusA | 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). |
| get_gene_xrefsA | 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. |
| phytozome_lookup_locusA | 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. |
| resolve_locus_to_uniprotA | 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). Returns primaryAccession, uniProtkbId, entryType, recommendedName, geneNames, organism, taxonId, sequenceLength, web_url. This is the protein-side entry point — pair with InterPro / AlphaFold / Reactome / structural-bio tools. |
| locus_literatureA | Search Europe PMC for literature mentioning a plant locus. Free, no API key. Returns up to |
| locus_go_annotationsA | 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. |
| gramene_homologsA | Fetch orthologs and paralogs for a plant locus from Gramene compara (data.gramene.org v69). Default homology_type='ortholog'; pass 'paralog' for in-species duplicates or 'all' for everything. Returns target_locus + homology category (type) + shared gene_tree_id per hit. The fl=homology projection does not carry per-row taxon, identity, or protein ID; pair with resolve_locus_to_uniprot for protein-level enrichment and with blast_sequence for sequence similarity discovery. |
| kegg_pathwaysA | Fetch KEGG pathway memberships for an Arabidopsis locus from rest.kegg.jp. Returns a list of pathway IDs + names + KEGG category classes the locus participates in. Pairs with locus_go_annotations for the GO-level functional view. Multi-organism caveat (v1.1.0): the organism= field accepts any plant in the matrix for symmetry with the other backends, but only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for rice/maize/etc. and our cross-backend locus contract can't produce those yet, so any other organism raises OrganismNotSupported before any HTTP call. KEGG v118+ is case-sensitive on the locus: pass AGI loci as uppercase. |
| bar_gene_summaryA | 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. |
| bar_efp_expressionA | 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). |
| bar_aiv_interactionsA | Fetch BAR AIV (Arabidopsis Interactions Viewer) interactions for an Arabidopsis or rice locus. Dispatches by organism: Arabidopsis returns curated GRN paper refs from /interactions/get_paper_by_agi/{locus} (PubMed ID, title, image, comments, pipe-split tags); rice returns predicted PPI partners from /interactions/rice/{locus} with Pearson co-expression r (pcc), evidence hits, and quality score. The |
| string_interactionsA | Fetch protein-protein interaction partners from STRING-DB (string-db.org). Accepts either a UniProt accession or a locus identifier — the latter 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). |
| tair_locus_infoA | 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. |
| plantcyc_locus_infoA | Returns subscription-access info and alternatives for a PlantCyc locus. Does NOT fetch annotation or pathway data — PlantCyc requires paid SRI/Phoenix subscription. Use ensembl_plants_lookup_locus or phytozome_lookup_locus for canonical gene annotation; PlantCyc's pathway-membership value-add is not currently substituted. Returns structured redirect with rationale and probed_at date. |
| batch_ensembl_plants_lookup_locusA | 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 |
| batch_get_gene_xrefsA | 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). |
| batch_phytozome_lookup_locusA | 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). |
| batch_resolve_locus_to_uniprotA | 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 + …). |
| batch_locus_literatureA | 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[]). |
| blast_sequenceA | Run a BLAST sequence-similarity search against NCBI BLAST URLAPI. Async Put/Get under the hood — submits the query, polls the RID (honoring NCBI's per-RID 60s floor), and returns the parsed top hits + raw text report excerpt. Programs: blastn / blastp / blastx / tblastn / tblastx. Database defaults to swissprot for protein programs, core_nt for nucleotide. Emits notifications/progress on each poll. Long searches (>10 min) raise [NotFoundError] with the RID preserved so the client can re-poll. Set PLANT_GENOMICS_MCP_NCBI_EMAIL to identify the request per NCBI etiquette. |
| batch_locus_go_annotationsA | 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. |
| batch_gramene_homologsA | 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). |
| batch_kegg_pathwaysA | Batch version of kegg_pathways. Up to 50 loci per call. v1.1.0: only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for other plants and our cross-backend locus contract can't produce those yet, so a non-ath organism= raises OrganismNotSupported before any HTTP fan-out. |
| batch_bar_gene_summaryA | 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. |
| batch_bar_aiv_interactionsA | 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 |
| batch_string_interactionsB | Batch version of string_interactions. Up to 50 inputs per call. |
| atted_coexpressionA | Fetch co-expressed gene neighbors from ATTED-II (atted.jp, API v5) for a plant locus. Returns top_n neighbors with target locus + NCBI Entrez gene ID + z-score (higher = stronger coexpression). The ATTED-II release (e.g. Ath-u.c4-0 for Arabidopsis, Osa-u.c1-0 for rice) is resolved per-organism; wheat, sorghum, barley, poplar, and brachypodium have no published release and raise OrganismNotSupported. Pairs with string_interactions to surface high-confidence functional partners (interactors that are also coexpressed). |
| batch_atted_coexpressionC | Batch version of atted_coexpression. Up to 50 loci per call. |
| analyze_locus_synthA | 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. |
| find_homologs_synthA | 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). |
| biological_context_synthA | 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. |
| consensus_homologsA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze_locus | Walk the assistant through a full gene profile for a plant locus: Ensembl annotation, cross-references, UniProt protein record, recent literature, and GO term summary. Chains five tools in a deterministic order. |
| find_homologs | Run a BLAST sequence-similarity search against NCBI and resolve the top hits against Ensembl Plants / UniProt. Chains blast_sequence with the per-hit lookup tools. |
| biological_context | Build a biological-context profile for a plant locus by chaining homology (Gramene) → pathways (KEGG, Arabidopsis only) → interactions (STRING) → coexpression (ATTED-II, Arabidopsis only). Cross-references the result lists to surface high-confidence functional partners. For non-Arabidopsis organisms, KEGG + ATTED steps are omitted automatically because those backends only ship Arabidopsis data — the chain still runs Gramene + UniProt + STRING. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Cache statistics | Per-backend TTL+LRU cache stats (hits / misses / size). Sourced from each backend module's process-local _CACHE. |
| Phytozome organisms | Map of canonical slug → Phytozome organism_id, derived from the ORGANISMS registry. Only includes organisms with a non-None phytozome_int. See pgmcp://organisms/coverage for the full coverage matrix across all backends. |
| Backend status | Per-backend rollup (name, base_url, kind=live|stub, subscription_gated, probed_at). Lets a client enumerate the live and stubbed backends without parsing the server docstring. |
| Organism coverage matrix | Markdown table of all 12 supported plants × 7 ID slots (ncbi_taxid, ensembl, phytozome, string, europe_pmc, kegg, atted). Missing slots render as em-dash. Lets a client introspect coverage in one read instead of probing resolve_organism per organism. |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/musharna/plant-genomics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server