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.
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.
Enable the Google Calendar API
Go to APIs & Services → Library, search for Google Calendar API and open its card. Click Enable.
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.
Audience
Choose who can authorize your app to access their Google Account data.
- User type
- External
- Publishing status
- Testing
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.
Clients
OAuth clients that let your app request access to Google user data.
| Name | Type | Client ID | Status | Creation date |
|---|---|---|---|---|
| Scheduling botLegacy client | Web application | 2077****-e4f6.apps.googleusercontent.com | Enabled | Mar 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.
Create OAuth client ID
A client ID identifies your app to Google's OAuth servers.
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.
Clients
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:
| Field | What to enter |
|---|---|
| OAuth Client IDtext | Google 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 Secretsecret | Shown 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. |
https://app.popmcp.com/api/providers/google/callbackPopMCP 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.
| Scope | Why PopMCP asks for it |
|---|---|
| https://www.googleapis.com/auth/calendar | Read 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.