A collection of Python MCP servers that give AI assistants (Cursor, Claude Desktop, etc.) access to personal productivity tools.
| Server | Access | Tools |
|---|---|---|
| mcp-calendar | Read/write | list_calendars, list_events, create_event, update_event, delete_event, check_free_busy |
| mcp-gmail | Read-only | gmail_list_labels, gmail_list_messages, gmail_get_message |
Full read/write access to calendars across Google Calendar, Microsoft Outlook / Microsoft 365, Apple iCloud, and any generic CalDAV server (Nextcloud, Fastmail, Radicale, ?). Only providers with credentials in .env are activated ? the rest are silently skipped.
| Tool | Description |
|---|---|
list_calendars |
List all available calendars for a provider |
list_events |
Search and filter events by date range and keyword |
create_event |
Create a new event with attendees, location, recurrence |
update_event |
Partially update an existing event |
delete_event |
Permanently delete an event |
check_free_busy |
Check free/busy availability in a time window |
? See mcp-calendar/README.md for setup and configuration.
Read-only access to Gmail via Google OAuth. Cannot send, delete, or modify mail ? only gmail.readonly scope is requested.
| Tool | Description |
|---|---|
gmail_list_labels |
List all Gmail labels (INBOX, SENT, DRAFT, TRASH, SPAM, custom labels, ?) |
gmail_list_messages |
List messages filtered by label, search query, and pagination |
gmail_get_message |
Fetch a single message ? full headers, plain text, and HTML body |
? See mcp-gmail/README.md for setup and configuration.
- Python 3.10+
- uv
Each server has its own virtual environment. Install them independently:
cd mcp-calendar && uv sync
cd mcp-gmail && uv syncAdd both servers to your Cursor MCP config (via Cursor ? Settings ? MCP):
{
"mcpServers": {
"mcp-calendar": {
"command": "uv",
"args": [
"run",
"--directory",
"C:/Users/Ryzen/Projects/mcp-servers/mcp-calendar",
"mcp-calendar"
]
},
"mcp-gmail": {
"command": "uv",
"args": [
"run",
"--directory",
"C:/Users/Ryzen/Projects/mcp-servers/mcp-gmail",
"mcp-gmail"
]
}
}
}Edit %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"mcp-calendar": {
"command": "uv",
"args": [
"run",
"--directory",
"C:/Users/Ryzen/Projects/mcp-servers/mcp-calendar",
"mcp-calendar"
]
},
"mcp-gmail": {
"command": "uv",
"args": [
"run",
"--directory",
"C:/Users/Ryzen/Projects/mcp-servers/mcp-gmail",
"mcp-gmail"
]
}
}
}Both mcp-calendar (Google Calendar) and mcp-gmail can share the same Google Cloud OAuth 2.0 client ID and secret. They use separate token files so each is scoped independently:
mcp-calendar/tokens/google_token.json # scope: calendar
mcp-gmail/tokens/gmail_token.json # scope: gmail.readonly
- Never commit
.envfiles ortokens/directories ? both are in each server's.gitignore. mcp-gmailonly requestsgmail.readonlyand cannot send, delete, or modify mail.- OAuth tokens are stored locally and refreshed automatically.