Skip to main content
Plugin ID: google-workspace | Auth: OAuth2 (provider id google, the Better Auth social provider) | Scopes: gmail.modify, calendar, drive.readonly
This plugin’s tool paths use service-specific prefixes (gmail.*, calendar.*) rather than the plugin ID google-workspace. This is intentional — tools are namespaced by the Google service they interact with.
Google Cloud APIs must be enabled. The OAuth client’s underlying Google Cloud project needs Gmail API and Google Calendar API enabled in the API Library before live calls succeed; otherwise responses come back as 403: API has not been used in project ... before or it is disabled.
Handlers call the public Google APIs at https://gmail.googleapis.com/gmail/v1/users/me/* and https://www.googleapis.com/calendar/v3/*. gmail.messages.list does a messages.list then a per-message metadata fetch (format=metadata with Subject/From/Date headers). gmail.messages.read fetches format=full, walks the MIME tree for the first text/plain part, and decodes from base64url. gmail.drafts.create builds an RFC-822 message, base64url-encodes the raw payload, and POSTs to users/me/drafts. calendar.events.list uses singleEvents=true and orderBy=startTime, defaulting timeMin to “now”.

Tools

gmail.messages.list

Name: List Gmail Messages Search and list Gmail messages matching a query.
ParameterTypeRequiredDefaultDescription
querystringYesGmail search query (same syntax as Gmail search bar)
limitintegerNo10Max messages to return
Output:
{
  "messages": [
    {
      "id": "msg-001",
      "threadId": "thread-001",
      "subject": "Weekly report",
      "from": "alice@example.com",
      "snippet": "Here is the weekly report...",
      "date": "2025-01-15T12:00:00Z"
    }
  ]
}

gmail.messages.read

Name: Read Gmail Message Read the full content of a Gmail message by ID.
ParameterTypeRequiredDescription
messageIdstringYesGmail message ID
Output:
{
  "id": "msg-001",
  "subject": "Weekly report",
  "from": "alice@example.com",
  "to": "bob@example.com",
  "body": "Here is the weekly report...",
  "date": "2025-01-15T12:00:00Z"
}

gmail.drafts.create

Name: Create Gmail Draft | Destructive: Yes Create a draft email in Gmail. Requires user approval.
ParameterTypeRequiredDescription
tostringYesRecipient email
subjectstringYesEmail subject
bodystringYesEmail body
ccstringNoCC recipient
Output:
{
  "draftId": "draft-001"
}

calendar.events.list

Name: List Calendar Events List upcoming Google Calendar events.
ParameterTypeRequiredDefaultDescription
calendarIdstringNo"primary"Calendar ID
timeMinstringNoISO 8601 start bound
timeMaxstringNoISO 8601 end bound
limitintegerNo10Max events to return
Output:
{
  "events": [
    {
      "id": "event-001",
      "summary": "Team standup",
      "start": "2025-01-15T09:00:00Z",
      "end": "2025-01-15T09:30:00Z",
      "attendees": ["alice@example.com", "bob@example.com"]
    }
  ]
}