Google Workspace MCP tools: shared patterns for flags, formatting, multi-account routing, and security.
63
75%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./apps/desktop/bundled-skills/gws-shared/SKILL.md| Tool | Description |
|---|---|
google_sheets | Create spreadsheets, read/write cell data (auto-prepends sheets ) |
google_docs | Create documents, read/write text content (auto-prepends docs ) |
google_slides | Create presentations, read/write slides (auto-prepends slides ) |
google_gmail | Send, read, and manage Gmail messages |
google_calendar | Create, list, and update Google Calendar events |
request_google_file_picker | Request access to Google Drive files via the file picker UI |
google_sheets, google_docs, and google_slides use the drive.file scope. They can only access:
spreadsheets create, documents create, presentations create)To access an existing user file, call request_google_file_picker with the filename as query. The tool will:
This means files picked in a previous task can be reused without showing the picker again.
All tools accept an optional account parameter to target a specific connected Google account.
google_gmail(command: "list", account: "Work")
google_calendar(command: "list-events", account: "Personal")
request_google_file_picker(query: "Q3 Budget", account: "Work")| Operation | When account omitted | When account specified |
|---|---|---|
| Read (list, search, get, free-time) | Queries all accounts | Queries only that account |
| Write (send, create, update, delete) | Ask which account first | Uses specified account |
Use either the label or the full email address:
google_gmail(command: "send ...", account: "Work")
google_gmail(command: "send ...", account: "alice@company.com")
request_google_file_picker(query: "Budget", account: "Personal")Create responses for google_docs, google_sheets, and google_slides always end with a direct link to the created Doc, Sheet, or Slide deck. Use that link in the task result when the user may want to open the file.
# 1. Create a spreadsheet
google_sheets(command: "spreadsheets create --json '{\"properties\": {\"title\": \"Q3 Metrics\"}}'")
# 2. Add multiple rows with --json-values
google_sheets(command: "+append --spreadsheet '<spreadsheetId>' --json-values '[[\"Name\",\"Revenue\"],[\"Acme\",\"1.2M\"]]'")
# 3. Read back to verify
google_sheets(command: "+read --spreadsheet '<spreadsheetId>' --range 'Sheet1'")# 1. Create a document
google_docs(command: "documents create --json '{\"title\": \"Meeting Notes\"}'")
# 2. Append plain text
google_docs(command: "+write --document '<documentId>' --text 'Key decisions from today...'")
# 3. Read back to verify
google_docs(command: "documents get --params '{\"documentId\": \"<documentId>\"}'")# 1. Create a presentation
google_slides(command: "presentations create --json '{\"title\": \"Q3 Review\"}'")
# 2. Get the presentation to discover slide/placeholder IDs
google_slides(command: "presentations get --params '{\"presentationId\": \"<presentationId>\"}'")IMPORTANT —
--valuesvs--json-values(Sheets only)
--values 'a,b,c'appends one row. It CANNOT be used multiple times to add more rows.--json-values '[["a","b"],["c","d"]]'appends multiple rows in a single call. Always use this for bulk data.
If a call fails, the tool returns an error message (not JSON). Check the message for HTTP status codes:
drive.file scope)If a tool returns an error because no accounts are connected, direct the user to Settings → Integrations → Google Accounts.
If an account shows status expired, instruct the user to reconnect it in Settings → Integrations → Google Accounts.
| Flag | Description |
|---|---|
--params '{"key": "val"}' | URL/query parameters |
--json '{"key": "val"}' | Request body |
--page-all | Auto-paginate (NDJSON output) |
--page-limit <N> | Max pages when using --page-all (default: 10) |
--format jsonis automatically appended by the MCP server. Do not add it.
2cf74d0
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.