Google Workspace MCP tools: shared patterns for flags, formatting, multi-account routing, and security.
| 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: "[email protected]")
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.