Connect Gmail, Calendar, Drive, and the rest of Google Workspace with a single sign-in.
Switchboard connects to Google Workspace services (Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Tasks, Chat, Contacts, and Meet) using an organization-owned Google Cloud OAuth client. You create one OAuth client, enable the APIs you need, connect once, and every selected service is configured from that single consent.
Because your org brings its own client, you don't have to wait on Google's app verification or CASA security assessment to start — the app runs in your own Google Cloud project against your users' accounts. The unified setup page lives at /integrations/google/setup in the dashboard. Adding or removing the OAuth client is admin-only; any member can connect their own account once a client is configured.
Enable an API for each service you plan to connect. In the console go to APIs & Services → Library and enable the ones you need:
| Service | API to enable |
|---|---|
| Gmail | Gmail API |
| Calendar | Google Calendar API |
| Drive | Google Drive API |
| Docs | Google Docs API |
| Sheets | Google Sheets API |
| Slides | Google Slides API |
| Forms | Google Forms API |
| Tasks | Google Tasks API |
| Chat | Google Chat API |
| Contacts | People API |
| Meet | Google Meet API |
403 "… API has not been used in project … or it is disabled" even though your token is valid. Enable the API from the Library, wait a minute, then try again.You can enable more later; re-run the connect and Switchboard requests the additional scopes incrementally (it sends include_granted_scopes=true, so previously granted access is preserved).
/oauth/callback; use the exact base URL your users hit:| Environment | Redirect URI |
|---|---|
| Local dev | http://localhost:8085/oauth/callback |
| Production | https://app.switchboard-mcp.com/oauth/callback |
The setup page shows the exact URI to register for your deployment — copy it from there to avoid typos. Then create the client and copy the Client ID and Client secret.
/integrations/google/setup.Self-hosters can set a shared client once on the hosted process; it becomes the default for every org that has not supplied its own. An org-supplied client always takes precedence.
export GOOGLE_OAUTH_CLIENT_ID="123456789-abc.apps.googleusercontent.com" export GOOGLE_OAUTH_CLIENT_SECRET="GOCSPX-..."Enter these full scope strings when Google's console asks you to Manually add scopes — the abbreviated .../auth/... form is rejected as invalid. Only the scopes for the services you select are requested; on a partial consent Switchboard enables only the services whose scopes were actually granted.
| Service | Scopes |
|---|---|
| Gmail | https://mail.google.com/ |
| Calendar | https://www.googleapis.com/auth/calendar |
| Drive | https://www.googleapis.com/auth/drive |
| Docs | https://www.googleapis.com/auth/documents |
| Sheets | https://www.googleapis.com/auth/spreadsheets |
| Slides | https://www.googleapis.com/auth/presentations |
| Forms | https://www.googleapis.com/auth/forms.bodyhttps://www.googleapis.com/auth/forms.responses.readonly |
| Tasks | https://www.googleapis.com/auth/tasks |
| Chat | https://www.googleapis.com/auth/chat.spaces.readonlyhttps://www.googleapis.com/auth/chat.messages |
| Contacts | https://www.googleapis.com/auth/contactshttps://www.googleapis.com/auth/contacts.other.readonlyhttps://www.googleapis.com/auth/directory.readonly |
| Meet | https://www.googleapis.com/auth/meetings.space.createdhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/meetings.space.settings |
redirect_uri_mismatch — the redirect URI in the console must exactly match <BASE_URL>/oauth/callback, including scheme and host. Copy the value shown on the setup page.