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_readGrowthBook 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_KEYstdio의 경우 필수, HTTP OAuth의 경우 선택—GrowthBook API 키 또는 개인 액세스 토큰
GB_API_URL아니요https://api.growthbook.ioAPI 기본 URL(자체 호스팅) 및 기본 OAuth AS 발급자
GB_MCP_TRANSPORT아니요stdiostdio 또는 http
GB_MCP_PORT아니요3333HTTP 수신 포트 (transport=http인 경우)
GB_MCP_HOST아니요127.0.0.1HTTP 바인드 호스트
GB_MCP_URLHTTP의 경우 필수—OAuth 리소스 메타데이터에 기록되는 공개 MCP 기본 URL (서버는 이 값 없이 HTTP 모드에서 시작을 거부함)
GB_MCP_KEEP_ALIVE_TIMEOUT_MS아니요90000HTTP 모드의 유휴 keep-alive 시간 초과. 앞단의 로드 밸런서 유휴 시간 초과보다 커야 합니다. 그렇지 않으면 LB가 서버가 이미 닫은 연결을 재사용하여 요청이 502로 실패할 수 있습니다
GB_OAUTH_ISSUER아니요GB_API_URLGrowthBook OAuth AS 발급자 URL
GB_HTTP_HEADER_*아니요—추가 요청 헤더 (예: GB_HTTP_HEADER_CF_ACCESS_TOKEN)
GB_SKILLS_ENABLED아니요truefalse / 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"
    }
  }
}
경로도구
/mcpgrowthbook_list_skills, growthbook_read_skill, growthbook_api_read, growthbook_api_write (GB_SKILLS_ENABLED=false가 아닌 경우)
/mcp/apigrowthbook_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

소스 경로 해석:

  1. SKILLS_SRC 환경 변수 (스킬 저장소 루트 경로)
  2. agent-skills.local.json — { "path": "../skills" }, 저장소 루트 기준. Gitignore됨; agent-skills.local.json.example 복사
  3. 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)는 beta dist-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>을 가져오세요.