Connects Claude to Astrocal's scheduling API so your assistant can book, cancel, and reschedule meetings through conversation. Exposes eight tools including availability checks, booking creation, waitlist management, and event type listing. Works against real calendar data synced from Google Calendar, Microsoft 365, or CalDAV. Handles paid bookings through Stripe Connect if needed. Ships with sandbox mode for testing without sending emails or creating actual events. You'd reach for this if you want scheduling capabilities in Claude Desktop or any MCP client without building calendar integration yourself. Requires an Astrocal API key, then it's a single config block to enable all the scheduling tools.
ASTROCAL_API_KEY*secretYour Astrocal API key (get one at https://astrocal.dev/dashboard/api-keys)
ASTROCAL_API_URLCustom API base URL (defaults to https://api.astrocal.dev)
ASTROCAL_DEFAULT_EVENT_TYPE_IDDefault event type ID when not specified in tool calls
Give your AI agents the power to schedule meetings. The official Model Context Protocol server for Astrocal — the API-first scheduling platform built for developers and AI agents.
Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client. Your AI assistant can check availability, book meetings, cancel, reschedule, and manage waitlists — all through natural conversation.
Get your API key | Documentation | API Reference
ac_test_* keys. No emails sent, no calendar events created, no charges made.Add to your claude_desktop_config.json:
{
"mcpServers": {
"astrocal": {
"command": "npx",
"args": ["-y", "@astrocal/mcp-server"],
"env": {
"ASTROCAL_API_KEY": "ac_live_xxxxxxxxxxxxx"
}
}
}
}
Restart Claude Desktop and the scheduling tools will be available immediately.
Install globally:
npm install -g @astrocal/mcp-server
Run:
ASTROCAL_API_KEY=ac_live_xxx astrocal-mcp
| Variable | Required | Description |
|---|---|---|
ASTROCAL_API_KEY | Yes | Your Astrocal API key (get one free) |
ASTROCAL_API_URL | No | API base URL (default: https://api.astrocal.dev) |
ASTROCAL_DEFAULT_EVENT_TYPE_ID | No | Default event type ID — your agent won't need to specify it on every call |
check_availabilityCheck available time slots for booking.
event_type_id (string, optional) — Event type to check. Optional if ASTROCAL_DEFAULT_EVENT_TYPE_ID is set.start_date (string, required) — Start date in ISO 8601 format (e.g., 2026-03-15)end_date (string, required) — End date in ISO 8601 format (e.g., 2026-03-22)timezone (string, optional) — IANA timezone (e.g., America/New_York). Defaults to UTC.create_bookingBook a meeting at a specific time.
event_type_id (string, optional) — Event type to book. Optional if default is set.start_time (string, required) — ISO 8601 datetime (e.g., 2026-03-15T14:00:00Z)invitee_name (string, required) — Full name of the person bookinginvitee_email (string, required) — Email address for calendar invitationinvitee_timezone (string, optional) — IANA timezone. Defaults to UTC.notes (string, optional) — Meeting notes (max 1000 characters)cancel_bookingCancel an existing booking. The invitee receives a cancellation email automatically.
booking_id (string, required) — ID of the booking to cancelreason (string, optional) — Cancellation reason (max 500 characters)reschedule_bookingReschedule a booking to a new time. Check availability first.
booking_id (string, required) — ID of the booking to reschedulenew_start_time (string, required) — New time in ISO 8601 formatreason (string, optional) — Reason for rescheduling (max 500 characters)list_bookingsList bookings with optional filters.
status (string, optional) — Filter: confirmed, cancelled, or pending_paymentlimit (number, optional) — Max results (default: 10, max: 100)event_type_id (string, optional) — Filter by event typelist_event_typesList available event types that can be booked. No input required.
join_waitlistJoin the waitlist when all slots are full.
event_type_id (string, required) — Event type to join the waitlist forname (string, required) — Full nameemail (string, required) — Email addresspreferred_times (string, optional) — Preferred time ranges or notescheck_waitlistCheck your position on a waitlist.
waitlist_entry_id (string, required) — Waitlist entry ID returned from join_waitlistUser: "What meetings can I book?"
Agent: calls
list_event_types— "You have two event types: a 30-minute consultation (free) and a 1-hour strategy session ($50)."User: "Check if next Tuesday at 2pm is free for a consultation"
Agent: calls
check_availability— "Tuesday at 2pm is available."User: "Book it for jane@example.com"
Agent: calls
create_booking— "Done! Meeting confirmed for Tuesday, March 17 at 2:00 PM UTC with Jane. A calendar invitation has been sent."User: "Actually, move it to 3pm"
Agent: calls
reschedule_booking— "Rescheduled to 3:00 PM. Jane has been notified."
This MCP server is one of several ways to integrate with Astrocal:
@astrocal/react) — Typed hooks, provider, and booking widget for React apps@astrocal/widget) — Drop-in booking UI for any websiteCreate a free account to get started.
MIT