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_readGrowthBook 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_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モードでのアイドルキープアライブタイムアウト。前方のロードバランサーのアイドルタイムアウトより長くなければなりません。そうしないと、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)

認証されていないリクエストは、/.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"
    }
  }
}
パスツール
/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では、認証失敗、セルフホストの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-Toolgrowthbook_api_read呼び出しを行ったツール
X-GB-MCP-Version2.1.0このサーバーのバージョン
X-GB-MCP-Transportstdiostdio または http
X-GB-MCP-Clientcursor/1.2.3initializeハンドシェイクからの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>をプルします。