Skip to content
Claude × Google Calendar Web + Desktop 5 min setup

Connect Google Calendar to Claude with PortEden

Give Claude scoped access to your Google Calendar. This guide covers both Claude paths: claude.ai web (no install) and Claude Desktop (config file via mcp-remote). Attendee email addresses are redacted before they reach Anthropic. Confirm-before-write protects create, update, and delete actions, so Claude never quietly cancels a meeting or mass-invites people.

Diagram showing Google Calendar connecting to PortEden, with PortEden labeled REDACT AUDIT SCOPE, then forwarding to Claude
Google Calendar to Claude with PortEden as the data firewall.

Two paths, one endpoint

What this unlocks

Once active, Claude can answer scheduling questions, find meeting slots across calendars you have access to, and (with the right permissions) create, update, or cancel events. PortEden ships the connector with attendee email redaction on by default, so Claude sees who is invited but not where to reach them. Confirm-before-write is on for create, update, and delete, which means Claude must surface a preview of the change before any modification.

Compared to letting Claude read your raw Google Calendar OAuth, routing through PortEden adds:

  • Per-AI revocation (revoke Claude without breaking the Google connection).
  • Recurring-meeting safety: every modification must specify single instance, all future, or whole series.
  • Calendar scope: limit Claude to your primary calendar, or specify a list.
  • Time window: restrict reads to a recent range so historical meetings stay out of context.
  • Audit log per tool call, with the action, decision, and response shape.

Prerequisites

ItemPath A (Web)Path B (Desktop)
Claude accountPro, Max, Team, or EnterpriseAny plan, including Free
Claude clientBrowser at claude.aiClaude Desktop installed
Local toolsNoneNode.js (for npx mcp-remote)
Google accountWith Calendar accessSame
PortEden accountCreated during the auth windowSame

No PortEden account yet? That is fine.

You do not need to create a PortEden account in advance. When Claude opens the PortEden auth window in Step 3, you can sign up with Google one-click or with email in the same flow.

Choose your path

FactorPick Web (Path A)Pick Desktop (Path B)
You check your calendar from a browser
You use Claude Desktop on a managed work laptop
You want IT/admin to deploy the connector once for the org
You are on Claude FreeLimited (1 custom connector)
You want offline-capable access from a single device
You access Calendar from multiple devices

Path A: claude.ai (web)

1
Make sure you are signed in to claude.ai.
2
Open the direct link claude.ai/customize/connectors (or Settings > Organization Settings > Connectors for Team/Enterprise admins).
3
Click the + button to add a custom connector.
4
Fill in the values below and click Add.

Web connector form values

FieldValue
NameGoogle Calendar
URLhttps://mcp.porteden.com/calendar
Advanced SettingsLeave empty (PortEden handles OAuth)
claude.ai Custom Connector form with Name set to Google Calendar and URL set to https://mcp.porteden.com/calendar
Path A in claude.ai: the Custom Connector form for Google Calendar through PortEden.

Continue at Step 3.

Path B: Claude Desktop

Claude Desktop needs mcp-remote to bridge the remote PortEden endpoint into local stdio. Node.js must be installed.

1
In Claude Desktop, open Settings > Developer > Edit Config.
2
Add (or merge) the mcpServers entry below.
3
Save and fully restart Claude Desktop.
4
Trigger a tool call (e.g. ask Claude about today's meetings); the PortEden auth window opens. Continue at Step 3.

Config file paths

Windows

%APPDATA%\Claude\claude_desktop_config.json

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

Config to add

{
"mcpServers": {
"Google Calendar": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.porteden.com/calendar"]
}
}
}

Pair Calendar with Gmail on the same machine

Add a Gmail entry as a sibling key inside mcpServers. Claude picks between them by name during tool selection, so a user asking "what meetings do I have?" lands on Calendar and "summarize my unread email" lands on Gmail. The PortEden side shares one Google connection.

Step 3: Sign in to PortEden

On the first request that uses the connector, PortEden opens an auth window.

1
No PortEden account? Click Continue with Google, or use email. Account is created in the same flow.
2
Existing account? Sign in. Detection of an active my.porteden.com session is automatic.
3
Approve. PortEden issues a scoped token for this Claude connector.

What the default token looks like

Scoped to calendar only, with attendee email redaction on, primary calendar by default, confirm-before-write for create/update/delete, and a 60-day rolling time window. Edit at any time in my.porteden.com under Access Tokens.

Step 4: Authorize Google

This step runs only if PortEden does not already have Google connected for your account. Calendar, Gmail, Drive, Docs, and Sheets all ride on the same underlying Google connection.

First-time users

Click Connect Google and complete OAuth consent. Approve the Calendar scopes you need (see below).

Existing users

PortEden reuses the existing Google connection and skips OAuth. Claude returns to the chat with the connector active.

Calendar OAuth scope choices

ScopeWhat it allows
calendar.readonlyList events, read details, query free/busy
calendar.eventsRead plus create, update, delete events
calendarFull calendar access including settings and sharing

Match scope to permission preset

If you plan to keep Claude on read_only or read_and_freebusy, request calendar.readonly at the OAuth level. The OAuth scope is a hard ceiling: even if you later grant Claude write permissions in the token, Google will refuse if the OAuth scope is read-only. Re-consenting with a broader scope is a 30-second flow.

Step 5: Verify and tighten

Verify

What meetings do I have today?
Show me my schedule for tomorrow and flag any back-to-back conflicts.
List my recurring meetings, with how many hours per week each one takes.

Tighten the token (optional)

Defaults are conservative. Adjust at my.porteden.com under Access Tokens.

Permission presets

Pick the action set that matches what you want Claude to do

PresetWhat Claude can doWhat it cannot do
read_onlyList, search, read events; check free/busyCreate, update, delete, or invite
read_and_freebusy (default)Read events plus query free/busy across calendarsModify events
read_and_createRead plus create new events with attendeesDelete or modify existing events
full_calendarAll event actions including delete and recurring updatesTouch other PortEden capabilities (email, drive)

Other rules worth tightening

  • Attendee redaction: Leave on. Claude still sees who is in the meeting (by display name), not their email address.
  • Calendar scope: Limit Claude to your primary calendar. Personal calendars (medical, family) usually do not belong in an AI workflow.
  • Time window: Rolling 30 to 60 days covers most assistant tasks. Avoid granting full history.
  • Contact blocklist: Add board members, legal contacts, or therapists you do not want any AI touching.
  • Confirm-before-write: Keep on for delete and update. Optional for create if you trust the workflow.

Changes apply immediately

PortEden re-evaluates the token on every tool call. No reconnect, no reload, no token rotation needed.

Suggested prompts

Daily triage

"Please summarize my day. Group meetings into focus blocks, internal syncs, and external calls. Flag anything where I am the only required attendee."

Find a slot

"Find three free 30-minute slots next week between 10am and 4pm, excluding Fridays. Avoid the 30 minutes after lunch and before EOD."

Reschedule

"Move my 3pm Thursday meeting with the design team to 11am Friday. Show me the meeting details and the update message before sending. Do not send without confirmation."

Recurring audit

"List my recurring meetings, with how often they meet and total hours per week. Group by purpose so I can see where my time goes."

Buffer check

"Do I have any back-to-back meetings tomorrow with no buffer? If yes, propose 10-minute breaks I could insert. Show the changes; do not apply."

Schedule

"Schedule a 30-minute Q3 planning kickoff next Tuesday at 2pm with the engineering list. Title: Q3 planning. Confirm with me before sending."

Troubleshooting

Path A: web-specific

WEB_PLAN_REQUIRED

The + button to add a custom connector is missing

Symptoms

  • You opened claude.ai/customize/connectors but see no + button.

Checks

  • Confirm your plan: Pro, Max, Team, or Enterprise. Free users are limited to one custom connector.
  • For Team/Enterprise: only an Owner can add custom connectors from Settings > Organization Settings > Connectors.
  • If you are an Owner, the path is Organization Settings, not the personal Customize panel.

Debug prompt for Claude

Tell me which Claude plan I am on and whether Custom Connectors are available in my current view.

Path B: desktop-specific

DESKTOP_CONFIG_INVALID

Claude Desktop ignores the connector after restart

Symptoms

  • You added the mcpServers entry, restarted, but the Calendar tools do not appear.

Checks

  • Validate the config as JSON. Trailing commas or unescaped quotes are the usual culprits.
  • Confirm mcpServers is a top-level key.
  • Fully quit Claude Desktop (not just close the window) before reopening.
  • Check Settings > Developer > Open Logs Folder for MCP startup errors.

Debug prompt for Claude

Show me the contents of my Claude Desktop config file and any MCP startup errors from the logs.
DESKTOP_NPX_NOT_FOUND

npx not found

Symptoms

  • Claude Desktop logs report 'command not found' or 'spawn npx ENOENT'.

Checks

  • Install Node.js (LTS).
  • Run npx --version in a terminal to verify.
  • If you use nvm/asdf/fnm, ensure the active node is visible to GUI applications.

Debug prompt for Claude

Tell me whether Node.js is installed and propose the right install command for my OS.

Shared (both paths)

RECURRING_AMBIGUOUS

Claude did not specify single instance vs series

Symptoms

  • An update or delete on a recurring meeting fails with a recurring_target_required error.
  • Audit log shows the request was blocked because the target (single, future, or all) was not specified.

Checks

  • Ask Claude to clarify which instance or scope the change applies to.
  • Re-run the request with explicit language like 'this Friday's instance only' or 'this and all future occurrences'.
  • If you want Claude to default to single-instance, set recurring_default on the token in PortEden.

Debug prompt for Claude

Quote the last recurring_target_required response from the Google Calendar connector and propose three retry phrasings I can paste back.
MCP_UNREACHABLE

Claude cannot reach the PortEden MCP server

Symptoms

  • Claude reports the connector is unavailable or timing out.
  • Nothing appears in the PortEden audit log.

Checks

  • Confirm the URL is exactly https://mcp.porteden.com/calendar.
  • Check whether your network blocks outbound traffic to mcp.porteden.com.
  • Visit the URL in a browser; it should return an MCP handshake response, not 404.

Debug prompt for Claude

Attempt a connection to the Google Calendar MCP server and quote any HTTP status, error code, or response body you receive.
PERMISSION_DENIED

403 Permission denied on a specific event or action

Symptoms

  • Claude says it lacks permission, or returns an accessInfo string explaining a rule blocked the call.
  • Audit log shows a block decision with a rule name.

Checks

  • Open the token in PortEden and confirm the action (create_event, delete_event) is in the permission set.
  • Check the calendar scope: a token limited to the primary calendar denies requests against secondary ones.
  • Check the time window: requests outside the allowed window are blocked.

Debug prompt for Claude

Show me the full accessInfo field from the last error response and tell me which permission, calendar scope, or time window blocked the call.
GOOGLE_REAUTH_REQUIRED

Google connection went stale

Symptoms

  • Calls were working, then all Calendar tool calls start failing.
  • Audit log shows provider_reauth_required.

Checks

  • Open my.porteden.com > Connections. Google shows a yellow Needs reauth badge.
  • Click Reconnect and complete Google OAuth again. This usually follows a password change or security event.

Debug prompt for Claude

Quote the last provider_reauth_required entry from PortEden and tell me which provider needs to be reconnected.

Debug prompts

When the error message is vague, paste these into Claude.

No tools visible
"List every tool you have available from the Google Calendar connector with a one-line description each."
Health check
"Call the whoami or health tool on the Google Calendar connector and quote the full JSON response."
Recurring edits failing
"Tell me which recurring_target the last update used. If unspecified, suggest phrasings for single-instance, future, and whole-series variants."
Permission blocked
"Quote the accessInfo field from the last permission_denied response and identify which rule, calendar scope, or time window blocked it."
Strange data
"Show me the raw JSON of the last successful Google Calendar tool response, truncated to 1000 characters."
Quota
"Quote any response with rate_limit, google_quota_exceeded, or retry_after fields."

Audit log is the source of truth

When Claude's answer disagrees with what PortEden recorded, trust the audit log.

Security best practices

One token per AI per use case. If Claude misbehaves, revoke just the Claude token; ChatGPT and Grok keep working.

Start with read_and_freebusy. Add create or delete only after you trust the workflow.

Keep attendee redaction on. Claude sees display names, not email addresses. Sharing the chat does not leak contacts.

Restrict to your primary calendar unless Claude genuinely needs the others. Personal calendars (medical, family) usually do not belong in any AI workflow.

Keep Confirm-before-write on for delete. Cancelling a meeting by mistake is loud and embarrassing.

For Team/Enterprise web deployments, the connector is shared across all members. Set token rules at the most cautious user's level.

Review the audit log weekly. Filter by the Claude token. Calendar reads/writes are listed by event ID; cross-reference any surprises.

FAQ

Should I use the claude.ai web path or Claude Desktop for Calendar?

Use claude.ai web if you check your calendar from a browser, want shared org config (Team/Enterprise), or are not interested in local setup. Use Claude Desktop if you prefer the connector tied to a specific machine, you are on Claude Free, or you already use mcp-remote for other servers. Both call the same PortEden endpoint and produce identical audit log entries.

Can Claude create or move events on my behalf?

Yes, if you grant the create or update permissions in the token. Confirm-before-write is on by default for create, update, and delete, so Claude surfaces a preview before any change. The audit log records every change.

What about recurring meetings?

Claude can read recurring events including individual instances. To modify a recurring meeting, Claude must specify whether the change applies to a single instance, all future occurrences, or the whole series. PortEden enforces this distinction; without an explicit target, the call is rejected with a recurring_target_required error.

Does Claude see free/busy for people I share with?

Yes, but only for people whose free/busy is already shared with your Google account. PortEden does not bypass Google's sharing model. If you cannot see Alice's free/busy in Google Calendar, Claude cannot either.

Can I pair Calendar with Gmail for scheduling workflows?

Yes. Add both connectors (Google Calendar at https://mcp.porteden.com/calendar and Gmail at https://mcp.porteden.com/email). Claude can find a free slot in Calendar, draft a meeting confirmation in Gmail, and send it, all in one conversation. Each tool call lands in the PortEden audit log under its own connector name.

Which Claude plan do I need for Custom Connectors on the web?

Per Anthropic's docs, Custom Connectors on claude.ai are available on Pro, Max, Team, and Enterprise plans. Free users are limited to one custom connector. Claude Desktop's config-file path has no plan gating; it works for any Claude account.

Next steps