Skip to main content

brapi-mcp-server

io.github.cyanheads/brapi-mcp-serverVersion 0.11.0

Collaborative BrAPI v2.1 MCP workspace: studies, germplasm, genotypes across Breedbase, T3, more.

Status

Responds579 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:48 UTC
Latency
579 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://brapi.caseyjhand.com/mcpResponds579 ms
No sign-in

Claude Code

claude mcp add --transport http brapi-mcp-server https://brapi.caseyjhand.com/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: brapi-mcp-server
Remote MCP server URL: https://brapi.caseyjhand.com/mcp

Cursor

{
  "mcpServers": {
    "brapi-mcp-server": {
      "url": "https://brapi.caseyjhand.com/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"brapi-mcp-server","type":"http","url":"https://brapi.caseyjhand.com/mcp"}'
Streamable HTTP
npm: @cyanheads/brapi-mcp-server 0.11.0
Package only

npm (npx)

claude mcp add brapi-mcp-server -- npx -y @cyanheads/brapi-mcp-server@0.11.0
Streamable HTTP
npm: @cyanheads/brapi-mcp-server 0.11.0
Package only

npm (npx)

claude mcp add brapi-mcp-server -- npx -y @cyanheads/brapi-mcp-server@0.11.0

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

22 tools

Tools of brapi-mcp-server
Read-only
Idempotent
Open world
brapi_build_phenotype_matrixPull observations across one or more studies and pivot them into a germplasm × trait matrix materialized as a canvas dataframe. Returns a dataframe handle (read it with brapi_dataframe_describe and 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. A study whose pull fails is named in warnings and the rest still build the matrix; the call fails only when every study failed.Not declaredYesNot declaredYes
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). Other BrAPI tools connect an alias the server has a URL configured for (a built-in or operator-configured alias, or `default` on a deployment with a default server) on first use; call this to connect any other server by `baseUrl`, to pass `auth`, or to re-point an alias. 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 deployment without per-user auth, aliases live in one namespace shared by every such caller: re-registering an alias re-points their later calls to it. Built-in known servers (callable with no `baseUrl` or `auth` — public BrAPI v2 endpoints): `bti-breedbase-demo`, `bti-cassava`, `bti-sweetpotato`. Operator-configured aliases on this deployment (credentials and/or baseUrl read from server env vars): `default`, `cassava`. Aliases are shortcuts only; any other BrAPI v2 server is reachable by passing `baseUrl` directly.Not declaredNoYesYes
brapi_dataframe_describeStart 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. On a shared HTTP endpoint without per-caller auth, listing without a name is available only where each MCP session has its own workspace, and never to a request without a session; pass a known name instead.Not declaredYesYesNo
brapi_dataframe_queryRun read-only 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. Use `LIMIT/OFFSET` to walk results, projection to trim columns, and aggregation to summarize. Use `registerAs` to chain — the result lands as a new dataframe.Not declaredNoNoNo
brapi_describe_filtersList 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.Not declaredYesYesNot declared
brapi_export_genotype_matrixPull genotype calls for a germplasm × variant set and pivot them into a matrix. `matrix-json` registers a wide canvas dataframe; `vcf-lite` adds VCF-subset text in `vcf`; `plink` adds .ped/.map text in `ped`/`map`. Text formats pull /variants metadata and convert zero-based BrAPI start to one-based positions; missing/invalid positions use `.`/`0`. Read the dataframe with brapi_dataframe_describe and brapi_dataframe_query (SQL). `variantColumnLegend` maps SQL-safe columns to original variant IDs.Not declaredYesNot declaredYes
brapi_find_genotype_callsPull 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. results[] holds the leading calls up to `loadLimit` and a 24,000-byte budget; when it holds fewer than were collected, every collected call is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL) instead of paging row-by-row.Not declaredYesNot declaredYes
brapi_find_germplasmFind germplasm by name, synonym, accession number, PUI, crop, or free-text query. Matches across registered synonyms. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL) instead of paging row-by-row.Not declaredYesNot declaredYes
brapi_find_imagesFilter images by observation unit, observation, study, descriptive ontology term, file name, or MIME type. Named mimeTypes are verified case-insensitively on each scanned row. Returns metadata only — use brapi_get_image to fetch bytes inline. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_find_locationsFind research stations / field sites by country, abbreviation, type, location ID, or free-text. Pass countryCodes directly or use English countryNames to resolve ISO codes. CassavaBase searches alpha-3, alpha-2, and numeric forms for resolved names. Optional bbox restricts rows to a latitude/longitude window. The BrAPI Community Test Server dialect reads GeoJSON Points in [lat, lon, alt] order; other dialects use [lon, lat, alt]. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_find_observationsPull observation records filtered by study, germplasm, variable, season, or observation unit. SGN/Breedbase uses advertised embedded units for study or germplasm scopes. Other GET observation queries without a study, trial, observation unit, or observation anchor run a one-row count probe and skip the bulk pull when the probe fails or reports more than 5,000 rows. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when those bounds cut it short, read the staged dataframe with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_find_studiesLocate studies matching crop, trial type, season, location, or program. Enriches results with program/trial/location context in one call. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_find_variablesFind observation variables (traits) by name, trait class, ontology term, or free-text query. Free-text queries are ranked against every fetched row by PUI, name, synonym, and trait text; a candidate carries the ontology PUI of its row as termId when the row has one. results[] holds the leading rows up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_find_variantsFind variant records by variant set, reference sequence, or genomic region. Named reference and region filters are verified on each scanned row using exact reference names and overlap with the 0-based half-open window [start, end). results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).Not declaredYesNot declaredYes
brapi_germplasm_performanceAggregate a single germplasm's observations across studies, returning per-variable statistics (n, mean, median, sd, min, max), contributing studies, seasons, and collection coverage. SGN/Breedbase uses advertised germplasm-scoped observation units with embedded measurements, including zeros. Other servers discover up to 200 studies before pulling per study. Pass studyDbIds to skip discovery and restrict collection to known studies. Per-study observation limits, page limits, failures, and incomplete scans appear in coverage and warnings. For the underlying matrix, use brapi_build_phenotype_matrix.Not declaredYesNot declaredYes
brapi_get_germplasmFetch 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.Not declaredYesYesNot declared
brapi_get_imageFetch 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 or that request fails. No filesystem side-effects.Not declaredYesYesYes
brapi_get_studyFetch a single study by DbId with its program, trial, and location records resolved where those lookups succeed. Response includes cheap observation/observation-unit/variable counts as drill-down signals.Not declaredYesYesNot declared
brapi_raw_getPassthrough to BrAPI GET /{path} without foreign-key resolution. List results (result array or result.data) return a leading preview within loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns no inline rows. Omitted fetched rows remain in a dataframe readable with brapi_dataframe_describe and brapi_dataframe_query. Explicit params.page/pageSize fetches only that upstream page, staging it if trimmed. Non-list results and envelope siblings are preserved. Emits a suggestion when a curated tool covers the endpoint.Not declaredYesNot declaredYes
brapi_raw_searchPassthrough to BrAPI POST /search/{noun}, polling async search IDs. Sends loadLimit as the initial pageSize unless body.page/pageSize drives explicit paging. List previews fit loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns no inline rows. Every fetched row omitted inline stays in a dataframe readable with brapi_dataframe_describe and brapi_dataframe_query. Explicit paging fetches only the requested page, staging it if trimmed. Non-list results and envelope siblings are preserved; no distributions or foreign-key resolution.Not declaredYesNot declaredYes
brapi_server_infoReturn the full orientation envelope for a BrAPI connection — server identity, capabilities, content counts, suggested finders, and notes. Pass forceRefresh to refetch the cached capability scan; pass an alias to read a non-default connection.Not declaredYesYesNot declared
brapi_walk_pedigreeWalk germplasm ancestry or descendancy as a deduplicated DAG with cycle detection and depth limits. leafCount counts graph terminals, confirmedLeafCount counts successfully verified leaves, and frontier records unresolved directions. Nodes and edges each fit loadLimit and a 24,000-byte preview budget; trimmed discovered graphs and already-fetched omitted relatives are staged for brapi_dataframe_describe and brapi_dataframe_query (SQL). Diagrams describe only the discovered graph, never unvisited relatives.Not declaredYesNot declaredYes

Details

Registry status
Active
Published
Nov 11, 2026
Updated
Nov 11, 2026
Website
Not given
Categories (suggested)
Design and mediaSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing