GrowthBook
公式フィーチャーフラグの作成と読み取り、実験のレビュー、フラグタイプの生成、ドキュメントの検索、そしてGrowthBookのフィーチャーフラグ管理および実験プラットフォームとの連携を行います。
GrowthBook MCPで何ができますか?
- 利用可能なスキルの一覧表示 — アシスタントに
growthbook_list_skillsを使用して、GrowthBook スキルのトップレベルのエントリポイントを表示させます。 - スキルワークフローの読み込み —
growthbook_read_skillを使用して、完全なスキルまたは子ワークフロー(例:feature-flags/references/flag-create)を取得します。 - API データの読み取り —
growthbook_api_readを使用して、GrowthBook REST エンドポイントへの認証付き GET リクエスト(例: プロジェクトの一覧表示)を実行します。 - API リソースの変更 —
growthbook_api_writeを使用して、POST/PUT/PATCH/DELETE 呼び出しでフラグを作成または更新します(例: フィーチャーフラグの作成)。 - 読み取り専用モードに制限 —
GB_SKILLS_ENABLED=falseでサーバーを構成するか、/mcp/apiを使用して API ツールのみを公開し、readOnlyHintを尊重します。
ドキュメント
GrowthBook MCP Thin
GrowthBook用の軽量MCPサーバーで、4つのツールを提供します:
| ツール | 目的 |
|---|---|
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パススルー |
能力はスキルリポジトリにあり、ビルド時にバンドルされます。機能は読み取り用と書き込み用の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モードでのアイドルキープアライブタイムアウト。前方のロードバランサーのアイドルタイムアウトより長くなければなりません。そうしないと、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)
認証されていないリクエストは、/.well-known/oauth-protected-resourceを指すWWW-Authenticateを含む401を受け取り、GrowthBook Authorization Serverを宣伝します。
MCPを処理する前に、サーバーはベアラーを使用してGrowthBook REST(GET /api/v1/)をプローブします。そのプローブ(または後でAPIツールから)の401は、"This API key has expired"をツールエラーとして表示する代わりに、MCPクライアントが更新できるようにHTTP 401とerror="invalid_token"を生成します。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では、認証失敗、セルフホストの404ヒント、レート制限をカバーする実行可能なエラー(
isError: true)を返します - フリーフォームパスはGrowthBook REST APIを対象とします
- 各リクエストにはMCP使用状況ヘッダーが含まれます(使用状況テレメトリを参照)
growthbook_list_skills / growthbook_read_skill
GB_SKILLS_ENABLEDが無効でない場合にのみ登録されます。
growthbook_list_skillsはトップレベルのスキルエントリポイントを返します。エントリには完全なワークフローが含まれるか、子ワークフローにルーティングされる場合があります。growthbook_read_skillは、一覧表示されたトップレベル名またはロードされたスキルによって指定された修飾された子パス(feature-flags/references/flag-create)を受け入れ、完全なマークダウン(ワークフロー + ガードレール)を返します。
使用状況テレメトリ
このサーバーは、それ自体ではどこにもテレメトリを送信しません。代わりに、growthbook_api_read / growthbook_api_writeによって行われるすべてのREST呼び出しには、GrowthBookインスタンスにその呼び出しがMCPから来たことを伝えるヘッダーが含まれます:
| ヘッダー | 例 | 内容 |
|---|---|---|
X-GB-MCP-Tool | growthbook_api_read | 呼び出しを行ったツール |
X-GB-MCP-Version | 2.1.0 | このサーバーのバージョン |
X-GB-MCP-Transport | stdio | stdio または http |
X-GB-MCP-Client | cursor/1.2.3 | initializeハンドシェイクからのMCPクライアントの名前/バージョン、またはHTTPモードでのそのUser-Agent |
GrowthBookは既存の製品テレメトリを通じてこれらを記録するため、同じコントロールが適用されます。セルフホストインスタンスでは、GrowthBookバックエンドでDISABLE_TELEMETRYを設定すると、GrowthBookのテレメトリの残りとともにこれがオフになります。古いGrowthBookバージョンはヘッダーを無視します。スキルツール(growthbook_list_skills / growthbook_read_skill)はローカルで提供され、リクエストを行わないため、追跡されません。
開発
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を設定すると、MCPを/mcp(スキル + APIツール)と/mcp/api(機能のみ)で公開するスタンドアロンHTTPサーバーとして実行され、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>をプルします。