Add Gong and Salesforce MCP plugins - #191
Merged
Merged
Conversation
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 <cursoragent@cursor.com>
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 <cursoragent@cursor.com>
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 <cursoragent@cursor.com>
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 <cursoragent@cursor.com>
The cloud mark is opaque, so a transparent canvas reads correctly on both light and dark backgrounds. Geometry is unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds two MCP integration plugins to the public marketplace, and extends the plugin schema with a
variablesblock so manifests can declare user-configured values.Supersedes #168, which added Gong only and was closed.
third_party/gong/— Gong's official hosted MCP server athttps://mcp.gong.io/mcp. DeclaresCLIENT_ID/CLIENT_SECRETand forwards both into MCP auth.third_party/salesforce/— Salesforce Hosted MCP. DeclaresSALESFORCE_MCP_URL/CLIENT_ID.schemas/plugin.schema.json— newvariablesproperty. The schema setsadditionalProperties: false, so neither manifest validates without it.Both live under a new
third_party/directory to group vendor integrations separately from Cursor-authored plugins. Nested marketplacesourcepaths work:resolvePluginSourcePathtreatssourceas a relative path and only strips a leading./. The already-publishedgmail,google-drive, andgoogle-calendarplugins move there too, so all vendor integrations sit together. That move is safe for published plugins: the indexer keys identity on(marketplaceId, name), so a re-index updatesgitPathin place instead of creating a new row, and deprecation is name-based as well. Theirlogovalues stay relative to the plugin root and re-resolve against the new base path; theirtree/main/...homepage URLs were updated.Why Salesforce is shaped differently from Gong
Three things make it not a copy of the Gong manifest:
No client secret. Salesforce Hosted MCP authenticates Cursor as a public client over PKCE. Salesforce's own docs recommend against secrets for desktop clients, and their Cursor setup page shows
CLIENT_IDalone. Adding a secret variable would be a footgun.The whole URL is templated, not just credentials. The server URL encodes both org type and server kind, so there are four shapes and no useful default:
…/mcp/v1/platform/sobject-all…/mcp/v1/custom/myserver…/mcp/v1/sandbox/platform/sobject-all…/mcp/v1/sandbox/custom/myserverOne
${SALESFORCE_MCP_URL}variable covers all four. This also lets a team point atsobject-readsorsobject-mutationsinstead of full CRUD.Scopes are pinned to
mcp_apiandrefresh_token. Cursor otherwise auto-fetches scopes from discovery. Both are needed:mcp_apifor access,refresh_tokenso sessions renew instead of dying at token expiry. Verified against the live endpoint:Verification
node scripts/validate-plugins.mjs→All plugins validated successfully.git diff --check→ cleangetUserInfo,soqlQuery,getObjectSchema,find) using the exacturl+authshape insalesforce/mcp.json.The
salesforce/README.mdsetup section is written from that live setup, not just the docs — it calls out the four failure modes we actually hit: 30-minute External Client App propagation (invalid_client_id), therefresh_tokenscope hiding behind the label "Perform requests at any time", opaque-vs-JWT tokens (JWT Token is required), and JWT Bearer Flow being the wrong setting.Open question for reviewers
Neither plugin sets
minClientVersions. The Google plugins pincursor: 3.13.0, andvariablesplus static-CLIENT_IDauth presumably have their own floor — I didn't want to guess a number. Happy to add one if someone knows the right minimum.Both plugins now ship a
logo. Gong uses its official 180×180apple-touch-iconunmodified. Salesforce publishes no square icon larger than a 32px favicon, so theirs is built from Salesforce's official vector cloud mark centered on a 192×192 white tile — the same treatment the Google plugins use. Both marks are trademarked and were taken from vendor CDNs rather than a redistribution-licensed source, so flag if that needs brand or legal sign-off before merge.Note
Medium Risk
Adds OAuth-backed third-party MCP integrations and a schema change for credential variables; impact is limited to plugin packaging and external API access, not core Cursor runtime code.
Overview
Introduces Gong and Salesforce marketplace plugins under
third_party/, each wiring a hosted MCP server with user-configured credentials via new manifestvariables(OAuth client IDs/secrets for Gong; org-specific MCP URL and consumer key for Salesforce, with pinnedmcp_api/refresh_tokenscopes).Extends
schemas/plugin.schema.jsonwith avariablesobject so those manifests validate. Gmail, Google Drive, and Google Calendar move intothird_party/as well;.cursor-plugin/marketplace.jsonand README point at the new paths and list the two new integrations.Reviewed by Cursor Bugbot for commit 912a7c6. Bugbot is set up for automated code reviews on this repo. Configure here.