From 6cc324149a4bc1f9ba1cb4845865ab7721f3197f Mon Sep 17 00:00:00 2001 From: Minu Palaniappan Date: Thu, 10 Sep 2026 13:14:48 -0700 Subject: [PATCH] feat(third_party): add Coinbase plugin --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../coinbase/.cursor-plugin/plugin.json | 54 ++++++++++++++ third_party/coinbase/CHANGELOG.md | 9 +++ third_party/coinbase/LICENSE | 21 ++++++ third_party/coinbase/README.md | 69 ++++++++++++++++++ third_party/coinbase/assets/logo.png | Bin 0 -> 5300 bytes third_party/coinbase/mcp.json | 11 +++ 8 files changed, 170 insertions(+) create mode 100644 third_party/coinbase/.cursor-plugin/plugin.json create mode 100644 third_party/coinbase/CHANGELOG.md create mode 100644 third_party/coinbase/LICENSE create mode 100644 third_party/coinbase/README.md create mode 100644 third_party/coinbase/assets/logo.png create mode 100644 third_party/coinbase/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 5ff10ceb1..132741daf 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": "coinbase", + "source": "third_party/coinbase", + "description": "Check balances, get quotes, and preview or place trades." } ] } diff --git a/README.md b/README.md index 6cff83a32..fdbb507b1 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. | +| `coinbase` | [Coinbase](third_party/coinbase/) | Cursor | Integrations | Check balances, get quotes, and preview or place trades. | 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/coinbase/.cursor-plugin/plugin.json b/third_party/coinbase/.cursor-plugin/plugin.json new file mode 100644 index 000000000..bdbca8948 --- /dev/null +++ b/third_party/coinbase/.cursor-plugin/plugin.json @@ -0,0 +1,54 @@ +{ + "name": "coinbase", + "displayName": "Coinbase", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Check balances, get quotes, and preview or place trades.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://docs.cdp.coinbase.com/coinbase-for-agents/overview", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "coinbase", + "crypto", + "trading", + "portfolio", + "balances", + "market data", + "advanced trade", + "mcp" + ], + "category": "integrations", + "tags": [ + "coinbase", + "finance", + "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 new file mode 100644 index 000000000..c4a502a27 --- /dev/null +++ b/third_party/coinbase/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 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. +- Logo: Coinbase's official mark, from the `coinbase` GitHub organization. diff --git a/third_party/coinbase/LICENSE b/third_party/coinbase/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/coinbase/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/coinbase/README.md b/third_party/coinbase/README.md new file mode 100644 index 000000000..5088a9b7a --- /dev/null +++ b/third_party/coinbase/README.md @@ -0,0 +1,69 @@ +# Coinbase + +Cursor plugin that connects agents to [Coinbase](https://docs.cdp.coinbase.com/coinbase-for-agents/overview) through Coinbase's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Check balances, get quotes, and preview or place trades. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Coinbase**. +3. Click **Install**, then follow **Setup** below. + +Or run `/add-plugin coinbase` in chat. + +## MCP + +```json +{ + "mcpServers": { + "coinbase": { + "url": "https://agents.coinbase.com/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +} +``` + +## Setup + +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](https://portal.cdp.coinbase.com/), 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` + - 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. + +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 | +| --- | --- | +| Market data | Products, tickers, order books, and candles | +| Orders | Preview, create, edit, cancel, and list orders; close positions | +| Portfolios | Balances, portfolio breakdowns, and transfers between portfolios | +| Conversions | Quote and execute USDC/USD conversions | + +The hosted runtime is the source of truth for tool names and schemas. + +## Notes + +- Orders placed through this server are live. Preview first and keep the agent in an isolated portfolio. +- This is Coinbase for Agents, not the separate Agentic Wallet / x402 payments MCP. + +## Docs + +- Coinbase for Agents: https://docs.cdp.coinbase.com/coinbase-for-agents/overview +- Server URL: https://agents.coinbase.com/mcp + +Logo is Coinbase's official mark, from the `coinbase` GitHub organization. + +## License + +MIT diff --git a/third_party/coinbase/assets/logo.png b/third_party/coinbase/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7dab98e7ad33a6e549152b8106418572786b7a GIT binary patch literal 5300 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 literal 0 HcmV?d00001 diff --git a/third_party/coinbase/mcp.json b/third_party/coinbase/mcp.json new file mode 100644 index 000000000..9b8839e80 --- /dev/null +++ b/third_party/coinbase/mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "coinbase": { + "url": "https://agents.coinbase.com/mcp", + "auth": { + "CLIENT_ID": "${CLIENT_ID}", + "CLIENT_SECRET": "${CLIENT_SECRET}" + } + } + } +}