Google Workspace MCP server
Prebuilt SnapLogic agentic-tool pipelines that let an LLM read from and act on Google Workspace, callable as MCP tools via Pipeline Execute. Published in the SnapLogic pattern catalog.
Overview
This tool pack gives an agent access to a user's Gmail mailbox and Google Calendar, covering mail search, reading, sending, and label management, as well as event creation, updates, deletion, and free/busy checking. Each tool operates with the minimum permissions needed for that action.
For setup instructions, see SnapLogic MCP Server quickstart.
Example Prompts
- Open that email from Bob and tell me what he's asking for
- Read message 18abc123def and summarise it
- What were the exact headers on that message — who was it actually sent to?
- Pull the full body of the last email in that search
- Star that email from Bob and mark it as read
- Archive this message — take it out of my inbox
- Mark message 18abc123def as unread again
- Flag that invoice email as important
- Find unread emails from my boss about the quarterly review
- Search my inbox for messages with attachments from the finance team this week
Tools
| Tool Name | Functions |
|---|---|
| GmailGetMessage | Read a single Gmail message by id, returning headers, snippet, body and labels. |
| GmailModifyLabels | Add and remove labels on a Gmail message (star, mark read, archive, file). |
| GmailSearch | Search a Gmail mailbox with Gmail query syntax and return matching message references. |
| GmailSend | Send a plain-text email from the user's Gmail address. |
| GoogleCalendarCreateEvent | Create a Google Calendar event with attendees and description. |
| GoogleCalendarDeleteEvent | Delete a Google Calendar event by id. |
| GoogleCalendarFreeBusy | Check busy blocks for one or more people over a time window. |
| GoogleCalendarListEvents | List calendar events in a time window, ordered by start time. |
| GoogleCalendarUpdateEvent | Patch an existing calendar event: retime it, retitle it, or change attendees. |
| GoogleWorkspaceAuth | Google Workspace Auth |
Set up the MCP Server tools
- Download google-workspace_tools.zip.
- In SnapLogic Designer, open the target project space (or create one), then choose Import Project / Import Pipelines and select the downloaded google-workspace_tools.zip. Designer unpacks each pipeline into the project.
- Attach the required account to the connectivity snaps (see Connection Setup).
- Expose the project as an MCP server — each pipeline becomes a tool named after its label. New to this? Start with the MCP quickstart, then use the MCP Server Pipeline Builder to generate the server from the imported pipelines.
Configure account
Attach an API Suite account (OAuth 2.0 or Bearer token) to the HTTP Client snap in Designer after import.
These pipelines ship without credentials by design — attach a valid account in Designer before the tools will execute.
See the SnapLogic account documentation for this connector: API Suite Account Configuration.
GmailGetMessage
Retrieves a single Gmail message by ID, returning the headers, body, snippet, and labels. Use it after GmailSearch when the user wants the actual content of a specific message.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Address of the mailbox that owns the message. |
| message_id* | string | — | Gmail message id, as returned by GmailSearch. |
| format | string | full |
Gmail payload format: full, metadata, minimal or raw (default full). |
* Required parameter.
Try asking:
- Open that email from Bob and tell me what he's asking for
- Read message 18abc123def and summarise it
- What were the exact headers on that message — who was it actually sent to?
- Pull the full body of the last email in that search
GmailModifyLabels
Adds and removes labels on a Gmail message, letting you star, mark as read or unread, archive, or file it into a custom folder. Use it whenever a user asks to organize or flag an email.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Address of the mailbox that owns the message. |
| message_id* | string | — | Gmail message id to relabel. |
| add_labels | string | — | Comma-separated label ids to add, e.g. STARRED,IMPORTANT. |
| remove_labels | string | — | Comma-separated label ids to remove, e.g. UNREAD,INBOX. |
* Required parameter.
Try asking:
- Star that email from Bob and mark it as read
- Archive this message — take it out of my inbox
- Mark message 18abc123def as unread again
- Flag that invoice email as important
GmailSearch
Searches a Gmail mailbox using Gmail query syntax and returns matching message IDs. Pair it with GmailGetMessage to read the content of a found message.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Address of the mailbox to search; the access token is minted for this user. |
| query* | string | — | Gmail search expression, e.g. from:boss subject:urgent is:unread. |
| max_results | integer | 10 |
Maximum number of messages to return (default 10). |
* Required parameter.
Try asking:
- Find unread emails from my boss about the quarterly review
- Search my inbox for messages with attachments from the finance team this week
- Show me the last 5 emails from [email protected]
- Do I have anything unread with 'urgent' in the subject?
GmailSend
Sends a plain-text email from the user's Gmail address to a single recipient. It supports text-only messages; HTML, attachments, CC, and BCC are not available.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Address the message is sent from; also the mailbox the token is minted for. |
| to* | string | — | Recipient address. |
| subject* | string | — | Subject line. |
| body* | string | — | Plain-text message body. |
* Required parameter.
Try asking:
- Email [email protected] and ask if he can meet at 2pm tomorrow
- Send Alice a note saying the report is ready for review
- Reply to the team with subject 'Standup moved' and tell them it's now at 10am
- Send a quick thank-you email to the vendor contact
GoogleCalendarCreateEvent
Creates a new event on a Google Calendar with a title, time, optional description, and attendee list. Use it after GoogleCalendarFreeBusy has confirmed everyone is available.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Calendar owner and organiser of the event. |
| summary* | string | — | Event title. |
| start_time* | string | — | Event start as an RFC-3339 timestamp. |
| end_time* | string | — | Event end as an RFC-3339 timestamp. |
| attendees | string | — | Comma-separated attendee email addresses to invite. |
| description | string | — | Longer event description or agenda. |
| calendar_id | string | primary |
Calendar to create the event on; defaults to primary. |
* Required parameter.
Try asking:
- Book a 30-minute standup with Bob and Alice tomorrow at 9am
- Put 'Quarterly review prep' on my calendar Thursday 2-3pm
- Schedule a customer call on Friday morning and invite the account team
- Create a one-hour focus block on my calendar every afternoon this week
GoogleCalendarDeleteEvent
Removes an event from a Google Calendar by its ID. Use it when the user explicitly cancels a meeting, removes a duplicate booking, or clears a placeholder hold.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Calendar owner. |
| event_id* | string | — | Id of the event to delete. |
| calendar_id | string | primary |
Calendar holding the event; defaults to primary. |
* Required parameter.
Try asking:
- Cancel tomorrow's standup
- Delete the duplicate meeting I created on Friday
- Remove that placeholder hold from my calendar next Tuesday
GoogleCalendarFreeBusy
Checks the busy intervals for one or more people over a time window, returning blocked periods without event details. Use it to find a shared opening before creating a calendar event.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | User the query runs as; the access token is minted for this address. |
| time_min* | string | — | Start of the window as an RFC-3339 timestamp. |
| time_max* | string | — | End of the window as an RFC-3339 timestamp. |
| check_users* | string | — | Comma-separated calendar addresses whose busy blocks should be returned. |
* Required parameter.
Try asking:
- When are Bob and Alice both free on Thursday?
- Check if the whole team is available tomorrow between 2 and 5pm
- Find a common gap for me, Jane and the sales lead next week
- Is Bob busy at 9am on Monday?
GoogleCalendarListEvents
Lists calendar events within a time window, expanding recurring events into individual occurrences, ordered by start time. Use it to answer schedule questions and to retrieve event IDs before updating or deleting events.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Calendar owner; the access token is minted for this user. |
| time_min* | string | — | Start of the window as an RFC-3339 timestamp, e.g. 2026-05-10T00:00:00Z. |
| time_max* | string | — | End of the window as an RFC-3339 timestamp. |
| max_results | integer | 50 |
Maximum number of events to return (default 50). |
| calendar_id | string | primary |
Calendar to read; defaults to primary. |
* Required parameter.
Try asking:
- What's on my calendar next week?
- List my meetings between Monday and Wednesday
- Show me everything on the team-events calendar for this month
- What are my first 10 meetings after tomorrow morning?
GoogleCalendarUpdateEvent
Updates an existing calendar event by changing only the fields you supply, such as the title, time, description, or attendees, leaving everything else intact. Use it to reschedule, retitle, or add attendees to an event without rewriting the whole entry.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email* | string | — | Calendar owner. |
| event_id* | string | — | Id of the event to update, as returned by GoogleCalendarListEvents or CreateEvent. |
| summary | string | — | New event title; omit to leave unchanged. |
| start_time | string | — | New start as an RFC-3339 timestamp; supply end_time with it. |
| end_time | string | — | New end as an RFC-3339 timestamp, written alongside start_time. |
| attendees | string | — | Comma-separated attendee addresses replacing the invitee list. |
| description | string | — | New event description. |
| calendar_id | string | primary |
Calendar holding the event; defaults to primary. |
* Required parameter.
Try asking:
- Move tomorrow's standup to 10am
- Add Alice to the Thursday customer call
- Rename that meeting to 'Q3 pipeline review' and add an agenda in the description
- Push the design review out by an hour
GoogleWorkspaceAuth
Generates a short-lived Google OAuth access token for the specified user and scopes. This is an internal authentication step used by the other tools in this pack.
| Parameter | Type | Default | Description |
|---|---|---|---|
| user_email | string | [email protected] |
— |
| scopes | string | https://www.googleapis.com/auth/gmail.readonly |
— |