feat(third_party): add Coinbase plugin - #354
Conversation
4894601 to
e844cb8
Compare
c7dbdaa to
e08285c
Compare
e844cb8 to
b288e33
Compare
7ad62fb to
4573b2f
Compare
b288e33 to
81c6f48
Compare
4573b2f to
529e3af
Compare
81c6f48 to
14ef85f
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Invented Coinbase OAuth client credentials
- Removed the required CLIENT_ID/CLIENT_SECRET pair so the plugin uses Coinbase's documented URL-only login OAuth against https://agents.coinbase.com/mcp.
Or push these changes by commenting:
@cursor push db37780599
Preview (db37780599)
diff --git a/third_party/coinbase/.cursor-plugin/plugin.json b/third_party/coinbase/.cursor-plugin/plugin.json
--- a/third_party/coinbase/.cursor-plugin/plugin.json
+++ b/third_party/coinbase/.cursor-plugin/plugin.json
@@ -31,24 +31,5 @@
"crypto",
"mcp"
],
- "variables": {
- "type": "object",
- "properties": {
- "CLIENT_ID": {
- "type": "string",
- "title": "Coinbase OAuth Client ID",
- "description": "OAuth client ID from the Coinbase Developer Platform portal (portal.cdp.coinbase.com \u2192 OAuth)."
- },
- "CLIENT_SECRET": {
- "type": "string",
- "title": "Coinbase OAuth Client Secret",
- "description": "OAuth client secret from the same Coinbase Developer Platform OAuth client."
- }
- },
- "required": [
- "CLIENT_ID",
- "CLIENT_SECRET"
- ]
- },
"mcpServers": "./mcp.json"
}
diff --git a/third_party/coinbase/CHANGELOG.md b/third_party/coinbase/CHANGELOG.md
--- a/third_party/coinbase/CHANGELOG.md
+++ b/third_party/coinbase/CHANGELOG.md
@@ -5,5 +5,5 @@
## 1.0.0 — initial release
- Added the `coinbase` MCP server pointing at Coinbase's hosted Streamable HTTP endpoint (`https://agents.coinbase.com/mcp`).
-- Auth uses OAuth with Coinbase user login. Declared `CLIENT_ID` and `CLIENT_SECRET` plugin variables and forwarded them through MCP auth, since `login.coinbase.com` does not support dynamic client registration.
+- Auth uses Coinbase user login OAuth against the hosted remote URL. No client ID or secret is required.
- Logo: Coinbase's official mark, from the `coinbase` GitHub organization.
diff --git a/third_party/coinbase/README.md b/third_party/coinbase/README.md
--- a/third_party/coinbase/README.md
+++ b/third_party/coinbase/README.md
@@ -8,7 +8,7 @@
1. Open **Cursor Settings → Plugins**.
2. Search for **Coinbase**.
-3. Click **Install**, then follow **Setup** below.
+3. Click **Install**, then complete the Coinbase sign-in prompt.
Or run `/add-plugin coinbase` in chat.
@@ -18,29 +18,14 @@
{
"mcpServers": {
"coinbase": {
- "url": "https://agents.coinbase.com/mcp",
- "auth": {
- "CLIENT_ID": "${CLIENT_ID}",
- "CLIENT_SECRET": "${CLIENT_SECRET}"
- }
+ "url": "https://agents.coinbase.com/mcp"
}
}
}-## Setup
+Auth is OAuth against Coinbase. Cursor prompts for Coinbase user login when the plugin connects — there is no API key or client ID to configure. On the approval screen, select which portfolios to give the agent access to. Coinbase recommends scoping the agent to a dedicated portfolio.
-Coinbase's authorization server (login.coinbase.com) does not support dynamic client registration, so an OAuth client has to be registered before anyone can connect.
-1. In the Coinbase Developer Platform portal, create an OAuth client and enable the Coinbase for Agents (mcp:*) scopes you want to expose.
-2. Register both redirect URIs on that client:
-
- Desktop:
http://localhost:8787/callback
- Desktop:
-
- Web and Cloud Agents:
https://www.cursor.com/agents/mcp/oauth/callback
-3. In Dashboard → Plugins → Configure, set Coinbase OAuth Client ID and Coinbase OAuth Client Secret from that client.
-4. Complete the Coinbase login when Cursor prompts.
- Web and Cloud Agents:
-On a team marketplace an admin sets the client ID and secret once for everyone; each member still completes their own Coinbase login, so tool calls run against that member's account. Coinbase recommends scoping the agent to a dedicated portfolio.
What agents can do
| Category | Capabilities |
diff --git a/third_party/coinbase/mcp.json b/third_party/coinbase/mcp.json
--- a/third_party/coinbase/mcp.json
+++ b/third_party/coinbase/mcp.json
@@ -1,11 +1,7 @@
{
"mcpServers": {
"coinbase": {
-
"url": "https://agents.coinbase.com/mcp", -
"auth": { -
"CLIENT_ID": "${CLIENT_ID}", -
"CLIENT_SECRET": "${CLIENT_SECRET}" -
}
-
}
"url": "https://agents.coinbase.com/mcp"
}
}
</details>
<sub>You can send follow-ups to the cloud agent <a href="https://cursor.com/agents/bc-4de60f60-e92a-42a3-8f20-7685d06ce582">here</a>.</sub>
<!-- BUGBOT_AUTOFIX_REVIEW_FOOTNOTE_END -->
<sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 14ef85f2ae789a6ce4646bea543fe3b37b5198b5. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>
529e3af to
30baab7
Compare
14ef85f to
86eae3b
Compare
30baab7 to
ae97d2c
Compare
86eae3b to
c2ec8f2
Compare
ae97d2c to
f4a9669
Compare
678976a to
6cc3241
Compare
4ee133f to
07242f3
Compare
07242f3 to
ff49c06
Compare
ff49c06 to
a04f79f
Compare


Warning
Blocked on Coinbase. Coinbase's remote MCP server is available only to harnesses on an explicit allowlist (ChatGPT, Grok, Perplexity Computer, Claude, Claude Code). Cursor is not on it, and
login.coinbase.compublishes noregistration_endpoint, so there is no client id Cursor can use and sign-in cannot complete in any plugin shape. Draft until Coinbase allowlists Cursor and Cursor has a client identity (a partner OAuth client wired as a static provider policy, or Client ID Metadata Document support againstclient_id_metadata_document_supported: true).Summary
third_party/marketplace plugin, in the Attio (Add Attio third-party MCP plugin #339) / Hunter (Add Hunter third-party MCP plugin (API key header auth) #340) shape.all) and the Cursor marketplace does not. The server URL matches Grok's productionconnector_catalog.mcp_server_url..cursor-plugin/marketplace.jsonand the root README table.CLIENT_ID/CLIENT_SECRETvariables were dropped: Coinbase Developer Platform OAuth client creation is limited to approved partners, so users could not have supplied them (Bugbot finding).https://agents.coinbase.com/mcp401→login.coinbase.com; PRM advertisesmcp:*scopes; AS has no dynamic client registration.allMCP
{ "mcpServers": { "coinbase": { "type": "http", "url": "https://agents.coinbase.com/mcp" } } }Stack
Split from #345 into one PR per plugin.
gammafeat(third_party): add Gamma plugin #347 ✅ mergedwebullfeat(third_party): add Webull plugin #348 ✅ mergedsp-globalfeat(third_party): add S&P Global plugin #349 ✅ mergedinteractive-brokersfeat(third_party): add Interactive Brokers plugin #350 ✅ mergedmeltwaterfeat(third_party): add Meltwater plugin #351 ✅ mergeddaloopafeat(third_party): add Daloopa plugin #352 ✅ mergedexcalidrawfeat(third_party): add Excalidraw plugin #353 ✅ merged8.
coinbasefeat(third_party): add Coinbase plugin #354 ← this PR (blocked)google-cloud-bigqueryfeat(third_party): add Google Cloud BigQuery plugin #355 ✅ mergedTest plan
node scripts/validate-plugins.mjspasses on this branchmarketplace.json,plugin.json, and README table descriptions are identicalNotes
Note
Medium Risk
Adds a marketplace entry that can eventually route agents to live crypto trading on user accounts; the diff is mostly scaffolding, but the integration domain is financially sensitive.
Overview
Adds a new Coinbase integration under
third_party/coinbase/and lists it in.cursor-plugin/marketplace.jsonand the root README plugin table.The plugin wires Cursor to Coinbase’s hosted remote MCP at
https://agents.coinbase.com/mcpvia URL-only HTTP config inmcp.json(no API keys or OAuth client variables in the manifest). Docs call out OAuth sign-in at connect time, live-order risk, and that Cursor is not yet on Coinbase’s MCP harness allowlist, so install/sign-in may not work until Coinbase partners with Cursor.Reviewed by Cursor Bugbot for commit a04f79f. Bugbot is set up for automated code reviews on this repo. Configure here.