From 070189284e702e8a4d2e3cc8913994b204c5337a Mon Sep 17 00:00:00 2001 From: Sam Sokolin Date: Tue, 4 Aug 2026 19:36:19 -0400 Subject: [PATCH 1/5] Add Gong and Salesforce MCP plugins Adds two MCP integration plugins to the public marketplace and extends the plugin schema with a `variables` block so manifests can declare user-configured values. Gong forwards CLIENT_ID/CLIENT_SECRET into MCP auth. Salesforce Hosted MCP is a PKCE public client, so it takes a consumer key with no secret, pins the mcp_api and refresh_token scopes, and templates the whole server URL because it varies by org type (production vs sandbox) and server kind (platform vs custom). Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 10 +++ README.md | 2 + gong/.cursor-plugin/plugin.json | 47 +++++++++++++ gong/CHANGELOG.md | 8 +++ gong/LICENSE | 21 ++++++ gong/README.md | 50 ++++++++++++++ gong/mcp.json | 12 ++++ salesforce/.cursor-plugin/plugin.json | 47 +++++++++++++ salesforce/CHANGELOG.md | 9 +++ salesforce/LICENSE | 21 ++++++ salesforce/README.md | 95 +++++++++++++++++++++++++++ salesforce/mcp.json | 13 ++++ schemas/plugin.schema.json | 18 +++++ 13 files changed, 353 insertions(+) create mode 100644 gong/.cursor-plugin/plugin.json create mode 100644 gong/CHANGELOG.md create mode 100644 gong/LICENSE create mode 100644 gong/README.md create mode 100644 gong/mcp.json create mode 100644 salesforce/.cursor-plugin/plugin.json create mode 100644 salesforce/CHANGELOG.md create mode 100644 salesforce/LICENSE create mode 100644 salesforce/README.md create mode 100644 salesforce/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index d24c5af8..f90dd3c9 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -87,6 +87,16 @@ "name": "google-calendar", "source": "google-calendar", "description": "Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings." + }, + { + "name": "gong", + "source": "gong", + "description": "Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs." + }, + { + "name": "salesforce", + "source": "salesforce", + "description": "Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org." } ] } diff --git a/README.md b/README.md index 2d2544af..31b9364f 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `gmail` | [Gmail](gmail/) | Cursor | Productivity | Connect Cursor to Gmail via Google's remote MCP server — search, read, draft, label, and manage email. | | `google-drive` | [Google Drive](google-drive/) | Cursor | Productivity | Connect Cursor to Google Drive via Google's remote MCP server — search, read, create, share, and manage files. | | `google-calendar` | [Google Calendar](google-calendar/) | Cursor | Productivity | Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings. | +| `gong` | [Gong](gong/) | Cursor | Integrations | Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs. | +| `salesforce` | [Salesforce](salesforce/) | Cursor | Integrations | Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). diff --git a/gong/.cursor-plugin/plugin.json b/gong/.cursor-plugin/plugin.json new file mode 100644 index 00000000..372a6665 --- /dev/null +++ b/gong/.cursor-plugin/plugin.json @@ -0,0 +1,47 @@ +{ + "name": "gong", + "displayName": "Gong", + "version": "1.0.0", + "description": "Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://help.gong.io/docs/about-gong-mcp-server", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "keywords": [ + "gong", + "mcp", + "revenue", + "sales", + "calls", + "deals" + ], + "category": "integrations", + "tags": [ + "mcp", + "sales", + "revenue-intelligence" + ], + "variables": { + "type": "object", + "properties": { + "CLIENT_ID": { + "type": "string", + "title": "Gong Client ID", + "description": "OAuth Client ID from Gong Admin → Company Settings → Ecosystem → API → Integrations (MCP integration)." + }, + "CLIENT_SECRET": { + "type": "string", + "title": "Gong Client Secret", + "description": "OAuth Client Secret from the same Gong MCP integration." + } + }, + "required": [ + "CLIENT_ID", + "CLIENT_SECRET" + ] + }, + "mcpServers": "./mcp.json" +} diff --git a/gong/CHANGELOG.md b/gong/CHANGELOG.md new file mode 100644 index 00000000..3aee8493 --- /dev/null +++ b/gong/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `gong` MCP server pointing at `https://mcp.gong.io/mcp`. +- Declared `CLIENT_ID` and `CLIENT_SECRET` plugin variables and forwarded them through MCP auth. diff --git a/gong/LICENSE b/gong/LICENSE new file mode 100644 index 00000000..ca2bba77 --- /dev/null +++ b/gong/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/gong/README.md b/gong/README.md new file mode 100644 index 00000000..28216e41 --- /dev/null +++ b/gong/README.md @@ -0,0 +1,50 @@ +# Gong + +Cursor plugin that connects agents to [Gong](https://www.gong.io) through Gong's official hosted [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Pull account summaries, deal insights, and call briefs into chat. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Gong**. +3. Click **Install**, then set the client ID and secret (below) and complete the Gong sign-in prompt. + +Or run `/add-plugin gong` in chat. + +## MCP + +```json +{ + "mcpServers": { + "gong": { + "url": "https://mcp.gong.io/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +} +``` + +## Setup + +Gong's MCP server uses static OAuth client credentials plus a per-user OAuth login, so an administrator has to register Cursor before anyone can connect. + +1. A Gong technical administrator creates an MCP integration under **Company Settings → Ecosystem → API → Integrations** and enables the MCP scope. +2. Register both redirect URIs on that integration: + - Desktop: `http://localhost:8787/callback` + - Web and Cloud Agents: `https://www.cursor.com/agents/mcp/oauth/callback` +3. In **Dashboard → Plugins → Configure**, set **Gong Client ID** and **Gong Client Secret** from that integration. +4. Complete the Gong OAuth login when Cursor prompts. + +On a team marketplace an admin sets the client ID and secret once for everyone; each member still completes their own Gong OAuth login, so tool calls run with that member's Gong permissions. + +## Docs + +- Gong MCP server overview: https://help.gong.io/docs/about-gong-mcp-server + +## License + +MIT diff --git a/gong/mcp.json b/gong/mcp.json new file mode 100644 index 00000000..b3722f7e --- /dev/null +++ b/gong/mcp.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://cursor.com/schemas/mcp.json", + "mcpServers": { + "gong": { + "url": "https://mcp.gong.io/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +} diff --git a/salesforce/.cursor-plugin/plugin.json b/salesforce/.cursor-plugin/plugin.json new file mode 100644 index 00000000..068ca14f --- /dev/null +++ b/salesforce/.cursor-plugin/plugin.json @@ -0,0 +1,47 @@ +{ + "name": "salesforce", + "displayName": "Salesforce", + "version": "1.0.0", + "description": "Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/cursor.html", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "keywords": [ + "salesforce", + "crm", + "mcp", + "sales", + "soql", + "sobject" + ], + "category": "integrations", + "tags": [ + "mcp", + "crm", + "sales" + ], + "variables": { + "type": "object", + "properties": { + "SALESFORCE_MCP_URL": { + "type": "string", + "title": "Salesforce MCP server URL", + "description": "Server URL from Setup → MCP Servers. Production: https://api.salesforce.com/platform/mcp/v1/platform/sobject-all — Sandbox or scratch: https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-all — custom servers replace platform/ with custom/." + }, + "CLIENT_ID": { + "type": "string", + "title": "Salesforce Consumer Key", + "description": "Consumer Key of the External Client App you created for Cursor (Setup → External Client App Manager → your app → Settings → Consumer Key and Secret)." + } + }, + "required": [ + "SALESFORCE_MCP_URL", + "CLIENT_ID" + ] + }, + "mcpServers": "./mcp.json" +} diff --git a/salesforce/CHANGELOG.md b/salesforce/CHANGELOG.md new file mode 100644 index 00000000..43ca2286 --- /dev/null +++ b/salesforce/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `salesforce` MCP server backed by Salesforce Hosted MCP. +- Declared `SALESFORCE_MCP_URL` and `CLIENT_ID` plugin variables so each org can point at its own server and External Client App. +- Pinned OAuth scopes to `mcp_api` and `refresh_token`. diff --git a/salesforce/LICENSE b/salesforce/LICENSE new file mode 100644 index 00000000..ca2bba77 --- /dev/null +++ b/salesforce/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/salesforce/README.md b/salesforce/README.md new file mode 100644 index 00000000..c9cbb50b --- /dev/null +++ b/salesforce/README.md @@ -0,0 +1,95 @@ +# Salesforce + +Cursor plugin that connects agents to [Salesforce](https://www.salesforce.com) through [Salesforce Hosted MCP](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/), Salesforce's first-party [Model Context Protocol](https://modelcontextprotocol.io/) service. + +Run SOQL and SOSL, inspect object schemas, traverse relationships, and create, update, or delete records — all under the signed-in user's own permissions and field-level security. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Salesforce**. +3. Click **Install**, then set the server URL and consumer key (below) and complete the Salesforce sign-in prompt. + +Or run `/add-plugin salesforce` in chat. + +## MCP + +```json +{ + "mcpServers": { + "salesforce": { + "type": "http", + "url": "${SALESFORCE_MCP_URL}", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "scopes": ["mcp_api", "refresh_token"] + } + } + } +} +``` + +## Setup + +Salesforce Hosted MCP requires an **External Client App** in your org. Connected Apps are not supported. + +### 1. Create the External Client App + +From Setup, go to **External Client App Manager → New External Client App**, fill in the basics, then expand **API (Enable OAuth Settings)** and check **Enable OAuth**. + +Add every callback URL you need — Cursor uses different ones per surface: + +| Surface | Callback URL | +|:--------|:-------------| +| Desktop | `http://localhost:8787/callback` | +| Web and Cloud Agents | `https://www.cursor.com/agents/mcp/oauth/callback` | +| Older desktop builds | `cursor://anysphere.cursor-mcp/oauth/callback` | + +Under **OAuth Scopes**, select exactly these two and nothing broader: + +- **Access Salesforce hosted MCP servers** (`mcp_api`) +- **Perform requests at any time** (`refresh_token`, `offline_access`) + +The second one is easy to miss because the picker labels scopes by description rather than by value. Without it the plugin cannot refresh, and every user has to re-authenticate when their access token expires. Do not add **Full access** (`full`) — Hosted MCP does not need it. + +Under **Security**, select **Issue JSON Web Token (JWT)-based access tokens for named users**. This is required: without it Salesforce issues opaque tokens and every tool call fails with `JWT Token is required`. Leave **Require Secret for Web Server Flow** off — Cursor authenticates as a public client using PKCE, so no client secret is involved. Do not enable the **JWT Bearer Flow**, which is a different feature and needs a certificate. + +Finally, copy the **Consumer Key** from **Settings → Consumer Key and Secret**. + +A new External Client App can take up to 30 minutes to propagate. Until it does, authentication fails with `invalid_client_id`; wait rather than recreating the app. + +### 2. Activate a server and copy its URL + +In Setup, open **MCP Servers**, activate the server you want, and copy its **Server URL**. The URL encodes both the org type and the server: + +| Org type | Standard server | Custom server | +|:---------|:----------------|:--------------| +| Production, Developer, Enterprise | `https://api.salesforce.com/platform/mcp/v1/platform/sobject-all` | `https://api.salesforce.com/platform/mcp/v1/custom/myserver` | +| Sandbox or scratch | `https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-all` | `https://api.salesforce.com/platform/mcp/v1/sandbox/custom/myserver` | + +Salesforce ships several standard servers with different blast radii — `sobject-reads` for read-only access, `sobject-mutations` for reads plus create and update, `sobject-deletes`, and `sobject-all` for everything. Point the plugin at the narrowest one that does the job. + +### 3. Configure the plugin + +In **Dashboard → Plugins → Configure**, set **Salesforce MCP server URL** and **Salesforce Consumer Key**, then complete the Salesforce login when Cursor prompts. + +On a team marketplace an admin sets both values once. Each member still authenticates individually, so tools run with that member's own object and field permissions. + +## Troubleshooting + +| Symptom | Cause | +|:--------|:------| +| `invalid_client_id` | The External Client App has not finished propagating. Wait up to 30 minutes. | +| `invalid_scope` | The app is missing **Access Salesforce hosted MCP servers** or **Perform requests at any time**. | +| `JWT Token is required` or `Invalid token` after a successful login | **Issue JSON Web Token (JWT)-based access tokens for named users** is not enabled. | +| Auth succeeds but the server 404s | The MCP server is not activated in Setup, or the URL's org type does not match the org you logged into. | + +## Docs + +- Configure Cursor: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/cursor.html +- Create an External Client App: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html +- Available servers: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/sobject-all.html + +## License + +MIT diff --git a/salesforce/mcp.json b/salesforce/mcp.json new file mode 100644 index 00000000..8b4f1f31 --- /dev/null +++ b/salesforce/mcp.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://cursor.com/schemas/mcp.json", + "mcpServers": { + "salesforce": { + "type": "http", + "url": "${SALESFORCE_MCP_URL}", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "scopes": ["mcp_api", "refresh_token"] + } + } + } +} diff --git a/schemas/plugin.schema.json b/schemas/plugin.schema.json index 807cc0a8..51d4e3f1 100644 --- a/schemas/plugin.schema.json +++ b/schemas/plugin.schema.json @@ -93,6 +93,24 @@ ], "description": "Path to a hooks configuration file, or an inline hooks object." }, + "variables": { + "type": "object", + "required": ["type"], + "properties": { + "type": { + "const": "object" + }, + "properties": { + "type": "object" + }, + "required": { + "type": "array", + "items": { "type": "string" }, + "uniqueItems": true + } + }, + "description": "JSON Schema for user-configured plugin variables." + }, "mcpServers": { "$ref": "#/$defs/mcpServers", "description": "MCP server configuration — a path, an inline config object, or an array of either." From 96e41966c808e8090a81143ccdf9ea8910ebe186 Mon Sep 17 00:00:00 2001 From: Sam Sokolin Date: Tue, 4 Aug 2026 19:48:55 -0400 Subject: [PATCH 2/5] Group third-party MCP plugins under third_party/ Moves gong/ and salesforce/ to third_party/ and points their marketplace `source` paths at the new location. Nested source paths resolve fine: resolvePluginSourcePath treats source as a relative path and only strips a leading ./ Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 4 ++-- README.md | 4 ++-- {gong => third_party/gong}/.cursor-plugin/plugin.json | 0 {gong => third_party/gong}/CHANGELOG.md | 0 {gong => third_party/gong}/LICENSE | 0 {gong => third_party/gong}/README.md | 0 {gong => third_party/gong}/mcp.json | 0 .../salesforce}/.cursor-plugin/plugin.json | 0 {salesforce => third_party/salesforce}/CHANGELOG.md | 0 {salesforce => third_party/salesforce}/LICENSE | 0 {salesforce => third_party/salesforce}/README.md | 0 {salesforce => third_party/salesforce}/mcp.json | 0 12 files changed, 4 insertions(+), 4 deletions(-) rename {gong => third_party/gong}/.cursor-plugin/plugin.json (100%) rename {gong => third_party/gong}/CHANGELOG.md (100%) rename {gong => third_party/gong}/LICENSE (100%) rename {gong => third_party/gong}/README.md (100%) rename {gong => third_party/gong}/mcp.json (100%) rename {salesforce => third_party/salesforce}/.cursor-plugin/plugin.json (100%) rename {salesforce => third_party/salesforce}/CHANGELOG.md (100%) rename {salesforce => third_party/salesforce}/LICENSE (100%) rename {salesforce => third_party/salesforce}/README.md (100%) rename {salesforce => third_party/salesforce}/mcp.json (100%) diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index f90dd3c9..aff5ebc3 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -90,12 +90,12 @@ }, { "name": "gong", - "source": "gong", + "source": "third_party/gong", "description": "Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs." }, { "name": "salesforce", - "source": "salesforce", + "source": "third_party/salesforce", "description": "Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org." } ] diff --git a/README.md b/README.md index 31b9364f..fe22c0ca 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `gmail` | [Gmail](gmail/) | Cursor | Productivity | Connect Cursor to Gmail via Google's remote MCP server — search, read, draft, label, and manage email. | | `google-drive` | [Google Drive](google-drive/) | Cursor | Productivity | Connect Cursor to Google Drive via Google's remote MCP server — search, read, create, share, and manage files. | | `google-calendar` | [Google Calendar](google-calendar/) | Cursor | Productivity | Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings. | -| `gong` | [Gong](gong/) | Cursor | Integrations | Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs. | -| `salesforce` | [Salesforce](salesforce/) | Cursor | Integrations | Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org. | +| `gong` | [Gong](third_party/gong/) | Cursor | Integrations | Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs. | +| `salesforce` | [Salesforce](third_party/salesforce/) | Cursor | Integrations | Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). diff --git a/gong/.cursor-plugin/plugin.json b/third_party/gong/.cursor-plugin/plugin.json similarity index 100% rename from gong/.cursor-plugin/plugin.json rename to third_party/gong/.cursor-plugin/plugin.json diff --git a/gong/CHANGELOG.md b/third_party/gong/CHANGELOG.md similarity index 100% rename from gong/CHANGELOG.md rename to third_party/gong/CHANGELOG.md diff --git a/gong/LICENSE b/third_party/gong/LICENSE similarity index 100% rename from gong/LICENSE rename to third_party/gong/LICENSE diff --git a/gong/README.md b/third_party/gong/README.md similarity index 100% rename from gong/README.md rename to third_party/gong/README.md diff --git a/gong/mcp.json b/third_party/gong/mcp.json similarity index 100% rename from gong/mcp.json rename to third_party/gong/mcp.json diff --git a/salesforce/.cursor-plugin/plugin.json b/third_party/salesforce/.cursor-plugin/plugin.json similarity index 100% rename from salesforce/.cursor-plugin/plugin.json rename to third_party/salesforce/.cursor-plugin/plugin.json diff --git a/salesforce/CHANGELOG.md b/third_party/salesforce/CHANGELOG.md similarity index 100% rename from salesforce/CHANGELOG.md rename to third_party/salesforce/CHANGELOG.md diff --git a/salesforce/LICENSE b/third_party/salesforce/LICENSE similarity index 100% rename from salesforce/LICENSE rename to third_party/salesforce/LICENSE diff --git a/salesforce/README.md b/third_party/salesforce/README.md similarity index 100% rename from salesforce/README.md rename to third_party/salesforce/README.md diff --git a/salesforce/mcp.json b/third_party/salesforce/mcp.json similarity index 100% rename from salesforce/mcp.json rename to third_party/salesforce/mcp.json From cf2d4997e592c90a7e92723df95b0f2da444baa7 Mon Sep 17 00:00:00 2001 From: Sam Sokolin Date: Tue, 4 Aug 2026 19:52:38 -0400 Subject: [PATCH 3/5] Move Google plugins under third_party/ too Completes the third_party grouping so all vendor MCP integrations live in one place. Updates marketplace source paths, root README links, and the tree/main homepage URLs in each manifest. Safe for already-published plugins: the indexer keys plugin identity on (marketplaceId, name), so a re-index updates gitPath in place rather than creating a new row, and deprecation is name-based too. Logos stay relative to the plugin root and re-resolve against the new basePath. Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 6 +++--- README.md | 6 +++--- {gmail => third_party/gmail}/.cursor-plugin/plugin.json | 2 +- {gmail => third_party/gmail}/CHANGELOG.md | 0 {gmail => third_party/gmail}/LICENSE | 0 {gmail => third_party/gmail}/README.md | 0 {gmail => third_party/gmail}/assets/logo.svg | 0 {gmail => third_party/gmail}/mcp.json | 0 .../google-calendar}/.cursor-plugin/plugin.json | 2 +- .../google-calendar}/CHANGELOG.md | 0 {google-calendar => third_party/google-calendar}/LICENSE | 0 {google-calendar => third_party/google-calendar}/README.md | 0 .../google-calendar}/assets/logo.svg | 0 {google-calendar => third_party/google-calendar}/mcp.json | 0 .../google-drive}/.cursor-plugin/plugin.json | 2 +- {google-drive => third_party/google-drive}/CHANGELOG.md | 0 {google-drive => third_party/google-drive}/LICENSE | 0 {google-drive => third_party/google-drive}/README.md | 0 {google-drive => third_party/google-drive}/assets/logo.svg | 0 {google-drive => third_party/google-drive}/mcp.json | 0 20 files changed, 9 insertions(+), 9 deletions(-) rename {gmail => third_party/gmail}/.cursor-plugin/plugin.json (89%) rename {gmail => third_party/gmail}/CHANGELOG.md (100%) rename {gmail => third_party/gmail}/LICENSE (100%) rename {gmail => third_party/gmail}/README.md (100%) rename {gmail => third_party/gmail}/assets/logo.svg (100%) rename {gmail => third_party/gmail}/mcp.json (100%) rename {google-calendar => third_party/google-calendar}/.cursor-plugin/plugin.json (89%) rename {google-calendar => third_party/google-calendar}/CHANGELOG.md (100%) rename {google-calendar => third_party/google-calendar}/LICENSE (100%) rename {google-calendar => third_party/google-calendar}/README.md (100%) rename {google-calendar => third_party/google-calendar}/assets/logo.svg (100%) rename {google-calendar => third_party/google-calendar}/mcp.json (100%) rename {google-drive => third_party/google-drive}/.cursor-plugin/plugin.json (88%) rename {google-drive => third_party/google-drive}/CHANGELOG.md (100%) rename {google-drive => third_party/google-drive}/LICENSE (100%) rename {google-drive => third_party/google-drive}/README.md (100%) rename {google-drive => third_party/google-drive}/assets/logo.svg (100%) rename {google-drive => third_party/google-drive}/mcp.json (100%) diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index aff5ebc3..bea233fa 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -75,17 +75,17 @@ }, { "name": "gmail", - "source": "gmail", + "source": "third_party/gmail", "description": "Connect Cursor to Gmail via Google's remote MCP server — search, read, draft, label, and manage email." }, { "name": "google-drive", - "source": "google-drive", + "source": "third_party/google-drive", "description": "Connect Cursor to Google Drive via Google's remote MCP server — search, read, create, share, and manage files." }, { "name": "google-calendar", - "source": "google-calendar", + "source": "third_party/google-calendar", "description": "Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings." }, { diff --git a/README.md b/README.md index fe22c0ca..e1c8071e 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,9 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `cursor-sdk` | [Cursor SDK](cursor-sdk/) | Cursor | Developer Tools | Build apps, scripts, CI pipelines, and automations on top of the Cursor TypeScript SDK (@cursor/sdk) — runtime selection, auth, streaming, MCP, error handling, and ready-to-extend integration patterns. | | `orchestrate` | [Orchestrate](orchestrate/) | Cursor | Developer Tools | Fan large tasks out across parallel Cursor cloud agents with planners, workers, verifiers, and structured handoffs. | | `pstack` | [pstack](pstack/) | Lauren Tan | Developer Tools | if you want to go fast, go deep first. pstack helps you write less, but higher quality code. rigorous agent workflows you can parallelize with confidence. | -| `gmail` | [Gmail](gmail/) | Cursor | Productivity | Connect Cursor to Gmail via Google's remote MCP server — search, read, draft, label, and manage email. | -| `google-drive` | [Google Drive](google-drive/) | Cursor | Productivity | Connect Cursor to Google Drive via Google's remote MCP server — search, read, create, share, and manage files. | -| `google-calendar` | [Google Calendar](google-calendar/) | Cursor | Productivity | Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings. | +| `gmail` | [Gmail](third_party/gmail/) | Cursor | Productivity | Connect Cursor to Gmail via Google's remote MCP server — search, read, draft, label, and manage email. | +| `google-drive` | [Google Drive](third_party/google-drive/) | Cursor | Productivity | Connect Cursor to Google Drive via Google's remote MCP server — search, read, create, share, and manage files. | +| `google-calendar` | [Google Calendar](third_party/google-calendar/) | Cursor | Productivity | Connect Cursor to Google Calendar via Google's remote MCP server — list calendars, search events, and create or update meetings. | | `gong` | [Gong](third_party/gong/) | Cursor | Integrations | Gong MCP integration for revenue intelligence — account summaries, deal insights, and call briefs. | | `salesforce` | [Salesforce](third_party/salesforce/) | Cursor | Integrations | Connect Cursor to Salesforce via Salesforce Hosted MCP — query, search, create, update, and traverse records in your org. | diff --git a/gmail/.cursor-plugin/plugin.json b/third_party/gmail/.cursor-plugin/plugin.json similarity index 89% rename from gmail/.cursor-plugin/plugin.json rename to third_party/gmail/.cursor-plugin/plugin.json index 11dc0c28..ae9a4eb9 100644 --- a/gmail/.cursor-plugin/plugin.json +++ b/third_party/gmail/.cursor-plugin/plugin.json @@ -10,7 +10,7 @@ "name": "Cursor", "email": "plugins@cursor.com" }, - "homepage": "https://github.com/cursor/plugins/tree/main/gmail", + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/gmail", "repository": "https://github.com/cursor/plugins", "license": "MIT", "logo": "assets/logo.svg", diff --git a/gmail/CHANGELOG.md b/third_party/gmail/CHANGELOG.md similarity index 100% rename from gmail/CHANGELOG.md rename to third_party/gmail/CHANGELOG.md diff --git a/gmail/LICENSE b/third_party/gmail/LICENSE similarity index 100% rename from gmail/LICENSE rename to third_party/gmail/LICENSE diff --git a/gmail/README.md b/third_party/gmail/README.md similarity index 100% rename from gmail/README.md rename to third_party/gmail/README.md diff --git a/gmail/assets/logo.svg b/third_party/gmail/assets/logo.svg similarity index 100% rename from gmail/assets/logo.svg rename to third_party/gmail/assets/logo.svg diff --git a/gmail/mcp.json b/third_party/gmail/mcp.json similarity index 100% rename from gmail/mcp.json rename to third_party/gmail/mcp.json diff --git a/google-calendar/.cursor-plugin/plugin.json b/third_party/google-calendar/.cursor-plugin/plugin.json similarity index 89% rename from google-calendar/.cursor-plugin/plugin.json rename to third_party/google-calendar/.cursor-plugin/plugin.json index 13d51ad9..fea91ba7 100644 --- a/google-calendar/.cursor-plugin/plugin.json +++ b/third_party/google-calendar/.cursor-plugin/plugin.json @@ -10,7 +10,7 @@ "name": "Cursor", "email": "plugins@cursor.com" }, - "homepage": "https://github.com/cursor/plugins/tree/main/google-calendar", + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/google-calendar", "repository": "https://github.com/cursor/plugins", "license": "MIT", "logo": "assets/logo.svg", diff --git a/google-calendar/CHANGELOG.md b/third_party/google-calendar/CHANGELOG.md similarity index 100% rename from google-calendar/CHANGELOG.md rename to third_party/google-calendar/CHANGELOG.md diff --git a/google-calendar/LICENSE b/third_party/google-calendar/LICENSE similarity index 100% rename from google-calendar/LICENSE rename to third_party/google-calendar/LICENSE diff --git a/google-calendar/README.md b/third_party/google-calendar/README.md similarity index 100% rename from google-calendar/README.md rename to third_party/google-calendar/README.md diff --git a/google-calendar/assets/logo.svg b/third_party/google-calendar/assets/logo.svg similarity index 100% rename from google-calendar/assets/logo.svg rename to third_party/google-calendar/assets/logo.svg diff --git a/google-calendar/mcp.json b/third_party/google-calendar/mcp.json similarity index 100% rename from google-calendar/mcp.json rename to third_party/google-calendar/mcp.json diff --git a/google-drive/.cursor-plugin/plugin.json b/third_party/google-drive/.cursor-plugin/plugin.json similarity index 88% rename from google-drive/.cursor-plugin/plugin.json rename to third_party/google-drive/.cursor-plugin/plugin.json index a3c2adff..3943088b 100644 --- a/google-drive/.cursor-plugin/plugin.json +++ b/third_party/google-drive/.cursor-plugin/plugin.json @@ -10,7 +10,7 @@ "name": "Cursor", "email": "plugins@cursor.com" }, - "homepage": "https://github.com/cursor/plugins/tree/main/google-drive", + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/google-drive", "repository": "https://github.com/cursor/plugins", "license": "MIT", "logo": "assets/logo.svg", diff --git a/google-drive/CHANGELOG.md b/third_party/google-drive/CHANGELOG.md similarity index 100% rename from google-drive/CHANGELOG.md rename to third_party/google-drive/CHANGELOG.md diff --git a/google-drive/LICENSE b/third_party/google-drive/LICENSE similarity index 100% rename from google-drive/LICENSE rename to third_party/google-drive/LICENSE diff --git a/google-drive/README.md b/third_party/google-drive/README.md similarity index 100% rename from google-drive/README.md rename to third_party/google-drive/README.md diff --git a/google-drive/assets/logo.svg b/third_party/google-drive/assets/logo.svg similarity index 100% rename from google-drive/assets/logo.svg rename to third_party/google-drive/assets/logo.svg diff --git a/google-drive/mcp.json b/third_party/google-drive/mcp.json similarity index 100% rename from google-drive/mcp.json rename to third_party/google-drive/mcp.json From 27120d9e95b12593c0b25f298c1167dcb085d551 Mon Sep 17 00:00:00 2001 From: Sam Sokolin Date: Tue, 4 Aug 2026 20:01:11 -0400 Subject: [PATCH 4/5] Add logos for the Gong and Salesforce plugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gong uses its official 180x180 apple-touch icon as-is; it already ships a purple ground and rounded corners. Salesforce publishes no square icon larger than a 32px favicon, so the logo is built from their official cloud mark (vector, 262x184) centered on a 192x192 white tile with padding — same treatment as the Google plugins. Co-authored-by: Cursor --- third_party/gong/.cursor-plugin/plugin.json | 1 + third_party/gong/CHANGELOG.md | 1 + third_party/gong/assets/logo.png | Bin 0 -> 8915 bytes .../salesforce/.cursor-plugin/plugin.json | 1 + third_party/salesforce/CHANGELOG.md | 1 + third_party/salesforce/assets/logo.svg | 8 ++++++++ 6 files changed, 12 insertions(+) create mode 100644 third_party/gong/assets/logo.png create mode 100644 third_party/salesforce/assets/logo.svg diff --git a/third_party/gong/.cursor-plugin/plugin.json b/third_party/gong/.cursor-plugin/plugin.json index 372a6665..2008c900 100644 --- a/third_party/gong/.cursor-plugin/plugin.json +++ b/third_party/gong/.cursor-plugin/plugin.json @@ -10,6 +10,7 @@ "homepage": "https://help.gong.io/docs/about-gong-mcp-server", "repository": "https://github.com/cursor/plugins", "license": "MIT", + "logo": "assets/logo.png", "keywords": [ "gong", "mcp", diff --git a/third_party/gong/CHANGELOG.md b/third_party/gong/CHANGELOG.md index 3aee8493..09a78045 100644 --- a/third_party/gong/CHANGELOG.md +++ b/third_party/gong/CHANGELOG.md @@ -4,5 +4,6 @@ All notable changes to this plugin will be documented here. ## 1.0.0 — initial release +- Logo: Gong's official 180×180 apple-touch icon. - Added the `gong` MCP server pointing at `https://mcp.gong.io/mcp`. - Declared `CLIENT_ID` and `CLIENT_SECRET` plugin variables and forwarded them through MCP auth. diff --git a/third_party/gong/assets/logo.png b/third_party/gong/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7fb982d0e597e78947f381f39d4efe09214815 GIT binary patch literal 8915 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 hBJ18hRoC+; literal 0 HcmV?d00001 diff --git a/third_party/salesforce/.cursor-plugin/plugin.json b/third_party/salesforce/.cursor-plugin/plugin.json index 068ca14f..419aba88 100644 --- a/third_party/salesforce/.cursor-plugin/plugin.json +++ b/third_party/salesforce/.cursor-plugin/plugin.json @@ -10,6 +10,7 @@ "homepage": "https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/cursor.html", "repository": "https://github.com/cursor/plugins", "license": "MIT", + "logo": "assets/logo.svg", "keywords": [ "salesforce", "crm", diff --git a/third_party/salesforce/CHANGELOG.md b/third_party/salesforce/CHANGELOG.md index 43ca2286..f870bf80 100644 --- a/third_party/salesforce/CHANGELOG.md +++ b/third_party/salesforce/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this plugin will be documented here. ## 1.0.0 — initial release +- Logo: Salesforce's official cloud mark, centered on a 192×192 white tile so it reads well in the Cursor UI. - Added the `salesforce` MCP server backed by Salesforce Hosted MCP. - Declared `SALESFORCE_MCP_URL` and `CLIENT_ID` plugin variables so each org can point at its own server and External Client App. - Pinned OAuth scopes to `mcp_api` and `refresh_token`. diff --git a/third_party/salesforce/assets/logo.svg b/third_party/salesforce/assets/logo.svg new file mode 100644 index 00000000..e19b12bb --- /dev/null +++ b/third_party/salesforce/assets/logo.svg @@ -0,0 +1,8 @@ + + Salesforce + + + + + + From 912a7c6b2763a9c854d8bf70fde2f58e072dff4d Mon Sep 17 00:00:00 2001 From: Sam Sokolin Date: Tue, 4 Aug 2026 20:03:33 -0400 Subject: [PATCH 5/5] Drop the white tile from the Salesforce logo The cloud mark is opaque, so a transparent canvas reads correctly on both light and dark backgrounds. Geometry is unchanged. Co-authored-by: Cursor --- third_party/salesforce/CHANGELOG.md | 2 +- third_party/salesforce/assets/logo.svg | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/third_party/salesforce/CHANGELOG.md b/third_party/salesforce/CHANGELOG.md index f870bf80..cf4158b9 100644 --- a/third_party/salesforce/CHANGELOG.md +++ b/third_party/salesforce/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this plugin will be documented here. ## 1.0.0 — initial release -- Logo: Salesforce's official cloud mark, centered on a 192×192 white tile so it reads well in the Cursor UI. +- Logo: Salesforce's official cloud mark, centered on a transparent 192×192 canvas with padding so it reads well on light and dark backgrounds. - Added the `salesforce` MCP server backed by Salesforce Hosted MCP. - Declared `SALESFORCE_MCP_URL` and `CLIENT_ID` plugin variables so each org can point at its own server and External Client App. - Pinned OAuth scopes to `mcp_api` and `refresh_token`. diff --git a/third_party/salesforce/assets/logo.svg b/third_party/salesforce/assets/logo.svg index e19b12bb..7259a1e0 100644 --- a/third_party/salesforce/assets/logo.svg +++ b/third_party/salesforce/assets/logo.svg @@ -1,6 +1,5 @@ Salesforce -