mcpField
G
GrowthBook MCP Server

GrowthBook MCP Server

本地服务
docs.growthbook.io开发工具241 天前更新

关于 GrowthBook MCP Server

GrowthBook MCP Server 是 GrowthBook 官方提供的轻量 MCP 服务,通过少量通用工具访问 GrowthBook 的 REST API 并管理功能开关与实验。适用于需要在 AI 客户端中操作 GrowthBook 的开发与产品团队。

主要功能

  1. 01读写分离的 API 透传工具
  2. 02可选的技能(skills)工作流读取
  3. 03支持 stdio 与 HTTP 传输
  4. 04HTTP 模式下支持 OAuth 授权
  5. 05可自托管 GrowthBook 实例配置

适用场景

  1. 01在 Cursor 中创建或查看功能开关
  2. 02通过 AI 客户端获取实验结果与项目信息
  3. 03为只读场景仅开放读取类 API 工具

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 growthbook_api_read、growthbook_api_write 以及可选的 growthbook_list_skills、growthbook_read_skill 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"growthbook": {
"command": "npx",
"args": [
"-y",
"@growthbook/mcp"
],
"env": {
"GB_API_KEY": "<GB_API_KEY>",
"GB_API_URL": "<GB_API_URL>",
"GB_SKILLS_ENABLED": "<GB_SKILLS_ENABLED>",
"GB_HTTP_HEADER_*": "<GB_HTTP_HEADER_*>"
}
}
}
}
启动命令npx -y @growthbook/mcp
需要配置的环境变量
GB_API_KEY密钥A GrowthBook API key or personal access token.
GB_API_URLYour GrowthBook API URL. Defaults to https://api.growthbook.io.
GB_SKILLS_ENABLEDSet to false to disable bundled skill tools (growthbook_list_skills, growthbook_read_skill). Defaults to true.
GB_HTTP_HEADER_*Custom HTTP headers via GB_HTTP_HEADER_<NAME> (e.g. GB_HTTP_HEADER_CF_ACCESS_TOKEN).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@growthbook/mcp2.2.0

工具

4

收录的工具列表 · 更新于 3 周前

参数类型必填说明
pathstring是API 路径;如有需要,包含查询字符串,例如 /api/v1/projects 或 /api/v2/features/my-flag

详细介绍

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_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 失败
OPENAI_APPS_CHALLENGE_TOKEN否—以纯文本形式在 /.well-known/openai-apps-challenge 提供,用于 OpenAI 插件域名验证(HTTP 模式);未设置时该路由返回 404
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 Authorization Server。

在处理 MCP 之前,服务器会使用 bearer 探测 GrowthBook REST(GET /api/v1/)。该探测返回的 401(或稍后来自 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 构建所 vendor 的内容

不存在隐式的同级查找。../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` 路径,以便 growthbook_read_skill 能解析 它们。

将技能与 API 工具配合使用

打包的技能仍将工作流显示为:

gb-call GET /api/v1/projects
gb-call POST /api/v2/features ./payload.json

本 MCP 服务不会通过 shell 调用 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-Toolgrowthbook_api_read发出该调用的工具
X-GB-MCP-Version2.2.0此服务的版本
X-GB-MCP-Transportstdiostdio 或 http
X-GB-MCP-Clientcursor/1.2.3来自 initialize 握手的 MCP 客户端名称/版本,或 HTTP 模式下的 User-Agent

GrowthBook 通过其现有的产品遥测记录这些信息,因此适用相同的控制方式。在可自托管实例上,在 GrowthBook 后端设置 DISABLE_TELEMETRY 会关闭此功能以及 GrowthBook 其余的遥测。较旧的 GrowthBook 版本会忽略这些请求头。技能工具(growthbook_list_skills / growthbook_read_skill)在本地提供,不发出任何请求,因此不会被追踪。

开发

git clone [email protected]: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 中提升版本号,运行 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)归入 beta dist-tag;稳定版本成为 latest
  • 一个多架构(amd64 + arm64)镜像到 ghcr.io/growthbook/growthbook-mcp(:<version>,以及稳定版本的 :<major>、:<major>.<minor> 和 :latest)
  • MCP registry 中的一条记录
  • 一个 GitHub Release

Cursor 插件不由 CI 发布:版本提升落地后,Cursor 会从默认分支重新审查该插件。

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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。