Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Thin MCP server for GrowthBook — skill loader + authenticated API passthrough
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
GB_API_KEY, GB_API_URL, GB_SKILLS_ENABLED必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"growthbook": {
"command": "npx",
"args": [
"-y",
"@growthbook/mcp"
],
"env": {
"GB_API_KEY": "your-value",
"GB_API_URL": "your-value",
"GB_SKILLS_ENABLED": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add growthbook --env GB_API_KEY=your-value --env GB_API_URL=your-value --env GB_SKILLS_ENABLED=your-value -- npx -y @growthbook/mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"growthbook": {
"command": "npx",
"args": [
"-y",
"@growthbook/mcp"
],
"env": {
"GB_API_KEY": "your-value",
"GB_API_URL": "your-value",
"GB_SKILLS_ENABLED": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"growthbook": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@growthbook/mcp"
],
"env": {
"GB_API_KEY": "your-value",
"GB_API_URL": "your-value",
"GB_SKILLS_ENABLED": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
GB_API_KEY envGB_API_URL envGB_SKILLS_ENABLED envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント growthbook で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(2.2.0)がレジストリに届いたのは31 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, EmbeddedCI BenchPod
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
A thin MCP server for GrowthBook with four tools:
| Tool | Purpose |
|---|---|
growthbook_list_skills | List top-level skill entry points (name + description) |
growthbook_read_skill | Return a listed skill or qualified child workflow (feature-flags or feature-flags/references/flag-create) |
growthbook_api_read | Authenticated GET passthrough to the GrowthBook API |
growthbook_api_write | Authenticated POST/PUT/PATCH/DELETE passthrough |
Competence lives in the skills repo and is bundled at build time. Capability is split into read vs write API tools (no per-endpoint formatters) so clients can honor readOnlyHint / destructiveHint correctly.
Tools are prefixed with growthbook_ so they stay unambiguous when a client has multiple MCP servers loaded.
Install GrowthBook from the Cursor Marketplace. The plugin connects Cursor to the hosted server at https://mcp.growthbook.io/mcp; the first tool call opens a GrowthBook sign-in to authorize it. Self-hosted GrowthBook users should configure the server manually as described below.
The plugin is defined by .cursor-plugin/plugin.json and mcp.json. To test changes locally, copy the repo into ~/.cursor/plugins/local/growthbook and run Developer: Reload Window.
npm install
npm run build
Point your MCP client at the compiled entrypoint:
{
"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" } } } }
Or run the published package:
npx @growthbook/mcp
| Variable | Required | Default | Purpose |
|---|---|---|---|
GB_API_KEY | Yes for stdio; optional for HTTP OAuth | — | GrowthBook API key or personal access token |
GB_API_URL | No | https://api.growthbook.io | API base URL (self-hosted) and default OAuth AS issuer |
GB_MCP_TRANSPORT | No | stdio | stdio or http |
GB_MCP_PORT | No | 3333 | HTTP listen port (when transport=http) |
GB_MCP_HOST | No | 127.0.0.1 | HTTP bind host |
GB_MCP_URL | Yes for HTTP | — | Public MCP base URL stamped into OAuth resource metadata (server refuses to start in HTTP mode without it) |
GB_MCP_KEEP_ALIVE_TIMEOUT_MS | No | 90000 | Idle keep-alive timeout in HTTP mode. Must exceed the idle timeout of any load balancer in front, or the LB can reuse a connection the server has already closed and the request fails with a 502 |
OPENAI_APPS_CHALLENGE_TOKEN | No | — | Served as plain text at /.well-known/openai-apps-challenge for OpenAI plugin domain verification (HTTP mode); the route returns 404 when unset |
GB_OAUTH_ISSUER | No | GB_API_URL | GrowthBook OAuth AS issuer URL |
GB_HTTP_HEADER_* | No | — | Extra request headers (e.g. GB_HTTP_HEADER_CF_ACCESS_TOKEN) |
GB_SKILLS_ENABLED | No | true | Set to false / 0 to disable skill tools |
OAUTH_AS_ENABLED=1 # on the GrowthBook API
GB_MCP_TRANSPORT=http GB_API_URL=http://localhost:3100 GB_MCP_PORT=3333 npm start
Clients connect to:
http://127.0.0.1:3333/mcp — full (skills + API read/write)http://127.0.0.1:3333/mcp/api — capability-only (growthbook_api_read + growthbook_api_write)Unauthenticated requests receive 401 with WWW-Authenticate pointing at /.well-known/oauth-protected-resource, which advertises the GrowthBook Authorization Server.
Before handling MCP, the server probes GrowthBook REST (GET /api/v1/) with the bearer. A 401 from that probe (or later from an API tool) yields HTTP 401 with error="invalid_token" so the MCP client can refresh — instead of surfacing "This API key has expired" as a tool error. A 403 is treated as an accepted bearer (permission denied ≠ invalid token) so clients are not forced into a refresh loop.
HTTP (recommended for remote): point the client at /mcp/api instead of /mcp:
{
"mcpServers": { "growthbook": { "url": "http://127.0.0.1:3333/mcp/api" } } }
| Path | Tools |
|---|---|
/mcp | growthbook_list_skills, growthbook_read_skill, growthbook_api_read, growthbook_api_write (unless GB_SKILLS_ENABLED=false) |
/mcp/api | growthbook_api_read, growthbook_api_write only |
stdio / process-wide: set env so skills are never registered:
"env": {
"GB_API_KEY": "...", "GB_SKILLS_ENABLED": "false" }
When skills are disabled, only the API read/write tools are registered. growthbook_list_skills and growthbook_read_skill are not exposed.
npm run build # tsc && bundle-skills
scripts/bundle-skills.mjs copies the top-level skill tree from the canonical skills checkout, preserving structure:
skills/<skill>/SKILL.md → server/skills/<skill>/SKILL.md
skills/ /references/ .md → server/skills/ /references/ .md
Source path resolution:
SKILLS_SRC env var (path to the skills repo root)agent-skills.local.json — { "path": "../skills" }, relative to the repo root. Gitignored; copy agent-skills.local.json.exampleskills-src/ — what CI and the Docker build vendorThere is no implicit sibling lookup. ../skills resolves to whatever happens to be at that path, which makes a local build silently disagree with the commit CI builds from.
CI, cloud deploys, and releases all read agent-skills.lock.json and check out that exact skills commit. To ship upstream skill changes, update the commit in the lock file. Local development can point at any checkout with agent-skills.local.json or SKILLS_SRC.
The skills repo stays the source of truth — this package does not maintain a fork of skill content. New skills flow through automatically, except those named in the small blocklist in bundle-skills.mjs. Currently only gb-setup is blocked because it configures the gb-call shell adapter rather than GrowthBook itself.
Per-skill scripts/ directories are not copied. Relative `references/foo.md` links are rewritten to qualified `feature-flags/references/foo` paths so growthbook_read_skill can resolve them.
Bundled skills still show workflows as:
gb-call GET /api/v1/projects
gb-call POST /api/v2/features ./payload.json
This MCP server does not shell out to gb-call. Map GET → growthbook_api_read and POST/PUT/PATCH/DELETE → growthbook_api_write with the same path and optional JSON body string. Server instructions and growthbook_read_skill output include this bridge note.
growthbook_api_read / growthbook_api_write{ "path": "/api/v1/projects" }
{ "method": "POST", "path": "/api/v2/features", "body": "{\"id\":\"my-flag\",...}" }
readOnlyHint: true)POST | PUT | PATCH | DELETE (destructiveHint: true)isError: true) covering auth failures, self-hosted 404 hints, and rate limitsgrowthbook_list_skills / growthbook_read_skillOnly registered when GB_SKILLS_ENABLED is not disabled.
growthbook_list_skills returns top-level skill entry points. An entry may contain a complete workflow or route to child workflows.growthbook_read_skill accepts a listed top-level name or a qualified child path named by a loaded skill (feature-flags/references/flag-create) and returns the full markdown (workflow + guardrails).This server never sends telemetry anywhere itself. Instead, every REST call made by growthbook_api_read / growthbook_api_write includes headers that tell the GrowthBook instance it's talking to that the call came from the MCP:
| Header | Example | Contents |
|---|---|---|
X-GB-MCP-Tool | growthbook_api_read | The tool that made the call |
X-GB-MCP-Version | 2.2.0 | This server's version |
X-GB-MCP-Transport | stdio | stdio or http |
X-GB-MCP-Client | cursor/1.2.3 | The MCP client's name/version from the initialize handshake, or its User-Agent in HTTP mode |
GrowthBook records these through its existing product telemetry, so the same controls apply. On a self-hosted instance, setting DISABLE_TELEMETRY on the GrowthBook back-end turns this off along with the rest of GrowthBook's telemetry. Older GrowthBook versions ignore the headers. Skill tools (growthbook_list_skills / growthbook_read_skill) are served locally and make no requests, so they aren't tracked.
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
By default the server runs over stdio. Set GB_MCP_TRANSPORT=http to run it as a standalone HTTP server that exposes MCP at /mcp (skills + API tools) and /mcp/api (capability-only), behind an OAuth 2.0 protected-resource surface (RFC 9728 metadata + RFC 6750 WWW-Authenticate).
GB_MCP_URL (required in HTTP mode) — the server's public base URL. It is stamped into the OAuth resource (audience) and the protected-resource metadata, so it is never derived from request headers. The server refuses to start without it.GB_MCP_PORT (default 3333) and GB_MCP_HOST (default 127.0.0.1).401 + WWW-Authenticate so the client can refresh.Run it on a trusted network or bound to loopback. For a multi-tenant or public deployment, front it with your own gateway/auth.
Cutting a release is deliberate: bump the version in package.json, run npm run sync-version (updates manifest.json, server.json, and .cursor-plugin/plugin.json), then push a matching v* tag:
git tag v2.0.0
git push origin v2.0.0
That tagged commit (with skills frozen at cut time) publishes:
@growthbook/mcp to npm — prereleases (versions with a -, e.g. 2.0.0-beta.1) go under the beta dist-tag; stable versions become latestamd64 + arm64) image to ghcr.io/growthbook/growthbook-mcp (: , plus : , : . , and :latest for stable releases)The Cursor plugin is not published by CI: Cursor re-reviews the plugin from the default branch after the version bump lands.
Install a release with npx @growthbook/mcp@ or pull ghcr.io/growthbook/growthbook-mcp: .