LABSCO SUMMARY
Mail and calendar for several Google accounts at once, with per-account notes the model can read.
Multiple accounts is the distinguishing part: work and personal live in the same session, and the extra_info field on each account lets you tell the assistant what that account is for, so "check the family agenda" resolves without you naming an address.
What it is
A server that connects Gmail and Google Calendar to an MCP client, with support for several Google accounts configured side by side.
What you get
- Email search with the filters you would actually use: unread, a given sender, a date range, has-attachment
- Full message content by ID, and several messages fetched at once
- Draft creation with recipients, subject, body and CC, and draft deletion
- Replies that either send immediately or save as a draft
- Attachments saved from an email to your local disk
- Calendar events within a time range, across multiple calendars
- Event creation with location, description, attendees, timezone and notification preferences, plus deletion
- Per-account extra_info you write yourself, so the assistant knows which account holds the family calendar
Requirements
Your own Google Cloud OAuth2 client with the Gmail and Calendar APIs enabled, written into a .gauth.json, plus a .accounts.json listing the accounts. The first tool call for an account opens a browser to authorize; the refresh token is reused after that. Runs via uvx as mcp-gsuite.
Setup effort
Follow the published steps — In the Google Cloud Console, create or pick a project and enable the Gmail API and the Google Calendar API
USE CASES
01
Clearing an inbox you have not opened all day
Search unread mail, read the ones that matter, and leave drafted replies for the rest.
02
Answering a thread without switching windows
Reply to an existing email and store it as a draft to review before it goes out.
03
Finding a two-hour slot next week
Read events across the calendars you configured and pick times nothing collides with.
04
Pulling attachments out of a thread
Save several attachments from an email straight to a local folder instead of downloading them one by one.
BEFORE YOU INSTALL
What to know first
Requires
- uvx on PATH
- Python 3.13 or later
- Your own Google Cloud OAuth client ID (Desktop app or Web application) in a project with the Gmail API and Google Calendar API enabled, with http://localhost:4100/code as an authorized redirect URI
- A .gauth.json holding that client's client_id and client_secret, and a .accounts.json listing the Google accounts to use
- A browser on the machine for the first sign-in of each account
INSTALLATION
Connect your client
Server setup
In the Google Cloud Console, create or pick a project and enable the Gmail API and the Google Calendar API
Configure the OAuth consent screen, then Credentials → Create Credentials → OAuth client ID, type Desktop app or Web application, with http://localhost:4100/code as an authorized redirect URI
Save the client as a file named .gauth.json:
JSON
{
"web": {
"client_id": "<YOUR_CLIENT_ID>",
"client_secret": "<YOUR_CLIENT_SECRET>",
"redirect_uris": [
"http://localhost:4100/code"
],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
}Save the accounts as .accounts.json — one entry per account, each with access to your Google Auth app; extra_info is what you want the assistant to know about that account:
JSON
{
"accounts": [
{
"email": "<YOUR_EMAIL>",
"account_type": "personal",
"extra_info": "<YOUR_EXTRA_INFO>"
}
]
}Add a configuration under MCP Clients. The first tool call for each account opens a browser to sign in; the refresh token is reused after that
MCP Clients
Claude Desktop — uvx
CLAUDE DESKTOP — UVX · JSON
{
"mcpServers": {
"mcp-gsuite": {
"command": "uvx",
"args": [
"mcp-gsuite",
"--gauth-file",
"<YOUR_PATH_TO_CUSTOM>/.gauth.json",
"--accounts-file",
"<YOUR_PATH_TO_CUSTOM>/.accounts.json",
"--credentials-dir",
"<YOUR_PATH_TO_CUSTOM>/credentials"
]
}
}
}<YOUR_PATH_TO_CUSTOM>/.gauth.json and <YOUR_PATH_TO_CUSTOM>/.accounts.json are the full paths of the files you created, and <YOUR_PATH_TO_CUSTOM>/credentials a folder for the saved sign-ins. Without the flags the server looks for ./.gauth.json and ./.accounts.json in whatever folder the client starts it from.
Claude Desktop — local build
CLAUDE DESKTOP — LOCAL BUILD · TERMINAL
git clone https://github.com/MarkusPfundstein/mcp-gsuite.gitPut .gauth.json and .accounts.json in the mcp-gsuite folder the clone creates, then add:
CLAUDE DESKTOP — LOCAL BUILD · JSON
{
"mcpServers": {
"mcp-gsuite": {
"command": "uv",
"args": [
"--directory",
"<YOUR_DIR_TO>/mcp-gsuite",
"run",
"mcp-gsuite"
]
}
}
}<YOUR_DIR_TO>/mcp-gsuite is the full path of that clone. uv --directory starts the server in that folder, so it finds ./.gauth.json and ./.accounts.json there.