@cyanheads/brapi-mcp-server
도구
모양별로 그룹화된 25개 도구 — 연결 도구는 세션을 부트스트랩하고, find_* 도구는 요약된 페이지와 분포를 반환하며 오버플로 행을 캔버스 데이터프레임으로 스필하여 동일 세션의 에이전트가 ID로 조회하거나 전달할 수 있게 합니다. get_* 도구는 동반 개수와 함께 단일 레코드를 가져옵니다. 그 외에 혈통 탐색, 스필된 행에 대한 임베디드 SQL 워크스페이스(DuckDB 기반), 사람에게 전달하기 위한 파일 내보내기, 관측치에 대한 추가 전용 쓰기 표면, 원시 패스스루 탈출구가 포함됩니다.
오리엔테이션
Tool | Description |
| 인증하고, 별칭으로 연결을 등록하고, 기능 프로필을 캐시한 뒤 오리엔테이션 인벨로프를 인라인으로 반환합니다. 한 번의 호출로 에이전트를 완전히 오리엔트합니다. |
| 등록된 별칭에 대한 오리엔테이션 인벨로프를 다시 가져옵니다 — ID, 인증, 기능, 콘텐츠 개수, 귀속 정보, 메모. |
| 모든 엔드포인트에 대한 정적 BrAPI v2.1 필터 카탈로그 — 모든 |
조회
Tool | Description |
| 작물 / 시험 유형 / 계절 / 위치 / 프로그램으로 연구를 찾습니다. 분포 + 데이터프레임 스필오버. |
| 프로그램 / 시험 / 위치 FK가 해석된 연구와 동반 개수(관측치, 유닛, 변수)를 가져옵니다. |
| 이름, 동의어, 액세션, PUI, 작물 또는 자유 텍스트로 유전자원을 찾습니다. 분포 + 데이터프레임 스필오버. |
| 속성, 직접 부모, 동반 개수(연구, 부모, 후손)와 함께 유전자원을 가져옵니다. |
| 중복 제거된 DAG로 조상 / 후손을 BFS 탐색하며 사이클 감지, 깊이 제한, 순회 통계를 제공합니다. |
| 이름 / 클래스 / 온톨로지 / 자유 텍스트로 관측 변수를 찾습니다. |
| 연구 / 유전자원 / 변수 / 계절 / 유닛 / 타임스탬프로 관측 레코드를 가져옵니다. 데이터프레임 스필오버. |
| 유닛 / 연구 / 온톨로지 / MIME 유형으로 이미지 메타데이터를 필터링합니다. 바이트는 |
| 최대 5개의 imageDbId에 대한 이미지 바이트를 |
| 국가(ISO alpha-3 코드 또는 클라이언트 측에서 해석되는 영어 국가명) / 유형 / 약어로 연구 기지를 찾으며, 선택적 클라이언트 측 bbox 필터를 지원합니다. |
| 변이 세트, 참조 서열 또는 게놈 영역(1-based 포함 / 제외)으로 변이 레코드를 찾습니다. |
| 비동기 검색 폴링을 통해 유전자형 콜을 가져옵니다. 업스트림 풀은 |
분석
Tool | Description |
| 스필오버 후 여기서 시작하세요. 열 스키마, 행 개수, 출처 소스 이력을 포함해 데이터프레임을 나열(또는 하나를 설명)합니다. |
| 인메모리 데이터프레임에 대한 SELECT SQL(DuckDB 기반). 스필된 |
|
|
|
|
| 하나 이상의 연구에서 유전자원 × 형질 매트릭스를 구축하고 캔버스 데이터프레임으로 구체화합니다. 셀별 집계를 구성할 수 있는 와이드(피벗) 또는 롱 형태를 지원합니다. |
| 관측치가 있는 모든 연구에 걸쳐 단일 유전자원에 대한 변수별 성능 집계(n, mean, median, sd, min, max, studyCount)를 제공합니다. |
| 변이 세트에 대한 유전자형 콜을 유전자원 × 변이 캔버스 데이터프레임으로 내보냅니다. 또한 VCF-lite 또는 PLINK |
쓰기 (옵트인: BRAPI_ENABLE_WRITES=true)
Tool | Description |
| 2단계 관측치 쓰기 — |
탈출구
Tool | Description |
| 큐레이션된 도구가 다루지 않는 모든 BrAPI |
| 비동기 폴링이 투명하게 처리되는 모든 |
별칭 발견. 내장 및 운영자가 구성한 별칭은 서버 시작 시
brapi_connect설명에 추가되므로 에이전트는tools/list에서 인벤토리를 확인할 수 있습니다. 환경 변수 변경 후 재시작하면 새로고침됩니다.
Related MCP server: Helix MCP Server
리소스
리소스를 선호하는 클라이언트를 위한 큐레이션된 도구 표면의 URI 주소 지정 가능 미러입니다. 모든 리소스는 기본 연결을 사용합니다 — 다중 서버 워크플로는 도구를 통해 라우팅됩니다.
URI template | Mirrors |
|
|
| 원시 기능 프로필 |
|
|
|
|
|
|
| 관측 변수 레코드(형질, 척도, 방법, 온톨로지) |
프롬프트
다단계 BrAPI 워크플로 템플릿 — 순수 사용자 메시지 생성기, 부작용 없음.
이름 | 인자 | 목적 |
|
| 단일 연구를 위한 EDA 플레이북 — 방향 파악, 변수, 커버리지, 결측 데이터, 이상치, 혈통, 구조화된 보고서. |
|
| 연구 간 메타분석 — 형질 해석, 연구 탐색, 조화, 생식질별 × 연구별 및 연구 전반 요약. |
멀티에이전트 워크플로
서버에는 두 개의 상태 저장 계층과 두 개의 범위 지정 축이 있습니다:
계층 | 기본 범위 | 이유 |
연결 상태 (별칭, 교환된 토큰) | 테넌트 + 세션 | 자격 증명 및 실시간 토큰. 테넌트는 사용자( |
데이터프레임 ( | 테넌트 + 세션 | 하나의 (테넌트, 세션) 내에서 에이전트는 |
하나의 (테넌트, 세션) 내에서 데이터프레임은 자체 정리 공유 노트북 역할을 합니다. 동일한 MCP 세션의 병렬 에이전트 간에 df_<uuid> 이름을 전달하고, 다단계 워크플로 전반에 걸쳐 유지하며, 어느 위치에서든 쿼리/프로젝션/집계/조인할 수 있습니다. 이름으로 주소를 지정하고, 시간 제한이 있으며, 해당 세션으로 범위가 한정됩니다.
기본(격리) 형태. MCP_AUTH_MODE=none + HTTP stateful(기본값)에서 각 MCP 세션은 자체 연결 상태와 자체 캔버스를 구성합니다. 동일한 호스트에 연결된 두 연구자는 서로의 brapi_connect 별칭, 교환된 SGN/OAuth 토큰 또는 유출된 df_<uuid> 행을 볼 수 없습니다. Stdio는 항상 단일 세션(단일 프로세스, 동시성 없음)으로 동작합니다.
MCP 개정판 2026-07-28을 사용하는 클라이언트. 해당 개정판은 모든 전송에서 세션리스입니다. 요청에 Mcp-Session-Id가 없으므로 ctx.sessionId는 undefined이며, 이를 협상하는 클라이언트는 MCP_SESSION_MODE=stateful에서도 공유 테넌트 워크스페이스로 폴백합니다. 세션 격리는 2025년대 클라이언트에 적용됩니다. 2026년대 클라이언트에 대해 엄격한 경계가 필요한 배포는 MCP_AUTH_MODE=jwt/oauth로 테넌트를 분할해야 합니다.
공유 워크스페이스 형태. 한 테넌트 내 교차 세션 협업을 위해 BRAPI_SESSION_ISOLATION=false를 설정하세요. 그러면 여러 MCP 세션이 연결 상태와 하나의 기본 캔버스를 공유하며, 이는 0.5.3 이전 배포가 동작하던 방식입니다. 기획, 분석, 작성 에이전트가 별도의 MCP 클라이언트로 실행되지만 공유 업스트림 자격 증명으로 한 명의 연구자처럼 동작해야 할 때 유용합니다.
권한 있는 데이터에 관하여. df_<uuid> 이름은 캔버스 내의 기능 토큰이지 행 수준 접근 제어가 아닙니다. 동일한 (테넌트, 세션) 버킷 내에서 이름을 보유한 사람은 누구나 해당 행을 읽을 수 있습니다. 기본 격리에서는 그 버킷이 하나의 MCP 세션입니다. BRAPI_SESSION_ISOLATION=false에서는 버킷이 전체 테넌트로 확장됩니다(auth=none의 모든 호출자, 또는 jwt/oauth에서 한 사용자의 세션들). 데이터프레임 이름을 인증된 공유 링크처럼 취급하세요 — 버킷 내에서만 전달하고 외부로는 전달하지 마세요. 24시간 TTL은 폭발 반경을 제한하며, 출처 추적(발신 도구, baseUrl, 쿼리)은 감사를 지원합니다. 이중 안전장치: brapi_dataframe_describe는 공유 신뢰 HTTP에서 명시적 dataframe 이름을 요구하며(전체 목록 열거 없음), brapi_dataframe_query는 시스템 카탈로그 읽기(information_schema, pg_catalog, sqlite_master, duckdb_*)를 거부합니다. 따라서 알려진 df_<uuid> 이름이 없는 호출자는 어느 표면으로도 조회할 수 없습니다.
BrAPI 전용 기능
데이터프레임 스필오버 —
find_*도구는 컨텍스트 내 행을loadLimit으로 제한하고, 더 큰 유니온(최대 50k 행 / 50페이지)을 DuckDB 기반df_<uuid>캔버스 데이터프레임으로 구체화합니다.brapi_dataframe_describe로 발견하고,brapi_dataframe_query로 쿼리합니다(SQL 페이징 viaLIMIT/OFFSET, 프로젝션, 집계). SQL 게이트에서 읽기 전용을 적용하며, 기본적으로 세션 범위입니다(BRAPI_SESSION_ISOLATION=false에서는 테넌트 범위) — 멀티에이전트 워크플로 참조.멀티서버 세션 —
ServerRegistry는 별칭을 실시간 BrAPI 연결에 매핑합니다. 하나의 세션이 Breedbase, T3, Sweetpotatobase를 병렬로 아우를 수 있습니다.내장 알려진 서버 레지스트리 —
bti-cassava,bti-sweetpotato,bti-breedbase-demo,t3-wheat,t3-oat,t3-barley는 환경 변수 없이 즉시 해석됩니다. 오리엔테이션 엔벨로프는 CC-BY 저작자 표시를 포함합니다.기능 인식 호출 —
CapabilityRegistry는 연결별로/serverinfo를 캐시하고 지원되지 않는 엔드포인트에 대해 모든 도구 호출을 보호합니다./serverinfo가 부족할 때/calls로 폴백합니다.방언 적응 —
spec/brapi-test/breedbase/cassavabase/bms방언은 v2.1 복수 필터 키를 각 서버 계열이 인정하는 단수 형태로 변환하고, 손상된 것으로 알려진 필터를 제거하며, 희소 형상 인코딩을 정규화하고, GET이 다중 값 필터를 조용히 다운캐스트할 때 POST/search/{noun}로 승격합니다./serverinfo(server-name / organization-name)에서 감지되며,BRAPI_<ALIAS>_DIALECT로 별칭별로 고정할 수 있습니다. 검증된 매핑과 추론된 매핑의 수가 오리엔테이션 엔벨로프에 표시되어 에이전트가 신뢰도 하한을 한눈에 볼 수 있습니다.DuckDB 필수 —
@duckdb/node-api는 일반 의존성입니다. 프레임워크 캔버스를 사용할 수 없으면 시작 시 안전하게 실패합니다. Cloudflare Workers에서는 지원되지 않습니다(해당 런타임에 네이티브 바이너리 없음).비동기 검색 투명성 —
brapi_find_genotype_calls와brapi_raw_search는POST /search/{noun}→GET /search/{noun}/{id}202-재시도 패턴을 자동으로 처리합니다.혈통 DAG 탐색 —
brapi_walk_pedigree는 사이클 감지와 함께 조상/후손을 BFS로 탐색합니다(BrAPI는 호출당 한 세대만 노출). 1,000노드 안전 상한이 탐색을 제한하고 도달 시truncated를 설정합니다.loadLimit보다 큰 탐색은 노드 및 엣지 집합을 두 개의 JOIN 가능한 캔버스 데이터프레임으로 스필오버하고 제한된 인라인 미리보기를 반환합니다.이미지 콘텐츠 —
brapi_get_image는 바이트를 MCPtype: image블록으로 인라인 가져오며,imageURL폴백과 함께/images/{id}/imagecontent를 우선합니다.자유 텍스트 변수 순위 지정 —
OntologyResolver는 쿼리(PUI / 이름 / 동의어 / 형질 클래스)에 대해 변수에 점수를 매겨/ontologies없이도find_variables text:"..."가 순위가 매겨진 후보를 반환합니다.하나의 스키마에 담긴 인증 변형 — 태그된 유니온은
none/bearer/api_key/sgn(세션 토큰 교환) /oauth2(클라이언트 자격 증명)을 포함합니다.타입화된 오류 계약 — 선언된 모든 실패 모드는 안정적인
data.reason, HTTP 스타일code,recovery.hint를 포함하여 클라이언트가 결정적으로 라우팅할 수 있습니다.
@cyanheads/mcp-ts-core 기반 — 선언적 정의, 통합 오류 처리, 플러그형 인증(none / jwt / oauth), 교체 가능한 스토리지, 선택적 OTel을 사용한 구조화 로깅, STDIO + Streamable HTTP 전송.
데이터프레임 작업
find_* 도구의 업스트림 총계가 loadLimit을 초과하면 전체 유니온이 캔버스 데이터프레임으로 구체화되고 응답에는 인라인 dataframe 핸들({ tableName, rowCount, columns, createdAt, expiresAt, … })이 포함됩니다. SQL 안전 식별자가 아닌 업스트림 열 이름 — end 같은 예약어, 숫자로 시작하는 ID — 은 데이터프레임을 위해 정리되며, 핸들의 columnLegend는 이름이 바뀐 각 열을 원래 키에 매핑합니다. SQL이 페이징 관용구입니다. LIMIT/OFFSET으로 페이지를 이동하고, 프로젝션(SELECT col1, col2)으로 열을 줄이고, 집계(COUNT, GROUP BY, AVG)로 모든 행을 구체화하지 않고 요약하세요.
데이터프레임 이름은 기본적으로 세션 범위의 기능 토큰입니다. 동일한 MCP 세션의 다른 에이전트(또는 동일 워크플로의 다운스트림 단계)에 tableName을 전달하면 업스트림에서 다시 가져오지 않고 이름으로 동일한 워크스페이스를 쿼리합니다. brapi_dataframe_* 도구는 SQL 조작 등을 제공합니다. 교차 세션/교차 테넌트 규칙은 멀티에이전트 워크플로를 참조하세요.
1. brapi_find_observations { studies: ["s-422"] }
→ first-page rows inline + dataframe.tableName = "df_<uuid>" (when totalCount > loadLimit)
2. brapi_dataframe_describe { dataframe: "df_<uuid>" }
→ schema + provenance (originating tool, baseUrl, query, expiry)
3. brapi_dataframe_query { sql: "SELECT germplasmName, value FROM df_<uuid> WHERE observationVariableDbId = 'V1' LIMIT 100" }
→ typed columns + bounded rows
4. brapi_dataframe_query { sql: "SELECT COUNT(*) AS n, AVG(CAST(value AS DOUBLE)) AS mean FROM df_<uuid> WHERE observationVariableDbId = 'V1'" }
→ aggregate without round-tripping all rows데이터프레임은 TTL(BRAPI_DATASET_TTL_SECONDS, 기본 24시간)을 통해 자동 만료됩니다. 명시적 정리를 위해 BRAPI_CANVAS_DROP_ENABLED=true를 설정하여 brapi_dataframe_drop을 노출하세요.
시작하기
MCP 클라이언트 구성에 추가하세요 — 러너 하나를 선택하세요:
{
"mcpServers": {
"brapi-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/brapi-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
}
}
}command/args를 npx -y @cyanheads/brapi-mcp-server@latest(Bun 없음) 또는 docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio ghcr.io/cyanheads/brapi-mcp-server:latest로 바꾸세요.
Streamable HTTP의 경우:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp환경 변수는 필요하지 않습니다. 내장된 6개 별칭(bti-cassava, bti-sweetpotato, bti-breedbase-demo, t3-wheat, t3-oat, t3-barley)은 즉시 해석되며, 에이전트는 런타임에 brapi_connect를 통해 다른 BrAPI v2 URL에 연결할 수 있습니다. 자격 증명이 필요한 서버의 경우 에이전트 입력보다 환경 변수를 선호하세요. 비밀번호/토큰/API 키가 LLM 컨텍스트에 남지 않도록 하기 위함입니다 — 별칭별 자격 증명 참조.
전제 조건: Bun v1.3.11+ 또는 Node.js v24+. @duckdb/node-api는 필수 의존성입니다 — Linux/macOS/Windows × x64 및 Linux/macOS arm64에서 지원됩니다(Windows arm64 및 Cloudflare Workers는 제외).
구성
모든 변수는 선택 사항입니다.
변수 | 설명 | 기본값 |
| 기본 BrAPI v2 베이스 URL(예: | — |
| 기본 연결에 대한 SGN 세션 토큰 인증. | — |
| 기본 연결에 대한 OAuth2 클라이언트 자격 증명. | — |
| 기본 연결에 대한 정적 API 키. | 헤더 |
| 내장 레지스트리에서 제거할 쉼표로 구분된 별칭 이름(대소문자 구분 안 함). | — |
|
|
|
| 캔버스 스필오버 워크 중 사용되는 업스트림 |
|
| 연결별 동시성 상한. |
|
| 지수 백오프를 사용하는 429/5xx 재시도 정책. |
|
| 요청별 HTTP 타임아웃. |
|
| 비핵심 컴패니언 강화(FK 조회, 카운트 프로브)를 위한 더 짧은 타임아웃. 컴패니언은 재시도 예산을 우회하므로 느린 업스트림이 응답을 지연시키는 대신 경고로 표시됩니다. |
|
| 비동기 |
|
| 스필된 행과 함께 저장되는 데이터프레임 출처 메타데이터의 TTL. |
|
| 프로그램/시험/위치/작물 캐시의 TTL. |
|
| RFC 1918/루프백 대상 허용. 개발 전용. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| — |
|
|
|
| 전송( |
|
| 인증 모드( |
|
|
|
|
별칭별 재정의는 BRAPI_<ALIAS>_* 패턴을 따릅니다 — 모든 재정의와 인라인 주석은 .env.example을 참조하세요.
별칭별 자격 증명
brapi_connect는 에이전트가 이를 생략할 때 환경 변수에서 baseUrl과 auth를 확인합니다 — 자격 증명은 LLM 컨텍스트에 절대 들어가지 않습니다. 네 가지 우선순위 계층:
명시적 에이전트 입력 — 항상 우선합니다.
별칭별 환경 변수 —
BRAPI_<ALIAS>_*(대문자, 하이픈 → 밑줄:my-server→BRAPI_MY_SERVER_*).내장 알려진 서버 레지스트리 — 내장 별칭 참조.
기본 환경 변수 —
BRAPI_DEFAULT_*, 별칭이default와 다를 때만. 내장 URL 위에 계층화되지 않음 — 기본값은 기본 서버에 속합니다.
각 별칭은 하나의 자격 증명 패밀리를 가집니다 — 인증 모드는 어떤 필드가 설정되었는지에서 파생됩니다:
설정된 변수 | 결정된 |
|
|
|
|
|
|
|
|
(설정 안 됨) |
|
하나의 alias 안에서 계열을 혼용하면 ValidationError가 발생합니다.
# .env — attach write credentials to the built-in 'bti-cassava' alias
BRAPI_BTI_CASSAVA_USERNAME=alice
BRAPI_BTI_CASSAVA_PASSWORD=...
# (BASE_URL omitted — built-in registry covers it)
# Static API key as alias 'prod'
BRAPI_PROD_BASE_URL=https://my-brapi.example.com/brapi/v2
BRAPI_PROD_API_KEY=...
BRAPI_PROD_API_KEY_HEADER=X-API-Key그런 다음 에이전트는 brapi_connect({ alias: 'bti-cassava' })를 호출합니다. 프롬프트에 baseUrl도, auth도, 비밀 정보도 없습니다.
기본 제공 alias
서버는 선별된 공개 BrAPI v2 엔드포인트 레지스트리를 기본 제공합니다. 각 엔드포인트는 별도 설정 없이 바로 동작하며, orientation envelope은 Creative Commons Attribution 하에 attribution 블록에 라이선스, 인용 정보, 홈페이지를 표시합니다.
Alias | 업스트림 | 운영 주체 | 작물 | 비고 |
| Boyce Thompson Institute | 카사바 | NextGen Cassava | |
| Boyce Thompson Institute | 고구마 | ||
| Boyce Thompson Institute | Demo | 샘플 데이터 전용 — 온보딩 및 테스트용. | |
| Triticeae Toolbox (T3) | 밀 | Wheat CAP / IWYP. | |
| Triticeae Toolbox (T3) | 귀리 | Global Oat Genetics Database. | |
| Triticeae Toolbox (T3) | 보리 | T-CAP / US Wheat & Barley Scab Initiative. |
BRAPI_<ALIAS>_BASE_URL을 설정하면 스테이징 미러나 포크를 가리키도록 변경할 수 있습니다(환경 변수가 기본 제공 URL보다 우선하며, alias의 하이픈은 환경 변수에서 밑줄이 되므로 t3-wheat → BRAPI_T3_WHEAT_BASE_URL). BRAPI_<ALIAS>_USERNAME 등을 설정하면 기본 제공 URL 위에 자격 증명을 추가할 수 있습니다. 각 Breedbase 인스턴스는 고유한 사용자 테이블을 가지므로 쓰기 액세스에는 각 업스트림에 별도로 등록해야 합니다. BRAPI_BUILTIN_ALIASES_DISABLED=bti-cassava,t3-wheat를 사용하면 특정 항목을 제거할 수 있습니다.
인용: 기본 제공 6개 엔드포인트 모두 Morales et al. 2022, "Breedbase: a digital ecosystem for modern plant breeding." G3 12(7): jkac078. doi:10.1093/g3journal/jkac078을 참조합니다.
서버 실행
# Hot-reload dev (Bun runs TS directly)
bun --watch src/index.ts
# Production
bun run rebuild
bun run start # transport via MCP_TRANSPORT_TYPE (stdio default)
bun run start:stdio # or pin explicitly
bun run start:http
# Checks
bun run devcheck # lint + format + typecheck + security + changelog sync
bun run test # Vitest
bun run lint:mcp # validate MCP definitionsDocker
docker build -t brapi-mcp-server .
docker run --rm -p 3010:3010 brapi-mcp-server기본값은 HTTP 전송, 상태 저장 세션 모드입니다(mcp-session-id 수명 주기를 사용하며, 이는 BRAPI_SESSION_ISOLATION=true의 전제 조건입니다. 하이재킹 방지를 위해서는 MCP_AUTH_MODE=jwt|oauth를 추가로 적용해야 합니다). 로그는 /var/log/brapi-mcp-server에 기록됩니다. OTel 피어 의존성은 기본적으로 설치되며, 제외하려면 --build-arg OTEL_ENABLED=false를 사용합니다.
배포 형태
brapi-mcp-server는 세 가지 형태로 실행됩니다. 신뢰 도메인에 맞는 형태를 선택하세요. 차별점은 연결 상태(등록된 alias, 캐시된 업스트림 토큰)와 dataframe을 무엇으로 격리하느냐입니다. 즉, 격리하지 않음, MCP 세션, 또는 인증 테넌트입니다.
형태 | 설정 | 격리 | 적합한 환경 |
세션별(기본값) |
| 각 MCP 세션은 고유한 연결 상태와 캔버스를 구성합니다. 동시에 접속한 HTTP 호출자는 서로의 alias, 교환된 토큰, | SSO가 없는 다중 사용자 호스트. 공유 신뢰 인증 하의 기관/공개 배포 기본값. |
사용자별 자격 증명 |
| 각 사용자의 JWT | 기관 SSO(Shibboleth, Okta 등)를 사용하는 다중 사용자 호스트 — 가장 강력한 분리. |
공유 워크스페이스 |
| 한 테넌트의 모든 호출자는 연결 상태와 하나의 캔버스를 공유합니다. | 단독 연구, 실험실, 또는 모든 호출자가 공유 업스트림 자격 증명으로 병렬 에이전트를 실행하는 한 명의 연구자인 호스팅 환경. |
형태 선택 가이드:
SSO가 없는 다중 사용자 공개/기관 HTTP. 세션별 기본값을 사용하세요. 모든 연구자가
tenantId='default'로 해석되더라도 각 연구자의 상태 저장 HTTP 세션은 격리됩니다.기관 SSO를 사용하는 다중 사용자.
MCP_AUTH_MODE=jwt(HS256,MCP_AUTH_SECRET_KEY) 또는oauth(JWKS,OAUTH_ISSUER_URL+OAUTH_AUDIENCE)를 사용하세요. 각 사용자의tid클레임이 테넌트(외부 범위)를 구성합니다. 그러면BRAPI_SESSION_ISOLATION=true(기본값)가 병렬 세션을 실행하는 사용자에 대해 각 테넌트 내부를 하위 범위로 세분화하고, JWT/OAuth 신원 바인딩이 그 위에 실제 세션 하이재킹 방지를 제공합니다.한 명의 연구자, 병렬 에이전트. 여러 에이전트(플래너, 분석가, 보고서 작성)가 별도의 MCP 클라이언트로 연결하지만 하나의 워크스페이스를 공유해야 한다면
BRAPI_SESSION_ISOLATION=false를 설정하고 공유 신뢰에 의존하세요. 이것이 공유 워크스페이스 형태입니다.Stdio. 항상 단일 세션이므로 격리는 무의미합니다. 이 플래그는 효과가 없습니다.
MCP 리비전 2026-07-28의 클라이언트. 프로토콜상 세션이 없으므로
BRAPI_SESSION_ISOLATION설정과 관계없이 공유 테넌트 워크스페이스에 배치됩니다. 사용자별 자격 증명 형태만 이들을 격리합니다.
공유 신뢰 하의 이중 안전장치. BRAPI_SESSION_ISOLATION=false에서도 brapi_dataframe_describe는 HTTP에서 명시적인 dataframe 이름을 요구하며(전체 목록 열거 불가), brapi_dataframe_query는 시스템 카탈로그 읽기(information_schema, pg_catalog, sqlite_master, duckdb_*)를 거부합니다. dataframe 이름이 곧 capability 토큰이며, 소유가 이를 증명합니다.
개발
전체 아키텍처 규칙은 CLAUDE.md를 참조하세요. 요약은 다음과 같습니다.
핸들러가 예외를 던지면 프레임워크가 처리합니다. 도구 로직에
try/catch를 사용하지 마세요.로깅에는
ctx.log, 저장에는ctx.state를 사용하세요.console이나 직접 영속화는 사용하지 마세요.새 도구는
src/index.ts의createApp()에 있는tools배열에 등록하세요.업스트림 호출을 래핑하세요. 원시 데이터 검증 → 정규화 → 출력 스키마 반환 순서를 따르며, 누락된 필드를 임의로 만들지 마세요.
git clone https://github.com/cyanheads/brapi-mcp-server.git
cd brapi-mcp-server
bun install
cp .env.example .env # edit if you need credentials
bun run devcheck && bun run testPR 환영합니다.
라이선스
Apache-2.0 — LICENSE 참조.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Create, browse, remix, collaborate on, and run durable AI workflow nodes from MCP hosts.
AI agent registry — search, discover, register, and connect agents via MCP.
- OctopadOAuthapp.octopad
The back-office workspace for your team's AIs: tasks, knowledge and context shared over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to explore, search, and query API definitions from OpenAPI/Swagger JSON files.59MIT
- FlicenseAqualityCmaintenanceA local-first MCP server providing secure workspace file operations, offline full-text search, and web search/fetch capabilities without requiring API keys.10-
- AlicenseNot gradedqualityCmaintenanceMCP server for querying the GWAS Catalog (EBI/NHGRI), a curated catalog of genome-wide association studies. It enables AI agents to search and retrieve study data via natural language or direct tool calls.7MIT
- AlicenseNot gradedqualityBmaintenanceA vendor-neutral MCP server that lets coding agents search and understand OpenAPI/Swagger documents via stdio tools, without calling real backend APIs.1791MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/brapi-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server