From 32a3ff24f31e81a80ae6b7e8202b3d2d63c402de Mon Sep 17 00:00:00 2001 From: Jacob Sampson Date: Wed, 23 Sep 2026 14:10:24 -0500 Subject: [PATCH 1/3] Point Google Drive at Cursor's managed MCP --- .../google-drive/.cursor-plugin/plugin.json | 2 +- third_party/google-drive/CHANGELOG.md | 4 + third_party/google-drive/README.md | 8 +- third_party/google-drive/mcp.json | 3 +- .../google-drive/skills/google-drive/SKILL.md | 93 +++++++++++++++++++ 5 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 third_party/google-drive/skills/google-drive/SKILL.md diff --git a/third_party/google-drive/.cursor-plugin/plugin.json b/third_party/google-drive/.cursor-plugin/plugin.json index 0bef19fe8..cb0fa12c6 100644 --- a/third_party/google-drive/.cursor-plugin/plugin.json +++ b/third_party/google-drive/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "google-drive", "displayName": "Google Drive", - "version": "1.0.0", + "version": "1.0.1", "minClientVersions": { "cursor": "3.13.0" }, diff --git a/third_party/google-drive/CHANGELOG.md b/third_party/google-drive/CHANGELOG.md index a59a784fa..0c4f809b7 100644 --- a/third_party/google-drive/CHANGELOG.md +++ b/third_party/google-drive/CHANGELOG.md @@ -6,3 +6,7 @@ All notable changes to this plugin will be documented here. - Logo: official Google Drive 2026 product icon from Google productlogos, on a padded white tile. - Added the `google-drive` MCP server pointing at `https://drivemcp.googleapis.com/mcp/v1`. + +## 1.0.1 — mcp endpoint update + +- Updated the `google-drive` MCP server to point at `https://api.cursor.com/rest-mcp/google-drive/mcp`. diff --git a/third_party/google-drive/README.md b/third_party/google-drive/README.md index 0662247a5..637432b1c 100644 --- a/third_party/google-drive/README.md +++ b/third_party/google-drive/README.md @@ -1,6 +1,6 @@ # Google Drive -Cursor plugin that connects agents to [Google Drive](https://drive.google.com) through Google's remote [Model Context Protocol](https://modelcontextprotocol.io/) server. +Cursor plugin that connects agents to [Google Drive](https://drive.google.com) through Cursor's remote [Model Context Protocol](https://modelcontextprotocol.io/) server. Search Drive, read file metadata and contents, create or update files, and manage sharing. @@ -19,7 +19,7 @@ Or run `/add-plugin google-drive` in chat. "mcpServers": { "google-drive": { "type": "http", - "url": "https://drivemcp.googleapis.com/mcp/v1" + "url": "https://api.cursor.com/rest-mcp/google-drive/mcp" } } } @@ -29,8 +29,8 @@ Auth is OAuth 2.0 against Google. Cursor prompts for Google sign-in when the plu ## Docs -- Google MCP setup: https://developers.google.com/workspace/drive/api/guides/configure-mcp-server -- Workspace MCP overview: https://developers.google.com/workspace/guides/configure-mcp-servers +- Google Drive API: https://developers.google.com/workspace/drive/api/reference/rest/v3 +- Google Drive overview: https://developers.google.com/workspace/drive Logo is the official Google Drive product icon, placed on a white tile with padding so it reads well in the Cursor UI: https://www.gstatic.com/images/branding/productlogos/drive_2026/v1/192px.svg diff --git a/third_party/google-drive/mcp.json b/third_party/google-drive/mcp.json index a372f9151..154c81761 100644 --- a/third_party/google-drive/mcp.json +++ b/third_party/google-drive/mcp.json @@ -2,7 +2,6 @@ "mcpServers": { "google-drive": { "type": "http", - "url": "https://drivemcp.googleapis.com/mcp/v1" - } + "url": "https://api.cursor.com/rest-mcp/google-drive/mcp" } } } diff --git a/third_party/google-drive/skills/google-drive/SKILL.md b/third_party/google-drive/skills/google-drive/SKILL.md new file mode 100644 index 000000000..27ef588f7 --- /dev/null +++ b/third_party/google-drive/skills/google-drive/SKILL.md @@ -0,0 +1,93 @@ +--- +name: google-drive +description: Work with Google Drive through the google_drive_* tools - search, read, create, organize, share, comment, and export files. Use when creating files in specific folders, moving or renaming, converting Markdown/CSV into Docs/Sheets, managing comments, or exporting a rendered PDF. +--- + +# Google Drive files + +## Ids come from search, never guesses + +Every tool takes Drive file ids. Get them from `google_drive_search` (or +`google_drive_list_folder` for a known folder, +`google_drive_list_recent_files` for "what was I just working on"), or from +the id in a URL the user pasted. `exact_name` beats `query` for a known +filename; add `mime_type_filter` to cut noise. Never invent an id or reuse +one from a stale conversation - re-search first. + +## Folder targeting + +- `google_drive_create_folder` takes `parent_folder_id`; without it the + folder lands in My Drive root. When the user names a destination folder, + resolve its id and pass it - a file created in root when a folder was + specified is a wrong result even if the content is perfect. +- `google_drive_create_file` also takes `parent_folder_id`, so create files + directly where they belong instead of creating then moving. +- The Docs/Sheets/Slides providers' own create tools CANNOT target a folder + (their APIs have no parent parameter). When placement matters, either + create the artifact there with `google_drive_create_file` (Markdown to + Doc, CSV to Sheet), or create it and then `google_drive_move_or_rename` + with `destination_folder_id`. +- `google_drive_move_or_rename` does either or both in one call; renaming + does not change the id. +- Grant limits: this app's grant is `drive.file`, so moving into or writing + files/folders this app never created (and the user never picked) can 403. + That 403 is a permission fact, not a transient error; do not retry it. + +## Markdown and CSV conversion + +`google_drive_create_file` with `target_mime_type: +application/vnd.google-apps.document` converts Markdown (headings, lists, +tables) into a real Google Doc in one call; `...spreadsheet` converts CSV +into a Sheet. This is the fastest correct way to produce a formatted Doc: +prefer it over create-then-insert when the content is known up front. +`google_drive_update_file_content` converts in place the same way. + +## Copying, metadata, and sharing + +- `google_drive_copy_file` duplicates a file (optionally into a folder) - + the right way to instantiate a template without touching the original. +- `google_drive_get_file_metadata` returns the full record (mime type, + parents, size, owners, modified time); use it to confirm a move landed. +- `google_drive_get_file_permissions` lists who has access; + `google_drive_share_file` grants a role to an email. Share only when the + user asked; report the link rather than widening access speculatively. +- `google_drive_download_file` returns the raw bytes base64-encoded for + non-Google files (images, PDFs, plain text). + +## Reading and exporting + +- `google_drive_read_file` returns text: Docs as Markdown, Sheets as CSV per + tab, Slides as plain text. Use it to verify content after writes. +- `google_drive_export_file` returns rendered bytes base64-encoded: `pdf` + for Docs/Sheets/Slides (Sheets PDF renders every tab, charts included), + `png`/`svg` for Drawings, plus office formats (docx/xlsx/pptx). Use PDF + when the user wants to see the final look; exports cap at 10 MB. +- For one slide as PNG use the google-slides `get_slide_thumbnail` tool, not + Drive export. + +## Comments + +Comments live on the Drive file, so one tool set covers Docs, Sheets, and +Slides alike: + +- `google_drive_list_comments` returns each comment's text, quoted document + text, resolved state, and replies; it pages, so follow `nextPageToken` + before concluding a thread does not exist. +- `google_drive_add_comment` adds a file-level comment (no text anchor). +- `google_drive_reply_to_comment` replies by comment id, and its + `action: "resolve"` (content optional) is the ONLY way to resolve a + thread; editing document text near a comment never resolves it. Leave + already-resolved threads alone. + +## Deleting + +`google_drive_trash_file` is recoverable (~30 days) and works on files and +folders (a trashed folder takes its contents). Permanent deletion is +deliberately not available; never promise it. + +## Verify your work + +After creates and moves, confirm placement with `google_drive_list_folder` +on the destination or `google_drive_get_file_metadata` (check `parents`). +After content writes, `google_drive_read_file` is the ground truth for text +and `google_drive_export_file` (pdf) for the rendered result. From b9157ac074b1577e8d946972d1c70b329225aac9 Mon Sep 17 00:00:00 2001 From: Jacob Sampson Date: Wed, 23 Sep 2026 14:32:47 -0500 Subject: [PATCH 2/3] Reformat mcp.json --- third_party/google-drive/mcp.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/third_party/google-drive/mcp.json b/third_party/google-drive/mcp.json index 154c81761..e6b1521ab 100644 --- a/third_party/google-drive/mcp.json +++ b/third_party/google-drive/mcp.json @@ -2,6 +2,7 @@ "mcpServers": { "google-drive": { "type": "http", - "url": "https://api.cursor.com/rest-mcp/google-drive/mcp" } + "url": "https://api.cursor.com/rest-mcp/google-drive/mcp" + } } } From 861d5c0cae26d1f258f899f9f251089503334ad5 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 26 Sep 2026 15:57:18 +0000 Subject: [PATCH 3/3] Match the skill to the renamed Drive tool surface The google_drive_ prefix is gone from the translator's tool names, and update_file (fileId, title, parentId) now does hosted-compatible rename and move. The plugin manifest gains the skills field so the bundled skill actually ships. --- .../google-drive/.cursor-plugin/plugin.json | 3 +- .../google-drive/skills/google-drive/SKILL.md | 56 ++++++++++--------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/third_party/google-drive/.cursor-plugin/plugin.json b/third_party/google-drive/.cursor-plugin/plugin.json index cb0fa12c6..a26d1c8db 100644 --- a/third_party/google-drive/.cursor-plugin/plugin.json +++ b/third_party/google-drive/.cursor-plugin/plugin.json @@ -29,5 +29,6 @@ "mcp", "google-workspace" ], - "mcpServers": "./mcp.json" + "mcpServers": "./mcp.json", + "skills": "./skills/" } diff --git a/third_party/google-drive/skills/google-drive/SKILL.md b/third_party/google-drive/skills/google-drive/SKILL.md index 27ef588f7..cb717cc09 100644 --- a/third_party/google-drive/skills/google-drive/SKILL.md +++ b/third_party/google-drive/skills/google-drive/SKILL.md @@ -1,64 +1,68 @@ --- name: google-drive -description: Work with Google Drive through the google_drive_* tools - search, read, create, organize, share, comment, and export files. Use when creating files in specific folders, moving or renaming, converting Markdown/CSV into Docs/Sheets, managing comments, or exporting a rendered PDF. +description: Work with Google Drive through its MCP tools - search, read, create, organize, share, comment, and export files. Use when creating files in specific folders, moving or renaming, converting Markdown/CSV into Docs/Sheets, managing comments, or exporting a rendered PDF. --- # Google Drive files ## Ids come from search, never guesses -Every tool takes Drive file ids. Get them from `google_drive_search` (or -`google_drive_list_folder` for a known folder, -`google_drive_list_recent_files` for "what was I just working on"), or from +Every tool takes Drive file ids. Get them from `search` (or +`list_folder` for a known folder, +`list_recent_files` for "what was I just working on"), or from the id in a URL the user pasted. `exact_name` beats `query` for a known filename; add `mime_type_filter` to cut noise. Never invent an id or reuse one from a stale conversation - re-search first. ## Folder targeting -- `google_drive_create_folder` takes `parent_folder_id`; without it the +- `create_folder` takes `parent_folder_id`; without it the folder lands in My Drive root. When the user names a destination folder, resolve its id and pass it - a file created in root when a folder was specified is a wrong result even if the content is perfect. -- `google_drive_create_file` also takes `parent_folder_id`, so create files +- `create_file` also takes `parent_folder_id`, so create files directly where they belong instead of creating then moving. - The Docs/Sheets/Slides providers' own create tools CANNOT target a folder (their APIs have no parent parameter). When placement matters, either - create the artifact there with `google_drive_create_file` (Markdown to - Doc, CSV to Sheet), or create it and then `google_drive_move_or_rename` + create the artifact there with `create_file` (Markdown to + Doc, CSV to Sheet), or create it and then `move_or_rename` with `destination_folder_id`. -- `google_drive_move_or_rename` does either or both in one call; renaming +- `move_or_rename` does either or both in one call; renaming does not change the id. +- `update_file` is the same rename/move with the hosted Drive tool's + argument names (`fileId`; `title` renames, `parentId` moves by replacing + the current parent); it exists on both the translator and hosted + surfaces, so prefer it in guidance that must work on either. - Grant limits: this app's grant is `drive.file`, so moving into or writing files/folders this app never created (and the user never picked) can 403. That 403 is a permission fact, not a transient error; do not retry it. ## Markdown and CSV conversion -`google_drive_create_file` with `target_mime_type: +`create_file` with `target_mime_type: application/vnd.google-apps.document` converts Markdown (headings, lists, tables) into a real Google Doc in one call; `...spreadsheet` converts CSV into a Sheet. This is the fastest correct way to produce a formatted Doc: prefer it over create-then-insert when the content is known up front. -`google_drive_update_file_content` converts in place the same way. +`update_file_content` converts in place the same way. ## Copying, metadata, and sharing -- `google_drive_copy_file` duplicates a file (optionally into a folder) - +- `copy_file` duplicates a file (optionally into a folder) - the right way to instantiate a template without touching the original. -- `google_drive_get_file_metadata` returns the full record (mime type, +- `get_file_metadata` returns the full record (mime type, parents, size, owners, modified time); use it to confirm a move landed. -- `google_drive_get_file_permissions` lists who has access; - `google_drive_share_file` grants a role to an email. Share only when the +- `get_file_permissions` lists who has access; + `share_file` grants a role to an email. Share only when the user asked; report the link rather than widening access speculatively. -- `google_drive_download_file` returns the raw bytes base64-encoded for +- `download_file` returns the raw bytes base64-encoded for non-Google files (images, PDFs, plain text). ## Reading and exporting -- `google_drive_read_file` returns text: Docs as Markdown, Sheets as CSV per +- `read_file` returns text: Docs as Markdown, Sheets as CSV per tab, Slides as plain text. Use it to verify content after writes. -- `google_drive_export_file` returns rendered bytes base64-encoded: `pdf` +- `export_file` returns rendered bytes base64-encoded: `pdf` for Docs/Sheets/Slides (Sheets PDF renders every tab, charts included), `png`/`svg` for Drawings, plus office formats (docx/xlsx/pptx). Use PDF when the user wants to see the final look; exports cap at 10 MB. @@ -70,24 +74,24 @@ prefer it over create-then-insert when the content is known up front. Comments live on the Drive file, so one tool set covers Docs, Sheets, and Slides alike: -- `google_drive_list_comments` returns each comment's text, quoted document +- `list_comments` returns each comment's text, quoted document text, resolved state, and replies; it pages, so follow `nextPageToken` before concluding a thread does not exist. -- `google_drive_add_comment` adds a file-level comment (no text anchor). -- `google_drive_reply_to_comment` replies by comment id, and its +- `add_comment` adds a file-level comment (no text anchor). +- `reply_to_comment` replies by comment id, and its `action: "resolve"` (content optional) is the ONLY way to resolve a thread; editing document text near a comment never resolves it. Leave already-resolved threads alone. ## Deleting -`google_drive_trash_file` is recoverable (~30 days) and works on files and +`trash_file` is recoverable (~30 days) and works on files and folders (a trashed folder takes its contents). Permanent deletion is deliberately not available; never promise it. ## Verify your work -After creates and moves, confirm placement with `google_drive_list_folder` -on the destination or `google_drive_get_file_metadata` (check `parents`). -After content writes, `google_drive_read_file` is the ground truth for text -and `google_drive_export_file` (pdf) for the rendered result. +After creates and moves, confirm placement with `list_folder` +on the destination or `get_file_metadata` (check `parents`). +After content writes, `read_file` is the ground truth for text +and `export_file` (pdf) for the rendered result.