Because Calendar, Contacts and Gmail come through the same authorization, a request like "find a time with her and send the invite" does not cross a tool boundary — free/busy answers the first half and event creation the second. Two details are worth knowing before you plan around it: recurring events take an explicit scope, so an edit can hit one occurrence or the whole series on purpose, and Gmail search returns ids rather than content, so reading is always a second call.
A Google Workspace server covering three services through a single OAuth flow, with write access across all of them rather than read-only views.
- Calendars listed with their access role and colors, events listed or searched by text, and the color palette available for styling
- Events created, updated and deleted, with recurring-event scopes so a change can apply to one occurrence, all of them, or only future ones
- Free/busy checked across calendars, which is what turns "find us a slot" into an answer
- Contacts listed and fetched in full, created, updated with the fields you name, and deleted
- Gmail search returning ids to work from, one message read in full with headers, plain and HTML bodies and attachment metadata
- Mail sent as a new message or as a reply into an existing thread, and drafts created, edited and later sent
- Labels listed, created, renamed and deleted — system labels excluded, since Gmail does not allow changing those
- One email's labels and read or starred state changed, or up to 1000 ids updated in a single batch call
- Deletion to trash by default, or permanently when you ask for it
A Google Cloud project of your own with the Calendar and People APIs enabled and an OAuth consent screen configured — External user type, with your own address added as a test user while it is in test mode. Create OAuth 2.0 credentials of type Desktop app; then either set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET directly, or point GOOGLE_OAUTH_CREDENTIALS at the downloaded JSON file. The redirect URI has to match http://localhost:3000/oauth2callback exactly. Run it with npx -y mcp-google over stdio, from the npm package mcp-google, currently 2.3.0. On first run a browser opens for you to grant Calendar, Contacts and Gmail permissions; the tokens are then stored with 0600 permissions and refreshed automatically, and GOOGLE_CALENDAR_MCP_TOKEN_PATH moves where they live.
One command plus a key — npx mcp-google, then supply credentials
