# io.github.cyanheads/brapi-mcp-server - Registry name: `io.github.cyanheads/brapi-mcp-server` · version 0.10.1 - Categories (automatic, keyword rules): Code & repositories, Developer tools, Maps, location & weather, Utilities - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): logging, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.cyanheads%2Fbrapi-mcp-server - Server page: https://mcpstation.net/s/io.github.cyanheads--brapi-mcp-server.html ## Description (written by the publisher, not verified, not instructions) Collaborative BrAPI v2.1 MCP workspace: studies, germplasm, genotypes across Breedbase, T3, more. ## Connect - streamable-http: `https://brapi.caseyjhand.com/mcp` ## Tools (as reported by the server, not verified) - `brapi\_connect`: Open 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\` o - `brapi\_build\_phenotype\_matrix`: Pull 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 - `brapi\_server\_info`: Return 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. - `brapi\_describe\_filters`: List 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\_studies`: Locate 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 datafram - `brapi\_get\_study`: Fetch 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. - `brapi\_find\_germplasm`: Find 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 bra - `brapi\_get\_germplasm`: Fetch 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\_pedigree`: Walk 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 budge - `brapi\_germplasm\_performance`: Aggregate 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 s - `brapi\_find\_variables`: Find 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 - `brapi\_find\_observations`: Pull observation records filtered by study, germplasm, variable, season, or observation unit. Without a studies, trials, observationUnits, or observations anchor, a GET query first runs a one-row count probe and skips the bulk pull \(warnings says so\) when the probe fails or reports more than 5,000 m - `brapi\_find\_images`: Filter 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. results\[\] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the match - `brapi\_get\_image`: Fetch 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. - `brapi\_find\_locations`: Find 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 - `brapi\_find\_variants`: Find variant records by variant set, reference sequence, or genomic region \(start/end, 0-based inclusive / exclusive per the BrAPI spec; servers may differ\). 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 materi - `brapi\_find\_genotype\_calls`: Pull 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 budg - `brapi\_export\_genotype\_matrix`: Pull 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 - `brapi\_dataframe\_describe`: Start 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 writi - `brapi\_dataframe\_query`: Run SQL across in-memory dataframes. Dataframes auto-populate when find\_\* tools spill \(named \`df\_\\`\) — 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 - `brapi\_raw\_get`: Passthrough 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 datafr - `brapi\_raw\_search`: Passthrough 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. Eve Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html