Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Brapi MCP Server

by cyanheadsversion 0.10.1i★ –iComputer or cloud
Registry nameio.github.cyanheads/brapi-mcp-server

Install

Overview

Description from the maker (original English)

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

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 3 of 3 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • Can do 22 things (tools) brapi_connect, brapi_build_phenotype_matrix, brapi_server_info, brapi_describe_filters …
  • You fill in yourself: BRAPI_DEFAULT_BASE_URL, BRAPI_ENABLE_WRITES, BRAPI_PAGE_SIZE, MCP_LOG_LEVEL

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://brapi.caseyjhand.com/mcp

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "brapi": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/brapi-mcp-server"
      ],
      "env": {
        "BRAPI_DEFAULT_BASE_URL": "your-value",
        "BRAPI_ENABLE_WRITES": "your-value",
        "BRAPI_PAGE_SIZE": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Run this in your terminal

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

Or run it on your computer

claude mcp add brapi --env BRAPI_DEFAULT_BASE_URL=your-value --env BRAPI_ENABLE_WRITES=your-value --env BRAPI_PAGE_SIZE=your-value --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/brapi-mcp-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

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

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "brapi": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/brapi-mcp-server"
      ],
      "env": {
        "BRAPI_DEFAULT_BASE_URL": "your-value",
        "BRAPI_ENABLE_WRITES": "your-value",
        "BRAPI_PAGE_SIZE": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "brapi": {
      "type": "http",
      "url": "https://brapi.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "brapi": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/brapi-mcp-server"
      ],
      "env": {
        "BRAPI_DEFAULT_BASE_URL": "your-value",
        "BRAPI_ENABLE_WRITES": "your-value",
        "BRAPI_PAGE_SIZE": "your-value",
        "MCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://brapi.caseyjhand.com/mcp

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • BRAPI_DEFAULT_BASE_URL env
    Default BrAPI v2 base URL. Optional — connections can be opened at runtime via the brapi_connect tool instead.
  • BRAPI_ENABLE_WRITES env
    Opt-in flag for the write surface (brapi_submit_observations). Off by default — the tool is omitted from tools/list unless the operator opts in.
  • BRAPI_PAGE_SIZE env
    Upstream pageSize used during canvas spillover walks (decoupled from BRAPI_LOAD_LIMIT). Dataframe ceiling = pageSize × 50 pages, capped at 50,000 rows.
  • MCP_LOG_LEVEL env
    Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 7, 2026. The maker wrote them, not us; we show them as plain text.

  • 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 a

  • 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-for

  • 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 materi

  • 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 datafram

  • 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,00

  • 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, incl

  • 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[] hol

  • 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 repor

  • 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 tha

  • 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

  • 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 m

  • 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` an

  • 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

  • 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 pro

  • 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_dat

  • 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 row

  • 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

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account cyanheads, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 111 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 22 tool descriptions and found no hidden instructions to the AI

Compared with others in Otheri

  • More stars than 0% of the other 18374 servers in this category
  • Published to the registry more recently than 69% of the other 18374 servers in this category
  • Basic checks equal to or better than 100% of the other 18374 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Brapi MCP Server safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.10.1) reached the registry 20 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Spec Driven Development, Remote Desktop Commander, Happo

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Spec Driven Development

by formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Runs on your computer★ 440MITUpdated 14 months ago
Install

Remote Desktop Commander

by desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Runs in the cloud★ 211Updated 2 days ago
Install

Happo

by happo.io

Review Happo's visual and accessibility diffs: inspect comparisons, accept or reject, report flakes.

Runs in the cloudUpdated today
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

@cyanheads/brapi-mcp-server A collaborative BrAPI v2.1 workspace for multi-agent research via MCP. Search studies, germplasm, genotypes, and more across Breedbase, T3, Sweetpotatobase, and any BrAPI v2-compliant server. 25 Tools • 6 Resources • 2 Prompts

Public Hosted Server: https://brapi.caseyjhand.com/mcp


Overview

Plant-breeding data from any BrAPI (Breeding API) v2 server — Breedbase instances like Cassavabase and Sweetpotatobase, the Triticeae Toolbox (T3), and more, several at once. Search studies, germplasm, observations, and genotypes, walk pedigrees, and build phenotype and genotype matrices, with large results queryable in SQL.

Tools
ToolDescription
brapi_connectAuthenticate to a BrAPI v2 server, register it under an alias, and return the orientation envelope
brapi_server_infoReturn the orientation envelope for an alias, optionally refreshing capabilities
brapi_describe_filtersList valid filter names for an endpoint, for use in any finder's extraFilters
brapi_find_studiesFind studies by crop, trial type, season, location, or program
brapi_get_studyFetch a study with program, trial, and location resolved, plus companion counts
brapi_find_germplasmFind germplasm by name, synonym, accession, PUI, crop, or free text
brapi_get_germplasmFetch a germplasm with attributes, direct parents, and companion counts
brapi_walk_pedigreeWalk ancestry or descendancy as a deduplicated DAG with cycle detection
brapi_find_variablesFind observation variables by name, trait class, or ontology term, with free-text ranking
brapi_find_observationsPull observation records by study, germplasm, variable, season, or unit
brapi_find_imagesFind image metadata by unit, observation, study, ontology term, or MIME type
brapi_get_imageFetch up to 5 images inline as image content blocks
brapi_find_locationsFind research stations by country, type, abbreviation, or bounding box
brapi_find_variantsFind variants by variant set, reference, or genomic region
brapi_find_genotype_callsPull genotype calls through async search, bounded by a deployment pull ceiling
brapi_dataframe_describeList dataframes, or describe one with columns, row count, and provenance
brapi_dataframe_queryRun read-only SQL across dataframes
brapi_dataframe_drop_Opt-in._ Drop a dataframe by name
brapi_dataframe_export_Opt-in, stdio-only._ Export a dataframe to disk as CSV, Parquet, or JSON
brapi_build_phenotype_matrixBuild a germplasm × trait matrix from one or more studies as a dataframe
brapi_germplasm_performancePer-variable aggregates (n, mean, median, sd, min, max) for one germplasm across its studies
brapi_export_genotype_matrixPivot a variant set's calls into a germplasm × variant matrix, with VCF-lite or PLINK text
brapi_submit_observations_Opt-in._ Two-phase observation write: preview validates, apply confirms and writes
brapi_raw_getPassthrough to any GET /{path} endpoint no curated tool covers
brapi_raw_searchPassthrough to any POST /search/{noun} endpoint, with async polling handled
Resources
ResourceDescription
brapi://server/infoOrientation envelope for the default connection
brapi://callsRaw capability profile (/serverinfo + /calls) for the default connection
brapi://study/{studyDbId}One study with program, trial, and location resolved
brapi://germplasm/{germplasmDbId}One germplasm with attributes and parents
brapi://filters/{endpoint}Filter catalog for one endpoint
brapi://variable/{observationVariableDbId}One observation variable (trait, scale, method, ontology)

Every resource reads the default connection and mirrors a tool; tool-only clients and multi-server workflows use the tools.

Prompts
PromptDescription
brapi_eda_studyExploratory-data-analysis playbook for one study, ending in a structured report
brapi_meta_analysisCross-study meta-analysis playbook for a germplasm × trait combination

Capability reference

Identifier filters also accept their BrAPI *DbId / *DbIds spellings where equivalent: for example, imageDbId for imageDbIds, studyDbIds for studies, and observationVariableDbIds for variables. Array filters accept a lone string or multiple IDs. Supply one spelling per filter; conflicting spellings are rejected.

brapi_connect tool
  • baseUrl and auth are optional: omitted values come from BRAPI_ _* env vars, the built-in aliases, then BRAPI_DEFAULT_* (see Per-alias credentials); alias (default default, pattern ^[a-zA-Z0-9_-]+$) keeps several servers registered at once; auth.mode is none, bearer, api_key, sgn (Breedbase /token exchange), or oauth2 (client credentials)
  • Returns the orientation envelope: server identity, auth summary, capabilities (supported, notableGaps), active dialect, content counts, attribution for built-in servers, and nextToolSuggestions naming the entry-point finders this server can serve
  • Typed errors: auth_session_required, auth_base_url_mismatch, alias_base_url_unset, alias_base_url_invalid, private_address_blocked, auth_token_exchange_failed, auth_no_access_token, upstream_unauthorized, upstream_forbidden, capability_discovery_unavailable (retryable); a failed connect leaves any earlier registration under the alias intact
  • Optional for an alias the server has a URL for (default when BRAPI_DEFAULT_BASE_URL is set, a built-in, or a BRAPI_ _BASE_URL alias): any other tool or resource connects it on first use, as brapi_connect with no baseUrl or auth would, and concurrent first calls share one connect. An alias with no URL of its own still fails unknown_alias, even with BRAPI_DEFAULT_* set, so a mistyped alias never reaches the default server. Those tools and resources declare the connect failures they can hit (the token, discovery, auth-wall, alias_base_url_invalid, and private_address_blocked errors above), each with a recovery hint

brapi_server_info tool
  • alias optional; forceRefresh (default false) refetches the capability profile instead of reading the cache
  • Returns the same orientation envelope as brapi_connect

brapi_describe_filters tool
  • endpoint is one of studies, germplasm, observations, variables, images, variants, locations; unknown_endpoint carries availableEndpoints
  • Each filter has name, type, description, and example; the catalog follows the v2.1 spec, and individual servers may honor a subset

brapi_find_studies tool
  • Filters: crop, trialTypes, seasons, locations, programs, trials, studyNames, active; on SGN servers (CassavaBase, Breedbase, Sweetpotatobase), which ignore the location filter on /studies, locations is applied client-side over the scanned studies, and totalCount is the matched count
  • distributions over programName, studyType, seasons, locationName, commonCropName
  • SGN/Breedbase studies lift missing program IDs and names from additionalInfo, preserving the raw metadata.

brapi_get_study tool
  • studyDbId required; resolves program, trial, and location inline; study_not_found when the upstream has no such study
  • On SGN/Breedbase servers, missing program fields come from additionalInfo; when the study has no program ID, the fetched parent trial can supply it for program resolution.
  • Companion counts observationCount, observationUnitCount, variableCount; a count the server can't scope to the study is omitted with a warning, never reported as the server-wide total

brapi_find_germplasm tool
  • Filters: names, germplasmDbIds, germplasmPUIs, accessionNumbers, crops, synonyms, collections, genus, species; text is a client-side substring match on name, PUI, accession, display name, and synonyms that drops non-matching rows. Its first request uses BRAPI_PAGE_SIZE independently of inline loadLimit; it scans every upstream row when the set fits one dataframe walk (50,000 rows at the default page size). Above that, a first-page miss stops after one request and reports the actual rows scanned; it does not establish absence from the catalog, so pair it with a server-side filter.
  • distributions over commonCropName, genus, species, collection, countryOfOriginCode

brapi_get_germplasm tool
  • germplasmDbId required; returns attributes and direct parents; germplasm_not_found when the upstream has no such germplasm
  • Companion counts studyCount, directParentCount, directDescendantCount

brapi_walk_pedigree tool
  • 1–20 root germplasmDbIds (germplasmDbId also accepted); direction is ancestors (default), descendants, or both; maxDepth 1–10 (default 3); the walk stops at 1,000 nodes or 10,000 edges and sets truncated
  • both is the union of the two walks: ancestors expand only through /pedigree and descendants only through /progeny, so a descendant's other parent is not pulled in
  • One edge per parent–child pair; cycleCount counts the edges marked isCycle, where a germplasm becomes its own ancestor — shared ancestors and siblings are not cycles
  • leafCount counts graph terminals, including depth-boundary nodes; confirmedLeafCount counts non-root nodes whose relevant lookups successfully returned no relatives. frontier / frontierCount distinguish depth-limited, safet

Only the beginning is shown; read the rest in the repo

Ask PopNx