Server data from the Official MCP Registry
Schedule smarter - create, search, and manage Google Calendar events through AI.
Schedule smarter - create, search, and manage Google Calendar events through AI.
This is a well-structured Google Calendar MCP server with proper authentication via OAuth and comprehensive error handling. The code demonstrates good security practices including proper credential handling through the fastmcp-credentials library, no hardcoded secrets, and appropriate input validation. Minor code quality issues and a few informational findings do not significantly impact the overall security posture. Supply chain analysis found 5 known vulnerabilities in dependencies (1 critical, 3 high severity).
4 files analyzed · 11 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-ammar-62-mewcp-google-calendar": {
"args": [
"-y",
"github:AStheTECH/mewcp-google-calendar"
],
"command": "npx"
}
}
}From the project's GitHub README.
Schedule smarter - create, search, and manage Google Calendar events through AI.
A Model Context Protocol (MCP) server that exposes Google Calendar's API for creating, reading, updating, and deleting events and calendars.
The Google Calendar MCP Server provides full calendar management capabilities:
Perfect for:
Returns all calendars in the authenticated user's Google Calendar account.
Inputs:
(none)
Output:
{
"count": 3,
"calendars": [{ "id": "primary", "summary": "My Calendar", ... }]
}
Fetches metadata for a single calendar by its ID.
Inputs:
- `calendar_id` (string, optional) — Calendar ID to retrieve. Defaults to "primary"
Output:
{
"id": "primary",
"summary": "My Calendar",
"timeZone": "America/New_York"
}
Creates a new Google Calendar in the user's account.
Inputs:
- `summary` (string, required) — Name of the new calendar
- `description` (string, optional) — Description of the calendar
- `timezone` (string, optional) — Timezone string (e.g. "America/New_York"). Defaults to "UTC"
Output:
{
"message": "Calendar created successfully",
"calendar": { "id": "...", "summary": "Work", ... }
}
Permanently deletes a calendar by its ID.
Inputs:
- `calendar_id` (string, required) — ID of the calendar to delete
Output:
{
"message": "Calendar cal123 deleted successfully"
}
Returns events from a calendar, optionally filtered by time range and search query. Defaults to events from now onwards if no time range is specified.
Inputs:
- `calendar_id` (string, optional) — Calendar to query. Defaults to "primary"
- `max_results` (integer, optional) — Maximum number of events to return. Defaults to 10
- `time_min` (string, optional) — Start of time range in ISO 8601 format (e.g. "2026-01-08T00:00:00Z")
- `time_max` (string, optional) — End of time range in ISO 8601 format
- `query` (string, optional) — Free-text search query to filter events
Output:
{
"count": 2,
"events": [{ "id": "...", "summary": "Team Standup", ... }]
}
Fetches full details for a single event by its ID.
Inputs:
- `event_id` (string, required) — ID of the event to retrieve
- `calendar_id` (string, optional) — Calendar containing the event. Defaults to "primary"
Output:
{
"id": "abc123",
"summary": "Team Standup",
"start": { "dateTime": "2026-01-08T09:00:00Z" },
...
}
Creates a new event on the specified calendar with full details including attendees.
Inputs:
- `summary` (string, required) — Event title
- `start_time` (string, required) — Start time in ISO 8601 format (e.g. "2026-01-08T14:30:00")
- `end_time` (string, required) — End time in ISO 8601 format
- `calendar_id` (string, optional) — Target calendar. Defaults to "primary"
- `description` (string, optional) — Event description
- `location` (string, optional) — Event location
- `attendees` (list[string], optional) — List of attendee email addresses
- `timezone` (string, optional) — Timezone for start/end times (e.g. "America/New_York"). Defaults to "UTC"
Output:
{
"message": "Event created successfully",
"event": { "id": "...", "summary": "Lunch", ... }
}
Creates a calendar event from a plain-text description (e.g. "Lunch with John tomorrow at 12pm").
Inputs:
- `text` (string, required) — Natural language event description
- `calendar_id` (string, optional) — Target calendar. Defaults to "primary"
Output:
{
"message": "Event created successfully",
"event": { "id": "...", "summary": "Lunch with John", ... }
}
Updates one or more fields of an existing event. Only provided fields are changed; others are preserved.
Inputs:
- `event_id` (string, required) — ID of the event to update
- `calendar_id` (string, optional) — Calendar containing the event. Defaults to "primary"
- `summary` (string, optional) — New event title
- `start_time` (string, optional) — New start time in ISO 8601 format
- `end_time` (string, optional) — New end time in ISO 8601 format
- `description` (string, optional) — New event description
- `location` (string, optional) — New event location
- `timezone` (string, optional) — Timezone for updated times. Defaults to "UTC"
Output:
{
"message": "Event updated successfully",
"event": { "id": "...", ... }
}
Permanently deletes an event from the specified calendar.
Inputs:
- `event_id` (string, required) — ID of the event to delete
- `calendar_id` (string, optional) — Calendar containing the event. Defaults to "primary"
Output:
{
"message": "Event evt123 deleted successfully"
}
Searches across event titles, descriptions, and locations on a calendar.
Inputs:
- `query` (string, required) — Search text
- `calendar_id` (string, optional) — Calendar to search. Defaults to "primary"
- `max_results` (integer, optional) — Maximum results to return. Defaults to 10
Output:
{
"count": 1,
"events": [{ "id": "...", "summary": "Project Kickoff", ... }]
}
Returns events starting from now through a specified number of days ahead.
Inputs:
- `days` (integer, optional) — Number of days to look ahead. Defaults to 7
- `calendar_id` (string, optional) — Calendar to query. Defaults to "primary"
- `max_results` (integer, optional) — Maximum results to return. Defaults to 10
Output:
{
"count": 5,
"events": [{ "id": "...", "summary": "Weekly Sync", ... }]
}
Returns all events scheduled for the current calendar day.
Inputs:
- `calendar_id` (string, optional) — Calendar to query. Defaults to "primary"
Output:
{
"count": 3,
"events": [{ "id": "...", "summary": "Morning Standup", ... }]
}
Adds one or more attendees to an event and sends them invitations.
Inputs:
- `event_id` (string, required) — ID of the event to update
- `attendee_emails` (list[string], required) — Email addresses to add
- `calendar_id` (string, optional) — Calendar containing the event. Defaults to "primary"
Output:
{
"message": "Attendees added successfully",
"event": { "id": "...", "attendees": [...], ... }
}
Queries the free/busy schedule of one or more calendars within a time window.
Inputs:
- `time_min` (string, required) — Start of query window in ISO 8601 format with Z suffix (e.g. "2026-01-08T09:00:00Z")
- `time_max` (string, required) — End of query window in ISO 8601 format with Z suffix
- `calendar_ids` (list[string], optional) — List of calendar IDs to query. Defaults to ["primary"]
Output:
{
"calendars": {
"primary": { "busy": [{ "start": "...", "end": "..." }] }
}
}
Moves an existing event from one calendar to another.
Inputs:
- `event_id` (string, required) — ID of the event to move
- `source_calendar_id` (string, required) — Calendar currently holding the event
- `destination_calendar_id`(string, required) — Calendar to move the event into
Output:
{
"message": "Event moved successfully",
"event": { "id": "...", ... }
}
Creates an event that repeats on a schedule defined by an RRULE string.
Inputs:
- `summary` (string, required) — Event title
- `start_time` (string, required) — First occurrence start time in ISO 8601 format
- `end_time` (string, required) — First occurrence end time in ISO 8601 format
- `recurrence_rule` (string, required) — RRULE string (e.g. "RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR")
- `calendar_id` (string, optional) — Target calendar. Defaults to "primary"
- `description` (string, optional) — Event description
- `location` (string, optional) — Event location
- `timezone` (string, optional) — Timezone for event times. Defaults to "UTC"
Output:
{
"message": "Recurring event created successfully",
"event": { "id": "...", "recurrence": ["RRULE:FREQ=WEEKLY;..."], ... }
}
calendar_id — Google Calendar ID. Use "primary" for the user's default calendar, or a full calendar ID like "user@example.com" for others. Retrieve IDs via list_calendars.max_results — Caps the number of items returned. Maximum accepted by the Google API is 2500.timezone — IANA timezone string (e.g. "America/New_York", "Europe/London"). Applied to start_time and end_time when creating or updating events.Event times (create/update):
Format: YYYY-MM-DDTHH:MM:SS
Example: 2026-01-08T14:30:00
With timezone offset:
Example: 2026-01-08T14:30:00-05:00
Query range times (list/free-busy):
Format: YYYY-MM-DDTHH:MM:SSZ (UTC, Z suffix required)
Example: 2026-01-08T00:00:00Z
Recurrence rules (RRULE):
Daily: RRULE:FREQ=DAILY
Weekly Mon/Wed/Fri: RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR
Monthly on 15th: RRULE:FREQ=MONTHLY;BYMONTHDAY=15
Authorization: Bearer YOUR_API_KEY and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are presentX-Mewcp-Credential-Id header{server-name}/mcp/{tool-name}Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.