Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Collaborative BrAPI v2.1 MCP workspace: studies, germplasm, genotypes across Breedbase, T3, more.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
BRAPI_DEFAULT_BASE_URL, BRAPI_ENABLE_WRITES, BRAPI_PAGE_SIZE, MCP_LOG_LEVEL你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://brapi.caseyjhand.com/mcp打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 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"
}
}
}
}在终端中运行这条命令
claude mcp add --transport http brapi https://brapi.caseyjhand.com/mcpclaude 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运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"brapi": {
"url": "https://brapi.caseyjhand.com/mcp"
}
}
}粘贴到项目中的 .cursor/mcp.json,或 ~/.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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"brapi": {
"type": "http",
"url": "https://brapi.caseyjhand.com/mcp"
}
}
}粘贴到项目中的 .vscode/mcp.json
{
"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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://brapi.caseyjhand.com/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
BRAPI_DEFAULT_BASE_URL envBRAPI_ENABLE_WRITES envBRAPI_PAGE_SIZE envMCP_LOG_LEVEL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
工具名称和描述与服务器在 2026年11月7日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
brapi_connectOpen a connection to a BrAPI v2 server, authenticate, and return the full orientation envelope (server identity, capability profile, content summary, suggested next tools). Other BrAPI tools connect an alias the server has a URL configured for (a built-in or operator-configured a
brapi_build_phenotype_matrixPull observations across one or more studies and pivot them into a germplasm × trait matrix materialized as a canvas dataframe. Returns a dataframe handle (read it with brapi_dataframe_describe and brapi_dataframe_query) plus a summary of dimensions and aggregate method. Long-for
brapi_server_infoReturn the full orientation envelope for a BrAPI connection — server identity, capabilities, content counts, suggested finders, and notes. Pass forceRefresh to refetch the cached capability scan; pass an alias to read a non-default connection.
brapi_describe_filtersList the valid filter names for a BrAPI endpoint (studies, germplasm, observations, variables, images, variants, locations) — companion lookup for the `extraFilters` passthrough on any `find_*` tool. Entries reflect the BrAPI v2.1 spec; individual servers may implement subsets.
brapi_find_studiesLocate studies matching crop, trial type, season, location, or program. Enriches results with program/trial/location context in one call. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materi
brapi_get_studyFetch a single study by DbId with its program, trial, and location records resolved where those lookups succeed. Response includes cheap observation/observation-unit/variable counts as drill-down signals.
brapi_find_germplasmFind germplasm by name, synonym, accession number, PUI, crop, or free-text query. Matches across registered synonyms. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a datafram
brapi_get_germplasmFetch a single germplasm by DbId with attributes and direct parents. Response companions report study count, direct parent count, and direct descendant count — signals for pedigree depth and observation coverage.
brapi_walk_pedigreeWalk germplasm ancestry or descendancy as a deduplicated DAG with cycle detection and depth limits. leafCount counts graph terminals, confirmedLeafCount counts successfully verified leaves, and frontier records unresolved directions. Nodes and edges each fit loadLimit and a 24,00
brapi_germplasm_performanceAggregate a single germplasm's observations across studies, returning per-variable statistics (n, mean, median, sd, min, max), contributing studies, seasons, and collection coverage. SGN/Breedbase uses advertised germplasm-scoped observation units with embedded measurements, incl
brapi_find_variablesFind observation variables (traits) by name, trait class, ontology term, or free-text query. Free-text queries are ranked against every fetched row by PUI, name, synonym, and trait text; a candidate carries the ontology PUI of its row as termId when the row has one. results[] hol
brapi_find_observationsPull 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_imagesFilter 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_imageFetch image bytes for up to 5 imageDbIds and return them inline as `type: image` content blocks. Falls back to the metadata `imageURL` when the server lacks dedicated image-content delivery or that request fails. No filesystem side-effects.
brapi_find_locationsFind 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_variantsFind 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_callsPull genotype calls for a germplasm × variant set. Filter to bound cost — at minimum, set `variantSetDbId` or `germplasmDbIds`. The upstream pull is capped by deployment policy; when the pull is truncated, narrow the filters. results[] holds the leading calls up to `loadLimit` an
brapi_export_genotype_matrixPull genotype calls for a germplasm × variant set and pivot them into a matrix. `matrix-json` registers a wide canvas dataframe; `vcf-lite` adds VCF-subset text in `vcf`; `plink` adds .ped/.map text in `ped`/`map`. Text formats pull /variants metadata and convert zero-based BrAPI
brapi_dataframe_describeStart here after a spillover. Lists dataframes (or describes one) with columns, row counts, and originating-source provenance. The dataframe name appears inline on every find_* response that spilled (`result.dataframe.tableName`) — pass it as `dataframe` to inspect schema and pro
brapi_dataframe_queryRun 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_getPassthrough to BrAPI GET /{path} without foreign-key resolution. List results (result array or result.data) return a leading preview within loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns no inline rows. Omitted fetched row
brapi_raw_searchPassthrough to BrAPI POST /search/{noun}, polling async search IDs. Sends loadLimit as the initial pageSize unless body.page/pageSize drives explicit paging. List previews fit loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 cyanheads 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 111 毫秒内响应(HTTP 200)
无需登录
已读取 22 个工具描述,未发现针对 AI 的隐藏指令
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(0.10.1)于20天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, NexusWindows
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Windows computer use in the background: desktop apps driven without your mouse or keyboard.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
@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
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.
| Tool | Description |
|---|---|
brapi_connect | Authenticate to a BrAPI v2 server, register it under an alias, and return the orientation envelope |
brapi_server_info | Return the orientation envelope for an alias, optionally refreshing capabilities |
brapi_describe_filters | List valid filter names for an endpoint, for use in any finder's extraFilters |
brapi_find_studies | Find studies by crop, trial type, season, location, or program |
brapi_get_study | Fetch a study with program, trial, and location resolved, plus companion counts |
brapi_find_germplasm | Find germplasm by name, synonym, accession, PUI, crop, or free text |
brapi_get_germplasm | Fetch a germplasm with attributes, direct parents, and companion counts |
brapi_walk_pedigree | Walk ancestry or descendancy as a deduplicated DAG with cycle detection |
brapi_find_variables | Find observation variables by name, trait class, or ontology term, with free-text ranking |
brapi_find_observations | Pull observation records by study, germplasm, variable, season, or unit |
brapi_find_images | Find image metadata by unit, observation, study, ontology term, or MIME type |
brapi_get_image | Fetch up to 5 images inline as image content blocks |
brapi_find_locations | Find research stations by country, type, abbreviation, or bounding box |
brapi_find_variants | Find variants by variant set, reference, or genomic region |
brapi_find_genotype_calls | Pull genotype calls through async search, bounded by a deployment pull ceiling |
brapi_dataframe_describe | List dataframes, or describe one with columns, row count, and provenance |
brapi_dataframe_query | Run 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_matrix | Build a germplasm × trait matrix from one or more studies as a dataframe |
brapi_germplasm_performance | Per-variable aggregates (n, mean, median, sd, min, max) for one germplasm across its studies |
brapi_export_genotype_matrix | Pivot 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_get | Passthrough to any GET /{path} endpoint no curated tool covers |
brapi_raw_search | Passthrough to any POST /search/{noun} endpoint, with async polling handled |
| Resource | Description |
|---|---|
brapi://server/info | Orientation envelope for the default connection |
brapi://calls | Raw 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.
| Prompt | Description |
|---|---|
brapi_eda_study | Exploratory-data-analysis playbook for one study, ending in a structured report |
brapi_meta_analysis | Cross-study meta-analysis playbook for a germplasm × trait combination |
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 toolbaseUrl 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)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 serveauth_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 intactdefault 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 hintbrapi_server_info toolalias optional; forceRefresh (default false) refetches the capability profile instead of reading the cachebrapi_connectbrapi_describe_filters toolendpoint is one of studies, germplasm, observations, variables, images, variants, locations; unknown_endpoint carries availableEndpointsname, type, description, and example; the catalog follows the v2.1 spec, and individual servers may honor a subsetbrapi_find_studies toolcrop, 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 countdistributions over programName, studyType, seasons, locationName, commonCropNameadditionalInfo, preserving the raw metadata.brapi_get_study toolstudyDbId required; resolves program, trial, and location inline; study_not_found when the upstream has no such studyadditionalInfo; when the study has no program ID, the fetched parent trial can supply it for program resolution.observationCount, observationUnitCount, variableCount; a count the server can't scope to the study is omitted with a warning, never reported as the server-wide totalbrapi_find_germplasm toolnames, 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, countryOfOriginCodebrapi_get_germplasm toolgermplasmDbId required; returns attributes and direct parents; germplasm_not_found when the upstream has no such germplasmstudyCount, directParentCount, directDescendantCountbrapi_walk_pedigree toolgermplasmDbIds (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 truncatedboth 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 incycleCount counts the edges marked isCycle, where a germplasm becomes its own ancestor — shared ancestors and siblings are not cyclesleafCount 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只显示了开头部分;其余内容请在仓库中阅读