Schedule MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOTION_TOKEN | Yes | Notion integration token. | |
| LOCAL_TIMEZONE | No | Timezone (e.g., 'America/Los_Angeles'). | |
| GOOGLE_TOKEN_FILE | No | Path to Google OAuth token file (auto-generated if not set). | |
| NOTION_TASKS_DB_ID | Yes | Notion Tasks database ID. | |
| GOOGLE_CREDENTIALS_FILE | Yes | Path to Google OAuth credentials JSON file (default: ~/.schedule_mcp/google_credentials.json). | |
| NOTION_APPOINTMENTS_DB_ID | Yes | Notion Appointments database ID. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gcal_list_calendarsA | List all Google Calendars the user has access to. Returns: str: JSON array of calendars with id, summary, and primary flag. |
| gcal_get_eventsA | Fetch Google Calendar events within a date range. Returns a list of events with their IDs, titles, start/end times, descriptions, and locations. Use the event ID with other tools to update or delete specific events. Args: params.start_date: Start of the date range (ISO date string). params.end_date: End of the date range (ISO date string). params.calendar_id: Calendar to query (default: primary). params.max_results: Max events to return (default: 50). Returns: str: JSON array of event dicts. |
| gcal_create_eventA | Create a new Google Calendar event. When creating work blocks for Notion tasks, include the task's Notion URL in the description so there's a direct link from the calendar event to the task. Args: params.title: Event title. params.start: ISO datetime string for start time. params.end: ISO datetime string for end time. params.description: Optional description (include Notion task URL here for task blocks). params.location: Optional location. params.calendar_id: Target calendar (default: primary). Returns: str: JSON dict of the created event including its 'id'. |
| gcal_update_eventA | Update one or more fields on an existing Google Calendar event. Only provided fields are changed; omitted fields remain as-is. Args: params.event_id: ID of the event to update. params.calendar_id: Calendar containing the event. params.title/start/end/description/location: Fields to update. Returns: str: JSON dict of the updated event. |
| gcal_delete_eventA | Permanently delete a Google Calendar event. This action cannot be undone. Confirm the event ID with gcal_get_events before deleting. Args: params.event_id: ID of the event to delete. params.calendar_id: Calendar containing the event. Returns: str: Confirmation message. |
| gcal_find_free_slotsA | Find available time slots of a given duration on a specific date. Useful for scheduling work blocks, appointments, or any time-bound task. Returns all slots with at least the requested duration available. Args: params.date: The date to check (ISO date string). params.duration_minutes: How long the slot needs to be (in minutes). params.earliest_hour: Don't suggest slots starting before this hour. params.latest_hour: Don't suggest slots ending after this hour. params.calendar_id: Calendar to check for conflicts. Returns: str: JSON array of available slots with 'start' and 'end' ISO datetimes. |
| notion_get_appointmentsA | Query the Notion Appointments database with optional filters. Returns appointments with Notion ID, title, start/end times, type, status, notes, and linked Google Calendar event ID (if synced). Args: params.start_date: Only return appointments from this date onwards. params.end_date: Only return appointments up to this date. params.appointment_type: Filter by Medical, Personal, Work, or Other. params.status: Filter by Scheduled, In progress, or Completed. Returns: str: JSON array of appointment dicts. |
| notion_create_appointmentA | Create a new appointment in the Notion Appointments database. When syncing from Google Calendar, always pass the gcal_event_id to prevent duplicates. When creating a new appointment from scratch, omit gcal_event_id and use gcal_create_event separately to sync it to Google Calendar. Args: params.title: Appointment name. params.start/end: ISO datetime strings. params.appointment_type: Medical, Personal, Work, or Other. params.notes: Optional notes. params.gcal_event_id: Google Calendar event ID (if syncing from GCal). params.gcal_series_id: Google Calendar series ID (for recurring appointments). params.recurring: One-Time, Limited Recurring, or Recurring. Returns: str: JSON dict of the created appointment including Notion ID. |
| notion_update_appointmentA | Update fields on an existing Notion appointment. Only provided fields change. Args: params.notion_id: The Notion page ID (from notion_get_appointments). params.*: Any fields to update. Returns: str: JSON dict of the updated appointment. |
| notion_get_appointment_by_gcal_idA | Find a Notion appointment by its linked Google Calendar event ID. Use this before syncing to check whether a calendar event already has a corresponding Notion record, preventing duplicate entries. Args: params.gcal_event_id: Google Calendar event ID to search for. Returns: str: JSON dict of the appointment if found, or a not-found message. |
| notion_get_tasksA | Query the Notion Tasks database with optional filters. Returns tasks with their Notion IDs, names, statuses, due dates, and Notion URLs (for linking in calendar event descriptions). Args: params.status: Filter by Not started, In progress, Done, Archived, or Overdue. params.due_before: Only return tasks due on or before this date. params.due_after: Only return tasks due on or after this date. Returns: str: JSON array of task dicts. |
| notion_get_overdue_tasksA | Return all overdue tasks — either explicitly marked Overdue or with a due date in the past that isn't marked Done, Archived, or Overdue. Returns: str: JSON array of overdue task dicts. |
| notion_create_taskA | Create a new task in the Notion Tasks database. Args: params.name: Task name. params.due_date: Optional due date (ISO date string). params.status: Initial status (default: Not started). Returns: str: JSON dict of the created task including its Notion ID and URL. |
| notion_update_taskA | Update fields on an existing Notion task. Only provided fields change. Args: params.notion_id: Notion page ID (from notion_get_tasks). params.name/status/due_date: Fields to update. Returns: str: JSON dict of the updated task. |
| schedule_week_overviewA | Get a unified overview of a week: calendar events, Notion appointments, and tasks due that week. This is the primary 'how does my week look?' tool. It pulls from all three sources and returns a combined view so you can see everything in context — scheduled appointments, work blocks, and upcoming deadlines. Args: params.date: Any date in the target week (defaults to current week). Returns: str: JSON with 'week_range', 'calendar_events', 'appointments', 'tasks_due', and 'overdue_tasks' keys. |
| schedule_task_blockA | Schedule a focused work block for a Notion task on Google Calendar. Creates a Google Calendar event with the task name as the title and a link to the Notion task in the description. The task itself is NOT modified — this just blocks time and creates a visible pointer. Typical workflow: 1. notion_get_tasks → find the task and get its ID and URL 2. gcal_find_free_slots → find available time 3. schedule_task_block → create the calendar event with Notion link Args: params.task_notion_id: Notion page ID of the task. params.task_name: Task name (used as event title). params.task_url: Notion URL (embedded in event description). params.start/end: ISO datetime strings for the work block. params.calendar_id: Target calendar. Returns: str: JSON with the created calendar event and a confirmation. |
| schedule_find_conflictsA | Detect overlapping events or tight transitions in a date range. Checks Google Calendar events for: exact overlaps, events with fewer than 10 minutes between them (tight transitions), and events longer than 4 hours (marathon sessions worth flagging). Args: params.start_date: Start of the range to scan. params.end_date: End of the range to scan. params.calendar_id: Calendar to check. Returns: str: JSON with lists of overlaps, tight transitions, and long events. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/jameslundie42/schedule-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server