io.github.cyanheads/brapi-mcp-server
REMOTE · BRAPI.CASEYJHAND.COM · 2 COMPONENTS · SCANNED SEP 20
Collaborative BrAPI v2.1 MCP workspace — studies, germplasm, genotypes across Breedbase, T3, more.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 22 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability80
- 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 6909 tokens (~222/item across 31 items; 22 tools + 9 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 Management3
- Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- 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 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 24 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
How do I install the io.github.cyanheads/brapi-mcp-server server?
io.github.cyanheads/brapi-mcp-server is a hosted endpoint at https://brapi.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · brapi.caseyjhand.com
claude mcp add --transport http cyanheads-brapi-mcp-server 'https://brapi.caseyjhand.com/mcp'
{
"mcpServers": {
"cyanheads-brapi-mcp-server": {
"url": "https://brapi.caseyjhand.com/mcp"
}
}
} {
"servers": {
"cyanheads-brapi-mcp-server": {
"type": "http",
"url": "https://brapi.caseyjhand.com/mcp"
}
}
} [mcp_servers.cyanheads-brapi-mcp-server] url = "https://brapi.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-brapi-mcp-server": {
"type": "remote",
"url": "https://brapi.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-brapi-mcp-server --url 'https://brapi.caseyjhand.com/mcp' --transport streamable-http
mcp_servers:
cyanheads-brapi-mcp-server:
url: "https://brapi.caseyjhand.com/mcp" {
"McpServers": {
"cyanheads-brapi-mcp-server": {
"Transport": "http",
"Url": "https://brapi.caseyjhand.com/mcp"
}
}
} assistant mcp add cyanheads-brapi-mcp-server -t streamable-http -u 'https://brapi.caseyjhand.com/mcp'
{
"mcpServers": {
"cyanheads-brapi-mcp-server": {
"type": "http",
"url": "https://brapi.caseyjhand.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 20 Sept 26 0
- Stability: unverified → 0.03 ▲ functional
- 19 Sept 26 69
First indexed and scored.
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 20 Sept 2026 · Probed https://brapi.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 4 Sept 2026 | 3 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | a6985204ed51ae050e7738aa6be668e9 |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of brapi.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| brapi.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://brapi.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://brapi.caseyjhand.com/mcp | HTTPS enforced | 301 | https://brapi.caseyjhand.com/mcp |
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 →
brapi_build_phenotype_matrix Brapi Build Phenotype Matrix ~490
Pull 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.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregate | string | – | How to aggregate replicate observations (multiple readings of the same variable on the same germplasm). `mean` and `median` attempt numeric conversion and skip non-numeric values (e.g. categorical tr… |
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| germplasm | array | – | Optional subset of germplasmDbIds to include. Omit to include all germplasm found in the queried studies. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| shape | string | – | Matrix shape. `wide` — one row per germplasm, one column per variable, cell = aggregated value. `long` — one row per observation with columns: germplasmDbId, observationVariableDbId, studyDbId, value… |
| studies | array | yes | studyDbIds to include in the matrix. At least one is required — the tool is study-anchored to avoid full-table scans. |
| variables | array | – | Optional subset of observationVariableDbIds to include. Omit to include all variables found in the queried studies. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregate | string | – | Aggregation applied to replicate observations (wide shape only). `all` keeps one row per replicate. |
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| cap | integer | – | Per-study observation cap that was applied. |
| dataframe | object | – | Canvas dataframe handle for the materialized matrix. Omitted when no observations were found. Query with brapi_dataframe_query (SQL). Long-form columns: germplasmDbId, observationVariableDbId, studyD… |
| error | object | – | Present when the call failed. Absent on success. |
| germplasmCount | integer | – | Number of distinct germplasm in the matrix. |
| notice | string | – | Guidance for reaching the observations this call left out. |
| observationCount | integer | – | Total raw observations collected before pivoting. |
| shape | string | – | Matrix shape — wide (one row per germplasm, one column per variable) or long (one row per observation). |
| shown | integer | – | Observations collected across all studies after filtering. |
| studies | array | – | studyDbIds that were queried to build the matrix. |
| truncated | boolean | – | True when at least one study saturated the per-study loadLimit. |
| variableCount | integer | – | Number of distinct observation variables in the matrix. |
| variableLegend | object | – | Mapping of safe column identifier → observationVariableName. Wide-matrix column names are SQL-safe identifiers derived from observationVariableDbId (sanitized for DuckDB); consult this map to resolve… |
| warnings | array | – | Advisory messages (empty studies, non-numeric aggregation skips, fallback paths). |
No examples provided.
brapi_connect Brapi Connect ~281
Open a connection to a BrAPI v2 server, authenticate, and return the full orientation envelope (server identity, capability profile, content summary). Required handshake before other BrAPI tools. Supports multiple concurrent connections via named aliases. Credentials can be configured server-side and omitted from this call. Built-in known servers (callable with no `baseUrl` or `auth` — public BrAPI v2 endpoints): `bti-breedbase-demo`, `bti-cassava`, `bti-sweetpotato`, `t3-barley`, `t3-oat`, `t3-wheat`. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias for this connection. Use distinct aliases to register multiple BrAPI servers in one session. |
| auth | – | – | Auth payload. Omit to use credentials configured server-side for this alias (or no auth when none are configured). |
| baseUrl | string | – | BrAPI v2 base URL (absolute URL) including any path prefix — e.g. https://test-server.brapi.org/brapi/v2. Omit to use the configured default for this alias. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias. |
| attribution | object | – | Attribution metadata for built-in known-server connections. Absent for custom (env-only) connections. |
| auth | object | – | Auth summary for the active connection. |
| baseUrl | string | – | BrAPI v2 base URL for this connection. |
| capabilities | object | – | Capability profile derived from /serverinfo. |
| content | object | – | Content summary (crops + optional totals). |
| dialect | object | – | Active dialect adapter — translates outbound filters and declares known-dead routes for this server. |
| error | object | – | Present when the call failed. Absent on success. |
| fetchedAt | string | – | ISO 8601 timestamp of when this envelope was composed. |
| notes | array | – | Server-specific quirks or degradation notes. |
| server | object | – | Normalized server identity block. |
No examples provided.
brapi_dataframe_describe Brapi Dataframe Describe ~128
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 writing the first brapi_dataframe_query. Listing without a name is unavailable when this server runs as a shared HTTP endpoint without per-caller auth; pass a known name instead.
| Name | Type | Req | Description |
|---|---|---|---|
| dataframe | string | – | When set, return only the named dataframe. Omit to list all dataframes. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| tables | array | – | All described dataframes. |
No examples provided.
brapi_dataframe_query Brapi Dataframe Query ~414
Run 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/ATTACH/file-reads are rejected. Use SQL as the paging idiom: `LIMIT/OFFSET` to walk results, projection to trim columns, aggregation to summarize. Use `registerAs` to chain — the result lands as a new dataframe.
| Name | Type | Req | Description |
|---|---|---|---|
| preview | integer | – | Cap the number of rows returned in this response (1–1000). When omitted, the deployment-wide response cap applies. Lower this with `registerAs` when you only need a sample to verify the query. |
| registerAs | string | – | Persist the result as a new dataframe under this name. The response still returns at most `preview` rows; the full result remains queryable as a new dataframe. Conflicts with an existing dataframe na… |
| rowLimit | integer | – | Hard cap on rows materialized into the response, bounded by the deployment-wide response cap. For larger result sets, use `registerAs` to keep the full result queryable instead of raising this. |
| sql | string | yes | SELECT statement against dataframes. Single statement only — writes, DDL, file reads, and exports are rejected. Use brapi_dataframe_describe to discover available dataframes. SQL is the primary pagin… |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | integer | – | Row ceiling that bound the response (the smaller of preview and rowLimit). |
| columns | array | – | Column metadata in projection order — name and SQL type. Use this to write follow-up queries without round-tripping through brapi_dataframe_describe. |
| dataframe | string | – | Name of the dataframe holding the full result, populated when `registerAs` was supplied. Reference this name in follow-up queries. |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | Guidance for reaching the rows this response left out. |
| rowCount | integer | – | Total rows the query produced (may exceed `rows.length` when capped). |
| rows | array | – | Materialized rows, bounded by preview/rowLimit. |
| shown | integer | – | Rows materialized into `rows`. |
| truncated | boolean | – | True when the response carries fewer rows than the query produced. |
No examples provided.
brapi_describe_filters Brapi Describe Filters ~90
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.
| Name | Type | Req | Description |
|---|---|---|---|
| endpoint | string | yes | BrAPI endpoint to describe filters for. |
| Name | Type | Req | Description |
|---|---|---|---|
| availableEndpoints | array | – | Every endpoint this tool can describe — useful for discovery. |
| endpoint | string | – | The endpoint the filters apply to. |
| error | object | – | Present when the call failed. Absent on success. |
| filterCount | integer | – | Number of filters in the catalog. |
| filters | array | – | Filter catalog entries. |
| specReference | string | – | Pointer to the BrAPI v2 spec section for this endpoint. |
No examples provided.
brapi_export_genotype_matrix Brapi Export Genotype Matrix ~487
Pull 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 /variants metadata for CHROM/POS/REF/ALT (`.`/`0` when the server lacks them). Column names are SQL-safe identifiers; `variantColumnLegend` maps them back to original variant IDs.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| format | string | yes | Output format. `matrix-json` registers a wide canvas dataframe only. `vcf-lite` returns VCF-subset text and registers the dataframe. `plink` returns .ped/.map text and registers the dataframe. |
| germplasmDbIds | array | – | Restrict to these germplasm. Omit to pull all germplasm in the variant set (use with caution on large sets). |
| maxCalls | integer | – | Lower the pull cap for this call. Omit to use the deployment ceiling (BRAPI_GENOTYPE_CALLS_MAX_PULL). Cannot raise it: a value above the deployment ceiling is clamped down to it and the effective cap… |
| maxColumns | integer | – | Lower the distinct-variant column cap for this call. Omit to use the deployment ceiling (BRAPI_GENOTYPE_MATRIX_MAX_COLUMNS). Cannot raise it: a value above the deployment ceiling is clamped down to i… |
| variantSetDbId | string | yes | Variant set to pull calls for. Required. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection used. |
| callFormatting | object | – | Genotype-encoding hints echoed by the server. |
| columnCount | integer | – | Number of variant columns in the matrix (excluding the germplasm ID column). |
| dataframe | object | – | Canvas dataframe handle for the wide germplasm × variant matrix (registered for every format). Query with brapi_dataframe_query (SQL); export with brapi_dataframe_export. The vcf/ped/map text fields… |
| error | object | – | Present when the call failed. Absent on success. |
| format | string | – | The output format that was produced. |
| map | string | – | PLINK .map text — chromosome, variant-id, genetic-distance (0 placeholder), base-pair position, one row per variant. Present only when format="plink". Chromosome/position come from /variants metadata… |
| ped | string | – | PLINK .ped text — FID IID PAT MAT SEX PHENO placeholders (all 0) followed by biallelic genotype pairs per variant, one row per sample. Present only when format="plink". Alleles are passed through ver… |
| rowCount | integer | – | Number of call-set (germplasm) rows in the matrix. |
| truncated | boolean | – | True when the matrix is not the complete upstream result — either the call pull hit the row ceiling (BRAPI_GENOTYPE_CALLS_MAX_PULL) or the distinct-variant count hit the column ceiling (BRAPI_GENOTYP… |
| variantColumnLegend | object | – | Map of sanitized column name → original variantDbId. Dataframe column names are SQL-safe identifiers; use this legend to correlate them back to the original variant IDs. |
| vcf | string | – | VCF-lite text — header `#CHROM POS ID REF ALT` plus one genotype column per sample, one row per variant. Present only when format="vcf-lite". CHROM/POS/REF/ALT come from /variants metadata; "." when… |
| warnings | array | – | Advisory messages (truncation, missing fields, etc.). |
No examples provided.
brapi_find_genotype_calls Brapi Find Genotype Calls ~364
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 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 (SQL) instead of paging row-by-row.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| callFormat | string | – | Requested call-encoding format, when the server honors it. |
| callSetDbIds | array | – | Restrict to these call sets directly. |
| germplasmDbIds | array | – | Restrict to these germplasm (call sets). |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. When the collected set exceeds this, the full result lands in a dataframe and only the first `loadLimit` rows return inline — query the d… |
| variantDbIds | array | – | Restrict to specific variants. |
| variantSetDbId | string | – | Scope calls to a single variant set. Strongly recommended. |
| variantSetDbIds | array | – | Alternative: multiple variant sets at once. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The body sent to POST /search/calls (variant/germplasm/call-set scope plus pageSize). |
| callFormatting | object | – | Genotype-encoding hints echoed by the server. |
| dataframe | object | – | Dataframe handle when the full collected calls exceed loadLimit and were materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full collected call set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when the collection was truncated (equivalent to `truncated`). |
| notice | string | – | Guidance when no calls were returned — how to broaden filters or verify IDs. |
| results | array | – | Call rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[] — rows returned in-context (up to loadLimit). |
| totalCount | integer | – | Total calls collected across all pages (may be capped by the deployment-wide pull limit; check `truncated`). |
| truncated | boolean | – | True when the deployment-wide pull limit was reached and more calls exist upstream. Narrow the filters and re-pull, or query the spilled dataframe. |
| warnings | array | – | Advisory messages (truncation, capability gaps, partial pulls). |
No examples provided.
brapi_find_germplasm Brapi Find Germplasm ~405
Find 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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessionNumbers | array | – | Filter by accession numbers (gene-bank catalog codes). |
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| collections | array | – | Filter by germplasm collection names. |
| crops | array | – | Filter by common crop names. |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| genus | string | – | Botanical genus. |
| germplasmDbIds | array | – | Filter by DbIds. |
| germplasmPUIs | array | – | Persistent unique identifiers. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| names | array | – | Filter by germplasm display names. |
| species | string | – | Botanical species. |
| synonyms | array | – | Match registered synonyms. |
| text | string | – | Free-text query. Applied client-side as a substring match on returned rows (germplasmName, accessionNumber, defaultDisplayName, registered synonyms) — no BrAPI server reliably supports a server-side… |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Germplasm rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data, capability gaps). |
No examples provided.
brapi_find_images Brapi Find Images ~326
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. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe — query it with brapi_dataframe_query (SQL).
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| descriptiveOntologyTerms | array | – | Filter by ontology tags (e.g. "CO_334:plot"). |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| imageFileNames | array | – | Filter by uploaded file name. |
| images | array | – | Filter by imageDbIds. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| mimeTypes | array | – | Filter by MIME type — e.g. "image/jpeg", "image/png". |
| observationUnits | array | – | Filter by observationUnitDbIds. |
| observations | array | – | Filter by observationDbIds. |
| studies | array | – | Filter by studyDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Image metadata rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data, capability gaps). |
No examples provided.
brapi_find_locations Brapi Find Locations ~495
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 rows to a latitude/longitude window. When the spec-correct GeoJSON [lon, lat, alt] reading produces zero matches and at least one row carries a Point geometry, the bbox filter retries once with axes swapped (handles non-conformant servers that store [lat, lon, alt]) and surfaces a warning + `coordinateAxisOrder: "swapped"`. When the upstream total exceeds loadLimit, the full result set is materialized as a dataframe — query it with brapi_dataframe_query (SQL).
| Name | Type | Req | Description |
|---|---|---|---|
| abbreviations | array | – | Short location abbreviations. |
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| bbox | object | – | Optional post-fetch bounding box. All four corners must be set to activate the filter. |
| countryCodes | array | – | ISO 3166-1 alpha-3 country codes. |
| countryNames | array | – | Free-form English country names or aliases (e.g. "Uganda", "United States", "USA") resolved client-side to ISO 3166-1 alpha-3 codes and merged into countryCodes. Names that do not resolve surface as… |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| locationNames | array | – | Filter by display name. |
| locationTypes | array | – | Location type — e.g. "Research Station", "Field". |
| locations | array | – | Filter by locationDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| coordinateAxisOrder | string | – | Axis interpretation used when reading GeoJSON Point coordinates. "spec" follows the GeoJSON RFC 7946 [lon, lat, alt?] convention. "swapped" indicates the upstream server stores [lat, lon, alt?] (non-… |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Location rows returned in-context (up to loadLimit). Bbox filter is applied after the upstream fetch. |
| returnedCount | integer | – | Length of results[] after any bbox filtering. |
| totalCount | integer | – | Total rows reported by the server (or the post-bbox count when a bbox filter is active). |
| warnings | array | – | Advisory messages (bbox malformed, filter overrides, capability gaps). |
No examples provided.
brapi_find_observations Brapi Find Observations ~367
Pull 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).
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| germplasm | array | – | Filter by germplasmDbIds. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| observationLevels | array | – | Observation unit level (plot, plant, field, etc.). |
| observationUnits | array | – | Filter by observationUnitDbIds. |
| observations | array | – | Filter by observationDbIds. |
| programs | array | – | Filter by programDbIds. |
| seasons | array | – | Filter by seasonDbIds (e.g. "2022"). |
| studies | array | – | Filter by studyDbIds. |
| timestampFrom | string | – | ISO 8601 start of the observation-time window. |
| timestampTo | string | – | ISO 8601 end of the observation-time window. |
| trials | array | – | Filter by trialDbIds. |
| variables | array | – | Filter by observationVariableDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Observation rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data, capability gaps). |
No examples provided.
brapi_find_studies Brapi Find Studies ~326
Locate 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).
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | – | Restrict to active / inactive studies. |
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| crop | string | – | Filter by common crop name (single value). |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| locations | array | – | Filter by locationDbIds (server-side identifiers, not display names). |
| programs | array | – | Filter by programDbIds. |
| seasons | array | – | Filter by seasons (e.g. "2022"). |
| studyNames | array | – | Filter by study display name. |
| trialTypes | array | – | Filter by study types. |
| trials | array | – | Filter by trialDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data). |
No examples provided.
brapi_find_variables Brapi Find Variables ~446
Find 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).
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| crop | string | – | Filter by common crop name (single value). |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| methods | array | – | Filter by methodDbIds. |
| ontologies | array | – | Filter by ontologyDbIds. |
| scales | array | – | Filter by scaleDbIds. |
| studies | array | – | Filter by studyDbIds. |
| text | string | – | Free-text query. Ranks the **full upstream union** (the spilled dataframe when one is produced, otherwise the first page) via the ontology resolver, then fills the in-context window up to loadLimit w… |
| traitClasses | array | – | Filter by trait class. |
| variableNames | array | – | Filter by exact observationVariableNames. |
| variablePUIs | array | – | Filter by persistent ontology URIs. |
| variables | array | – | Filter by observationVariableDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| ontologyCandidates | array | – | Top ranked candidates from the free-text query (if any). Empty when `text` was not supplied. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Observation variable rows returned in-context (up to loadLimit). Rows matching `text` are promoted to the top when the free-text query produces candidates. |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data, capability gaps). |
No examples provided.
brapi_find_variants Brapi Find Variants ~290
Find 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).
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| end | integer | – | Exclusive 1-based end. |
| extraFilters | object | – | Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| referenceName | string | – | Reference display name (e.g. "chr01", "chr1"). |
| references | array | – | Filter by referenceDbIds. |
| start | integer | – | Inclusive 1-based start. |
| variantSets | array | – | Filter by variantSetDbIds. |
| variants | array | – | Filter by variantDbIds. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| appliedFilters | object | – | The final filter map sent to the server (named + extraFilters). |
| dataframe | object | – | Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL). |
| distributions | object | – | Value frequency per field across the full result set. |
| error | object | – | Present when the call failed. Absent on success. |
| hasMore | boolean | – | True when more rows exist beyond the returned set. |
| notice | string | – | Guidance when no rows were returned — how to broaden filters or retry. |
| refinementHint | string | – | Suggested next-step query refinement when the result set is large. |
| results | array | – | Variant rows returned in-context (up to loadLimit). |
| returnedCount | integer | – | Length of results[]. |
| totalCount | integer | – | Total rows reported by the server. |
| warnings | array | – | Advisory messages (filter overrides, partial data, capability gaps). |
No examples provided.
brapi_germplasm_performance Brapi Germplasm Performance ~362
Aggregate 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 on SGN/Breedbase. Pass an explicit studyDbIds set to skip discovery and its 200-study cap — e.g. process a chunk of the full study list retrieved via brapi_find_studies with extraFilters.germplasmDbIds. For the underlying observation matrix, use brapi_build_phenotype_matrix.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| germplasmDbId | string | yes | The germplasmDbId to summarize performance for. |
| studyDbIds | array | – | Optional explicit set of studyDbIds to aggregate over. When supplied, skips automatic study discovery and its 200-study cap entirely — use it to process a specific slice of studies, e.g. the full ger… |
| variables | array | – | Optional subset of observationVariableDbIds to aggregate. Omit to include every variable observed for the germplasm. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection used. |
| error | object | – | Present when the call failed. Absent on success. |
| germplasmDbId | string | – | The germplasm that was analyzed. |
| germplasmName | string | – | Display name of the germplasm, when the server provides one. |
| perVariable | array | – | Per-variable aggregates, sorted by observationVariableDbId. |
| studyCount | integer | – | Number of distinct studies that contributed any observation. |
| studyDbIds | array | – | Distinct studyDbIds that contributed observations. |
| warnings | array | – | Advisory messages (study-discovery limits, dropped filters, fallback paths, per-study failures). |
No examples provided.
brapi_get_germplasm Brapi Get Germplasm ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| germplasmDbId | string | yes | Germplasm identifier. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| attributes | array | – | Germplasm attributes from /germplasm/{id}/attributes. |
| directDescendantCount | integer | – | Count of direct descendants from /germplasm/{id}/progeny. |
| directParentCount | integer | – | Count of direct parents. |
| error | object | – | Present when the call failed. Absent on success. |
| germplasm | object | – | Canonical germplasm record as returned by `/germplasm/{id}`. |
| parents | array | – | Direct parents from /germplasm/{id}/pedigree. |
| studyCount | integer | – | How many studies this germplasm has appeared in. |
| warnings | array | – | Advisory messages — failed sub-endpoint lookups, missing counts. |
No examples provided.
brapi_get_image Brapi Get Image ~129
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. No filesystem side-effects.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| imageDbIds | array | yes | 1–5 image identifiers. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| error | object | – | Present when the call failed. Absent on success. |
| errors | array | – | Images that could not be loaded, one entry per id. |
| images | array | – | Successfully loaded images. |
| warnings | array | – | Per-image advisories for loaded payloads that appear suspect — e.g. the imageURL fallback returned a non-image MIME type, suggesting the upstream URL is broken. |
No examples provided.
brapi_get_study Brapi Get Study ~112
Fetch a single study by DbId with program, trial, and location fully resolved. Response includes cheap observation/observation-unit/variable counts as drill-down signals.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| studyDbId | string | yes | Study identifier. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| error | object | – | Present when the call failed. Absent on success. |
| location | object | – | Resolved location record (when the study has a locationDbId and the FK lookup succeeded). |
| observationCount | integer | – | Total observations recorded against this study. Omitted (with a warning) when the upstream server cannot scope the count to the study — never reported as the server-wide total. |
| observationUnitCount | integer | – | Total observation units (plots, plants, samples) in this study. |
| program | object | – | Resolved program record (when the study has a programDbId and the FK lookup succeeded). |
| study | object | – | Canonical study record as returned by `/studies/{id}`. |
| trial | object | – | Resolved trial record (when the study has a trialDbId and the FK lookup succeeded). |
| variableCount | integer | – | Total observation variables (traits) measured in this study. Omitted (with a warning) when the upstream server cannot scope the count to the study — never reported as the server-wide total. |
| warnings | array | – | Advisory messages — failed FK lookups, missing counts. |
No examples provided.
brapi_raw_get Brapi Raw Get ~260
Passthrough 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 spillover when the caller drives paging via `params.page` / `params.pageSize`.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| params | object | – | Query parameters to append. Arrays are repeated per BrAPI convention. |
| path | string | yes | Endpoint path — e.g. "/samples", "/methods". Leading "/" is optional. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| dataframe | object | – | Present when the upstream advertised more rows than `loadLimit` AND the result is a list shape. The inline `result` is unchanged; the dataframe carries the full union of pages — query with brapi_data… |
| error | object | – | Present when the call failed. Absent on success. |
| metadata | object | – | BrAPI envelope metadata (pagination and any additional upstream fields). |
| path | string | – | Normalized path (leading `/` preserved) that was appended to the baseUrl. |
| result | – | – | Raw BrAPI `result` value — whatever shape the endpoint returns. |
| suggestion | string | – | Emitted when a curated goal-shaped tool covers this endpoint. |
| url | string | – | Fully resolved URL that was fetched (baseUrl + path + query string). |
No examples provided.
brapi_raw_search Brapi Raw Search ~241
Passthrough 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.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| body | object | yes | Filter body passed verbatim to POST /search/{noun}. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| noun | string | yes | Search noun — e.g. "observations", "calls", "germplasm". |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| dataframe | object | – | Present when the upstream advertised more rows than `loadLimit` AND the result is a list shape. The inline `result` is unchanged; the dataframe carries the full union of pages — query with brapi_data… |
| error | object | – | Present when the call failed. Absent on success. |
| kind | string | – | Whether the server returned inline results or we polled an async search. |
| metadata | object | – | BrAPI envelope metadata (pagination and any additional upstream fields). |
| noun | string | – | The `/search/{noun}` segment the body was posted to. |
| result | – | – | Raw BrAPI `result` value — whatever shape the endpoint returns. |
| searchResultsDbId | string | – | Populated when the server returned an async searchResultsDbId. |
| suggestion | string | – | Emitted when a curated goal-shaped tool covers this search. |
No examples provided.
brapi_server_info Brapi Server Info ~126
Return the full orientation envelope for a registered BrAPI connection — server identity, capabilities, content counts, and notes. Re-running refreshes the cached capability scan; pass an alias to read a non-default connection.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias. Omit to read the connection registered under alias `default` — i.e. a prior `brapi_connect` call that did not specify an alias. Calls that used a non-default alias must pass that sa… |
| forceRefresh | boolean | – | Bypass the cached capability profile and refetch from the server. |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias. |
| attribution | object | – | Attribution metadata for built-in known-server connections. Absent for custom (env-only) connections. |
| auth | object | – | Auth summary for the active connection. |
| baseUrl | string | – | BrAPI v2 base URL for this connection. |
| capabilities | object | – | Capability profile derived from /serverinfo. |
| content | object | – | Content summary (crops + optional totals). |
| dialect | object | – | Active dialect adapter — translates outbound filters and declares known-dead routes for this server. |
| error | object | – | Present when the call failed. Absent on success. |
| fetchedAt | string | – | ISO 8601 timestamp of when this envelope was composed. |
| notes | array | – | Server-specific quirks or degradation notes. |
| server | object | – | Normalized server identity block. |
No examples provided.
brapi_walk_pedigree Brapi Walk Pedigree ~237
Walk 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).
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-defa… |
| direction | string | – | Which direction to walk: ancestors (parents), descendants (progeny), or both. |
| germplasmDbIds | array | yes | Starting germplasm (1–20 roots). All roots are walked concurrently. |
| loadLimit | integer | – | Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row. |
| maxDepth | integer | – | Max generations to walk per direction (default 3, cap 10). |
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | Alias of the registered BrAPI connection the call used. |
| cycleCount | integer | – | Number of times the walk revisited an already-registered node (cycles broken). |
| deadEndCount | integer | – | Nodes whose upstream pedigree/progeny lookup failed. |
| depthReached | integer | – | Deepest BFS level that produced at least one new edge (0 if only roots were walked). |
| direction | string | – | The direction the walk expanded (echoed from the input). |
| edges | array | – | Deduplicated edge list. `relationship: "parent"` means `from` is a parent of `to`; `relationship: "child"` means `from` is a descendant of `to`. |
| edgesDataframe | object | – | Canvas dataframe holding the full edge set, present when the walk exceeds loadLimit — edges[] is then a bounded preview. Any edge field that is a reserved SQL word (e.g. `from` → `from_`) is renamed… |
| error | object | – | Present when the call failed. Absent on success. |
| leafCount | integer | – | Nodes that have no outgoing edges in the walked direction — terminal in the DAG. |
| maxDepth | integer | – | The maximum depth the walk was allowed to reach (echoed from the input). |
| nodes | array | – | Deduplicated node list — every germplasm reached by the walk, sorted by depth then DbId. |
| nodesDataframe | object | – | Canvas dataframe holding the full node set, present when the walk exceeds loadLimit — nodes[] is then a bounded preview. Query with brapi_dataframe_query (SQL); JOIN to the edges dataframe on germpla… |
| rootCount | integer | – | Number of starting germplasm roots. |
| truncated | boolean | – | True when the walk hit the 1000-node safety cap before exhausting depth. |
| warnings | array | – | Advisory messages (capability gaps, per-node expansion failures). |
No examples provided.
What is the io.github.cyanheads/brapi-mcp-server server?
io.github.cyanheads/brapi-mcp-server is listed in the public MCP registry as io.github.cyanheads/brapi-mcp-server. Collaborative BrAPI v2.1 MCP workspace, studies, germplasm, genotypes across Breedbase, T3, more. This page covers its hosted endpoint (https://brapi.caseyjhand.com/mcp).
Is the io.github.cyanheads/brapi-mcp-server server safe to use?
io.github.cyanheads/brapi-mcp-server scores 69 out of 100 on VerifyMCP. 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 io.github.cyanheads/brapi-mcp-server server expose?
io.github.cyanheads/brapi-mcp-server exposes 22 tools: brapi_connect, brapi_build_phenotype_matrix, brapi_server_info, brapi_describe_filters, brapi_find_studies, and 17 more. Their descriptions and schemas cost roughly 6,499 tokens of context every time the server is loaded.
Does the io.github.cyanheads/brapi-mcp-server server require authentication?
No. We connected to io.github.cyanheads/brapi-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/brapi-mcp-server server still maintained?
io.github.cyanheads/brapi-mcp-server is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.