diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 98137ca8..426e0f77 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -98,6 +98,21 @@ "source": "third_party/google-calendar", "description": "Search events and schedule meetings." }, + { + "name": "google-docs", + "source": "third_party/google-docs", + "description": "Read, create, and edit documents." + }, + { + "name": "google-sheets", + "source": "third_party/google-sheets", + "description": "Read, write, and append spreadsheet data." + }, + { + "name": "google-slides", + "source": "third_party/google-slides", + "description": "Create, edit, and render presentations." + }, { "name": "gong", "source": "third_party/gong", diff --git a/README.md b/README.md index 75c92cf5..9157b13e 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,9 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `gmail` | [Gmail](third_party/gmail/) | Cursor | Productivity | Search, read, draft, and manage email. | | `google-drive` | [Google Drive](third_party/google-drive/) | Cursor | Productivity | Search, read, create, and share files. | | `google-calendar` | [Google Calendar](third_party/google-calendar/) | Cursor | Productivity | Search events and schedule meetings. | +| `google-docs` | [Google Docs](third_party/google-docs/) | Cursor | Productivity | Read, create, and edit documents. | +| `google-sheets` | [Google Sheets](third_party/google-sheets/) | Cursor | Productivity | Read, write, and append spreadsheet data. | +| `google-slides` | [Google Slides](third_party/google-slides/) | Cursor | Productivity | Create, edit, and render presentations. | | `gong` | [Gong](third_party/gong/) | Cursor | Integrations | Pull account summaries, deal insights, and call briefs. | | `salesforce` | [Salesforce](third_party/salesforce/) | Cursor | Integrations | Query, create, and update records in your org. | | `playwright` | [Playwright](third_party/playwright/) | Cursor | Integrations | Navigate, click, screenshot, and test in a real browser. | diff --git a/third_party/google-docs/.cursor-plugin/plugin.json b/third_party/google-docs/.cursor-plugin/plugin.json new file mode 100644 index 00000000..b43c5ad5 --- /dev/null +++ b/third_party/google-docs/.cursor-plugin/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "google-docs", + "displayName": "Google Docs", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.22.0", + "grokbot": "0.30.0", + "sand": "0.30.0" + }, + "description": "Read, create, and edit documents.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/google-docs", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.svg", + "keywords": [ + "google-docs", + "docs", + "google", + "mcp", + "documents", + "workspace" + ], + "category": "productivity", + "tags": [ + "docs", + "documents", + "mcp", + "google-workspace" + ], + "mcpServers": "./mcp.json", + "skills": "./skills/" +} diff --git a/third_party/google-docs/CHANGELOG.md b/third_party/google-docs/CHANGELOG.md new file mode 100644 index 00000000..59e90831 --- /dev/null +++ b/third_party/google-docs/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 - initial release + +- Logo: official Google Docs product icon on a padded white tile. +- Added the `google-docs` MCP server pointing at `https://api.cursor.com/rest-mcp/google-docs/mcp`. +- Bundled the `google-docs` skill covering the index contract, styling, lists, tables, and images. diff --git a/third_party/google-docs/LICENSE b/third_party/google-docs/LICENSE new file mode 100644 index 00000000..ca2bba77 --- /dev/null +++ b/third_party/google-docs/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/google-docs/README.md b/third_party/google-docs/README.md new file mode 100644 index 00000000..a0122f31 --- /dev/null +++ b/third_party/google-docs/README.md @@ -0,0 +1,43 @@ +# Google Docs + +Cursor plugin that connects agents to [Google Docs](https://docs.google.com) through Cursor's remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Read document structure and text, create documents, insert and replace text, delete content ranges, and apply paragraph styles. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Google Docs**. +3. Click **Install**, then complete the Google sign-in prompt. + +Or run `/add-plugin google-docs` in chat. + +## MCP + +```json +{ + "mcpServers": { + "google-docs": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-docs/mcp" + } + } +} +``` + +Auth is OAuth 2.0 against Google. Cursor prompts for Google sign-in when the plugin connects. + +## Skill + +The bundled `google-docs` skill teaches agents document-authoring conventions: the index contract for safe edits, character and paragraph styling, lists, tables, and images. + +## Docs + +- Google Docs API: https://developers.google.com/workspace/docs/api/reference/rest +- Google Workspace overview: https://developers.google.com/workspace + +Logo is the official Google Docs product icon, placed on a white tile with padding so it reads well in the Cursor UI. + +## License + +MIT diff --git a/third_party/google-docs/assets/logo.svg b/third_party/google-docs/assets/logo.svg new file mode 100644 index 00000000..25b4312d --- /dev/null +++ b/third_party/google-docs/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/third_party/google-docs/mcp.json b/third_party/google-docs/mcp.json new file mode 100644 index 00000000..3fb37522 --- /dev/null +++ b/third_party/google-docs/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "google-docs": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-docs/mcp" + } + } +} diff --git a/third_party/google-docs/skills/google-docs/SKILL.md b/third_party/google-docs/skills/google-docs/SKILL.md new file mode 100644 index 00000000..7afe4f25 --- /dev/null +++ b/third_party/google-docs/skills/google-docs/SKILL.md @@ -0,0 +1,77 @@ +--- +name: google-docs +description: Author and edit Google Docs through the google-docs MCP tools - structured writing, character and paragraph styling, lists, tables, images, and safe index math. Use when creating a formatted document, editing document content, or applying styles. +--- + +# Google Docs authoring + +## The index contract (the #1 source of bugs) + +Docs edits address zero-based UTF-16 index ranges within one tab. Every write +SHIFTS later indexes, so: + +1. `read_document` first; it returns each element's `{start, end}` plus the + `revisionId`. +2. Compute ONE edit from that read, pass `requiredRevisionId`, apply. +3. Re-read before the next positional edit. Never reuse indexes across + writes, and never do arithmetic across two writes. + +Order multi-part positional work BACK-TO-FRONT (highest index first) when +re-reading between steps is too expensive; earlier ranges stay valid. + +## Creating a document + +`create_document` makes a BLANK doc (its API ignores content), so plan: + +- Content known up front: prefer google-drive `google_drive_create_file` + with Markdown (`target_mime_type: ...document`), which imports headings, + lists, and tables in one call and can target a folder. +- Building incrementally: `create_document`, then `insert_text` with `index` + omitted to APPEND each paragraph; append mode reads the tail itself and is + revision-guarded automatically. `paragraphStyle` styles the new paragraphs + and `bold`/`italic` style the inserted text in the same call, so a + well-structured document is a sequence of appends with no styling pass. + +## Structure is not optional + +A document without hierarchy reads as a text dump. Default shape for any +report/memo/notes request: a TITLE paragraph, an italic byline or date line, +HEADING_2 per section, short body paragraphs with bold on the phrases that +matter, and bulleted lists for enumerations. Use `insert_text`'s +paragraphStyle/bold/italic arguments as you write rather than styling +afterwards. + +## Styling + +- Character styling (`apply_text_style`): bold/italic/underline/strike, + fontSize, fontFamily, textColor/backgroundColor as `#RRGGBB`, linkUrl. + Exclusive END index: to style one paragraph without its trailing newline, + use `end - 1` from the read. +- Paragraph styling: `apply_paragraph_style` for named styles + (TITLE/HEADING_1..6), `set_paragraph_format` for alignment, indents, and + line spacing (percent, 100 = single). +- Lists: `create_list` over the paragraphs' range; each newline-separated + paragraph becomes one item. Insert the plain lines first, then bullet them. + +## Tables and images + +- `insert_table` inserts an EMPTY grid. To fill it: re-read (cells appear + with their own index ranges) and `insert_text` into cells from the LAST + cell to the first, so earlier cell indexes stay valid. +- `insert_image` needs a PUBLICLY fetchable URL (Google fetches it; auth + walls and localhost fail), PNG/JPEG/GIF. Size with width/height in points + (aspect kept when only one is set). +- `insert_page_break` starts a new page at an index. + +## Bulk text ops + +`replace_text` replaces literal strings everywhere (or in named tabs) with +no index math; prefer it for renames and corrections. `delete_content` +rejects ranges that split table structure or surrogate pairs; deleting a +paragraph's final newline merges it with the next. + +## Verifying + +Re-read with `read_document` for structure and styles, or google-drive +`google_drive_read_file` for the whole doc as Markdown, or +`google_drive_export_file` (pdf) when the visual result matters. diff --git a/third_party/google-sheets/.cursor-plugin/plugin.json b/third_party/google-sheets/.cursor-plugin/plugin.json new file mode 100644 index 00000000..b1e3e8dc --- /dev/null +++ b/third_party/google-sheets/.cursor-plugin/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "google-sheets", + "displayName": "Google Sheets", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.22.0", + "grokbot": "0.30.0", + "sand": "0.30.0" + }, + "description": "Read, write, and append spreadsheet data.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/google-sheets", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.svg", + "keywords": [ + "google-sheets", + "sheets", + "google", + "mcp", + "spreadsheets", + "workspace" + ], + "category": "productivity", + "tags": [ + "sheets", + "spreadsheets", + "mcp", + "google-workspace" + ], + "mcpServers": "./mcp.json", + "skills": "./skills/" +} diff --git a/third_party/google-sheets/CHANGELOG.md b/third_party/google-sheets/CHANGELOG.md new file mode 100644 index 00000000..9ec31b18 --- /dev/null +++ b/third_party/google-sheets/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 - initial release + +- Logo: official Google Sheets product icon on a padded white tile. +- Added the `google-sheets` MCP server pointing at `https://api.cursor.com/rest-mcp/google-sheets/mcp`. +- Bundled the `google-sheets` skill covering A1 and grid coordinates, formatting, charts, and validation. diff --git a/third_party/google-sheets/LICENSE b/third_party/google-sheets/LICENSE new file mode 100644 index 00000000..ca2bba77 --- /dev/null +++ b/third_party/google-sheets/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/google-sheets/README.md b/third_party/google-sheets/README.md new file mode 100644 index 00000000..5f454f8d --- /dev/null +++ b/third_party/google-sheets/README.md @@ -0,0 +1,43 @@ +# Google Sheets + +Cursor plugin that connects agents to [Google Sheets](https://sheets.google.com) through Cursor's remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Read spreadsheet metadata and cell ranges, create spreadsheets, write and append values, clear ranges, and manage sheet tabs. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Google Sheets**. +3. Click **Install**, then complete the Google sign-in prompt. + +Or run `/add-plugin google-sheets` in chat. + +## MCP + +```json +{ + "mcpServers": { + "google-sheets": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-sheets/mcp" + } + } +} +``` + +Auth is OAuth 2.0 against Google. Cursor prompts for Google sign-in when the plugin connects. + +## Skill + +The bundled `google-sheets` skill teaches agents spreadsheet conventions: when to use A1 versus grid coordinates, dashboard formatting, charts, and validation. + +## Docs + +- Google Sheets API: https://developers.google.com/workspace/sheets/api/reference/rest +- Google Workspace overview: https://developers.google.com/workspace + +Logo is the official Google Sheets product icon, placed on a white tile with padding so it reads well in the Cursor UI. + +## License + +MIT diff --git a/third_party/google-sheets/assets/logo.svg b/third_party/google-sheets/assets/logo.svg new file mode 100644 index 00000000..1a3ef67e --- /dev/null +++ b/third_party/google-sheets/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/third_party/google-sheets/mcp.json b/third_party/google-sheets/mcp.json new file mode 100644 index 00000000..2a455735 --- /dev/null +++ b/third_party/google-sheets/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "google-sheets": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-sheets/mcp" + } + } +} diff --git a/third_party/google-sheets/skills/google-sheets/SKILL.md b/third_party/google-sheets/skills/google-sheets/SKILL.md new file mode 100644 index 00000000..de65b591 --- /dev/null +++ b/third_party/google-sheets/skills/google-sheets/SKILL.md @@ -0,0 +1,61 @@ +--- +name: google-sheets +description: Build and edit Google Sheets through the google-sheets MCP tools - values, formatting, charts, conditional formatting, structure, and validation. Use when creating a spreadsheet or dashboard, formatting cells, adding charts, or reorganizing tabs and rows. +--- + +# Google Sheets authoring + +## Two coordinate systems, on purpose + +- VALUE tools (`read_range`, `write_range`, `append_rows`, `clear_range`) + address a TAB TITLE plus A1 cells: `{sheet: "Data", cells: "A1:B4"}`. +- STRUCTURE/FORMAT tools (`format_cells`, `set_borders`, `merge_cells`, + `add_chart`, `add_conditional_formatting`, `insert/delete_rows_or_columns`, + `freeze_rows_or_columns`, `sort_range`, `set_data_validation`, + `set_basic_filter`, `add_banding`, `set_column_width`, + `rename/delete_sheet_tab`) address the numeric `sheetId`. + +`get_spreadsheet` returns both (each tab's title AND sheetId) with no cell +data - call it first and keep the mapping. A new tab's sheetId is in +`add_sheet_tab`'s reply (`replies[0].addSheet.properties.sheetId`). + +## Sequencing a styled sheet + +1. `create_spreadsheet` (optionally with named tabs; it cannot target a + folder - move it after with google-drive `google_drive_move_or_rename`). +2. `write_range` the data with `parseInput: true` when values include + numbers, dates, or formulas (default false stores everything as literal + text - a top source of "chart is empty" bugs). +3. Format like a real dashboard, not a bare grid: + - `format_cells` bold header with a fill color and white text; number + patterns on value columns (`$#,##0`, `0.0%`). + - `freeze_rows_or_columns` the header row. + - `set_basic_filter` over the table range - filter dropdowns are what + make it read as a data table. + - `set_borders` (outer heavier than inner) or `add_banding` for + alternating row colors; `set_column_width` so nothing clips. + - `add_conditional_formatting` for thresholds worth seeing at a glance. +4. `add_chart` LAST, after the data exists: first range is the domain + (x axis / pie labels), later ranges are series; ranges live on the same + tab as the chart. headerCount 1 uses first cells as labels. + +## Pitfalls + +- No revision guard anywhere: last write wins. Read before writing when a + collaborator may be editing. +- `merge_cells` keeps only the top-left value; write the text after merging. +- `sort_range` rewrites cell positions; sort before adding formulas that + reference the range, and exclude the header row from the sorted range. +- `insert/delete_rows_or_columns` positions are 1-based (A=1); deletes are + immediate and not undoable through the API. +- `find_replace_sheet` is literal (never regex here) and can search inside + formulas with `searchFormulas: true`. +- Whole-tab reads can blow the byte cap; bound `cells` (e.g. "1:2000") on + tabs you have not sized and follow `nextCells` when truncated. + +## Verifying + +`read_range` (FORMATTED_VALUE shows what the user sees; UNFORMATTED_VALUE +raw numbers) for values, `get_spreadsheet` for structure, and google-drive +`google_drive_export_file` (pdf - renders every tab including charts and +formatting) when the visual result matters. diff --git a/third_party/google-slides/.cursor-plugin/plugin.json b/third_party/google-slides/.cursor-plugin/plugin.json new file mode 100644 index 00000000..9036725a --- /dev/null +++ b/third_party/google-slides/.cursor-plugin/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "google-slides", + "displayName": "Google Slides", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.22.0", + "grokbot": "0.30.0", + "sand": "0.30.0" + }, + "description": "Create, edit, and render presentations.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://github.com/cursor/plugins/tree/main/third_party/google-slides", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.svg", + "keywords": [ + "google-slides", + "slides", + "google", + "mcp", + "presentations", + "workspace" + ], + "category": "productivity", + "tags": [ + "slides", + "presentations", + "mcp", + "google-workspace" + ], + "mcpServers": "./mcp.json", + "skills": "./skills/" +} diff --git a/third_party/google-slides/CHANGELOG.md b/third_party/google-slides/CHANGELOG.md new file mode 100644 index 00000000..b3af0fbb --- /dev/null +++ b/third_party/google-slides/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 - initial release + +- Logo: official Google Slides product icon on a padded white tile. +- Added the `google-slides` MCP server pointing at `https://api.cursor.com/rest-mcp/google-slides/mcp`. +- Bundled the `google-slides` skill covering deck layout, styling, and per-slide PNG verification. diff --git a/third_party/google-slides/LICENSE b/third_party/google-slides/LICENSE new file mode 100644 index 00000000..ca2bba77 --- /dev/null +++ b/third_party/google-slides/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/google-slides/README.md b/third_party/google-slides/README.md new file mode 100644 index 00000000..1aa6ee97 --- /dev/null +++ b/third_party/google-slides/README.md @@ -0,0 +1,43 @@ +# Google Slides + +Cursor plugin that connects agents to [Google Slides](https://slides.google.com) through Cursor's remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Read presentation structure and text, create presentations, add and reorder slides, insert text boxes, shapes, images, and tables, style text and backgrounds, and render any slide as a PNG thumbnail. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **Google Slides**. +3. Click **Install**, then complete the Google sign-in prompt. + +Or run `/add-plugin google-slides` in chat. + +## MCP + +```json +{ + "mcpServers": { + "google-slides": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-slides/mcp" + } + } +} +``` + +Auth is OAuth 2.0 against Google. Cursor prompts for Google sign-in when the plugin connects. + +## Skill + +The bundled `google-slides` skill teaches agents deck-building conventions: object handles and point geometry, layout that avoids clipped images, palette and text styling, and per-slide PNG verification. + +## Docs + +- Google Slides API: https://developers.google.com/workspace/slides/api/reference/rest +- Google Workspace overview: https://developers.google.com/workspace + +Logo is the official Google Slides product icon, placed on a white tile with padding so it reads well in the Cursor UI. + +## License + +MIT diff --git a/third_party/google-slides/assets/logo.svg b/third_party/google-slides/assets/logo.svg new file mode 100644 index 00000000..67109de9 --- /dev/null +++ b/third_party/google-slides/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/third_party/google-slides/mcp.json b/third_party/google-slides/mcp.json new file mode 100644 index 00000000..be0b3fa9 --- /dev/null +++ b/third_party/google-slides/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "google-slides": { + "type": "http", + "url": "https://api.cursor.com/rest-mcp/google-slides/mcp" + } + } +} diff --git a/third_party/google-slides/skills/google-slides/SKILL.md b/third_party/google-slides/skills/google-slides/SKILL.md new file mode 100644 index 00000000..50152666 --- /dev/null +++ b/third_party/google-slides/skills/google-slides/SKILL.md @@ -0,0 +1,77 @@ +--- +name: google-slides +description: Build and edit Google Slides through the google-slides MCP tools - slides, text boxes, shapes, images, tables, styling, and per-slide PNG rendering. Use when creating a deck, laying out slide elements, or verifying how a slide looks. +--- + +# Google Slides authoring + +## Handles and geometry + +Everything is addressed by objectId from `read_presentation`: slides, shapes, +tables, images. Element positions and sizes are in POINTS from the slide's +top-left; a standard slide is 720x405 pt. Plan a layout on that grid before +inserting (e.g. title at y 40-60, content rows at y 150+, keep 40 pt margins) +so elements do not overlap. + +## Sequencing a styled deck + +1. `create_presentation` (starts with ONE blank slide; it cannot target a + folder - move it after with google-drive `google_drive_move_or_rename`). + Delete the default placeholders when building a custom layout. +2. `read_presentation` for the first slide's objectId, the layouts list, + and the revisionId. +3. Pick a PALETTE first: one background color, one card/accent color that + harmonizes with it, one or two text colors. Every element uses it. +4. Per slide: `set_slide_background`, then insert elements with their style + INLINE - `insert_text_box` takes bold/fontSize/textColor/textAlignment, + `insert_shape` additionally fillColor/outlineColor, so one call produces + a finished element. `insert_image` aspect-fits into maxWidth/maxHeight + and never crops; give it the box you want filled. +5. More slides: `add_slide` with a predefined layout fills title/body + placeholders in the same call; `move_slide` reorders. + +## Layout that reads well + +- Align to a grid: same y for elements in a row, equal sizes for peer cards, + equal gaps (e.g. three 180 pt cards at x 60/270/480 on a 720 pt slide). +- Whitespace is part of the design, but content should not huddle in one + corner of an otherwise empty slide; spread rows vertically (title ~56, + content ~180, footer ~330). +- Tables are for genuinely tabular data on CONTENT slides; on title or + summary slides prefer stat cards (`insert_shape` with text) or short + bulleted placeholders. +- `set_text_style` restyles ALL text of one shape (or a table cell via + cellRow/cellColumn); it does not do partial ranges. + +Pass `requiredRevisionId` from the latest read (or the previous write's +response) so concurrent edits fail the write instead of corrupting layout. + +## Tables + +`insert_table` makes an empty grid; fill cells with `set_shape_text` using +`pageObjectId` = the slide, `objectId` = the table, and +`cell: {rowIndex, columnIndex}` (0-based, EXACTLY those key names). Note +`set_shape_text` REPLACES the whole cell/shape text. + +## Placeholders vs free elements + +`add_slide` with layout TITLE_AND_BODY etc. fills placeholders - the fastest +way to a clean, theme-consistent slide. Free `insert_text_box`/`insert_shape` +give exact control but inherit no theme styling; set fonts and colors +yourself with `set_text_style`. + +## Position changes + +`update_element_position` moves an element to an absolute point position; it +does not resize (the API resizes via transform scale against intrinsic size, +which is unreliable across element kinds - delete and re-create at the right +size instead). + +## Verifying visually + +`get_slide_thumbnail` renders ONE slide as PNG (base64; LARGE = 1600 px wide) +- the ground truth for layout checks; read_presentation cannot tell you +whether elements overlap. For the whole deck use google-drive +`google_drive_export_file` (pdf). Speaker notes: write with `set_shape_text` +using pageObjectId = the slide's notesPageId and objectId = +speakerNotesObjectId from `read_presentation`.