From 6667e14f3a7028fb1982d948d651166f9075ff6f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 12 Sep 2026 23:40:06 +0000 Subject: [PATCH] feat(statsig): add Statsig third-party MCP plugin Package Statsig's official hosted MCP (https://api.statsig.com/v1/mcp) as a marketplace plugin with OAuth user login and no API keys. Resolves EXTY-1504 Co-authored-by: Sam Sokolin --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../statsig/.cursor-plugin/plugin.json | 35 ++++++++++ third_party/statsig/CHANGELOG.md | 9 +++ third_party/statsig/LICENSE | 21 ++++++ third_party/statsig/README.md | 65 ++++++++++++++++++ third_party/statsig/assets/logo.png | Bin 0 -> 3891 bytes third_party/statsig/mcp.json | 8 +++ 8 files changed, 144 insertions(+) create mode 100644 third_party/statsig/.cursor-plugin/plugin.json create mode 100644 third_party/statsig/CHANGELOG.md create mode 100644 third_party/statsig/LICENSE create mode 100644 third_party/statsig/README.md create mode 100644 third_party/statsig/assets/logo.png create mode 100644 third_party/statsig/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 5ff10ceb1..379be0f11 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -397,6 +397,11 @@ "name": "excalidraw", "source": "third_party/excalidraw", "description": "Draw and export hand-drawn diagrams from chat." + }, + { + "name": "statsig", + "source": "third_party/statsig", + "description": "Inspect and manage feature gates, experiments, dynamic configs, and metrics." } ] } diff --git a/README.md b/README.md index 6cff83a32..4d9bd7c42 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `meltwater` | [Meltwater](third_party/meltwater/) | Cursor | Integrations | Search media and social mentions and pull analytics. | | `daloopa` | [Daloopa](third_party/daloopa/) | Cursor | Integrations | Pull source-linked fundamentals, KPIs, filings, and prices. | | `excalidraw` | [Excalidraw](third_party/excalidraw/) | Cursor | Integrations | Draw and export hand-drawn diagrams from chat. | +| `statsig` | [Statsig](third_party/statsig/) | Cursor | Integrations | Inspect and manage feature gates, experiments, dynamic configs, and metrics. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/statsig/.cursor-plugin/plugin.json b/third_party/statsig/.cursor-plugin/plugin.json new file mode 100644 index 000000000..d0b20df4b --- /dev/null +++ b/third_party/statsig/.cursor-plugin/plugin.json @@ -0,0 +1,35 @@ +{ + "name": "statsig", + "displayName": "Statsig", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Inspect and manage feature gates, experiments, dynamic configs, and metrics.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://docs.statsig.com/integrations/mcp/cursor", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "statsig", + "feature flags", + "feature gates", + "experiments", + "a/b testing", + "dynamic configs", + "metrics", + "mcp" + ], + "category": "integrations", + "tags": [ + "statsig", + "feature-flags", + "experimentation", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/statsig/CHANGELOG.md b/third_party/statsig/CHANGELOG.md new file mode 100644 index 000000000..bb8b8f45b --- /dev/null +++ b/third_party/statsig/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `statsig` MCP server pointing at Statsig's hosted Streamable HTTP endpoint (`https://api.statsig.com/v1/mcp`). +- Auth uses OAuth with Statsig user login — no Console API key or client ID to configure. +- Logo: Statsig's official mark, from the `statsig-io` GitHub organization. diff --git a/third_party/statsig/LICENSE b/third_party/statsig/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/statsig/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/statsig/README.md b/third_party/statsig/README.md new file mode 100644 index 000000000..9182c4c49 --- /dev/null +++ b/third_party/statsig/README.md @@ -0,0 +1,65 @@ +# Statsig + +Cursor plugin that connects agents to [Statsig](https://www.statsig.com) through Statsig's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +List and inspect feature gates, experiments, dynamic configs, and metrics in the signed-in Statsig project, pull gate and experiment results, and (with write permissions) create or update gates, experiments, and configs from chat. + +Official Cursor setup: https://docs.statsig.com/integrations/mcp/cursor + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Statsig**. +3. Click **Install**, then complete the Statsig sign-in prompt. + +Or run `/add-plugin statsig` in chat. + +## MCP + +```json +{ + "mcpServers": { + "statsig": { + "type": "http", + "url": "https://api.statsig.com/v1/mcp" + } + } +} +``` + +Auth is OAuth against Statsig. Cursor prompts for Statsig user login when the plugin connects — there is no API key or client ID to configure. + +## Before you connect + +You need a Statsig account with access to a project. Statsig's MCP OAuth issues a **Personal Console API Key** scoped to your role, so your Statsig org owner must have enabled Personal Console API Key creation for your role under organization settings. If sign-in fails, ask your org owner to enable it. + +## What agents can do + +| Category | Capabilities | +| --- | --- | +| Gates (feature flags) | List gates with type filters (for example stale or permanent), get full gate configuration, pull gate results, view version history, and create or replace gates | +| Experiments | List experiments by status, creator, or tag; get experiment details; pull overall and dimension results with CUPED and confidence options; view version history; start code cleanup; create or replace experiments | +| Dynamic configs | List configs, get targeting rules and return values, and create or replace configs | +| Metrics | List metrics and metric sources and read metric definitions | + +The hosted runtime is the source of truth for tool names and schemas. + +## Notes + +- Tool calls run as the Statsig user who authorizes the connection and cannot exceed that user's role permissions. Read-only roles can use every read tool; write tools require a role with write access. +- `Update_*_Entirely` tools replace the whole entity — any field left out is removed. Read the entity first and confirm before writing. +- Statsig also documents an API-key setup that runs `npx mcp-remote` locally with a `statsig-api-key` header. This plugin intentionally packages only the OAuth Streamable HTTP endpoint and does not wrap a local stdio server. +- Revoke access at any time by deleting the Personal Console API Key from your Statsig project's API keys page. + +## Docs + +- Statsig MCP in Cursor: https://docs.statsig.com/integrations/mcp/cursor +- Statsig MCP overview and tool list: https://docs.statsig.com/integrations/mcp/overview +- Personal Console API Keys: https://docs.statsig.com/access-management/api-keys +- Server URL: https://api.statsig.com/v1/mcp + +Logo is Statsig's official mark, from the `statsig-io` GitHub organization. + +## License + +MIT diff --git a/third_party/statsig/assets/logo.png b/third_party/statsig/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffed8d2afda3d05d59c1dcedf047dd667a260508 GIT binary patch literal 3891 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 literal 0 HcmV?d00001 diff --git a/third_party/statsig/mcp.json b/third_party/statsig/mcp.json new file mode 100644 index 000000000..368a7b142 --- /dev/null +++ b/third_party/statsig/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "statsig": { + "type": "http", + "url": "https://api.statsig.com/v1/mcp" + } + } +}