GrowthBook

官方

创建和读取功能标志、审查实验、生成标志类型、搜索文档,并与GrowthBook的功能标志和实验平台进行交互。

你可以用 GrowthBook MCP 做什么?

  • 列出可用技能 — 让助手调用 growthbook_list_skills 查看 GrowthBook 工作流的顶级入口点及其描述。

  • 加载技能工作流 — 使用 growthbook_read_skill 获取完整技能的 Markdown,包括子工作流,如 feature-flags/references/flag-create。

  • 读取 GrowthBook 数据 — 让助手调用 growthbook_api_read,并传入类似 /api/v1/projects 的路径,通过经过身份验证的 GET 请求获取数据。

  • 写入 GrowthBook API — 使用 growthbook_api_write 创建或修改资源,例如,向 /api/v2/features 发送带有 JSON 请求体的 POST 请求以创建新标志。

  • 尊重读写权限 — 服务器会暴露 readOnlyHint 和 destructiveHint,以便客户端安全地区分只读操作与变更操作。

文档

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 服务器时保持无歧义。

安装 / 运行

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 模式必填—公共 MCP 基础 URL,写入 OAuth 资源元数据(服务器在 HTTP 模式下没有它将拒绝启动)
GB_MCP_KEEP_ALIVE_TIMEOUT_MS否90000HTTP 模式下的空闲保活超时。必须超过前端任何负载均衡器的空闲超时,否则负载均衡器可能重用服务器已关闭的连接,请求将因 502 失败
GB_OAUTH_ISSUER否GB_API_URLGrowthBook 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"
    }
  }
}
路径工具
/mcpgrowthbook_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

源路径解析:

  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 被 阻止,因为它配置了 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

growthbook_list_skills / growthbook_read_skill

仅在 GB_SKILLS_ENABLED 未被禁用时注册。

  • growthbook_list_skills 返回顶级技能入口点。一个入口可能包含完整的工作流或路由到子工作流。
  • growthbook_read_skill 接受列出的顶级名称或由已加载技能命名的限定子路径(feature-flags/references/flag-create),并返回完整的 markdown(工作流 + 护栏)。

开发

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,以便客户端可以刷新。

在受信任的网络或绑定到回环地址上运行。对于多租户或公共部署,请在前面放置您自己的网关/认证。

发布

发布是有意为之的:在 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 Release

使用 npx @growthbook/mcp@<version> 安装发布版本,或拉取 ghcr.io/growthbook/growthbook-mcp:<version>。