Open source · Self-hostable · Headless REST + MCP
Scheduling infrastructure for your team
Availability, routing, assignment, and bookings behind one binary and a Postgres database. Drive it from the booking page, the REST API, or an MCP tool — the same commands, the same guarantees.
opencal.example/book/acme/discovery-call
The real booking page — the slot picker, the stated time zone, and the explicit confirm are the product, not a mock-up drawn for this page.
- 0
- emails to schedule a meeting
- 1
- binary and a Postgres database
- REST + MCP
- same commands, two surfaces
- 1 page
- to book, with an explicit confirm
One flow, from the first question to the follow-up
Not just a booking link. Every stage of a scheduled meeting is a command with an audit trail behind it, so the same booking can be driven by a form, an API call, or an agent.
- IntakeA routing form asks only what the booking needs, with conditional steps and validation.
- RouteAnswers select the destination event and the pool of eligible hosts by typed attributes.
- AssignOne-to-one, group, collective, or round-robin — the assignment mode picks the host.
- HoldThe chosen slot is held while the attendee confirms; abandoned holds expire on their own.
- ConfirmConfirmation snapshots the answers immutably and mirrors the event onto the host calendar.
- Follow upWorkflows send reminders and handle cancellation and reschedule from an opaque link.
What you get, stated plainly
- Headless by default
- Every booking action is a REST endpoint and an MCP tool, so scheduling drops into an existing product or an AI agent without a second integration.
- Assignment modes
- One-to-one, group with capacity, collective with named roles, and round-robin — configured per event type, not bolted on.
- Real time zones
- Times are stated in the reader's own zone by full name, never an ambiguous abbreviation, and re-confirmed in both zones before the commit.
- Calendars stay honest
- Connected calendars block availability and receive booking events; a calendar that fails to sync fails closed rather than double-booking.
- Yours to run
- Open source and self-hostable: one binary, a Postgres database, and no external service required to take a booking.
Ready to set it up?
Free to use. Self-host it, or ask an administrator for an invitation to a workspace.