From 084f327f0bcf7eb982e9ca99feca0a253c3b4644 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 12 Sep 2026 23:39:30 +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 using Streamable HTTP with OAuth user login and no API keys. Related to EXTY-1365 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 -> 7183 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..be8ff66b9 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": "Query and manage feature gates, experiments, dynamic configs, and metrics." } ] } diff --git a/README.md b/README.md index 6cff83a32..ff846be0c 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 | Query 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..c769097cf --- /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": "Query 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", + "ab-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..f283f3d29 --- /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 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..282f3bea9 --- /dev/null +++ b/third_party/statsig/README.md @@ -0,0 +1,65 @@ +# Statsig + +Cursor plugin that connects agents to [Statsig](https://statsig.com) through Statsig's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Look up feature gates, experiments, dynamic configs, and metrics in the signed-in Statsig project, read experiment results, and create or update configs when your Statsig role allows writes. + +## 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 MCP OAuth only supports **Personal Console API Keys**. Your Statsig org owner must enable Personal Console API Key creation for your role under organization settings before the OAuth sign-in will succeed. +- Read-only Statsig users can use all read tools. Write tools require a role with write permissions on the project. + +## What agents can do + +| Category | Capabilities | +| --- | --- | +| Feature gates | List, inspect, create, and update gates and their rules | +| Experiments | List and inspect experiments, read setup and results, create and update experiments | +| Dynamic configs | List, inspect, create, and update dynamic configs | +| Metrics | Look up metrics and metric definitions used by gates and experiments | +| Project | Inspect the signed-in project's configuration | + +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 project role. +- Statsig hosts the server itself; this plugin does not wrap a local stdio server or `mcp-remote`. +- Statsig also documents an API-key setup via `npx mcp-remote` with a Console API key header. This plugin uses the OAuth setup only. +- Revoke access at any time by deleting the Personal Console API Key from your Statsig account settings. + +## Docs + +- Statsig MCP with Cursor: https://docs.statsig.com/integrations/mcp/cursor +- Statsig MCP overview: https://docs.statsig.com/integrations/mcp/overview +- 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..3c2c200320211bc8add9af217d5729923701aa86 GIT binary patch literal 7183 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 g1#G0v2|Q4!DM-Jjt6h`_Hu|vCl(ZBp