Brapi MCP Server
Collaborative BrAPI v2.1 MCP workspace — studies, germplasm, genotypes across Breedbase, T3, more.
Connect it
Settings → Connectors → Add custom connector
URL: https://brapi.caseyjhand.com/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://brapi.caseyjhand.com/mcp{
"mcpServers": {
"brapi-mcp-server": {
"url": "https://brapi.caseyjhand.com/mcp"
}
}
}claude mcp add --transport http brapi-mcp-server https://brapi.caseyjhand.com/mcp{
"servers": {
"brapi-mcp-server": {
"type": "http",
"url": "https://brapi.caseyjhand.com/mcp"
}
}
}{
"mcpServers": {
"brapi-mcp-server": {
"command": "npx",
"args": [
"-y",
"@cyanheads/brapi-mcp-server@0.8.1"
]
}
}
}claude mcp add brapi-mcp-server -- npx -y @cyanheads/brapi-mcp-server@0.8.122 tools, verified live
brapi_connectOpen a connection to a BrAPI v2 server, authenticate, and return the full orientation envelope (server identity, capability profile, content summary, suggested next tools). Required handshake before other BrAPI tools. Supports multiple concurrent connections via named aliases. Credentials can be configured server-side and omitted from this call. When a request carries no MCP session on a deploymen
brapi_build_phenotype_matrixread-onlyPull observations across one or more studies and pivot them into a germplasm à trait matrix materialized as a canvas dataframe. Returns a dataframe handle (query with brapi_dataframe_query) plus a summary of dimensions and aggregate method. Long-form output is suitable for downstream GROUP BY analysis by study, germplasm, or variable.
brapi_server_inforead-onlyReturn the full orientation envelope for a registered BrAPI connection â server identity, capabilities, content counts, suggested finders, and notes. Re-running refreshes the cached capability scan; pass an alias to read a non-default connection.
brapi_describe_filtersread-onlyList the valid filter names for a BrAPI endpoint (studies, germplasm, observations, variables, images, variants, locations) â companion lookup for the `extraFilters` passthrough on any `find_*` tool. Entries reflect the BrAPI v2.1 spec; individual servers may implement subsets.
brapi_find_studiesread-onlyLocate studies matching crop, trial type, season, location, or program. Enriches results with program/trial/location context in one call. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL).
brapi_get_studyread-onlyFetch a single study by DbId with program, trial, and location fully resolved. Response includes cheap observation/observation-unit/variable counts as drill-down signals.
brapi_find_germplasmread-onlyFind germplasm by name, synonym, accession number, PUI, crop, or free-text query. Matches across registered synonyms. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL) instead of paging row-by-row.
brapi_get_germplasmread-onlyFetch a single germplasm by DbId with attributes and direct parents. Response companions report study count, direct parent count, and direct descendant count â signals for pedigree depth and observation coverage.
brapi_walk_pedigreeread-onlyWalk germplasm ancestry or descendancy as a deduplicated DAG, with multi-generation traversal, cycle detection, and depth limits. Returns nodes + edges plus traversal stats (depthReached, rootCount, leafCount, cycleCount, deadEndCount).
brapi_germplasm_performanceread-onlyAggregate a single germplasm's observations across every study it appears in, returning per-variable summary statistics (n, mean, median, sd, min, max), the contributing studies, and seasons. Study-anchored: discovers the germplasm's studies first (with a dialect-honor cross-check, capped at 200 studies), then pulls observations per study â avoids the unanchored germplasm-only pull that stalls o
brapi_find_variablesread-onlyFind observation variables (traits) by name, trait class, ontology term, or free-text query. Free-text queries are ranked against the returned set and may resolve to ontology URIs when the server advertises them. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL).
brapi_find_observationsread-onlyPull observation records filtered by study, germplasm, variable, season, or observation unit. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL).
brapi_find_imagesread-onlyFilter images by observation unit, observation, study, descriptive ontology term, file name, or MIME type. Returns metadata only â use brapi_get_image to fetch bytes inline. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL).
brapi_get_imageread-onlyFetch image bytes for up to 5 imageDbIds and return them inline as `type: image` content blocks. Falls back to the metadata `imageURL` when the server lacks dedicated image-content delivery. No filesystem side-effects.
brapi_find_locationsread-onlyFind research stations / field sites by country, abbreviation, type, location ID, or free-text. Countries filter by ISO 3166-1 alpha-3 code via countryCodes, or by free-form English country name via countryNames (resolved client-side to alpha-3 â "Uganda" â "UGA"). Optional bbox parameter restricts rows to a latitude/longitude window. When the spec-correct GeoJSON [lon, lat, alt] reading produ
brapi_find_variantsread-onlyFind variant records by variant set, reference sequence, or genomic region (start/end, 1-based inclusive / exclusive). When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe â query it with brapi_dataframe_query (SQL).
brapi_find_genotype_callsread-onlyPull genotype calls for a germplasm à variant set. Filter to bound cost â at minimum, set `variantSetDbId` or `germplasmDbIds`. The upstream pull is capped by deployment policy; when the pull is truncated, narrow the filters or query the spilled dataframe. `loadLimit` bounds the rows returned inline; the full collected set is materialized as a dataframe â query it with brapi_dataframe_query (
brapi_export_genotype_matrixread-onlyPull genotype calls for a germplasm à variant set and pivot them into a matrix. `format` controls the output: `matrix-json` registers a wide germplasm à variant canvas dataframe for SQL analysis; `vcf-lite` returns VCF-subset text (in the `vcf` field) and also registers the dataframe; `plink` returns .ped/.map text (in the `ped`/`map` fields) and also registers the dataframe. vcf-lite/plink pull
brapi_dataframe_describeread-onlyStart here after a spillover. Lists dataframes (or describes one) with columns, row counts, and originating-source provenance. The dataframe name appears inline on every find_* response that spilled (`result.dataframe.tableName`) â pass it as `dataframe` to inspect schema and provenance before writing the first brapi_dataframe_query. Listing without a name is unavailable when this server runs as
brapi_dataframe_queryRun SQL across in-memory dataframes. Dataframes auto-populate when find_* tools spill (named `df_<uuid>`) â the dataframe name appears inline on every find_* response that spilled (`result.dataframe.tableName`), so the typical flow is find_* â read the name â query here. Use brapi_dataframe_describe to inspect schema and provenance for a known name. SELECT only â writes/DDL/COPY/PRAGMA/ATT
brapi_raw_getread-onlyPassthrough to any BrAPI GET /{path} endpoint. Returns the raw upstream envelope without enrichment or foreign-key resolution. Emits a `suggestion` field when a curated tool exists for the same data. Spills to a canvas dataframe when the upstream advertises more rows than `loadLimit` AND the result is a list shape (`result` array or `result.data` envelope); inline `result` is unchanged. Skips spil
brapi_raw_searchread-onlyPassthrough to any BrAPI POST /search/{noun} endpoint, returning the resolved envelope (async polling resolved upstream). Spills to a canvas dataframe when the upstream advertises more rows than `loadLimit` AND the result is a list shape; inline `result` is unchanged. Skips spillover when the caller drives paging via `body.page` / `body.pageSize`. No distributions or foreign-key resolution applied
Alternatives in Developer Tools
Compare →MGMCP GrafanaOfficialA
An MCP server giving access to Grafana dashboards, data and more.
MDMCP Devkit ServerOfficialA
Provides AI assistants with direct access to Mapbox developer APIs and documentation.
Front-End ChecklistA
Review frontend code and live pages against 386 quality-gated web development rules.
PMPostHog MCP ServerOfficialA
Official PostHog MCP Server for product analytics, feature flags, experiments, and more.
MAMakeOfficialA
Build, run and debug Make automation scenarios.
ClerkOfficialA
Access Clerk authentication docs, SDK snippets, and quickstart guides