Complete Google Workspace MCP server — Gmail, Calendar, Drive, Docs, Tasks, Sheets, Slides, Forms, and Contacts. Single Go binary with true multi-account support.
→ Full Installation Guide — Get running in under 10 minutes
# Build
go build -o ~/.local/bin/gsuite-mcp
# Authenticate
gsuite-mcp auth personal
# Add to your MCP client config- Multi-account: Switch accounts per-operation with
"account": "work" - Complete coverage: Gmail, Calendar, Drive, Docs, Tasks, Sheets, Slides, Forms, Contacts
- Single binary: No Python, no Node, no runtime dependencies
- MCP native: JSON Schema 2020-12, proper tool descriptions
Comparison with google-workspace MCP
| Feature | google-workspace | gsuite-mcp |
|---|---|---|
| Multi-account | User-level | Per-operation |
| JSON Schema | draft-07 (Claude errors) | 2020-12 |
| Services | Gmail only | Full Workspace |
| Runtime | Python + uv | Single Go binary |
| Batch operations | Limited | Full support |
Full inbox management: search, read, send, reply, archive, trash, labels, filters, drafts, threads, batch operations, vacation responder, send-as aliases, delegation.
Complete calendar control: list events, create/update/delete, recurring events, free/busy queries, Google Meet integration.
File management with shared drive support: search (with friendly file type filter), upload, download, list, create folders, move, copy, trash, delete, share, permissions, shareable links, comments & replies, version history (revisions).
Document creation and editing: create, read, append, insert, replace, delete, formatting (bold, italic, headings), lists, tables, images, headers/footers.
Task management: lists, tasks, subtasks, due dates, completion, reordering.
Spreadsheet operations: read, write, append, batch operations, create, cell formatting, conditional formatting, data validation, charts, pivot tables.
Presentation operations: get presentation metadata and structure, get individual slide details, slide thumbnails, create presentations, batch update (add/modify/delete slides, text, shapes, images).
Form management: get form structure and questions, create forms, batch update (add/update/delete questions, settings), list responses, get individual responses.
Contact management: list, search, create, update, delete, contact groups.
Full tool reference
| Tool | Description |
|---|---|
gmail_search |
Search messages with Gmail query syntax |
gmail_get |
Get single message with full content |
gmail_get_message |
Alias for gmail_get |
gmail_get_messages |
Batch get messages (max 25) |
gmail_get_thread |
Get full conversation thread |
gmail_send |
Send new email |
gmail_reply |
Reply to existing thread |
gmail_draft |
Create draft |
gmail_list_labels |
List all labels with counts |
| Tool | Description |
|---|---|
gmail_modify_message |
Add/remove labels |
gmail_archive |
Remove from inbox |
gmail_trash / gmail_untrash |
Move to/from trash |
gmail_mark_read / gmail_mark_unread |
Mark read status |
gmail_star / gmail_unstar |
Star/unstar |
gmail_spam / gmail_not_spam |
Spam management |
| Tool | Description |
|---|---|
gmail_batch_modify |
Batch label changes |
gmail_batch_archive |
Archive multiple |
gmail_batch_trash |
Trash multiple |
| Tool | Description |
|---|---|
gmail_get_attachment |
Download attachment |
gmail_list_filters / gmail_create_filter / gmail_delete_filter |
Filter management |
gmail_create_label / gmail_update_label / gmail_delete_label |
Label management |
gmail_list_drafts / gmail_get_draft / gmail_update_draft / gmail_delete_draft / gmail_send_draft |
Draft management |
gmail_thread_archive / gmail_thread_trash / gmail_thread_untrash / gmail_modify_thread |
Thread operations |
gmail_get_profile |
Account info |
gmail_get_vacation / gmail_set_vacation |
Vacation responder |
gmail_list_send_as / gmail_get_send_as |
List/get send-as aliases |
gmail_create_send_as / gmail_update_send_as / gmail_delete_send_as |
Manage send-as aliases |
gmail_verify_send_as |
Verify external send-as alias |
gmail_list_delegates / gmail_create_delegate / gmail_delete_delegate |
Delegation management |
| Tool | Description |
|---|---|
calendar_list_events |
List events with filtering (supports event_types filter) |
calendar_get_event |
Get event details (includes conference data) |
calendar_create_event |
Create event (with optional Google Meet) |
calendar_update_event |
Update event |
calendar_delete_event |
Delete event |
calendar_list_calendars |
List available calendars |
calendar_quick_add |
Create from natural language |
calendar_free_busy |
Query availability across calendars |
calendar_list_instances |
List recurring event instances |
calendar_update_instance |
Update single recurrence |
calendar_create_focus_time |
Create Focus Time with auto-decline |
calendar_create_out_of_office |
Create Out of Office with auto-decline |
| Tool | Description |
|---|---|
drive_search |
Search files with query syntax (includes shared drives) |
drive_get |
Get file metadata |
drive_download |
Download file content (text or base64) |
drive_upload |
Upload new file |
drive_list |
List files in folder |
drive_create_folder |
Create folder |
drive_move |
Move file to different folder |
drive_copy |
Copy a file |
drive_trash |
Move file to trash |
drive_delete |
Permanently delete file |
drive_share |
Share file with users |
drive_get_permissions |
Get file permissions |
drive_get_shareable_link |
Get shareable URL with sharing status |
drive_list_comments |
List comments on a file |
drive_get_comment |
Get a specific comment |
drive_create_comment |
Create a comment |
drive_update_comment |
Update a comment |
drive_delete_comment |
Delete a comment |
drive_list_replies |
List replies on a comment |
drive_create_reply |
Reply to a comment |
drive_list_revisions |
List file version history |
drive_get_revision |
Get revision metadata |
drive_download_revision |
Download a specific revision |
| Tool | Description |
|---|---|
docs_create |
Create new document |
docs_get |
Get content as plain text |
docs_get_metadata |
Get title, word count |
docs_append_text |
Append to end |
docs_insert_text |
Insert at position |
docs_replace_text |
Find and replace |
docs_delete_text |
Delete range |
docs_insert_table |
Insert table |
docs_insert_link |
Insert hyperlink |
docs_format_text |
Bold, italic, color, font |
docs_clear_formatting |
Remove formatting |
docs_set_paragraph_style |
Headings, alignment |
docs_create_list / docs_remove_list |
Bullet/numbered lists |
docs_insert_page_break |
Page breaks |
docs_insert_image |
Insert image from URL |
docs_create_header / docs_create_footer |
Headers/footers |
docs_batch_update |
Raw API access |
docs_get_as_markdown |
Get content as markdown |
docs_find_and_replace |
Find and replace text |
docs_export_to_pdf |
Export Doc/Sheet/Slides to PDF |
docs_import_to_google_doc |
Import text/HTML/markdown as Google Doc |
| Tool | Description |
|---|---|
tasks_list_tasklists |
List all task lists |
tasks_list |
List tasks in a list |
tasks_get |
Get task details |
tasks_create |
Create task |
tasks_update |
Update task |
tasks_complete |
Mark complete |
tasks_delete |
Delete task |
tasks_create_tasklist / tasks_update_tasklist / tasks_delete_tasklist |
Task list management |
tasks_move |
Reorder or make subtask |
tasks_clear_completed |
Clear completed |
| Tool | Description |
|---|---|
sheets_get |
Get spreadsheet metadata |
sheets_read |
Read cell range |
sheets_write |
Write to cells |
sheets_append |
Append rows |
sheets_create |
Create spreadsheet |
sheets_batch_read |
Read multiple ranges |
sheets_batch_write |
Write multiple ranges |
sheets_clear |
Clear cell range |
sheets_format_cells |
Background, font, bold, alignment, number format |
sheets_add_conditional_format |
Boolean or gradient formatting rules |
sheets_add_data_validation |
Dropdowns, number constraints, custom formulas |
sheets_create_chart |
Create embedded chart (bar, line, pie, etc.) |
sheets_update_chart |
Update chart title or type |
sheets_delete_chart |
Delete embedded chart |
sheets_create_pivot_table |
Create pivot table for data summarization |
sheets_batch_update |
Raw API access for advanced operations |
| Tool | Description |
|---|---|
contacts_list |
List all contacts |
contacts_get |
Get contact details |
contacts_search |
Search contacts |
contacts_create |
Create contact |
contacts_update |
Update contact |
contacts_delete |
Delete contact |
contacts_list_groups |
List contact groups |
contacts_get_group |
Get group with members |
contacts_create_group / contacts_update_group / contacts_delete_group |
Group management |
contacts_modify_group_members |
Add/remove from group |
| Tool | Description |
|---|---|
slides_get_presentation |
Get presentation metadata, slide list with text previews |
slides_get_page |
Get full details of a single slide (shapes, images, tables, text) |
slides_get_thumbnail |
Get slide thumbnail image URL |
slides_create |
Create new presentation |
slides_batch_update |
Batch update (add/modify/delete slides, text, shapes, images) |
| Tool | Description |
|---|---|
forms_get |
Get form metadata, questions, and structure |
forms_create |
Create new form |
forms_batch_update |
Batch update (add/update/delete questions, settings) |
forms_list_responses |
List all form responses |
forms_get_response |
Get a single form response |
All tools accept an optional account parameter:
{"query": "is:unread", "account": "work"}
{"message_id": "abc123", "account": "personal"}
{"query": "from:amazon"} // uses default accountEmail triage
1. gmail_search({"query": "is:unread", "account": "support"})
2. gmail_get({"message_id": "...", "account": "support"})
3. gmail_reply({"message_id": "...", "body": "Thanks for reaching out..."})
4. gmail_batch_archive({"message_ids": [...]})
Schedule a meeting
calendar_create_event({
"summary": "Team Standup",
"start_time": "2024-02-05T09:00:00-08:00",
"end_time": "2024-02-05T09:30:00-08:00",
"attendees": ["colleague@example.com"],
"add_conferencing": true
})
Create a formatted document
1. docs_create({"title": "Project Report"})
2. docs_append_text({"document_id": "...", "text": "Project Report\n\nIntroduction..."})
3. docs_set_paragraph_style({"document_id": "...", "start_index": 1, "end_index": 15, "named_style_type": "TITLE"})
If you're an AI agent or building integrations, see docs/AGENTS.md for:
- Project architecture and patterns
- Tool registration patterns
- Error handling conventions
- Testing guidelines
These prompts work well with gsuite-mcp:
- "Show my unread emails"
- "What meetings do I have today?"
- "Send an email to X about Y"
- "Create a task to review the PR by Friday"
- "Add a new contact for John Smith"
- "What's on my work calendar this week?" (uses account parameter)
See INSTALLATION.md for full setup instructions.
Config location: ~/.config/gsuite-mcp/
~/.config/gsuite-mcp/
├── client_secret.json # Your OAuth app credentials
├── config.json # Settings (optional — created by `gsuite-mcp init`)
└── credentials/
└── {email}.json # Per-account tokens
The default OAuth callback port is 8100. Override it in config.json:
{ "oauth_port": 9000 }Or via environment variable: GSUITE_MCP_OAUTH_PORT=9000
Restrict which shared drives are accessible via MCP tools. Add drive_access to config.json:
{
"oauth_port": 8100,
"drive_access": {
"allowed": ["Marketing", "Engineering"]
}
}Modes (choose one):
- Allowlist:
"allowed": ["Drive A", "Drive B"]— only these shared drives + My Drive - Blocklist:
"blocked": ["SENSITIVE", "HR"]— everything except these drives
My Drive is always accessible. Setting both allowed and blocked is an error. Drives can be specified by name (case-insensitive) or ID. The filter applies to Drive, Docs, and Sheets tools.
When running as an MCP server, gsuite-mcp starts a persistent HTTP server on the OAuth port so agents and users can trigger re-authentication from a browser:
http://localhost:8100/auth— starts OAuth flow (opens Google consent screen)http://localhost:8100/auth?account=user@gmail.com— pre-selects the Google account
When a tool encounters missing credentials, the error message includes a clickable auth URL. If the port is unavailable, the MCP server continues without the auth endpoint.
go build -o gsuite-mcp
go test ./...
go vet ./...See docs/AGENTS.md for contribution guidelines.
See docs/ROADMAP.md for planned features and development phases.
MIT