google-workspace-unlimited
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Logging level (DEBUG, INFO, WARNING, ERROR) | INFO |
| QDRANT_KEY | No | Qdrant API key (use NONE for no auth) | NONE |
| QDRANT_URL | No | Qdrant vector database URL | http://localhost:6333 |
| SERVER_HOST | No | Server bind address | localhost |
| SERVER_PORT | No | Server port | 8002 |
| ENABLE_HTTPS | No | Enable HTTPS/SSL | false |
| SSL_KEY_FILE | No | Path to SSL private key (Required if ENABLE_HTTPS is true) | |
| FASTMCP_CLOUD | No | Enable cloud deployment mode | false |
| MCP_TRANSPORT | No | Communication protocol (stdio or http). Glama's mcp-proxy expects stdio. | stdio |
| MINIMAL_TOOLS | No | Skip heavy module-wrapper indexing at startup (818-component email types, card_framework widgets). Set to 'true' for fast cold-start in environments with strict startup timeouts (Glama sandbox, CI smoke tests). | false |
| SSL_CERT_FILE | No | Path to SSL certificate (Required if ENABLE_HTTPS is true) | |
| SAMPLING_TOOLS | No | Enable sampling middleware tools (validation agents). Requires VENICE_INFERENCE_KEY, LITELLM_API_KEY, or ANTHROPIC_API_KEY. | false |
| CREDENTIALS_DIR | No | Directory for stored credentials | ./credentials |
| ENABLE_CODE_MODE | No | Enable Code Mode (sandboxed Python tool-call chaining via the `execute` meta-tool) | false |
| GMAIL_ALLOW_LIST | No | Comma-separated allowed email addresses | |
| GOOGLE_CLIENT_ID | No | OAuth 2.0 client ID from Google Cloud Console | |
| OAUTH_REDIRECT_URI | No | Must match Google Console exactly | http://localhost:8002/oauth2callback |
| QDRANT_AUTO_LAUNCH | No | Automatically launch Qdrant via Docker if not reachable. Set to 'false' in single-container environments where Docker-in-Docker isn't available (Glama sandbox). | true |
| SESSION_SECRET_KEY | No | Secret key for session management | |
| ATTACHMENT_TEMP_DIR | No | Temp directory for outbound attachment downloads (Gmail signed-URL serving) | /tmp/gw-mcp-attachments |
| ENABLE_AUDIT_LOGGING | No | Enable security event tracking | |
| GOOGLE_CLIENT_SECRET | No | OAuth 2.0 client secret from Google Cloud Console | |
| DRIVE_UPLOAD_TEMP_DIR | No | Temp directory for staged client→server uploads (only used when DRIVE_UPLOAD_CLIENT_FS=true) | /tmp/gw-mcp-drive-uploads |
| DRIVE_UPLOAD_CLIENT_FS | No | Treat upload_to_drive 'path' as the client's filesystem and orchestrate client→server→Drive transport via signed PUT URL. Set to 'true' on remote/hosted deployments where client and server are on different machines. | false |
| CREDENTIAL_STORAGE_MODE | No | Credential storage mode (FILE_ENCRYPTED, FILE_PLAINTEXT, MEMORY_ONLY) | FILE_ENCRYPTED |
| SESSION_TIMEOUT_MINUTES | No | Session idle timeout in minutes | 60 |
| DRIVE_UPLOAD_MAX_SIZE_MB | No | Maximum size in MB for staged client→server uploads (only used when DRIVE_UPLOAD_CLIENT_FS=true) | 100 |
| DRIVE_UPLOAD_TTL_SECONDS | No | TTL in seconds for staged client→server upload URLs (one-time-use) | 900 |
| GOOGLE_CLIENT_SECRETS_FILE | No | Alternative: path to OAuth JSON file |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_google_authA | Initiate Google OAuth2 authentication flow for Google services with automatic browser opening (Drive, Gmail, Docs, Sheets, Slides, Calendar, etc.) |
| check_drive_authA | Verify Google Drive authentication status for a specific user account |
| upload_to_driveA | Upload a file to Google Drive. By default |
| health_checkC | Check server health and configuration |
| manage_credentialsC | Manage credential storage and security settings |
| manage_toolsA | List, enable, or disable FastMCP tools at runtime. Supports both global scope (affects all clients) and session scope (affects only current session). Use service_filter to target all tools for a service (e.g., 'gmail', 'chat', 'drive') without needing to know individual tool names. |
| set_privacy_modeA | Toggle per-session PII privacy mode. When enabled, tool responses have sensitive values (emails, names, phone numbers) replaced with [PRIVATE:token_N] tokens. Requires authenticated session (OAuth or per-user API key). |
| verify_paymentA | Verify a blockchain payment to unlock tool access (x402 protocol) |
| search_drive_filesA | Search Google Drive files with easy file type filtering. Use mime_type parameter for simple filtering (PDF, GOOGLE_DOCS, EXCEL, etc.) or query parameter for advanced Google Drive Query Language searches. |
| get_drive_file_contentC | Retrieve the content of a Google Drive file by ID, supporting multiple formats |
| list_drive_itemsB | List files and folders in a specific Google Drive folder with structured output |
| create_drive_fileB | Create a new file in Google Drive from content or URL |
| share_drive_filesB | Share Google Drive files with specific people via email addresses |
| make_drive_files_publicA | Make Google Drive files publicly accessible (anyone with the link can view) |
| manage_drive_filesA | Unified tool for Google Drive file management: move, copy, rename, or delete files |
| search_gmail_messagesA | Search messages in Gmail account using Gmail query syntax with message and thread IDs |
| get_gmail_message_contentA | Retrieve the full content (subject, sender, body) of a specific Gmail message |
| get_gmail_messages_content_batchA | Retrieve content of multiple Gmail messages in a single batch request (up to 100 messages) |
| get_gmail_thread_contentB | Retrieve the complete content of a Gmail conversation thread with all messages |
| download_gmail_attachmentA | Download a specific attachment from a Gmail message. By default returns a temporary signed download URL (15 min, one-time use). Set return_url=false to save to disk, or return_content=true for base64. First use get_gmail_message_content to list attachments. |
| send_gmail_messageB | Send an email using the user's Gmail account with elicitation support for untrusted recipients |
| draft_gmail_messageA | Create a draft email in the user's Gmail account with HTML support and multiple recipients |
| reply_to_gmail_messageB | Send a reply to a specific Gmail message with proper threading and HTML support |
| draft_gmail_replyA | Create a draft reply to a specific Gmail message with proper threading and HTML support |
| forward_gmail_messageB | Forward a Gmail message to specified recipients with HTML formatting preservation and elicitation support |
| draft_gmail_forwardB | Create a draft forward of a Gmail message with HTML formatting preservation |
| compose_dynamic_emailA | Compose responsive HTML emails using DSL notation for block structure. Common patterns: ε[ħ, τ] = hero + text, ε[ħ, τx2, Ƀ] = hero + 2 text blocks + button. DSL structure using symbols. Symbols: ε=EmailSpec, ħ=HeroBlock, τ=TextBlock, Ƀ=ButtonBlock, ɨ=ImageBlock, ¢=ColumnsBlock, ©=Column, Ħ=HeaderBlock, ƒ=FooterBlock, ą=AccordionBlock, ȼ=CarouselBlock. Read skill://mjml-email/ for full reference. |
| list_gmail_labelsA | List all labels in the user's Gmail account with structured output (system and user-created) |
| manage_gmail_labelA | Manage Gmail labels: create, update, or delete labels. Supports single or multiple label operations using lists or JSON strings. |
| modify_gmail_message_labelsB | Add or remove labels from a Gmail message |
| list_gmail_filtersA | List all Gmail filters/rules in the user's account |
| create_gmail_filterA | Create a new Gmail filter/rule with criteria and actions, with optional retroactive application to existing emails. Supports background execution for large mailboxes. |
| get_gmail_filterA | Get details of a specific Gmail filter by ID |
| delete_gmail_filterB | Delete a Gmail filter by ID |
| manage_gmail_allow_listA | Manage the workspace trust list stored in GMAIL_ALLOW_LIST and related People contact labels. Supports 'add', 'remove', 'view' for the Gmail/Chat trust list and 'label_add', 'label_remove' for People contact labels. Trust entries can be single emails, lists, or comma-separated strings; group specs ('group:', 'groupId:') are resolved via the People API. Trusted recipients/targets skip elicitation confirmation for Gmail sending operations today and (in future) selected Chat operations. |
| search_docsC | Search for Google Docs by name using Drive API |
| get_doc_contentC | Get content of a Google Doc or Drive file (like .docx) |
| list_docs_in_folderC | List Google Docs within a specific Drive folder |
| create_docB | Create a new Google Doc or edit an existing one with support for multiple content formats and advanced editing modes. Supports replace_all, insert_at_line, regex_replace, and append modes via edit_config parameter. Accepts plain text, Markdown, HTML, RTF, DOCX, LaTeX formats with automatic detection. Returns structured response with document metadata. |
| create_formA | Create a new Google Form with customizable title, description, and document title. Returns form ID and URLs for editing and responses. |
| add_questions_to_formA | Add multiple interactive questions to an existing Google Form. Supports all question types including text, multiple choice, scales, dates, and file uploads with comprehensive formatting options. |
| get_formA | Retrieve comprehensive details of a Google Form including metadata, all questions with their types and settings, and access URLs. Perfect for form inspection and analysis. |
| set_form_publish_stateB | Control whether a Google Form is accepting responses. Configures basic form settings and provides guidance for full response control via the Forms UI. |
| publish_form_publiclyB | Make a Google Form publicly accessible without sign-in requirements and share with specific users. Uses both Forms and Drive APIs for comprehensive permission management. |
| get_form_responseA | Retrieve a specific response from a Google Form with detailed answer mappings to questions. Perfect for analyzing individual submissions in detail. |
| list_form_responsesA | Retrieve all responses from a Google Form with efficient pagination support and structured answer mapping. Returns comprehensive response data ready for analysis. |
| update_form_questionsA | Modify existing questions in a Google Form including titles, descriptions, required status, and other settings. Uses efficient batch operations for multiple updates. |
| create_presentationA | Create a new Google Slides presentation |
| get_presentation_infoB | Get details about a Google Slides presentation including title, slides count, and metadata |
| add_slideA | Add a new slide to an existing Google Slides presentation |
| update_slide_contentA | Update content on a specific slide using batch update operations |
| export_and_download_presentationA | Export a Google Slides presentation to various formats with optional local download |
| list_calendarsA | Retrieves a list of calendars accessible to the authenticated user |
| create_calendarB | Creates a new Google Calendar with specified properties |
| list_eventsA | Retrieves a list of events from a specified Google Calendar within a given time range. By default, looks for events in the next 10 days starting from the current time. |
| create_eventA | Create single or multiple events in Google Calendar. TIMEZONE: Always pass the timezone parameter or include UTC offsets in start_time/end_time (e.g., '2025-03-03T15:00:00-05:00') to avoid times being interpreted incorrectly. Supports both individual event creation (backward compatible) and bulk event creation for efficient batch operations. |
| modify_eventA | Modifies an existing event in Google Calendar. TIMEZONE: Always pass the timezone parameter or include UTC offsets in start_time/end_time to avoid time offset issues. Uses PATCH semantics — only specified fields are changed, unspecified fields (including recurrence rules) are preserved. |
| delete_eventA | Deletes one or more events from Google Calendar. Supports single event ID, comma-separated IDs, JSON array strings, or native list format for batch deletion. |
| bulk_calendar_operationsA | Perform bulk operations on calendar events with filters (date range, title pattern, etc.) |
| move_events_between_calendarsA | Move events from one calendar to another with optional filters |
| get_eventA | Retrieves the details of a single event by its ID from a specified Google Calendar |
| list_spacesA | Lists Google Chat spaces (rooms and direct messages) accessible to the user |
| list_messagesB | Lists messages from a Google Chat space |
| send_messageA | Sends a message to a Google Chat space with full markdown formatting support |
| search_messagesA | Searches for messages in Google Chat spaces by text content |
| manage_spaceC | Unified tool for Google Chat space administration: manage members, create/update/delete spaces |
| send_dynamic_cardA | Send cards to Google Chat using DSL notation for precise structure control. REQUIRED: Use DSL symbols in card_description to define card structure. Common patterns: §[δ] = text card, §[δ, Ƀ[ᵬ×2]] = text + 2 buttons, §[ℊ[ǵ×4]] = grid with 4 items. DSL structure using symbols. Examples: '§[δ, Ƀ[ᵬ×2]]' = Section + text + 2 buttons, 'C_5[C_6×3]' = Carousel with 3 cards. §=Section, δ=DecoratedText, Ƀ=ButtonList, ᵬ=Button, ℊ=Grid, ǵ=GridItem, C_5=Carousel, C_6=CarouselCard, ŋ=NestedWidget. Read skill://gchat-cards/ for full reference. |
| list_spreadsheetsA | List spreadsheets from Google Drive that the user has access to |
| get_spreadsheet_infoA | Get information about a specific spreadsheet including its sheets |
| read_sheet_valuesB | Read values from a specific range in a Google Sheet |
| modify_sheet_valuesA | Modify values in a specific range of a Google Sheet - can write, update, or clear values |
| create_spreadsheetA | Create a new Google Spreadsheet |
| create_sheetA | Create a new sheet within an existing spreadsheet |
| format_sheet_rangeA | Apply comprehensive formatting to a range in Google Sheets with multiple formatting options in a single request - unified formatting tool that replaces format_sheet_cells, update_sheet_borders, add_conditional_formatting, and merge_cells |
| list_photos_albumsA | List photo albums from Google Photos that the user has access to |
| search_photosC | Search for photos in Google Photos using filters |
| list_album_photosB | List all photos from a specific album |
| get_photo_detailsA | Get detailed information about a specific photo |
| create_photos_albumB | Create a new album in Google Photos |
| get_photos_library_infoB | Get information about the user's Google Photos library |
| photos_smart_searchC | Advanced photo search with smart filtering and optimization |
| photos_batch_detailsA | Get detailed information for multiple photos in a single optimized request |
| photos_performance_statsB | Get performance statistics and cache information for Photos API usage |
| photos_optimized_album_syncC | Efficiently sync and analyze album contents with smart caching |
| upload_photosC | Upload one or more photos to Google Photos with batch optimization |
| upload_folder_photosA | Upload all photos from a folder (with optional recursion) to Google Photos |
| list_people_contact_labelsA | List Google People contact groups / labels for the authenticated user, returning resourceName, name, member counts, and groupType. |
| get_people_contact_group_membersA | Resolve a contact group/label name to its member email addresses. Similar to Gmail's autocomplete - type a label name and get all emails in that group. Useful for batch operations: resolve label → get emails → perform actions on those emails. |
| manage_people_contact_labelsA | Manage Google People contact labels (contact groups) for one or more emails. Supports 'label_add' to ensure contacts exist and attach them to a label, and 'label_remove' to detach matching contacts from a label. |
| create_template_macroB | Create and register a new Jinja2 template macro dynamically |
| qdrant_searchA | Search through Qdrant vector database using natural language queries, filters, point IDs, or DSL filter notation. Supports semantic search, service-specific filtering, analytics queries, recommendation-style example search, direct point lookup, and advanced DSL queries. When filter_dsl is provided, routes to the DSL executor for precise filter-based search. Returns structured search results with relevance scores and metadata. Parameterized DSL Grammar: symbol{param1=value1, param2=value2} Values can be:
Key filter symbols (used in 'dsl' param): D_5 = DatetimeRange ʄ = FieldCondition ƒ = Filter F_6 = FilterSelector ℏ = HasIdCondition I_2 = IsEmptyCondition I_0 = IsNullCondition ɱ = MatchAny ṁ = MatchText M_0 = MatchTextAny ☆ = MatchValue ř = Range Advanced query symbols (used in 'query_dsl'/'prefetch_dsl' params): (Types without Unicode symbols use full class names as identifiers) Å = AcornSearchParams C_14 = ContextExamplePair ¢ = ContextPair C_0 = ContextQuery D_6 = DiscoverInput D_2 = DiscoverQuery D_4 = DiscoverRequest D_21 = DiscoverRequestBatch ℱ = Fusion φ = FusionQuery ø = OrderBy ɵ = OrderByQuery ¶ = Prefetch ʔ = QuantizationSearchParams R_12 = RecommendGroupsRequest R_2 = RecommendInput R_4 = RecommendQuery R_5 = RecommendRequest R_18 = RecommendRequestBatch R_10 = RecommendStrategy ♦ = SearchParams Examples: ƒ{must=[ʄ{key="tool_name", match=☆{value="search"}}]} (filter by tool_name), ƒ{must=[ʄ{key="tool_name", match=ɱ{any=["send_dynamic_card", "send_gmail_message"]}}]} (match any of multiple values). |
| fetchA | Retrieve complete document content from Qdrant by point ID. Supports single document fetch or batch fetch with optional client-side ordering by payload key. |
| search_tool_historyA | Advanced search through historical tool responses with support for: ID lookup (id:xxxxx), filtered search (user_email:test@gmail.com), combined filters with semantic search (user_email:test@gmail.com documents for gardening), and natural language queries |
| get_tool_analyticsA | Get comprehensive analytics on tool usage, performance metrics, and patterns. By default returns a concise summary with sample point IDs for fetching specific results - set summary_only=false for detailed data. |
| get_response_detailsA | Retrieve full details and metadata of a specific stored tool response by its unique ID. LEGACY TOOL - Use 'fetch' tool instead for better formatting and structured output. |
| cleanup_qdrant_dataA | Manually trigger cleanup of stale data older than the configured retention period. This removes old tool responses and maintains database performance. The retention period is controlled by the MCP_TOOL_RESPONSES_COLLECTION_CACHE_DAYS environment variable (default: 14 days). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| quick_email_demo | Simple: Zero-config Gmail demo with Jinja2 templates and resource integration |
| structured_tool_showcase | Showcase a specific tool with structured response example (random if tool not specified) |
| structured_response_comparison | Compare multiple tools showing original vs structured response formats |
| structured_interactive_demo | Interactive challenge featuring a random tool with structured responses |
| structured_response_benefits | Comprehensive overview of structured response system benefits and implementation |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| manage_tools_dashboard | Read-only dashboard showing tool enable/disable state |
| latest_data_dashboard | Dashboard for the most recently called list tool |
| Current User Email | Slim 'most recent authenticated email for this session' — returns email + session_id + authenticated flag. For the full profile (credentials, scopes, etc.) use user://current/profile. |
| Current User Identity | Lightweight active-account identity: email, session, and auth provenance. Optimized for client subscriptions — AuthMiddleware fires notifications/resources/updated for this URI when the active Google account changes between tool calls. For credential details use user://current/profile. |
| Current User Profile | Canonical current-user resource. Superset of user://current/email + user://current/identity + prior profile: email, session_id, authenticated, auth_provenance, identity_source, linked_accounts, and nested auth_status (credential validity, scopes, expiry). Subscription target. |
| Current Authentication Session | Detailed information about the current authentication session including token status, expiration times, and granted scopes |
| Active Authentication Sessions | Administrative view of all active authentication sessions with session details, user information, and expiration status for multi-user session management |
| Recent Gmail Messages Cache | Cached list of recent Gmail messages from the last 7 days with sender information, subjects, snippets, and thread IDs - refreshed every 5 minutes for efficient email monitoring |
| Complete Tools Directory | Comprehensive catalog of all available tools organized by category including Drive, Gmail, Calendar, Chat, Forms, Docs, Sheets, and authentication tools with detailed capability descriptions |
| Detailed Tools Collection | Curated list of detailed tools that use automatic resource templating - no user_google_email parameters required, seamless authentication through OAuth session context |
| Gmail Allow List | Get the configured Gmail allow list for send_gmail_message tool - recipients on this list skip elicitation confirmation |
| All Recent Workspace Items | Get recent items from all Google Workspace services (Drive, Docs, Sheets, Slides, Forms, Photos) in a unified view. |
| Available Template Macros | Get all available Jinja2 macros with usage examples. The EnhancedTemplateMiddleware scans middleware/templates/*.j2 files and extracts: - Macro definitions using {% macro name(...) %} - Usage examples from {# MACRO USAGE EXAMPLE: ... #} comments - Template file paths and descriptions Returns comprehensive macro information including: - Macro names and parameters - Template file locations - Ready-to-use usage examples - Discovery timestamps This enables easy discovery and correct usage of available template macros. Example response: { "macros": { "render_gmail_labels_chips": { "name": "render_gmail_labels_chips", "template_file": "email_card.j2", "usage_example": "{{ render_gmail_labels_chips(service://gmail/labels, 'Label summary') }}" } }, "total_count": 5 } This resource is handled by EnhancedTemplateMiddleware. |
| User Email Template | Simple template resource that returns just the user email string - the most basic resource for tools that need only the email address |
| Qdrant Collections List | List all available Qdrant collections with detailed information including point counts, vector statistics, and status |
| Qdrant Tool Response Cache | Get cached tool responses from Qdrant organized by tool name with point metadata including IDs, timestamps, and user emails |
| Qdrant Middleware Status | Check the status of Qdrant middleware integration including client availability, initialization state, and resource handler status |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dipseth/google_workspace_fastmcp2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server