GrowthBook
공식피처 플래그를 생성 및 읽고, 실험을 검토하며, 플래그 유형을 생성하고, 문서를 검색하며, GrowthBook의 피처 플래깅 및 실험 플랫폼과 상호작용합니다.
GrowthBook MCP(으)로 무엇을 할 수 있나요?
-
사용 가능한 스킬 목록 — 어시스턴트에게
growthbook_list_skills를 호출하여 최상위 GrowthBook 워크플로 진입점과 해당 설명을 확인하도록 요청하세요. -
스킬 워크플로 로드 —
growthbook_read_skill을 사용하여feature-flags/references/flag-create와 같은 하위 워크플로를 포함한 전체 스킬의 마크다운을 가져옵니다. -
GrowthBook 데이터 읽기 — 어시스턴트가
/api/v1/projects와 같은 경로로growthbook_api_read를 호출하여 인증된 GET 요청을 통해 데이터를 가져오도록 하세요. -
GrowthBook API에 쓰기 —
growthbook_api_write를 사용하여 리소스를 생성하거나 수정합니다. 예를 들어 새 플래그에 대한 JSON 본문으로/api/v2/features에 POST 요청을 보냅니다. -
읽기/쓰기 권한 존중 — 서버는
readOnlyHint및destructiveHint를 노출하므로 클라이언트가 읽기 전용 작업과 변경 작업을 안전하게 구분할 수 있습니다.
문서
GrowthBook MCP Thin
GrowthBook용 경량 MCP 서버로, 네 가지 도구를 제공합니다:
| 도구 | 용도 |
|---|---|
growthbook_list_skills | 최상위 스킬 진입점 목록 (이름 + 설명) |
growthbook_read_skill | 나열된 스킬 또는 자격을 갖춘 하위 워크플로우 반환 (feature-flags 또는 feature-flags/references/flag-create) |
growthbook_api_read | GrowthBook API에 대한 인증된 GET 패스스루 |
growthbook_api_write | 인증된 POST/PUT/PATCH/DELETE 패스스루 |
역량은 skills 저장소에 있으며 빌드 시점에 번들링됩니다. 기능은 읽기/쓰기 API 도구로 분할되어(엔드포인트별 포맷터 없음) 클라이언트가 readOnlyHint / destructiveHint을 올바르게 준수할 수 있습니다.
도구에는 growthbook_ 접두사가 붙어 클라이언트에 여러 MCP 서버가 로드된 경우에도 모호함이 없습니다.
설치 / 실행
npm install
npm run build
MCP 클라이언트를 컴파일된 진입점으로 지정하세요:
{
"mcpServers": {
"growthbook": {
"command": "node",
"args": ["/absolute/path/to/growthbook-mcp/server/index.js"],
"env": {
"GB_API_KEY": "your_api_key_or_pat",
"GB_API_URL": "https://api.growthbook.io"
}
}
}
}
또는 게시된 패키지를 실행하세요:
npx @growthbook/mcp
환경 변수
| 변수 | 필수 | 기본값 | 용도 |
|---|---|---|---|
GB_API_KEY | stdio의 경우 필수, HTTP OAuth의 경우 선택 | — | GrowthBook API 키 또는 개인 액세스 토큰 |
GB_API_URL | 아니요 | https://api.growthbook.io | API 기본 URL(자체 호스팅) 및 기본 OAuth AS 발급자 |
GB_MCP_TRANSPORT | 아니요 | stdio | stdio 또는 http |
GB_MCP_PORT | 아니요 | 3333 | HTTP 수신 포트 (transport=http인 경우) |
GB_MCP_HOST | 아니요 | 127.0.0.1 | HTTP 바인드 호스트 |
GB_MCP_URL | HTTP의 경우 필수 | — | OAuth 리소스 메타데이터에 기록되는 공개 MCP 기본 URL (서버는 이 값 없이 HTTP 모드에서 시작을 거부함) |
GB_MCP_KEEP_ALIVE_TIMEOUT_MS | 아니요 | 90000 | HTTP 모드의 유휴 keep-alive 시간 초과. 앞단의 로드 밸런서 유휴 시간 초과보다 커야 합니다. 그렇지 않으면 LB가 서버가 이미 닫은 연결을 재사용하여 요청이 502로 실패할 수 있습니다 |
GB_OAUTH_ISSUER | 아니요 | GB_API_URL | GrowthBook OAuth AS 발급자 URL |
GB_HTTP_HEADER_* | 아니요 | — | 추가 요청 헤더 (예: GB_HTTP_HEADER_CF_ACCESS_TOKEN) |
GB_SKILLS_ENABLED | 아니요 | true | false / 0로 설정하여 스킬 도구 비활성화 |
HTTP + OAuth 모드
OAUTH_AS_ENABLED=1 # on the GrowthBook API
GB_MCP_TRANSPORT=http GB_API_URL=http://localhost:3100 GB_MCP_PORT=3333 npm start
클라이언트는 다음에 연결합니다:
http://127.0.0.1:3333/mcp— 전체 (스킬 + API 읽기/쓰기)http://127.0.0.1:3333/mcp/api— 기능 전용 (growthbook_api_read+growthbook_api_write)
인증되지 않은 요청은 401를 받으며, WWW-Authenticate는 /.well-known/oauth-protected-resource을 가리켜 GrowthBook Authorization Server를 광고합니다.
MCP를 처리하기 전에 서버는 베어러로 GrowthBook REST(GET /api/v1/)를 프로브합니다. 해당 프로브(또는 이후 API 도구)에서 401이 발생하면 HTTP 401와 error="invalid_token"를 반환하여 MCP 클라이언트가 새로 고칠 수 있게 합니다 — "This API key has expired"을 도구 오류로 표시하는 대신. 403은 허용된 베어러로 처리됩니다(권한 거부 ≠ 잘못된 토큰) 따라서 클라이언트가 새로 고침 루프에 빠지지 않습니다.
기능 전용 모드
HTTP (원격에 권장): 클라이언트를 /mcp 대신 /mcp/api로 지정하세요:
{
"mcpServers": {
"growthbook": {
"url": "http://127.0.0.1:3333/mcp/api"
}
}
}
| 경로 | 도구 |
|---|---|
/mcp | growthbook_list_skills, growthbook_read_skill, growthbook_api_read, growthbook_api_write (GB_SKILLS_ENABLED=false가 아닌 경우) |
/mcp/api | growthbook_api_read, growthbook_api_write만 |
stdio / 프로세스 전체: 스킬이 등록되지 않도록 환경 변수를 설정하세요:
"env": {
"GB_API_KEY": "...",
"GB_SKILLS_ENABLED": "false"
}
스킬이 비활성화되면 API 읽기/쓰기 도구만 등록됩니다. growthbook_list_skills 및 growthbook_read_skill은 노출되지 않습니다.
스킬 번들링 방법
npm run build # tsc && bundle-skills
scripts/bundle-skills.mjs은 표준 스킬 체크아웃에서 최상위 스킬 트리를 복사하여 구조를 보존합니다:
skills/<skill>/SKILL.md → server/skills/<skill>/SKILL.md
skills/<skill>/references/<workflow>.md → server/skills/<skill>/references/<workflow>.md
소스 경로 해석:
SKILLS_SRC환경 변수 (스킬 저장소 루트 경로)agent-skills.local.json—{ "path": "../skills" }, 저장소 루트 기준. Gitignore됨;agent-skills.local.json.example복사skills-src/— CI 및 Docker 빌드가 공급하는 것
암시적 형제 조회는 없습니다. ../skills은 해당 경로에 있는 무엇이든 해석하므로 로컬 빌드가 CI가 빌드하는 커밋과 조용히 달라질 수 있습니다.
CI, 클라우드 배포 및 릴리스는 모두 agent-skills.lock.json을 읽고 해당 정확한 스킬 커밋을 체크아웃합니다. 업스트림 스킬 변경 사항을 배포하려면 잠금 파일의 커밋을 업데이트하세요. 로컬 개발은 agent-skills.local.json 또는 SKILLS_SRC으로 모든 체크아웃을 가리킬 수 있습니다.
스킬 저장소는 진실의 원천으로 유지됩니다 — 이 패키지는 스킬 콘텐츠의 포크를 유지하지 않습니다. bundle-skills.mjs의 작은 차단 목록에 있는 것을 제외한 새 스킬은 자동으로 흐릅니다. 현재 gb-setup만 차단되어 있습니다. GrowthBook 자체가 아닌 gb-call 셸 어댑터를 구성하기 때문입니다.
스킬별 scripts/ 디렉터리는 복사되지 않습니다. 상대 `references/foo.md` 링크는 자격을 갖춘 `feature-flags/references/foo` paths so growthbook_read_skill로 다시 작성되어 해석할 수 있습니다.
API 도구와 함께 스킬 사용
번들된 스킬은 여전히 워크플로우를 다음과 같이 표시합니다:
gb-call GET /api/v1/projects
gb-call POST /api/v2/features ./payload.json
이 MCP 서버는 gb-call으로 셸 아웃하지 않습니다. GET → growthbook_api_read 및 POST/PUT/PATCH/DELETE → growthbook_api_write을 동일한 경로와 선택적 JSON 본문 문자열로 매핑하세요. 서버 지침 및 growthbook_read_skill 출력에는 이 브리지 참고 사항이 포함됩니다.
도구 상세
growthbook_api_read / growthbook_api_write
{ "path": "/api/v1/projects" }
{ "method": "POST", "path": "/api/v2/features", "body": "{\"id\":\"my-flag\",...}" }
- 읽기: GET만 (
readOnlyHint: true) - 쓰기:
POST|PUT|PATCH|DELETE(destructiveHint: true) - 2xx에서 원시 응답 본문 반환
- 2xx가 아닌 경우 실행 가능한 오류(
isError: true) 반환 — 인증 실패, 자체 호스팅 404 힌트, 속도 제한 포함 - 자유 형식 경로는 GrowthBook REST API를 대상으로 합니다
growthbook_list_skills / growthbook_read_skill
GB_SKILLS_ENABLED이 비활성화되지 않은 경우에만 등록됩니다.
growthbook_list_skills은 최상위 스킬 진입점을 반환합니다. 항목은 완전한 워크플로우를 포함하거나 하위 워크플로우로 라우팅할 수 있습니다.growthbook_read_skill는 나열된 최상위 이름 또는 로드된 스킬이 명명한 자격을 갖춘 하위 경로(feature-flags/references/flag-create)를 수락하고 전체 마크다운(워크플로우 + 가드레일)을 반환합니다.
개발
git clone git@github.com:growthbook/skills.git ../skills
cp agent-skills.local.json.example agent-skills.local.json # edit if not at ../skills
npm install
npm run build
npm start
독립형 HTTP 모드
기본적으로 서버는 stdio를 통해 실행됩니다. GB_MCP_TRANSPORT=http을 설정하여 독립형 HTTP 서버로 실행하면 /mcp(스킬 + API 도구) 및 /mcp/api(기능 전용)에서 MCP를 노출하며, OAuth 2.0 보호 리소스 표면(RFC 9728 메타데이터 + RFC 6750 WWW-Authenticate) 뒤에 있습니다.
GB_MCP_URL(HTTP 모드에서 필수) — 서버의 공개 기본 URL. OAuth 리소스(대상) 및 보호 리소스 메타데이터에 기록되므로 요청 헤더에서 파생되지 않습니다. 서버는 이 값 없이 시작을 거부합니다.GB_MCP_PORT(기본값3333) 및GB_MCP_HOST(기본값127.0.0.1).- 수신 베어러는 GrowthBook REST API 프로브로 검증됩니다. 거부된 토큰은 HTTP
401+WWW-Authenticate를 받아 클라이언트가 새로 고칠 수 있습니다.
신뢰할 수 있는 네트워크 또는 루프백에 바인딩하여 실행하세요. 멀티 테넌트 또는 공개 배포의 경우 자체 게이트웨이/인증으로 앞단을 구성하세요.
릴리스
릴리스는 신중하게 진행됩니다: package.json에서 버전을 올린 다음 일치하는 v* 태그를 푸시하세요:
git tag v2.0.0
git push origin v2.0.0
해당 태그가 지정된 커밋(릴리스 시점에 스킬이 고정됨)은 다음을 게시합니다:
@growthbook/mcp을 npm에 — 사전 릴리스(-이 있는 버전, 예:2.0.0-beta.1)는betadist-tag 아래로 이동합니다. 안정 버전은latest이 됩니다- 멀티 아키텍처(
amd64+arm64) 이미지를ghcr.io/growthbook/growthbook-mcp에 (:<version>, 그리고 안정 릴리스의 경우:<major>,:<major>.<minor>,:latest추가) - MCP 레지스트리 항목
- GitHub 릴리스
npx @growthbook/mcp@<version>으로 릴리스를 설치하거나 ghcr.io/growthbook/growthbook-mcp:<version>을 가져오세요.