GrowthBook
官方建立與讀取功能旗標、檢視實驗、產生旗標類型、搜
你可以用 GrowthBook MCP 做什麼?
- 探索可用工作流程 — 要求助理透過
growthbook_list_skills列出 GrowthBook 技能入口點,以查看支援哪些任務。 - 載入逐步指南 — 透過
growthbook_read_skill請求特定工作流程(例如feature-flags/references/flag-create),以取得包含防護措施的詳細指示。 - 查詢 GrowthBook 資料 — 讓助理使用
growthbook_api_read搭配任何有效的 REST API 路徑來擷取專案、功能或其他資源。 - 修改 GrowthBook 資源 — 指示助理透過
growthbook_api_write建立或更新旗標,將 POST/PUT/PATCH/DELETE 呼叫對應至相同的 API 路徑。
文件
GrowthBook MCP Thin
一個用於 GrowthBook 的精簡 MCP 伺服器,提供四個工具:
| 工具 | 用途 |
|---|---|
growthbook_list_skills | 列出頂層技能入口點(名稱 + 描述) |
growthbook_read_skill | 返回列出的技能或合格的子工作流程(feature-flags 或 feature-flags/references/flag-create) |
growthbook_api_read | 已驗證的 GET 透傳至 GrowthBook API |
growthbook_api_write | 已驗證的 POST/PUT/PATCH/DELETE 透傳 |
能力存在於 skills 儲存庫中,並在建置時打包。能力分為讀取與寫入 API 工具(無每個端點格式化器),以便客戶端能正確遵循 readOnlyHint / destructiveHint。
工具以 growthbook_ 為前綴,確保當客戶端載入多個 MCP 伺服器時不會產生歧義。
Cursor 外掛
從 Cursor Marketplace 安裝 GrowthBook。此外掛將 Cursor 連接到位於 https://mcp.growthbook.io/mcp 的託管伺服器;首次工具呼叫會開啟 GrowthBook 登入以進行授權。自架 GrowthBook 的使用者應依照下方說明手動設定伺服器。
此外掛由 .cursor-plugin/plugin.json 和 mcp.json 定義。若要在本機測試變更,請將儲存庫複製到 ~/.cursor/plugins/local/growthbook 並執行 Developer: Reload Window。
安裝 / 執行
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 必填 | — | 公開 MCP 基礎 URL,寫入 OAuth 資源中繼資料(伺服器在 HTTP 模式下若缺少此值將拒絕啟動) |
GB_MCP_KEEP_ALIVE_TIMEOUT_MS | 否 | 90000 | HTTP 模式下的閒置 keep-alive 逾時。必須超過前方任何負載平衡器的閒置逾時,否則 LB 可能重用伺服器已關閉的連線,導致請求失敗並回傳 502 |
OPENAI_APPS_CHALLENGE_TOKEN | 否 | — | 以純文字在 /.well-known/openai-apps-challenge 提供,用於 OpenAI 外掛網域驗證(HTTP 模式);未設定時路由回傳 404 |
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 授權伺服器。
在處理 MCP 之前,伺服器會使用 bearer 探查 GrowthBook REST(GET /api/v1/)。來自該探查(或稍後來自 API 工具)的 401 會產生 HTTP 401 及 error="invalid_token",以便 MCP 客戶端可以重新整理 — 而不是將 "This API key has expired" 顯示為工具錯誤。403 被視為已接受的 bearer(權限拒絕 ≠ 無效權杖),因此客戶端不會被迫進入重新整理迴圈。
僅能力模式
HTTP(遠端建議): 將客戶端指向 /mcp/api 而非 /mcp:
{
"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.exampleskills-src/— CI 和 Docker 建置所供應的內容
沒有隱含的兄弟目錄查找。../skills 解析為該路徑上恰好存在的任何內容,這使得本機建置可能與 CI 建置的提交靜默不一致。
CI、雲端部署和發布都讀取 agent-skills.lock.json 並檢出
該確切的技能提交。若要發布上游技能變更,請更新鎖定檔案中的提交。
本機開發可以使用 agent-skills.local.json 或 SKILLS_SRC 指向任何檢出。
技能儲存庫保持為唯一事實來源 — 此套件不維護
技能內容的分支。新技能會自動流入,除了
bundle-skills.mjs 中小型封鎖清單中列出的那些。目前僅 gb-setup 被
封鎖,因為它配置 gb-call shell 介面卡而非 GrowthBook
本身。
每個技能的 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
- 每個請求攜帶 MCP 使用標頭(請參閱 使用遙測)
growthbook_list_skills / growthbook_read_skill
僅在 GB_SKILLS_ENABLED 未停用時註冊。
growthbook_list_skills回傳頂層技能入口點。一個入口可能包含完整的工作流程或路由到子工作流程。growthbook_read_skill接受列出的頂層名稱或已載入技能命名的合格子路徑(feature-flags/references/flag-create),並回傳完整的 markdown(工作流程 + 護欄)。
使用遙測
此伺服器本身永遠不會將遙測發送到任何地方。相反,growthbook_api_read / growthbook_api_write 進行的每個 REST 呼叫都包含標頭,告訴它所通訊的 GrowthBook 實例該呼叫來自 MCP:
| 標頭 | 範例 | 內容 |
|---|---|---|
X-GB-MCP-Tool | growthbook_api_read | 發出呼叫的工具 |
X-GB-MCP-Version | 2.2.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 以將其作為獨立 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)。- 傳入的 bearer 透過探查 GrowthBook REST API 驗證;被拒絕的權杖會獲得 HTTP
401+WWW-Authenticate,以便客戶端可以重新整理。
在受信任的網路或綁定到 loopback 上執行。對於多租戶或公開部署,請使用您自己的閘道/驗證作為前端。
發布
發布是有意為之:在 package.json 中提升版本,執行 npm run sync-version(更新 manifest.json、server.json 和 .cursor-plugin/plugin.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 Release
Cursor 外掛不由 CI 發布:Cursor 在版本提升落地後從預設分支重新審查此外掛。
使用 npx @growthbook/mcp@<version> 安裝發布版,或拉取 ghcr.io/growthbook/growthbook-mcp:<version>。