diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index ed6afb06..f8039725 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -412,6 +412,11 @@ "name": "statsig", "source": "third_party/statsig", "description": "Inspect and manage feature gates, experiments, dynamic configs, and metrics." + }, + { + "name": "notfair", + "source": "third_party/notfair", + "description": "Operate Google, Meta, X, LinkedIn, Reddit, and TikTok Ads plus GA4, Search Console, GoHighLevel, and WordPress through one OAuth MCP." } ] } diff --git a/README.md b/README.md index 21772a15..e49451e4 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `excalidraw` | [Excalidraw](third_party/excalidraw/) | Cursor | Integrations | Draw and export hand-drawn diagrams from chat. | | `google-cloud-bigquery` | [Google Cloud BigQuery](third_party/google-cloud-bigquery/) | Cursor | Integrations | Explore datasets and tables and run SQL queries. | | `statsig` | [Statsig](third_party/statsig/) | Cursor | Integrations | Inspect and manage feature gates, experiments, dynamic configs, and metrics. | +| `notfair` | [NotFair](third_party/notfair/) | Notfair | Integrations | Operate Google, Meta, X, LinkedIn, Reddit, and TikTok Ads plus GA4, Search Console, GoHighLevel, and WordPress through one OAuth MCP. | 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/notfair/.cursor-plugin/plugin.json b/third_party/notfair/.cursor-plugin/plugin.json new file mode 100644 index 00000000..24ad67ba --- /dev/null +++ b/third_party/notfair/.cursor-plugin/plugin.json @@ -0,0 +1,43 @@ +{ + "name": "notfair", + "displayName": "NotFair", + "version": "0.27.9", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Operate Google, Meta, X, LinkedIn, Reddit, and TikTok Ads plus GA4, Search Console, GoHighLevel, and WordPress through one OAuth MCP.", + "author": { + "name": "Notfair", + "email": "tong@notfair.co" + }, + "homepage": "https://notfair.co", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "notfair", + "ads", + "advertising", + "analytics", + "google-ads", + "meta-ads", + "x-ads", + "linkedin-ads", + "reddit-ads", + "tiktok-ads", + "ga4", + "search-console", + "wordpress", + "gohighlevel", + "seo", + "mcp" + ], + "category": "integrations", + "tags": [ + "ads", + "analytics", + "mcp", + "marketing" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/notfair/CHANGELOG.md b/third_party/notfair/CHANGELOG.md new file mode 100644 index 00000000..4624935e --- /dev/null +++ b/third_party/notfair/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 0.27.9 — initial Cursor marketplace packaging + +- Added the `NotFair` MCP server pointing at NotFair's hosted Streamable HTTP endpoint (`https://notfair.co/api/mcp/notfair`). +- Auth is OAuth 2.1 with Dynamic Client Registration and PKCE, discovered from the server; no client ID or secrets in the plugin configuration. +- Logo: NotFair's brand mark, from [nowork-studio/notfair-plugin](https://github.com/nowork-studio/notfair-plugin). +- Open-source SEO, GEO, and content skills stay in the source repository (they wrap canonical files outside `skills/` and would make this packaging PR unwieldy). diff --git a/third_party/notfair/LICENSE b/third_party/notfair/LICENSE new file mode 100644 index 00000000..f195b838 --- /dev/null +++ b/third_party/notfair/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Notfair + +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/notfair/README.md b/third_party/notfair/README.md new file mode 100644 index 00000000..3ce8af92 --- /dev/null +++ b/third_party/notfair/README.md @@ -0,0 +1,74 @@ +# NotFair + +Cursor plugin that connects agents to [NotFair](https://notfair.co) through NotFair's hosted [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Operate Google, Meta, X, LinkedIn, Reddit, and TikTok Ads plus GA4, Search Console, GoHighLevel, and WordPress from one OAuth connection. Connect those platforms inside the NotFair workspace selected during sign-in; do not add an MCP server per platform. + +Homepage: https://notfair.co + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **NotFair**. +3. Click **Install**, then complete the NotFair sign-in prompt. + +Or run `/add-plugin notfair` in chat. + +## MCP + +```json +{ + "mcpServers": { + "NotFair": { + "type": "http", + "url": "https://notfair.co/api/mcp/notfair" + } + } +} +``` + +Auth is OAuth 2.1 against NotFair with Dynamic Client Registration (DCR) and PKCE, discovered from the server (`WWW-Authenticate` and protected-resource metadata). Cursor registers itself and opens the Connect to NotFair page on the first tool call. There is no API key or client ID to configure in the plugin. + +Protected-resource metadata: https://notfair.co/.well-known/oauth-protected-resource/api/mcp/notfair + +## Before you connect + +You need a NotFair account at [notfair.co](https://notfair.co). After OAuth, connect the ad, analytics, WordPress, or GoHighLevel accounts you want to use inside that workspace. Tool calls cannot exceed the platforms and permissions of the signed-in workspace. + +## What agents can do + +| Category | Capabilities | +| --- | --- | +| Google Ads | Review campaigns, search terms, keywords, bids, and budgets, and make approved account changes | +| Meta Ads | Review Facebook and Instagram campaigns, ad sets, creatives, and insights | +| X Ads | Review campaigns and line items, targeting, creative, and conversion performance | +| LinkedIn Ads | Review campaign groups, campaigns, creatives, analytics, targeting, and leads | +| Reddit Ads | Review campaigns, ad groups, ads, audiences, and reporting | +| TikTok Ads | Review advertiser delivery, creative performance, targeting, and budgets | +| Analytics | Query GA4 acquisition, engagement, and conversions, plus Search Console queries, pages, URL inspection, and sitemaps | +| WordPress | Read and update connected site content, media, comments, design, settings, and plugins | +| GoHighLevel | Read contacts, conversations, opportunities, and calendars, then make only explicitly requested CRM changes | + +The hosted runtime is the source of truth for tool names and schemas. Choose tools from the live server's instructions and capability descriptions. + +## Notes + +- This package is MCP-first. Open-source SEO, GEO, and content skills live in the source repository: https://github.com/nowork-studio/notfair-plugin +- Writes stay within the signed-in workspace and the user's authorization. Confirm the target account and intended effect before mutating ads, content, or CRM records. +- One NotFair connection covers every supported platform. Do not add a second NotFair MCP server to reach another channel. +- Revoke access from the NotFair workspace or by disconnecting the plugin in Cursor. + +## Docs + +- Homepage: https://notfair.co +- Privacy: https://notfair.co/privacy +- Terms: https://notfair.co/terms +- Source plugin repository: https://github.com/nowork-studio/notfair-plugin +- Server URL: https://notfair.co/api/mcp/notfair +- Protected-resource metadata: https://notfair.co/.well-known/oauth-protected-resource/api/mcp/notfair + +Logo is NotFair's official mark, from the `nowork-studio/notfair-plugin` GitHub repository. + +## License + +MIT diff --git a/third_party/notfair/assets/logo.png b/third_party/notfair/assets/logo.png new file mode 100644 index 00000000..fc2ec419 Binary files /dev/null and b/third_party/notfair/assets/logo.png differ diff --git a/third_party/notfair/mcp.json b/third_party/notfair/mcp.json new file mode 100644 index 00000000..6fe53aea --- /dev/null +++ b/third_party/notfair/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "NotFair": { + "type": "http", + "url": "https://notfair.co/api/mcp/notfair" + } + } +}