gws_mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gws_mcpCheck my availability for a meeting next Tuesday at 3pm."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gws_mcp
MCP server for Google Workspace (Gmail + Calendar).
How it works
You (in Claude/Cursor) ◄──► MCP Server ◄──► Backend API ◄──► Google
ask in English translates talks to Gmail +
your request Google APIs Calendar
into API callsThe MCP server runs alongside a small Python backend. The backend authenticates with Google and handles email and calendar operations. The MCP server acts as a translator — your AI assistant speaks MCP, the server converts that into API calls, and the backend talks to Google.
Related MCP server: google-mcp-server
What you can do
Read your inbox — list emails, search by sender/subject/date, paginate through results
Send — compose and send emails to anyone
Reply & forward — reply to existing threads or forward messages
Manage drafts — create drafts without sending, list them, send them later, delete them
Organize — mark emails as read or unread
Attachments — send files (base64 encoded) and download attachments from messages
Thread view — see the full conversation in a thread
Calendar
View events — list events in any date range, from any of your calendars
Create events — schedule meetings with title, time, location, attendees, description
Recurring events — create repeating events using RRULE (e.g. "every Monday and Wednesday")
Update & delete — modify or remove existing events
Find free time — check availability in a date range, optionally filtered by your working hours
Multiple calendars — manage all your calendars, not just the primary one
Working Hours
Configure — set your working hours for each day of the week
Smart availability — when checking free slots, filter out time outside your working hours
Setup
Prerequisites
Python 3.10+
A Google Cloud project with Gmail API and Google Calendar API enabled
Google OAuth credentials (client ID + client secret)
1. Get Google API credentials
Go to Google Cloud Console
Create a project or select an existing one
Enable the Gmail API and Google Calendar API
Go to Credentials → Create Credentials → OAuth client ID
Choose Web application, add
http://localhost:8321/auth/callbackas an authorized redirect URICopy the Client ID and Client Secret
2. Install and start the backend
# Download the project
git clone https://github.com/praneshnikhar/gws_mcp
cd gws_mcp
# Install Python dependencies
pip install -r backend/requirements.txt
# Set your Google credentials (replace with your actual values)
export CONNECTORS_GOOGLE_CLIENT_ID="your_client_id_here"
export CONNECTORS_GOOGLE_CLIENT_SECRET="your_client_secret_here"
# Start the backend server
uvicorn backend.main:app --reload --port 83213. Get your API key
Open http://localhost:8321/auth/login in your browser. You'll be redirected to Google to sign in. After authorizing, you'll receive an API key starting with cnx_. Save this key — it's shown once.
4. Install and run the MCP server
# Install the MCP server package
pip install mcp-server/
# Start the MCP server (replace cnx_xxx with your actual key)
CONNECTORS_API_KEY=cnx_xxx python -m mcp-server.connectors_mcp.server5. Connect your AI assistant
Tell your AI assistant to use the MCP server. The exact method depends on your assistant:
Claude Code: Add the server to your claude.jsonc MCP configuration
Cursor: Configure it in Cursor's MCP settings
Any MCP client: Point it to the stdio command above
Running tests
pip install pytest pytest-asyncio httpx
PYTHONPATH=. python -m pytest tests/ -v62 tests covering all features.
MCP tools (22 total)
Email (12):
list_emails — search and list inbox messages
send_email — compose and send
reply_email — reply to a thread
forward_email — forward a message
get_thread — view full conversation
mark_read — mark as read
mark_unread — mark as unread
get_attachment — download file from a message
create_draft — save a draft
list_drafts — view saved drafts
send_draft — send a saved draft
delete_draft — remove a draft
Calendar (7):
list_calendars — show all your calendars
list_calendar_events — list events in a date range
get_calendar_event — get event details
create_calendar_event — schedule a new event
update_calendar_event — modify an event
delete_calendar_event — remove an event
get_availability — find free time slots
Working Hours (3):
get_working_hours — view your configured hours
set_working_hours — set hours for a day
delete_working_hours — remove hours for a dayMCP Prompts
Reusable prompt templates that help the AI understand common workflows:
Prompt | What it does |
| "Review my last N emails and extract action items" |
| "Find a free slot, create an event, and invite people" |
| "Read a thread and write a professional response" |
| "Give me a morning briefing with today's events and email" |
API reference
All endpoints require Authorization: Bearer cnx_xxx header.
Auth
Method | Path | What it does |
GET |
| Get Google OAuth URL |
GET |
| Complete OAuth (returns API key) |
GET |
| Check server status |
Method | Path | What it does |
GET |
| List/search with Gmail syntax |
POST |
| Send |
POST |
| Reply |
POST |
| Forward |
GET |
| Get thread messages |
POST |
| Mark as read |
POST |
| Mark as unread |
GET |
| Download attachment |
POST |
| Create draft |
GET |
| List drafts |
POST |
| Send a draft |
DELETE |
| Delete a draft |
Calendar
Method | Path | What it does |
GET |
| List all calendars |
GET |
| List events in date range |
GET |
| Get event details |
POST |
| Create event |
PATCH |
| Update event fields |
DELETE |
| Delete event |
GET |
| Find free time slots |
Working Hours
Method | Path | What it does |
GET |
| View configured hours |
POST |
| Set hours for a day |
DELETE |
| Delete hours |
Configuration reference
Variable | Default | What it is |
| — | Your Google OAuth client ID |
| — | Your Google OAuth client secret |
|
| Path to client secret file |
| — | API key (from OAuth setup) |
|
| Backend URL |
Docker
docker compose upRuns the backend on port 8321 with persistent storage.
Project structure
gws_mcp/
├── backend/ # FastAPI server
│ ├── main.py # Routes & app setup
│ ├── auth.py # Google OAuth
│ ├── db.py # SQLite storage
│ ├── models.py # Pydantic schemas
│ └── api/
│ ├── gmail.py # Gmail operations
│ └── calendar.py # Calendar operations
├── mcp-server/ # MCP server package
│ └── connectors_mcp/
│ ├── server.py # MCP tools & prompts
│ └── client.py # Backend API client
├── tests/ # 62 tests
├── setup.py # OAuth setup wizard
├── Dockerfile
└── docker-compose.ymlThis server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/praneshnikhar/gws_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server