Status: done (2026-07-13). Account, project, MCP server, and auth are live. 33 events from porto-chapter-calendar.html pushed as a one-off — no automatic sync yet (tracked as a roadmap item in Notes and ideas _jul26.md).
wifitribe.porto.jul26@gmail.comwifitribe-porto-jul26~/.config/google-calendar-mcp/credentials.json (outside repo)~/.config/google-calendar-mcp/tokens.json (outside repo)google-calendar (user scope, in ~/.claude.json, not the repo)Give Claude Code write access to a new, dedicated Google Calendar so it can create/update events on request, and let site visitors subscribe to that calendar’s public feed. This is separate from porto-chapter-calendar.html’s existing client-side .ics download links (no sync between the two — confirmed ad-hoc only).
Two MCP options were compared:
calendarmcp.googleapis.com) — Developer Preview, remote/hosted, requires Claude.ai custom-connector support (Pro/Team/Enterprise plan). Doesn’t apply to local stdio servers.npx under Claude Code’s own MCP config.Public subscription is unrelated to either MCP — it’s a one-time Google Calendar sharing setting that produces a public iCal/webcal URL.
wifitribe.porto.jul26@gmail.com.
Calendar → Settings → Access permissions → “Make available to public”. Subscribe URL format (grab the exact one from Settings → Integrate calendar → Secret/public address in iCal format if not already saved elsewhere):
https://calendar.google.com/calendar/ical/wifitribe.porto.jul26%40gmail.com/public/basic.ics
wifitribe-porto-jul26wifitribe-porto-jul26 created under the new account.https://www.googleapis.com/auth/calendar.Gotcha hit: first auth attempt failed with Error 403: access_denied — consent screen was still in “Testing” publishing status, which blocks even the project owner unless explicitly whitelisted. Fix: Console → Audience → Test users → add wifitribe.porto.jul26@gmail.com → retry.
claude mcp add google-calendar -s user -e GOOGLE_OAUTH_CREDENTIALS=... -- npx -y @cocal/google-calendar-mcp) — lives in ~/.claude.json, not the repo.Porto Chapter Calendar/integrations/) — caught before commit, moved to ~/.config/google-calendar-mcp/credentials.json. Always verify credential files land outside the repo before anything gets staged, especially on a public GitHub Pages repo.npx @cocal/google-calendar-mcp auth) run after adding the test user; token saved to ~/.config/google-calendar-mcp/tokens.json.list-calendars confirmed the right account/primary calendar.EVENTS/SPANS in porto-chapter-calendar.html bulk-created via create-events (2026-07-13). 2 cancelled:true events (brunch, kayak) and 3 undated FLOATING ideas (tiles, ferrata, ss-seo) skipped by design, along with recurring HOUSEKEEPING entries. Missing end-times were filled with defaults (1h for len:"short", 1.5h for len:"part", 2h for MATCH watch-parties, full-day for date-only entries) since the source data doesn’t specify them — worth a skim against the public feed.porto-chapter-calendar.html’s EVENTS/SPANS arrays and the Google Calendar — the push above was a manual one-off. Tracked as an open roadmap item in Notes and ideas _jul26.md (“Make the Google Calendar push part of the regular update workflow”).