Integrations

Google Calendar

Connect Google Calendar to see what is coming up, book and reschedule meetings, add Google Meet links, check who is free, and manage sharing.

OAuth authorizationApproval, Google states sensitive scope ve…Productivity & DocsGoogle Calendar API docs

You end up pasting a Google OAuth Client ID and Client Secret from a Web application client you register in the Google Cloud console.

OAuth scope verification before this connector works

Google's Trust and Safety team must verify your OAuth app before it can request the sensitive Calendar scopes (calendar, calendar.events) from users outside your own test list or Workspace organization.

Typical wait
Google states sensitive scope verification typically takes 3-5 business days; developers regularly report several weeks when a demo video or privacy policy has to be resubmitted
Cost
Free. Calendar scopes are sensitive, not restricted, so no third-party CASA security assessment is involved.
Blocked until approved
Public distribution only. Until verification passes, an external OAuth app stays capped at its test-user list (100 accounts), every user sees the unverified-app warning screen, and an app left in Testing status is issued refresh tokens that expire after 7 days, so long-lived unattended syncing breaks weekly.
Works meanwhile
Everything functional. Enable the Calendar API, create OAuth credentials, add yourself and colleagues as test users, and read/write calendars and events immediately at full quota. An app configured with the 'Internal' user type inside your own Workspace organization is not put through verification at all.

Where to apply: Google Cloud Console > APIs & Services > OAuth consent screen (Branding / Data Access), declare the Calendar scopes on the Data Access page, then 'Publish app' and 'Prepare for verification'. Requires a verified domain, a homepage, a hosted privacy policy on the same domain and a screen-recorded demo of the OAuth flow.

  • Confirm the classification in Google Cloud Console: Google's own guidance is that scope categories (non-sensitive, sensitive, restricted) are shown automatically on the Data Access page, and that page is the authority for the exact scope set you request.
  • The privacy policy must be on the same domain as the app homepage and linked from both the homepage and the consent screen; a Notion or Google Doc policy gets bounced.
  • You must own the authorized domain and verify it in Google Search Console under an account that is Owner or Editor on the Cloud project.
  • The demo video has to show the real consent screen, the OAuth client ID in the address bar, and each requested scope actually being used; generic product footage is the most common rejection.
  • Requesting the broad calendar scope when calendar.events.readonly would do invites a 'narrowest scope' rejection.
  • Adding a scope later re-triggers verification, so declare the full set up front.
  • The 7-day refresh token expiry in Testing status catches teams out; Google documents it as a property of the Testing publishing status, not a bug.
Setup time
10 min
Auth
OAuth authorization
API base URL
https://www.googleapis.com/calendar/v3
Rate limits
Default Calendar API quota is 10,000 requests per minute per project and 600 requests per minute per user, with a 1,000,000 requests per day per project threshold.

Before you begin

  • A Google account, plus a Google Cloud project you own (free, no billing card needed)
  • Owner or Editor role on that Cloud project. Viewer cannot create OAuth clients
  • The PopMCP callback URL from the Google Calendar connect form. Copy it before you start
  • The Internal audience requires a Google Workspace organisation. Personal accounts get External only

Get your credentials

Create or select a Google Cloud project

Open the Cloud console and pick a project from the picker in the top bar, or click New project. Keep that same project selected for every step below.

Open this screen →

Enable the Google Calendar API

Go to APIs & Services → Library, search for Google Calendar API and open its card. Click Enable.

Open this screen →

Fill in Branding, then publish the app on Audience

Open Google Auth Platform → Branding and enter App name, User support email and a developer contact address, then Save. Switch to Audience and click Publish app if Publishing status shows Testing.

Open this screen →

console.cloud.google.com/auth/audience
Search (/) for resources, docs, products, and morepopmcp-cal-5512
Google Auth Platform / Audience

Audience

Choose who can authorize your app to access their Google Account data.

Authorizations by a test user expire seven days from the time of consent.
User type
User type
External
Publishing status
Testing
Publishing status
Status
Testing
OAuth user cap
1 / 100 test users
Publish app

After publishing, the status reads In production.

Open Clients and start a new OAuth client

In the Google Auth Platform nav click Clients, then click Create client.

Open this screen →

console.cloud.google.com/auth/clients
Search (/) for resources, docs, products, and morepopmcp-cal-5512
Google Auth Platform / Clients

Clients

OAuth clients that let your app request access to Google user data.

Create clientDelete
NameTypeClient IDStatusCreation date
Scheduling botLegacy clientWeb application2077****-e4f6.apps.googleusercontent.comEnabledMar 4, 2026

This page replaced APIs & Services → Credentials.

Register a Web application client with the callback URL

Set Application type to Web application and give the client a recognisable name. Under Authorized redirect URIs click Add URI, paste the callback URL from PopMCP's Google Calendar connect form exactly as shown, then click Create.

Open this screen →

console.cloud.google.com/auth/clients/create
Search (/) for resources, docs, products, and morepopmcp-cal-5512
Google Auth Platform / Clients / Create OAuth client

Create OAuth client ID

A client ID identifies your app to Google's OAuth servers.

Client details
Application type
Web application
Name
PopMCP Calendar
Authorized redirect URIs
URIs 1
paste the callback URL from the PopMCP connect form
Add URICreate

Leave Authorized JavaScript origins empty. PopMCP exchanges the code server-side.

Copy the client ID and secret into PopMCP

Copy Client ID and Client secret from the OAuth client created dialog into PopMCP's OAuth Client ID and OAuth Client Secret fields. If the dialog is already closed, open the client and click Add secret.

console.cloud.google.com/auth/clients
Search (/) for resources, docs, products, and morepopmcp-cal-5512
Google Auth Platform / Clients

Clients

OAuth client created
Client ID
2077****-9c1a.apps.googleusercontent.com
Client secret
GOCSPX-****7b05
Download JSONOK

Google hashes the secret. After this dialog only the last four characters are shown.

Connect in PopMCP

Open your workspace, choose Google Calendar in the marketplace, and fill in the connect dialog:

FieldWhat to enter
OAuth Client IDtextGoogle Cloud Console → Google Auth Platform → Clients → Create client → Web application, with the callback URL above under Authorized redirect URIs. Enable the Google Calendar API on the same project first (APIs & Services → Library → Google Calendar API → Enable), or the Calendar permission won't be offered.
OAuth Client SecretsecretShown once, in the popup right after you create the client. Google hashes it and never shows it again. If you closed that popup, open the client and add a new secret. Stored encrypted here, used server-side only. IMPORTANT: in Google Auth Platform → Audience, if the status says "Testing", click "Publish app" first. Testing-mode apps get a refresh token that Google expires after exactly 7 days, so the connection would work for a week and then stop. Publishing does not require Google's review. It only adds a one-time "Google hasn't verified this app" screen, where you click Advanced and continue.Encrypted with AES-256-GCM on save and never shown again.
Callback URL
https://app.popmcp.com/api/providers/google/callback

PopMCP verifies the credential against Google Calendar immediately. On success the connection flips to Verified and its MCP tools are provisioned.

Permissions PopMCP requests

These are the scopes sent to Google Calendar at authorization time.

ScopeWhy PopMCP asks for it
https://www.googleapis.com/auth/calendarRead and write access to the user's calendars and events, needed to list what is coming up, create and reschedule meetings, attach Google Meet links, run free/busy checks and change sharing. Google treats it as a sensitive scope.

Verify it worked

In PopMCP, click Connect, choose the Google account, click through the "Google hasn't verified this app" screen with Advanced → Go to (app), and grant calendar access. The connector shows Connected and an upcoming-events tool returns real entries from your calendar.

Troubleshooting

Error 400: redirect_uri_mismatch

Why: The Authorized redirect URI on the client differs from the callback URL PopMCP sends.

Fix: Paste the callback URL straight from the PopMCP connect form into Clients → your client → Authorized redirect URIs. Check http vs https and the trailing slash.

Works for 7 days then invalid_grant

Why: The app was left in Testing on the Audience page, so Google expires the refresh token seven days after consent.

Fix: Go to Google Auth Platform → Audience → Publish app, then reconnect in PopMCP.

403 accessNotConfigured

Why: The Google Calendar API is not enabled on the project that owns the OAuth client.

Fix: Go to APIs & Services → Library → Google Calendar API → Enable on the same project, then retry.

403 rateLimitExceeded when syncing many calendars

Why: The ceiling of 600 requests per minute per user was hit.

Fix: Retry with exponential backoff and narrow the time window or calendar list you ask PopMCP to sweep.

The client secret is no longer visible in full

Why: Google hashes the secret after creation and only ever shows the last four characters.

Fix: Open the client in Clients and click Add secret to mint a fresh one, then paste it into PopMCP.

Reference

On this page