All systems operational
v0.1.0-alpha
REST · gRPC · MCP · CalDAV · iTIP · RFC 7953

Scheduling infrastructure for every stack.

Conflict-free booking across Google, Outlook, and Apple ; surfaced through REST, gRPC, MCP, or native CalDAV. Define your services, set your availability windows, and let Hermers handle the rest: free-busy resolution, appointment lifecycle, and iTIP dispatch to guests.

4+ sync platforms GOOGLE · OUTLOOK · APPLE · CALDAV
<1ms availability resolution MATERIALIZED CACHE
4 RSVP states tracked INVITED · ACCEPTED · DECLINED · TENTATIVE
iTIP auto REQUEST & CANCEL RFC 5546 DISPATCH
REST gRPC · MCP · CalDAV ALL ACCESS MODES
// ACCESS.LAYER ALL MODES

Access scheduling from everywhere.

Every scheduling capability ; availability queries, appointment creation, service definitions, RSVP tracking ; is available through the same four access modes. Use the REST API from your backend, gRPC from your agent, MCP from your LLM, or CalDAV from your calendar app.

REST API

Backend integration

Full CRUD for services, appointments, guests, availability windows, and scheduling links over standard JSON HTTP.

  • GET /v1/scheduling/availability
  • POST /v1/scheduling/appointments
  • GET /v1/scheduling/services
  • POST /v1/scheduling/links
gRPC

Real-time booking streams

Stream live appointment updates and availability changes for real-time UIs and AI agent polling.

  • SchedulingService/GetAvailability
  • SchedulingService/StreamBookings
  • SchedulingService/CreateAppointment
  • SchedulingService/CancelAppointment
Model Context Protocol

Agents that can schedule

Let your LLM check availability and book appointments on behalf of users, without ever touching raw calendar data.

  • hermes_get_availability
  • hermes_book_appointment
  • hermes_list_appointments
  • hermes_cancel_appointment
Native CalDAV

Calendar apps just work

Appointments appear directly in Apple Calendar, Thunderbird, or GNOME Calendar ; no separate integration needed.

  • Appointments sync as iCalendar VEVENTs
  • RSVP status reflected in ATTENDEE fields
  • Cancel flows fire standard iTIP CANCEL
  • VAVAILABILITY windows visible via CalDAV
// AVAILABILITY.ENGINE SYNCED

Cross-platform availability in under a millisecond.

Connect your Google, Outlook, Apple, or any CalDAV calendar. Hermers materializes a unified free-busy cache across all connected feeds. When you query availability for a participant, there is no live fetch ; the answer is already there.

MATERIALIZED CACHE

Free-Busy Resolution

Every connected feed is synced into a single busy-block table. Hermers detects conflicts before writing appointments and never double-books a slot.

  • Connect Google Calendar via OAuth 2.0 in one step
  • Connect Outlook via Microsoft Graph or CalDAV
  • Connect Apple iCloud Calendar via CalDAV and app-specific password
  • Connect any CalDAV-compliant provider via standard URL
  • Busy blocks updated atomically when connected feeds sync
  • Hermers-native calendar events automatically write to the busy cache
AVAILABILITY WINDOWS

Recurring Windows & Overrides

Define when you're bookable with recurring weekly availability windows. Override specific dates to block time off, extend availability, or add one-off working hours.

  • Weekly availability windows: Mon–Fri 09:00–17:00, or any custom schedule
  • Per-date overrides: block a holiday, add weekend availability, adjust a single day
  • Buffer time before and after appointments to prevent back-to-back bookings
  • Minimum notice period: prevent same-day bookings if needed
  • Max bookings per day cap per service type
  • Timezone-aware: windows and overrides stored in your timezone, surfaced in the requester's
// REST API ; QUERY CROSS-PLATFORM AVAILABILITY TYPESCRIPT
const slots = await client.scheduling.getAvailability({
  participants: ['alice@acme.io', 'bob@acme.io'],
  duration: 30, // minutes
  start: '2025-09-01',
  end: '2025-09-07',
  timezone: 'Africa/Nairobi',
});

console.log(slots.available);
// [ "Mon 09:00–09:30", "Tue 14:00–14:30", "Thu 10:00–10:30" ]
// Checked against Google, Outlook, and Hermers native events.
// Cache hit ; resolved in 0.3ms.
// BOOKING.SERVICES AUTOMATED

Services, appointments, and the full lifecycle.

Define what you offer ; a 30-minute intro call, a 60-minute consultation, a 15-minute check-in ; and let Hermers enforce the booking rules. Every appointment flows through a structured lifecycle from pending to confirmed to cancelled, with iTIP dispatch at each transition.

BOOKING SERVICES

Define What You Offer

Service definitions describe what can be booked: the name, duration, buffer times, maximum guests, and which calendar it lands in. Create as many services as you need and expose them independently via scheduling links.

  • Custom name, description, and duration per service type
  • Pre-buffer and post-buffer time to prevent back-to-back bookings
  • Maximum guest count per appointment slot
  • Target calendar: choose which calendar receives the created event
  • Active/inactive toggle ; pause a service without deleting it
  • Linked to one or more scheduling link URLs for public booking
APPOINTMENT LIFECYCLE

Pending → Confirmed → Done

Every appointment moves through a structured state machine. Transitions fire atomic busy-block writes and iTIP email dispatches in the same atomic transaction ; no race conditions, no double-bookings.

  • pending: slot is soft-blocked, iTIP REQUEST sent to guests
  • confirmed: slot is hard-blocked in the free-busy cache
  • cancelled: busy block removed, iTIP CANCEL dispatched to all guests
  • rescheduled: old block released, new block written, iTIP update sent
  • All transitions trigger the appointment.* webhook events
  • Host and guests receive appropriate iTIP METHOD at each transition
// SCHEDULING.LINKS LIVE

Let guests book without the back-and-forth.

Generate a scheduling link for any service. Share it with guests. They see real-time availability ; resolved against all your connected calendars ; and book directly into your Hermers calendar. No email chains, no copy-pasting times across time zones.

SCHEDULING LINKS

Public Booking Pages

Every service gets a unique scheduling link. Customize the slug, set an expiry, cap the total bookings, and embed it anywhere. Links enforce all your availability rules in real time.

  • Custom slug: hermes.io/book/alice/intro-call
  • Optional booking cap ; deactivates the link after N appointments
  • Optional expiry date ; links auto-disable after a deadline
  • Configurable fields: name, email, and custom questions per service
  • Embeddable as an inline widget or redirect URL
  • Create and manage links via REST, gRPC, MCP, or the console
RSVP TRACKING

Guest Status at Every Stage

Every guest is tracked individually through the full RSVP lifecycle. Hermers fires iTIP METHOD emails automatically ; you never write scheduling email logic by hand.

  • Invited: guest notified, ATTENDEE status set to NEEDS-ACTION
  • Accepted: ATTENDEE status → ACCEPTED, RSVP logged in audit trail
  • Declined: ATTENDEE status → DECLINED, host notified via webhook
  • Tentative: ATTENDEE status → TENTATIVE, slot stays confirmed
  • iTIP REQUEST on confirmation, CANCEL on cancellation ; automatic
  • Guest RSVP status surfaced in the REST API and gRPC response
// CLI ; CREATE A SCHEDULING LINK BASH
# Define a bookable service
$ hermes services create
  --name "30-min Intro Call"
  --duration 30
  --buffer-pre 5 --buffer-post 5
Service S0Xa1b2... created

# Generate a scheduling link
$ hermes links create
  --service S0Xa1b2 --slug intro-call
Link created: hermes.io/book/alice/intro-call
Available slots resolved against 3 connected calendars.

# Check upcoming bookings
$ hermes appointments list --status pending,confirmed
2 appointments ; 1 confirmed, 1 awaiting RSVP
All features accessible via REST /v1/scheduling gRPC SchedulingService MCP hermes_book_appointment Native CalDAV
// BOOKING.FLOW AUTOMATED

How a booking flows.

From availability query to confirmed appointment with iTIP-notified guests, in four steps.

// 01 AVAILABILITY

Query free-busy

Hermers resolves availability across all connected calendar feeds. Slots are returned that fit your service duration, windows, and buffer rules ; in under a millisecond.

// 02 APPOINTMENT

Create & block

POST an appointment. Hermers writes a pending busy block atomically. The slot is soft-reserved immediately ; no race condition, no concurrent double-booking.

// 03 CONFIRM

Confirm the slot

Confirm the appointment. The busy block hardens to confirmed. The calendar event is written. Guests are tracked at invited status, ready to RSVP.

// 04 DISPATCH

iTIP to guests

iTIP REQUEST emails fire automatically. RSVP responses update the guest status in real time. Webhooks fire on every status change. Cancel at any time ; iTIP CANCEL goes out automatically.

// GET STARTED

Connect your first calendar.

Initialize a tenant, connect your Google or Outlook calendar, define a service, and generate your first scheduling link ; in under five minutes.

Connect a Calendar →
// DOCUMENTATION

Full scheduling API reference.

REST endpoints, gRPC service definitions, MCP tool schemas, webhook event payloads, and iTIP integration guide ; all in one place.

Read the Docs →