CONNECT APP
Build with Google Calendar
Productivity
- OAuth
MCP
Give your agent Google Calendar tools
Every Google Calendar action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Google Calendar account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "google_calendar",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Add Attendees To Event:
const result = await mcp.callTool({
name: "google_calendar-add-attendees-to-event",
arguments: {
calendarId: "Calendar",
eventId: "Event",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "google_calendar",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Add Attendees To Event:
result = await session.call_tool("google_calendar-add-attendees-to-event", {
"calendarId": "Calendar",
"eventId": "Event",
})API PROXY
Call the Google Calendar API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Google Calendar API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://www.googleapis.com/calendar/v3/users/me/settings",
})
// Any allowed Google Calendar endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://www.googleapis.com/calendar/v3/users/me/settings
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vY2FsZW5kYXIvdjMvdXNlcnMvbWUvc2V0dGluZ3M?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Google Calendar actions from your backend
Connect a user's Google Calendar account once, then run Add Attendees To Event on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "google_calendar-add-attendees-to-event",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
google_calendar: { authProvisionId: "apn_xxxxxxx" },
calendarId: "Calendar",
eventId: "Event",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="google_calendar-add-attendees-to-event",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"google_calendar": {"authProvisionId": "apn_xxxxxxx"},
"calendarId": "Calendar",
"eventId": "Event",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "google_calendar-add-attendees-to-event",
"configured_props": {
"google_calendar": { "authProvisionId": "apn_xxxxxxx" },
"calendarId": "Calendar",
"eventId": "Event"
}
}'TOOLS
Google Calendar actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Add Attendees To Event
actionAdd one or more attendees (invitees) to an event that ALREADY EXISTS on a Google Calendar, without recreating it. New attendees are merged into the event's current attendee list — existing attendees are preserved, not replaced. Use this when the user wants to invite additional people to an event they already have; identify the target event witheventIdfirst (e.g. via list-events or get-event). When creating a brand-new event, set its attendees directly in create-event instead of calling this afterward. See the documentationWritev0.0.11 -
Add Quick Event
actionCreate a quick event to the Google Calendar. See the documentationWritev0.1.15 -
Create Event
actionCreate a new event on a Google Calendar — a single or recurring appointment at a specific date/time (optionally with attendees, location, and description). Use this whenever the user wants to add something to their calendar. This creates calendar EVENTS only: it cannot configure calendar settings, working hours, availability, or default preferences, and it cannot create a new calendar. Do not represent any of those requests as an event — creating an event named after the request does not fulfill it. See the documentationWritev1.1.2 -
Delete an Event
actionDelete a single event from a Google Calendar. Deletes only the one event identified byeventId— it does NOT clear a whole day or delete multiple events. When the user asks to delete several events, clear a day, or the target is ambiguous, first confirm with the user (ideally listing what will be deleted) before calling this, and call it once per event. See the documentationWritev0.1.14 -
Get Current User
actionRetrieve information about the authenticated Google Calendar account, including the primary calendar (summary, timezone, ACL flags), a list of accessible calendars, user-level settings (timezone, locale, week start), and the color palette that controls events and calendars. Ideal for confirming which calendar account is in use, customizing downstream scheduling, or equipping LLMs with the user’s context (timezones, available calendars) prior to creating or updating events. See the documentation.Read-onlyv0.0.6 -
Get Date Time
actionGet current date and time for use in Google Calendar actions. Useful for agents that need datetime awareness and timezone context before calling other Google Calendar tools.Read-onlyv0.0.5 -
List Calendars
actionRetrieve a list of calendars from Google Calendar. See the documentationRead-onlyv0.1.13 -
List Color ID Options
actionRetrieves available options for the Color ID field.Read-onlyv0.0.3 -
List Event Instances
actionRetrieve instances of a recurring event. See the documentationRead-onlyv0.0.5 -
List Events
actionList or search the events on a Google Calendar. Use this for "what's on my calendar", "what's my schedule/agenda", "what's coming up", "am I busy/free", or any question about the events in a date range: settimeMin/timeMaxfor the window,qto search event text, andsingleEventstotrueto expand recurring events into individual occurrences. Response size matters here: by default every field of every matching event is returned, which runs 2-10 KB per event (long descriptions, full attendee lists, HTML links), so one busy week can exceed 100 KB and overflow an AI agent's context window. Request only what the question needs —fields: "compact"(equivalentlyfields: "summary,start,end") answers a schedule question in a fraction of the bytes, andmaxAttendees: 1drops guest lists when the question is not about who is attending. See the documentationRead-onlyv0.1.1 -
Respond to Event Invitation
actionAccept, decline, or tentatively accept a Google Calendar event invitation on behalf of the authenticated user. Use this when you need to RSVP to an event. You can identify the event by its exacteventIdor byeventName(searches upcoming events by title). If both are provided,eventIdtakes precedence. ThecalendarIddefaults toprimary(the user's main calendar). See the documentationWritev0.0.2 -
Retrieve Calendar Details
actionRetrieve calendar details of a Google Calendar. See the documentationRead-onlyv0.1.13 -
Retrieve Event Details
actionRetrieve event details from Google Calendar. See the documentationRead-onlyv0.1.13 -
Retrieve Free/Busy Calendar Details
actionRetrieve free/busy calendar details from Google Calendar. See the documentationRead-onlyv0.2.3 -
Update Event
actionUpdate an event from Google Calendar. See the documentationWritev0.0.18 -
Update Event Instance
actionUpdate a specific instance of a recurring event. Changes apply only to the selected instance. See the documentationWritev0.0.7 -
Update Following Event Instances
actionUpdate all instances of a recurring event following a specific instance. This creates a new recurring event starting from the selected instance. See the documentationWritev0.0.8
EVENTS
Google Calendar triggers
Event sources your backend can deploy for users and receive through a webhook.
-
New Created or Updated Event (Instant)
triggerEmit new event when a Google Calendar events is created or updated (does not emit cancelled events)v0.1.20 -
New Calendar Created
triggerEmit new event when a calendar is created.v0.1.16 -
New Event Matching a Search
triggerEmit new event when a Google Calendar event is created that matches a searchv0.1.16 -
New Cancelled Event
triggerEmit new event when a Google Calendar event is cancelled or deletedv0.1.16 -
New Ended Event
triggerEmit new event when a Google Calendar event endsv0.1.16 -
New Upcoming Event Alert (Polling)
triggerEmit new event based on a time interval before an upcoming event in the calendar. See the documentationv0.0.7
MULTI-APP
Use Google Calendar with other popular apps
Most products don't stop at one integration. Pair Google Calendar with the other apps your users rely on, and ship use cases that span both.
- App slug
- google_calendar
- Authentication
- OAuth
- Categories
- Productivity
- Actions
- 17
- Triggers
- 6
- API proxy
- Available
OAuth scopes
These are the scopes Pipedream's managed Google Calendar OAuth client requests when one of your users connects an account. Supply your own OAuth client to request a different set.
- https://www.googleapis.com/auth/calendar.events
- https://www.googleapis.com/auth/calendar.readonly
- https://www.googleapis.com/auth/calendar.settings.readonly