gemini/skills/gspace/SKILL.md
Use gspace CLI (command-line tool) and MCP tools for Google Workspace operations including Drive file management, Gmail, Docs, Sheets, Calendar, and Tasks. Both CLI commands (via Bash) and 40+ MCP tools are available.
npx skillsauth add lanej/dotfiles gspaceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a Google Workspace specialist with access to both the gspace CLI (a command-line tool you can invoke via Bash) and MCP (Model Context Protocol) tools. This skill provides comprehensive guidance for working with Google Drive, Gmail, Docs, Sheets, Calendar, and Tasks operations through both interfaces.
IMPORTANT: gspace is a CLI tool installed on the system. Use it via the Bash tool with commands like gspace drive files ls or gspace gmail search --query "subject:urgent". It is NOT only an MCP server.
mcp__gdrive__drive_check_authVerify Google Drive authentication status and OAuth scopes.
# No parameters required
mcp__gdrive__drive_check_auth()
Returns: Authentication status with account info and required scopes
Use cases:
mcp__gdrive__gmail_check_authVerify Gmail API authentication and required scopes.
mcp__gdrive__gmail_check_auth()
mcp__gdrive__calendar_check_authVerify Calendar API authentication and required scopes.
mcp__gdrive__calendar_check_auth()
mcp__gdrive__drive_files_listList files with advanced filtering (owner, dates, type, folder).
Parameters:
query (string, optional): Search query for file namestype (string, optional): MIME type filterfolder (string, optional): Search within specific folder IDowner (string, optional): Filter by file owner emailcreated_after (string, optional): ISO date (YYYY-MM-DD)created_before (string, optional): ISO datemodified_after (string, optional): ISO datemodified_before (string, optional): ISO dateorder_by (string, optional): Sort order (e.g., "modifiedTime desc")limit (number, optional): Max results (1-100, default: 10)# Search by filename
mcp__gdrive__drive_files_list(query="report", limit=20)
# Search by owner and date
mcp__gdrive__drive_files_list(
owner="[email protected]",
modified_after="2025-01-01",
order_by="modifiedTime desc"
)
mcp__gdrive__drive_files_downloadDownload file with format conversion (PDF, DOCX, XLSX, markdown).
Parameters:
file_id (string, required): Google Drive file IDlocal_path (string, required): Local file system pathexport_format (string, optional): Export format (text, csv, xlsx, pdf, docx, markdown)tab_id (string, optional): Specific tab ID for multi-tab Docsmax_size (number, optional): Max file size in bytestimeout (number, optional): Download timeout in milliseconds# Download Google Doc as markdown
mcp__gdrive__drive_files_download(
file_id="abc123",
local_path="/tmp/document.md",
export_format="markdown"
)
# Download Google Sheet as Excel (preserves all sheets)
mcp__gdrive__drive_files_download(
file_id="sheet123",
local_path="/tmp/data.xlsx",
export_format="xlsx"
)
mcp__gdrive__drive_files_uploadUpload local files with automatic CSV→Sheets conversion.
Parameters:
local_path (string, required): Path to local filename (string, optional): Name in Drive (defaults to filename)parent_folder_id (string, optional): Parent folder IDdescription (string, optional): File descriptionconvert_to_google_format (boolean, optional): Convert CSV to Sheetsmime_type (string, optional): MIME type (auto-detected)# Upload CSV and convert to Google Sheet
mcp__gdrive__drive_files_upload(
local_path="/tmp/data.csv",
name="Sales Data 2025",
convert_to_google_format=True
)
mcp__gdrive__drive_files_copyCreate file/folder copies with optional renaming.
Parameters:
file_id (string, required): ID of file to copyname (string, optional): Name for copyparent_folder_id (string, optional): Destination foldermcp__gdrive__drive_files_copy(
file_id="abc123",
name="Backup Copy",
parent_folder_id="folder456"
)
mcp__gdrive__drive_files_renameRename files and folders.
Parameters:
file_id (string, required): ID of file to renamename (string, required): New namemcp__gdrive__drive_files_rename(
file_id="abc123",
name="Updated Document Name"
)
mcp__gdrive__drive_files_deleteDelete files/folders (trash or permanent).
Parameters:
file_id (string, required): ID of file to deletepermanently (boolean, optional): Permanent delete vs trash (default: false)# Move to trash
mcp__gdrive__drive_files_delete(file_id="abc123")
# Permanently delete
mcp__gdrive__drive_files_delete(file_id="abc123", permanently=True)
mcp__gdrive__drive_files_metadataGet comprehensive file metadata.
Parameters:
file_id (string, required): File IDmcp__gdrive__drive_files_metadata(file_id="abc123")
Returns: Name, size, mimeType, created/modified times, owner, sharing settings
mcp__gdrive__drive_files_validate_markdownValidate Google Docs export to markdown compatibility.
Parameters:
file_id (string, required): Google Doc file IDmcp__gdrive__drive_files_validate_markdown(file_id="doc123")
Returns: Compatibility score and recommendations
mcp__gdrive__drive_files_list_tabsList all tabs in a Google Doc (experimental API).
Parameters:
file_id (string, required): Google Doc file IDmcp__gdrive__drive_files_list_tabs(file_id="doc123")
mcp__gdrive__drive_folders_createCreate folders with optional descriptions.
Parameters:
name (string, required): Folder nameparent_folder_id (string, optional): Parent folder IDdescription (string, optional): Folder descriptionmcp__gdrive__drive_folders_create(
name="Project Documents",
description="All project files"
)
mcp__gdrive__drive_folders_moveMove files/folders between locations.
Parameters:
file_id (string, required): ID of file/folder to movenew_parent_folder_id (string, required): Destination folder IDremove_from_current_parents (boolean, optional): Remove from current parents (default: true)mcp__gdrive__drive_folders_move(
file_id="abc123",
new_parent_folder_id="folder456"
)
mcp__gdrive__permissions_grantGrant user/group/domain access to files.
Parameters:
file_id (string, required): File IDrole (string, required): reader, writer, commenter, ownertype (string, required): user, group, domain, anyoneemail (string, optional): Email address (for user/group)domain (string, optional): Domain name or "current"# Grant write access to user
mcp__gdrive__permissions_grant(
file_id="abc123",
role="writer",
type="user",
email="[email protected]"
)
# Share with entire domain
mcp__gdrive__permissions_grant(
file_id="abc123",
role="reader",
type="domain",
domain="current"
)
mcp__gdrive__permissions_listList current file/folder permissions.
Parameters:
file_id (string, required): File IDmcp__gdrive__permissions_list(file_id="abc123")
Returns: List of permissions with roles and email addresses
mcp__gdrive__permissions_updateModify existing permission roles.
Parameters:
file_id (string, required): File IDpermission_id (string, required): Permission IDrole (string, required): New role (reader, writer, commenter)mcp__gdrive__permissions_update(
file_id="abc123",
permission_id="perm456",
role="commenter"
)
mcp__gdrive__permissions_revokeRemove user/group access.
Parameters:
file_id (string, required): File IDpermission_id (string, required): Permission ID to removemcp__gdrive__permissions_revoke(
file_id="abc123",
permission_id="perm456"
)
mcp__gdrive__docs_createCreate Google Docs from markdown files.
Parameters:
local_path (string, required): Path to markdown filename (string, required): Document nameparent_folder_id (string, optional): Parent folder IDmcp__gdrive__docs_create(
local_path="/tmp/notes.md",
name="Meeting Notes",
parent_folder_id="folder123"
)
mcp__gdrive__docs_downloadDownload Docs as markdown with footnote conversion.
Parameters:
file_id (string, required): Google Doc file IDlocal_path (string, required): Output pathexport_format (string, optional): Export format (markdown, pdf, docx)mcp__gdrive__docs_download(
file_id="doc123",
local_path="/tmp/document.md",
export_format="markdown"
)
mcp__gdrive__docs_apply_text_diffUpdate document content remotely without downloading.
Parameters:
file_id (string, required): Google Doc file IDnew_content (string, required): New text contentpreserve_formatting (boolean, optional): Keep formatting (default: true)mcp__gdrive__docs_apply_text_diff(
file_id="doc123",
new_content="Updated document text...",
preserve_formatting=True
)
mcp__gdrive__docs_find_replaceFind and replace text with case-sensitive/insensitive matching.
Parameters:
file_id (string, required): Google Doc file IDfind_text (string, required): Text to findreplace_text (string, required): Replacement textmatch_case (boolean, optional): Case-sensitive (default: false)tab_id (string, optional): Specific tab ID# Case-insensitive replacement
mcp__gdrive__docs_find_replace(
file_id="doc123",
find_text="TODO",
replace_text="DONE"
)
# Case-sensitive replacement
mcp__gdrive__docs_find_replace(
file_id="doc123",
find_text="Error",
replace_text="Warning",
match_case=True
)
mcp__gdrive__docs_comments_listList all comments on a document.
Parameters:
file_id (string, required): File IDinclude_deleted (boolean, optional): Include deleted commentspage_size (number, optional): Results per page (1-100)page_token (string, optional): Pagination tokenmcp__gdrive__docs_comments_list(
file_id="doc123",
page_size=50
)
mcp__gdrive__docs_comments_getGet specific comment details.
Parameters:
file_id (string, required): File IDcomment_id (string, required): Comment IDinclude_deleted (boolean, optional): Include deleted repliesmcp__gdrive__docs_comments_get(
file_id="doc123",
comment_id="comment456"
)
mcp__gdrive__docs_comments_createAdd new comments to documents.
Parameters:
file_id (string, required): File IDcontent (string, required): Comment textanchor (string, optional): Anchor region for specific text# General comment
mcp__gdrive__docs_comments_create(
file_id="doc123",
content="Please review this section"
)
mcp__gdrive__docs_comments_replyReply to existing comments.
Parameters:
file_id (string, required): File IDcomment_id (string, required): Comment IDcontent (string, required): Reply textaction (string, optional): "resolve" or "reopen"# Reply and resolve
mcp__gdrive__docs_comments_reply(
file_id="doc123",
comment_id="comment456",
content="Fixed, thanks!",
action="resolve"
)
mcp__gdrive__docs_comments_resolveMark comment as resolved.
Parameters:
file_id (string, required): File IDcomment_id (string, required): Comment IDmcp__gdrive__docs_comments_resolve(
file_id="doc123",
comment_id="comment456"
)
mcp__gdrive__sheets_createCreate sheets with initial headers and data.
Parameters:
name (string, required): Spreadsheet nameparent_folder_id (string, optional): Parent folder IDheaders (array, optional): Column headersdata (2D array, optional): Initial data rowsmcp__gdrive__sheets_create(
name="Customer Database",
headers=["Name", "Email", "Status"],
data=[
["John Doe", "[email protected]", "Active"],
["Jane Smith", "[email protected]", "Pending"]
]
)
mcp__gdrive__sheets_updateModify specific cells using A1 notation with formula support.
Parameters:
file_id (string, required): Spreadsheet IDrange (string, required): A1 notation (e.g., "Sheet1!A1:C3")values (2D array, required): Cell valuesinput_option (string, optional): "RAW" or "USER_ENTERED" (default)# Update with formulas
mcp__gdrive__sheets_update(
file_id="sheet123",
range="A1:B2",
values=[
["Product", "Price"],
["Widget", "=SUM(B3:B10)"]
],
input_option="USER_ENTERED"
)
mcp__gdrive__sheets_appendAppend rows to end of data without range calculation.
Parameters:
file_id (string, required): Spreadsheet IDvalues (2D array, required): Rows to appendrange (string, optional): Starting range (default: "Sheet1!A1")input_option (string, optional): "RAW" or "USER_ENTERED"mcp__gdrive__sheets_append(
file_id="sheet123",
values=[
["New Customer", "[email protected]", "Active"],
["Another Customer", "[email protected]", "Pending"]
]
)
mcp__gdrive__calendar_listList events with time range filtering and privacy controls.
Parameters:
calendar_id (string, optional): Calendar ID (default: "primary")time_min (string, optional): Start time (RFC3339 format)time_max (string, optional): End time (RFC3339 format)max_results (number, optional): Max events (1-2500, default: 50)page_token (string, optional): Pagination tokensingle_events (boolean, optional): Expand recurring events (default: true)include_attendees (boolean, optional): Include attendees (default: false)include_description (boolean, optional): Include description (default: false)include_location (boolean, optional): Include location (default: false)# List this month's events
mcp__gdrive__calendar_list(
time_min="2025-01-01T00:00:00Z",
time_max="2025-01-31T23:59:59Z",
max_results=50
)
mcp__gdrive__calendar_searchSearch events by text query with advanced filters.
Parameters:
q (string, optional): Free-text search querycalendar_id (string, optional): Calendar ID (default: "primary")time_min (string, optional): Start timetime_max (string, optional): End timemax_results (number, optional): Max results (1-2500)mcp__gdrive__calendar_search(
q="team meeting",
time_min="2025-01-01T00:00:00Z",
max_results=10
)
mcp__gdrive__calendar_createCreate events with recurrence support.
Parameters:
summary (string, required): Event titlestart (string, required): Start time (RFC3339)end (string, required): End time (RFC3339)calendar_id (string, optional): Calendar IDdescription (string, optional): Event descriptionlocation (string, optional): Event locationrecurrence (object, optional): Recurrence pattern# Create single event
mcp__gdrive__calendar_create(
summary="Sprint Planning",
start="2025-11-10T14:00:00Z",
end="2025-11-10T15:00:00Z"
)
# Create recurring event
mcp__gdrive__calendar_create(
summary="Daily Standup",
start="2025-11-10T09:00:00Z",
end="2025-11-10T09:15:00Z",
recurrence={"frequency": "daily", "count": 30}
)
mcp__gdrive__calendar_updateModify existing calendar events.
Parameters:
event_id (string, required): Event IDcalendar_id (string, optional): Calendar IDsummary (string, optional): New titlestart (string, optional): New start timeend (string, optional): New end timedescription (string, optional): New descriptionmcp__gdrive__calendar_update(
event_id="event123",
summary="Updated Meeting Title",
start="2025-11-10T15:00:00Z"
)
mcp__gdrive__calendar_deleteRemove events from calendar.
Parameters:
event_id (string, required): Event IDcalendar_id (string, optional): Calendar IDmcp__gdrive__calendar_delete(event_id="event123")
mcp__gdrive__calendar_update_remindersModify event reminder settings.
Parameters:
event_id (string, required): Event IDcalendar_id (string, optional): Calendar IDuse_default (boolean, required): Use calendar defaultsoverrides (array, optional): Custom reminders (method, minutes)send_updates (string, optional): "none", "all", "externalOnly"# Disable all reminders
mcp__gdrive__calendar_update_reminders(
event_id="event123",
use_default=False,
overrides=[]
)
# Set custom reminders
mcp__gdrive__calendar_update_reminders(
event_id="event123",
use_default=False,
overrides=[
{"method": "popup", "minutes": 10},
{"method": "email", "minutes": 60}
]
)
mcp__gdrive__gmail_searchSearch messages with advanced query syntax.
Parameters:
query (string, required): Gmail search querymax_results (number, optional): Max messages to return# Search by sender and subject
mcp__gdrive__gmail_search(
query="from:[email protected] subject:urgent",
max_results=10
)
# Search for attachments
mcp__gdrive__gmail_search(
query="has:attachment after:2025/01/01"
)
mcp__gdrive__gmail_getGet full message content with headers.
Parameters:
message_id (string, required): Gmail message IDmcp__gdrive__gmail_get(message_id="msg123")
Returns: Complete message with headers, body, attachments metadata
mcp__gdrive__gmail_threadGet entire conversation thread.
Parameters:
thread_id (string, required): Gmail thread IDmcp__gdrive__gmail_thread(thread_id="thread123")
mcp__gdrive__gmail_sendSend new messages with attachments.
Parameters:
to (string, required): Recipient email(s)subject (string, required): Email subjectbody (string, required): Message bodycc (string, optional): CC recipientsbcc (string, optional): BCC recipientsattachments (array, optional): File paths to attachmcp__gdrive__gmail_send(
to="[email protected]",
subject="Project Update",
body="Please find the attached report.",
attachments=["/tmp/report.pdf"]
)
mcp__gdrive__gmail_draftCreate draft messages.
Parameters:
to (string, required): Recipient emailsubject (string, required): Email subjectbody (string, required): Message bodymcp__gdrive__gmail_draft(
to="[email protected]",
subject="Draft: Review Request",
body="Please review this document..."
)
mcp__gdrive__gmail_send_draftSend existing drafts.
Parameters:
draft_id (string, required): Draft IDmcp__gdrive__gmail_send_draft(draft_id="draft123")
mcp__gdrive__gmail_list_labelsList all Gmail labels.
# No parameters required
mcp__gdrive__gmail_list_labels()
mcp__gdrive__gmail_labelAdd/remove labels on messages.
Parameters:
message_id (string, required): Message IDadd_labels (array, optional): Labels to addremove_labels (array, optional): Labels to removemcp__gdrive__gmail_label(
message_id="msg123",
add_labels=["IMPORTANT"],
remove_labels=["INBOX"]
)
mcp__gdrive__gmail_archiveArchive messages (remove from inbox).
Parameters:
message_id (string, required): Message IDmcp__gdrive__gmail_archive(message_id="msg123")
mcp__gdrive__gmail_starStar/unstar messages.
Parameters:
message_id (string, required): Message IDunstar (boolean, optional): Unstar message (default: false)# Star message
mcp__gdrive__gmail_star(message_id="msg123")
# Unstar message
mcp__gdrive__gmail_star(message_id="msg123", unstar=True)
mcp__gdrive__gmail_trashMove messages to trash.
Parameters:
message_id (string, required): Message IDmcp__gdrive__gmail_trash(message_id="msg123")
mcp__gdrive__gmail_deletePermanently delete messages.
Parameters:
message_id (string, required): Message IDmcp__gdrive__gmail_delete(message_id="msg123")
mcp__gdrive__gmail_download_attachmentDownload message attachments.
Parameters:
message_id (string, required): Message IDattachment_id (string, required): Attachment IDoutput_path (string, required): Local output pathmcp__gdrive__gmail_download_attachment(
message_id="msg123",
attachment_id="attach456",
output_path="/tmp/document.pdf"
)
mcp__gdrive__tasks_list_listsList all task lists.
# No parameters required
mcp__gdrive__tasks_list_lists()
mcp__gdrive__tasks_get_listGet specific task list details.
Parameters:
task_list_id (string, required): Task list IDmcp__gdrive__tasks_get_list(task_list_id="list123")
mcp__gdrive__tasks_listList tasks in a task list.
Parameters:
task_list_id (string, required): Task list IDshow_completed (boolean, optional): Include completed tasksshow_deleted (boolean, optional): Include deleted tasksshow_hidden (boolean, optional): Include hidden tasksmcp__gdrive__tasks_list(
task_list_id="list123",
show_completed=True
)
mcp__gdrive__tasks_getGet specific task details.
Parameters:
task_list_id (string, required): Task list IDtask_id (string, required): Task IDmcp__gdrive__tasks_get(
task_list_id="list123",
task_id="task456"
)
mcp__gdrive__tasks_create_listCreate new task lists.
Parameters:
title (string, required): Task list titlemcp__gdrive__tasks_create_list(title="Q1 Goals")
mcp__gdrive__tasks_createCreate new tasks with due dates.
Parameters:
task_list_id (string, required): Task list IDtitle (string, required): Task titlenotes (string, optional): Task notesdue (string, optional): Due date (RFC3339)parent (string, optional): Parent task IDmcp__gdrive__tasks_create(
task_list_id="list123",
title="Review PR #42",
due="2025-11-10T17:00:00Z",
notes="High priority"
)
mcp__gdrive__tasks_updateModify existing tasks.
Parameters:
task_list_id (string, required): Task list IDtask_id (string, required): Task IDtitle (string, optional): New titlenotes (string, optional): New notesdue (string, optional): New due datestatus (string, optional): "needsAction" or "completed"mcp__gdrive__tasks_update(
task_list_id="list123",
task_id="task456",
title="Updated Task Title",
status="completed"
)
mcp__gdrive__tasks_completeMark tasks as completed.
Parameters:
task_list_id (string, required): Task list IDtask_id (string, required): Task IDmcp__gdrive__tasks_complete(
task_list_id="list123",
task_id="task456"
)
mcp__gdrive__tasks_deleteDelete tasks.
Parameters:
task_list_id (string, required): Task list IDtask_id (string, required): Task IDmcp__gdrive__tasks_delete(
task_list_id="list123",
task_id="task456"
)
mcp__gdrive__tasks_clear_completedClear all completed tasks from a list.
Parameters:
task_list_id (string, required): Task list IDmcp__gdrive__tasks_clear_completed(task_list_id="list123")
mcp__gdrive__parse_xlsxParse Excel (.xlsx) file contents.
Parameters:
file_id (string, required): Google Drive file ID of .xlsx filemcp__gdrive__parse_xlsx(file_id="spreadsheet123")
Returns: Structured data from Excel file (sheets, rows, columns)
mcp__gdrive__write_xlsxCreate XLSX file from JSON workbook structure.
Parameters:
workbook (object, required): Workbook structure with sheets arrayfile_path (string, required): Absolute path where XLSX should be createdmcp__gdrive__write_xlsx(
workbook={
"sheets": [
{
"name": "Q1 Budget",
"data": [
["Category", "Amount"],
["Salaries", 150000],
["Marketing", 75000]
],
"formulas": {
"B4": "=SUM(B2:B3)"
}
}
]
},
file_path="/tmp/output.xlsx"
)
# Check authentication status
gspace auth check
# Login (interactive)
gspace auth login
# List files
gspace drive files ls
gspace drive files ls --owner [email protected] --limit 20
# Download files
gspace drive files download FILE_ID /tmp/document.pdf
gspace drive files download FILE_ID /tmp/doc.md --export markdown
# Upload files
gspace drive files upload /path/to/file "File Name"
gspace drive files upload data.csv "Spreadsheet" --convert
# Copy, rename, delete
gspace drive files copy FILE_ID --name "Copy of Document"
gspace drive files rename FILE_ID "New Name"
gspace drive files delete FILE_ID
# Get metadata
gspace drive files metadata FILE_ID
# Create folder
gspace drive folders create "Project Documents"
# Move file to folder
gspace drive folders move FILE_ID FOLDER_ID
# Grant permission
gspace permissions grant FILE_ID --type user --role writer --email [email protected]
gspace permissions grant FILE_ID --type domain --role reader --domain current
# List permissions
gspace permissions list FILE_ID
# Update permission
gspace permissions update FILE_ID PERMISSION_ID --role commenter
# Revoke permission
gspace permissions revoke FILE_ID PERMISSION_ID
# Create doc from markdown
gspace docs create /path/to/notes.md "Document Title"
# Download doc
gspace docs download DOC_ID /tmp/output.md --export markdown
# Find and replace
gspace docs find-replace DOC_ID "old text" "new text"
gspace docs find-replace DOC_ID "Error" "Warning" --match-case
# Comments
gspace docs comments list DOC_ID
gspace docs comments create DOC_ID "Great work!"
gspace docs comments reply DOC_ID COMMENT_ID "Thanks!"
gspace docs comments resolve DOC_ID COMMENT_ID
# Create sheet
gspace sheets create "Sales Data" --headers "Product,Price,Quantity"
# Update cells
gspace sheets update SHEET_ID --range "A1:B2" --values '[["Name","Value"],["Item",100]]'
# Append rows
gspace sheets append SHEET_ID --values '[["New Row 1","Value 1"]]'
# List events
gspace calendar list --time-min 2025-01-01T00:00:00Z
gspace calendar today
gspace calendar tomorrow
# Search events
gspace calendar search --query "team meeting"
# Create event
gspace calendar create "Sprint Planning" --start "2025-11-10T14:00:00Z" --end "2025-11-10T15:00:00Z"
# Update/delete events
gspace calendar update EVENT_ID --summary "New Title"
gspace calendar delete EVENT_ID
# Update reminders
gspace calendar update-reminders EVENT_ID --disable
# Search emails
gspace gmail search --query "from:[email protected] subject:urgent"
# Get message/thread
gspace gmail get MESSAGE_ID
gspace gmail thread THREAD_ID
# Send email
gspace gmail send --to [email protected] --subject "Hello" --body "Message"
gspace gmail send --to [email protected] --subject "Report" --attach report.pdf
# Draft management
gspace gmail draft --to [email protected] --subject "Review"
gspace gmail send-draft DRAFT_ID
# Message management
gspace gmail archive MESSAGE_ID
gspace gmail star MESSAGE_ID
gspace gmail trash MESSAGE_ID
gspace gmail delete MESSAGE_ID
gspace gmail label MESSAGE_ID --add IMPORTANT --remove INBOX
# Labels
gspace gmail list-labels
# Download attachment
gspace gmail download-attachment MESSAGE_ID ATTACHMENT_ID /tmp/file.pdf
# List task lists
gspace tasks list-lists
# List tasks
gspace tasks list TASK_LIST_ID
gspace tasks list TASK_LIST_ID --show-completed
# Create task
gspace tasks create TASK_LIST_ID "Review PR" --due "2025-11-10T17:00:00Z"
# Update/complete/delete task
gspace tasks update TASK_LIST_ID TASK_ID --title "Updated Title"
gspace tasks complete TASK_LIST_ID TASK_ID
gspace tasks delete TASK_LIST_ID TASK_ID
# Clear completed
gspace tasks clear-completed TASK_LIST_ID
# 1. Search for documents
files = mcp__gdrive__drive_files_list(
query="Q4 report",
type="application/vnd.google-apps.document",
limit=10
)
# 2. Download as markdown
mcp__gdrive__drive_files_download(
file_id=files[0].id,
local_path="/tmp/report.md",
export_format="markdown"
)
# 1. Search for emails with actionable items
messages = mcp__gdrive__gmail_search(
query="subject:TODO is:unread",
max_results=20
)
# 2. Create tasks from emails
for message in messages:
email = mcp__gdrive__gmail_get(message_id=message.id)
# Create task
mcp__gdrive__tasks_create(
task_list_id="default",
title=f"Follow up: {email.subject}",
notes=email.snippet
)
# Archive email
mcp__gdrive__gmail_archive(message_id=message.id)
# 1. Search for "do not block" events
events = mcp__gdrive__calendar_search(
q="do not block",
time_min="2025-01-01T00:00:00Z"
)
# 2. Disable reminders for each event
for event in events:
mcp__gdrive__calendar_update_reminders(
event_id=event.id,
use_default=False,
overrides=[]
)
# Share all PDFs in folder with team
gspace drive files ls --folder-id FOLDER_ID --type application/pdf --json | \
jq -r '.[].id' | \
while read file_id; do
gspace permissions grant "$file_id" --type domain --role reader --domain current
done
# Download all attachments from specific sender
gspace gmail search --query "from:[email protected] has:attachment" --json | \
jq -r '.[].id' | \
while read msg_id; do
gspace gmail get "$msg_id" --json | \
jq -r '.attachments[].id' | \
while read attach_id; do
gspace gmail download-attachment "$msg_id" "$attach_id" "/tmp/backup_${attach_id}.pdf"
done
done
*_check_auth tools before operationslimit or max_results to avoid large responsespage_token for large result sets--json flag with jq for processingGOOGLE_CLOUD_PROJECT for quota managementname contains 'text' - Search by filenamefullText contains 'text' - Search file contentsmimeType = 'application/pdf' - Filter by file type'folder-id' in parents - Files in specific foldertrashed = false - Exclude trashed filesmodifiedTime > '2025-01-01T00:00:00' - Modified after dateCommon MIME types:
application/vnd.google-apps.documentapplication/vnd.google-apps.spreadsheetapplication/vnd.google-apps.presentationapplication/pdffrom:[email protected] - From specific senderto:[email protected] - To specific recipientsubject:keyword - Subject contains keywordhas:attachment - Has attachmentsfilename:pdf - Specific attachment typeafter:2025/01/01 - Date filtersbefore:2025/12/31 - Date filtersis:unread - Unread messagesis:starred - Starred messageslabel:IMPORTANT - Specific labelAuthentication Errors:
# Check auth status
mcp__gdrive__drive_check_auth()
File Not Found:
# Verify file exists
try:
metadata = mcp__gdrive__drive_files_metadata(file_id="abc123")
except:
# Handle missing file
pass
Permission Denied:
# Re-authenticate with proper scopes
gcloud auth login --enable-gdrive-access
Authentication:
drive_check_auth, gmail_check_auth, calendar_check_authDrive Files:
drive_files_list, drive_files_download, drive_files_uploaddrive_files_copy, drive_files_rename, drive_files_deletedrive_files_metadata, drive_files_validate_markdown, drive_files_list_tabsDrive Folders:
drive_folders_create, drive_folders_movePermissions:
permissions_grant, permissions_list, permissions_update, permissions_revokeDocs:
docs_create, docs_download, docs_apply_text_diff, docs_find_replaceDocs Comments:
docs_comments_list, docs_comments_get, docs_comments_createdocs_comments_reply, docs_comments_resolveSheets:
sheets_create, sheets_update, sheets_appendCalendar:
calendar_list, calendar_search, calendar_createcalendar_update, calendar_delete, calendar_update_remindersGmail:
gmail_search, gmail_get, gmail_threadgmail_send, gmail_draft, gmail_send_draftgmail_list_labels, gmail_label, gmail_archive, gmail_stargmail_trash, gmail_delete, gmail_download_attachmentTasks:
tasks_list_lists, tasks_get_list, tasks_list, tasks_gettasks_create_list, tasks_create, tasks_updatetasks_complete, tasks_delete, tasks_clear_completedXLSX:
parse_xlsx, write_xlsxTotal MCP Tools: 40+ comprehensive Google Workspace operations
Use MCP tools for:
Use CLI for:
Key advantages:
data-ai
Delegate research and context-gathering tasks to a sub-agent to protect the primary context window. Use when the user asks to "research X", "look into X", "find out about X", "gather context on X", or any investigative framing where answering requires 2+ searches or multiple sources. Also use proactively before starting substantive work when prior context is unknown. Never run research inline — always delegate.
documentation
--- name: qmd-math description: Math notation conventions for Quarto/EPQ documents rendered via lualatex. Use when: writing or adding a formula, equation, or mathematical expression to a .qmd file; asked about display math, inline math, or LaTeX notation in a QMD/Quarto context; defining a where-clause or variable definitions for an equation; converting prose variable descriptions into structured math notation; fixing math that renders badly in a PDF; using \lvert, \begin{aligned}, \tfrac, \text
development
Trim a prose document (README, design doc, blog post, notes) for readability by cutting redundancy, filler, and dead weight in the author's own words. Invoke with /trim [file path], or /trim alone to be prompted for a file. Not for source code, data files, or summarization.
business
Query and analyze Josh Lane's org headcount from the staffing DuckDB at ~/workspace/areas/staffing/staffing.duckdb. Use when asked about headcount counts, org structure, direct reports, team breakdown, hiring/attrition trends, international employees, salary/pay grade distribution, offboarding lag, or any question about people in Josh's org. Triggers on questions about how many people, who reports to whom, headcount by team/country/level, who joined or left, org size, staffing, headcount trend.