From e98cb1b876d2d7ecde6d4b6d1d0edb469c0d5b7b Mon Sep 17 00:00:00 2001 From: Rohan Shah Date: Fri, 13 Nov 2026 03:50:10 -0800 Subject: [PATCH 1/3] feat(third_party): add the Engine plugin Connect agents to Engine's hosted MCP server at https://mcp.engine.com/mcp for hotel search, booking, stay changes, and support cases. Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + third_party/engine/.cursor-plugin/plugin.json | 37 +++++++++++ third_party/engine/CHANGELOG.md | 9 +++ third_party/engine/LICENSE | 21 +++++++ third_party/engine/README.md | 58 ++++++++++++++++++ third_party/engine/assets/logo.png | Bin 0 -> 5364 bytes third_party/engine/mcp.json | 8 +++ 8 files changed, 139 insertions(+) create mode 100644 third_party/engine/.cursor-plugin/plugin.json create mode 100644 third_party/engine/CHANGELOG.md create mode 100644 third_party/engine/LICENSE create mode 100644 third_party/engine/README.md create mode 100644 third_party/engine/assets/logo.png create mode 100644 third_party/engine/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 507e4d567a..c7a8e1ec06 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -722,6 +722,11 @@ "name": "paypal", "source": "third_party/paypal", "description": "Work with invoices, orders, refunds, subscriptions, disputes, and transactions in PayPal." + }, + { + "name": "engine", + "source": "third_party/engine", + "description": "Search and book hotels, shorten or cancel stays, and check support cases in Engine." } ] } diff --git a/README.md b/README.md index 515dd04971..a90aec59cb 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `netsuite` | [NetSuite](third_party/netsuite/) | Cursor | Integrations | Work with records, reports, saved searches, and SuiteQL queries in NetSuite. | | `front` | [Front](third_party/front/) | Cursor | Integrations | Search conversations, draft and send replies, and manage tags, tasks, and inboxes. | | `paypal` | [PayPal](third_party/paypal/) | Cursor | Integrations | Work with invoices, orders, refunds, subscriptions, disputes, and transactions in PayPal. | +| `engine` | [Engine](third_party/engine/) | Cursor | Integrations | Search and book hotels, shorten or cancel stays, and check support cases in Engine. | 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/engine/.cursor-plugin/plugin.json b/third_party/engine/.cursor-plugin/plugin.json new file mode 100644 index 0000000000..726d6711e3 --- /dev/null +++ b/third_party/engine/.cursor-plugin/plugin.json @@ -0,0 +1,37 @@ +{ + "name": "engine", + "displayName": "Engine", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Search and book hotels, shorten or cancel stays, and check support cases in Engine.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://mcp.engine.com/docs/", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "engine", + "hotel engine", + "business travel", + "corporate travel", + "hotels", + "lodging", + "booking", + "travel management", + "support", + "mcp" + ], + "category": "integrations", + "tags": [ + "engine", + "travel", + "booking", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/engine/CHANGELOG.md b/third_party/engine/CHANGELOG.md new file mode 100644 index 0000000000..0aa0167f67 --- /dev/null +++ b/third_party/engine/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `engine` MCP server pointing at Engine's hosted Streamable HTTP endpoint (`https://mcp.engine.com/mcp`). +- Auth uses OAuth with Engine sign-in (`login.engine.com`, scope `mcp:invoke`). +- Logo: Engine's official app icon, the 256×256 web clip published on engine.com. diff --git a/third_party/engine/LICENSE b/third_party/engine/LICENSE new file mode 100644 index 0000000000..ca2bba771c --- /dev/null +++ b/third_party/engine/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/engine/README.md b/third_party/engine/README.md new file mode 100644 index 0000000000..e19588c64d --- /dev/null +++ b/third_party/engine/README.md @@ -0,0 +1,58 @@ +# Engine + +Cursor plugin that connects agents to [Engine](https://engine.com) through Engine's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Find hotels near a place, compare live room rates and refund terms, book with a saved card or your company's direct bill, shorten or cancel a stay, change guest names, and check your support cases. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Engine**. +3. Click **Install**, then complete the Engine sign-in prompt. + +Or run `/add-plugin engine` in chat. + +## MCP + +```json +{ + "mcpServers": { + "engine": { + "type": "http", + "url": "https://mcp.engine.com/mcp" + } + } +} +``` + +Auth is OAuth with PKCE through Engine sign-in at `login.engine.com`, with the `mcp:invoke` scope. Each user signs in with their own Engine account, and bookings are made only for that member. + +## What agents can do + +| Area | Tools | +| --- | --- | +| Hotel search | `lodging_resolve_destination`, `lodging_search_hotels`, `lodging_get_room_rates` | +| Booking | `lodging_create_cart`, `lodging_list_payment_methods`, `lodging_book_cart`, `lodging_get_booking_status` | +| Trip changes | `lodging_get_booking`, `lodging_preview_cancellation`, `lodging_submit_cancellation`, `lodging_preview_shortening`, `lodging_submit_shortening`, `lodging_submit_guest_name_change` | +| Support | `support_list_cases`, `support_get_case`, `support_get_case_status`, `support_search_help_center` | +| Account | `lodging_get_current_user` | + +The hosted runtime is the source of truth for tool names and schemas. Engine publishes the full tool reference at https://mcp.engine.com/docs/cursor/. + +## Notes + +- Booking charges a saved card (including Engine X) or your company's direct bill. Engine's tools show the total and cancellation terms and ask for your yes before booking. Approve each booking deliberately. +- Cancelling or shortening a stay is priced as a preview first, and the refund is issued only when you confirm. +- When a booking can't be confirmed, the tools return links to finish or check it in the Engine web app. +- The server covers hotels only. Flights and rental cars booked through Engine aren't available here. + +## Docs + +- Engine MCP tool reference: https://mcp.engine.com/docs/ +- Server URL: https://mcp.engine.com/mcp + +Logo is Engine's official app icon, the 256×256 web clip published on engine.com. + +## License + +MIT diff --git a/third_party/engine/assets/logo.png b/third_party/engine/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ca747954c00a957bc06ba546e08d51183dbdcf64 GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/third_party/engine/mcp.json b/third_party/engine/mcp.json new file mode 100644 index 0000000000..e80edc2e1c --- /dev/null +++ b/third_party/engine/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "engine": { + "type": "http", + "url": "https://mcp.engine.com/mcp" + } + } +} From c427fa1b05787d4c5140e112ab0e16b384158eb9 Mon Sep 17 00:00:00 2001 From: djiang-jq Date: Fri, 13 Nov 2026 10:21:30 -0800 Subject: [PATCH 2/3] feat(third_party): add the Squarespace plugin Connect agents to Squarespace's hosted MCP server at https://mcp.squarespace.com/mcp for the Domains tools: generate brandable business name ideas from a description, then search the domain catalog for availability, first-year and renewal pricing, and a checkout link per result. Both tools are public, so the server answers an unauthenticated tools/list and there is nothing to configure. The Commerce tools on the same server stay hidden until Squarespace extends sign-in past Claude and ChatGPT. Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../squarespace/.cursor-plugin/plugin.json | 35 +++++++++++ third_party/squarespace/CHANGELOG.md | 10 ++++ third_party/squarespace/LICENSE | 21 +++++++ third_party/squarespace/README.md | 60 +++++++++++++++++++ third_party/squarespace/assets/logo.svg | 7 +++ third_party/squarespace/mcp.json | 8 +++ 8 files changed, 147 insertions(+) create mode 100644 third_party/squarespace/.cursor-plugin/plugin.json create mode 100644 third_party/squarespace/CHANGELOG.md create mode 100644 third_party/squarespace/LICENSE create mode 100644 third_party/squarespace/README.md create mode 100644 third_party/squarespace/assets/logo.svg create mode 100644 third_party/squarespace/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index c7a8e1ec06..d27e3d8d3f 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -727,6 +727,11 @@ "name": "engine", "source": "third_party/engine", "description": "Search and book hotels, shorten or cancel stays, and check support cases in Engine." + }, + { + "name": "squarespace", + "source": "third_party/squarespace", + "description": "Brainstorm business names and check domain availability, pricing, and checkout links on Squarespace." } ] } diff --git a/README.md b/README.md index a90aec59cb..3e13281f14 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `front` | [Front](third_party/front/) | Cursor | Integrations | Search conversations, draft and send replies, and manage tags, tasks, and inboxes. | | `paypal` | [PayPal](third_party/paypal/) | Cursor | Integrations | Work with invoices, orders, refunds, subscriptions, disputes, and transactions in PayPal. | | `engine` | [Engine](third_party/engine/) | Cursor | Integrations | Search and book hotels, shorten or cancel stays, and check support cases in Engine. | +| `squarespace` | [Squarespace](third_party/squarespace/) | Cursor | Integrations | Brainstorm business names and check domain availability, pricing, and checkout links on Squarespace. | 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/squarespace/.cursor-plugin/plugin.json b/third_party/squarespace/.cursor-plugin/plugin.json new file mode 100644 index 0000000000..467b05b871 --- /dev/null +++ b/third_party/squarespace/.cursor-plugin/plugin.json @@ -0,0 +1,35 @@ +{ + "name": "squarespace", + "displayName": "Squarespace", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Brainstorm business names and check domain availability, pricing, and checkout links on Squarespace.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://developers.squarespace.com/mcp/overview", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.svg", + "keywords": [ + "squarespace", + "domains", + "domain-search", + "naming", + "branding", + "website", + "commerce", + "mcp" + ], + "category": "integrations", + "tags": [ + "squarespace", + "domains", + "branding", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/squarespace/CHANGELOG.md b/third_party/squarespace/CHANGELOG.md new file mode 100644 index 0000000000..d4b237f271 --- /dev/null +++ b/third_party/squarespace/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `squarespace` MCP server pointing at Squarespace's hosted Streamable HTTP endpoint (`https://mcp.squarespace.com/mcp`). +- No credentials to configure: the Domains tools are public, so the server answers an unauthenticated `tools/list`. +- Documented that the Commerce tools stay hidden until Squarespace extends sign-in beyond Claude and ChatGPT. +- Logo: Squarespace's official mark, from the developer site's brand assets. diff --git a/third_party/squarespace/LICENSE b/third_party/squarespace/LICENSE new file mode 100644 index 0000000000..ca2bba771c --- /dev/null +++ b/third_party/squarespace/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/squarespace/README.md b/third_party/squarespace/README.md new file mode 100644 index 0000000000..3bdacece1f --- /dev/null +++ b/third_party/squarespace/README.md @@ -0,0 +1,60 @@ +# Squarespace + +Cursor plugin that connects agents to [Squarespace](https://www.squarespace.com) through Squarespace's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Brainstorm business and brand names, then check domain availability, first-year and renewal pricing, and get a Squarespace checkout link for each one — without leaving chat. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Squarespace**. +3. Click **Install**. + +Or run `/add-plugin squarespace` in chat. + +There is nothing to sign in to: the tools this plugin exposes are public. + +## MCP + +```json +{ + "mcpServers": { + "squarespace": { + "type": "http", + "url": "https://mcp.squarespace.com/mcp" + } + } +} +``` + +## What agents can do + +| Tool | Purpose | +| --- | --- | +| `squarespace_generate_domain_names` | Turn a free-text description of a business into brandable name ideas, grouped by tone (neutral, playful, professional, friendly, informative, quirky) | +| `squarespace_search_domains` | Search the Squarespace domain catalog for a keyword or a full domain, returning availability, first-year price, renewal price, and a checkout link per result | + +Both tools are read-only, and the hosted runtime is the source of truth for tool names and schemas. + +The intended flow is to generate names first, then search the most promising ones. `squarespace_search_domains` takes a short keyword rather than a sentence, and only returns an `exactMatch` row when the query includes a TLD. + +## Notes + +- **Nothing is ever purchased.** The domain tools return a `checkoutLink`; a domain is registered only when someone opens that link and completes checkout on squarespace.com. +- Results can include **sponsored** placements. Each row carries a `suggestionType` of `exactMatch`, `sponsored`, or `organic`, and the server instructs agents to label sponsored rows as such rather than presenting them as organic suggestions. +- An `available` value of `null` means availability was not checked — not that the domain is taken. That happens when a search passes `checkAvailability: false`. +- Squarespace also hosts **Commerce** tools on this server (contacts, orders, products) behind a Squarespace sign-in. They are currently limited to Claude and ChatGPT, so they do not appear in Cursor. When they do open up, sign-in is OAuth 2.1 against `https://login.squarespace.com`, which advertises PKCE and client ID metadata documents but no dynamic client registration endpoint. + +## Docs + +- MCP server overview: https://developers.squarespace.com/mcp/overview +- Connecting a client: https://developers.squarespace.com/mcp/connect-a-client +- Domains tools: https://developers.squarespace.com/mcp/tools/domains +- Commerce tools: https://developers.squarespace.com/mcp/tools/commerce +- Server URL: https://mcp.squarespace.com/mcp + +Logo is Squarespace's official mark, from the brand assets on `developers.squarespace.com`. + +## License + +MIT diff --git a/third_party/squarespace/assets/logo.svg b/third_party/squarespace/assets/logo.svg new file mode 100644 index 0000000000..73fc19d928 --- /dev/null +++ b/third_party/squarespace/assets/logo.svg @@ -0,0 +1,7 @@ + + Squarespace + + + + + diff --git a/third_party/squarespace/mcp.json b/third_party/squarespace/mcp.json new file mode 100644 index 0000000000..d2c86ad6ac --- /dev/null +++ b/third_party/squarespace/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "squarespace": { + "type": "http", + "url": "https://mcp.squarespace.com/mcp" + } + } +} From 1b1ed88cea00ab65a51af60f83a305b9455a5691 Mon Sep 17 00:00:00 2001 From: Rohan Shah Date: Fri, 13 Nov 2026 14:24:57 -0800 Subject: [PATCH 3/3] feat(third_party): add the Runta plugin Connect agents to Runta's hosted MCP server at https://mcp.runta.com/mcp to create and manage persistent agent runtimes, run commands, publish ports, and manage egress, checkpoints, images, VNC, and SSH access. Co-authored-by: Cursor --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + third_party/runta/.cursor-plugin/plugin.json | 37 +++++++++++ third_party/runta/CHANGELOG.md | 9 +++ third_party/runta/LICENSE | 21 ++++++ third_party/runta/README.md | 66 +++++++++++++++++++ third_party/runta/assets/logo.png | Bin 0 -> 27539 bytes third_party/runta/mcp.json | 8 +++ 8 files changed, 147 insertions(+) create mode 100644 third_party/runta/.cursor-plugin/plugin.json create mode 100644 third_party/runta/CHANGELOG.md create mode 100644 third_party/runta/LICENSE create mode 100644 third_party/runta/README.md create mode 100644 third_party/runta/assets/logo.png create mode 100644 third_party/runta/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index d27e3d8d3f..501e716488 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -732,6 +732,11 @@ "name": "squarespace", "source": "third_party/squarespace", "description": "Brainstorm business names and check domain availability, pricing, and checkout links on Squarespace." + }, + { + "name": "runta", + "source": "third_party/runta", + "description": "Create and run persistent agent runtimes, publish ports, and manage egress, checkpoints, and images in Runta." } ] } diff --git a/README.md b/README.md index 3e13281f14..3c4ad80484 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `paypal` | [PayPal](third_party/paypal/) | Cursor | Integrations | Work with invoices, orders, refunds, subscriptions, disputes, and transactions in PayPal. | | `engine` | [Engine](third_party/engine/) | Cursor | Integrations | Search and book hotels, shorten or cancel stays, and check support cases in Engine. | | `squarespace` | [Squarespace](third_party/squarespace/) | Cursor | Integrations | Brainstorm business names and check domain availability, pricing, and checkout links on Squarespace. | +| `runta` | [Runta](third_party/runta/) | Cursor | Integrations | Create and run persistent agent runtimes, publish ports, and manage egress, checkpoints, and images in Runta. | 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/runta/.cursor-plugin/plugin.json b/third_party/runta/.cursor-plugin/plugin.json new file mode 100644 index 0000000000..67a04c87a8 --- /dev/null +++ b/third_party/runta/.cursor-plugin/plugin.json @@ -0,0 +1,37 @@ +{ + "name": "runta", + "displayName": "Runta", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Create and run persistent agent runtimes, publish ports, and manage egress, checkpoints, and images in Runta.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://runta.com/docs/integrations/mcp/", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "runta", + "agent runtime", + "persistent runtime", + "sandbox", + "cloud computer", + "checkpoints", + "egress", + "ssh", + "vnc", + "mcp" + ], + "category": "integrations", + "tags": [ + "runta", + "runtime", + "infrastructure", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/runta/CHANGELOG.md b/third_party/runta/CHANGELOG.md new file mode 100644 index 0000000000..99d25172a2 --- /dev/null +++ b/third_party/runta/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `runta` MCP server pointing at Runta's hosted Streamable HTTP endpoint (`https://mcp.runta.com/mcp`). +- Auth uses OAuth with Runta sign-in (`api.runta.com`, scopes `runtime:read` and `runtime:manage`). Runta identifies clients with Client ID Metadata Documents instead of dynamic client registration, so there is no client ID or API key to configure. +- Logo: Runta's fox mark, the 256×256 favicon published on runta.com. diff --git a/third_party/runta/LICENSE b/third_party/runta/LICENSE new file mode 100644 index 0000000000..ca2bba771c --- /dev/null +++ b/third_party/runta/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/runta/README.md b/third_party/runta/README.md new file mode 100644 index 0000000000..eb3ba69b2a --- /dev/null +++ b/third_party/runta/README.md @@ -0,0 +1,66 @@ +# Runta + +Cursor plugin that connects agents to [Runta](https://runta.com) through Runta's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Create and manage persistent Runta runtimes for AI agents: start, pause, resize, and delete them, run commands, publish ports over HTTPS, set egress policy, take and restore checkpoints, build runtime images, and manage VNC desktop and SSH access. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Runta**. +3. Click **Install**, then complete the Runta sign-in prompt. + +Or run `/add-plugin runta` in chat. + +## MCP + +```json +{ + "mcpServers": { + "runta": { + "type": "http", + "url": "https://mcp.runta.com/mcp" + } + } +} +``` + +Auth is OAuth with PKCE through Runta sign-in at `api.runta.com`, with the `runtime:read` and `runtime:manage` scopes. Runta identifies clients with Client ID Metadata Documents instead of dynamic client registration, so there is no client ID, secret, or API key to configure. When you connect, Runta's consent page opens in your browser: check that the client is Cursor, pick the organization, and approve. Tool calls run as you, with your organization role. + +## What agents can do + +| Area | Tools | +| --- | --- | +| Account | `whoami` | +| Runtimes | `list_runtimes`, `get_runtime`, `create_runtime`, `start_runtime`, `stop_runtime`, `pause_runtime`, `resume_runtime`, `resize_runtime`, `set_idle_policy`, `delete_runtime` | +| Commands | `run_command` | +| Published ports | `list_ports`, `publish_port`, `unpublish_port` | +| Egress | `get_egress`, `set_egress_policy`, `set_token_saving` | +| Checkpoints | `list_checkpoints`, `create_checkpoint`, `restore_checkpoint`, `delete_checkpoint` | +| Runtime images | `list_runtime_images`, `build_runtime_image`, `list_runtime_image_builds`, `cancel_runtime_image_build`, `delete_runtime_image` | +| VNC desktop | `get_vnc`, `enable_vnc`, `disable_vnc`, `list_vnc_credentials`, `create_vnc_credential`, `revoke_vnc_credential` | +| SSH access | `list_ssh_keys`, `list_runtime_ssh_keys`, `attach_ssh_key`, `detach_ssh_key` | + +The hosted server is the source of truth for tool names and schemas. Runta publishes the tool reference at https://runta.com/docs/integrations/mcp/. + +## Notes + +- You need a Runta account in an organization. Sign up at https://dashboard.runta.com. +- The server can change and delete data: creating and deleting runtimes, running commands, and restoring checkpoints are all tool calls. Each tool says whether it reads, changes, or deletes, so Cursor can ask before running a change. Approve each one deliberately. +- Changing a runtime that another member owns needs the Owner or Admin role. +- Lifecycle tools return once Runta accepts the request. The agent then checks progress with `get_runtime`, `list_checkpoints`, or `list_runtime_image_builds`. +- `run_command` runs one non-interactive command and returns its output. For an interactive shell, use `runta exec` or SSH. The server can't copy files from your computer (use `runta cp`), and `build_runtime_image` can't `COPY` local files. +- Anyone with the URL of a published port can reach the service on it. +- The server does not manage secrets, billing, API keys, or organization members. + +## Docs + +- Runta MCP server: https://runta.com/docs/integrations/mcp/ +- Runta docs: https://runta.com/docs/ +- Server URL: https://mcp.runta.com/mcp + +Logo is Runta's fox mark, the 256×256 favicon published on runta.com. + +## License + +MIT diff --git a/third_party/runta/assets/logo.png b/third_party/runta/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a641e57147bb7570907d1fc1337d0d5788f87362 GIT binary patch literal 27539 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