Most calendars make agents scrape a screen or borrow a password. Windy Calendar gives them a real door: they prove who they are, ask for what they need, and the owner stays in charge.
Every call carries an Eternitas passport (an EPT). Windy Calendar checks its signature, the signed revocation list and the live status feed on every request. No passport, no tools.
The passport names the agent’s human owner, and that owner’s calendar is the one it can use. An agent can’t reach anyone else’s calendar.
What an agent may do depends on its live Eternitas trust score, the owner’s limits for that agent, and whether the change touches someone else.
Two endpoints over plain HTTPS. GET /tools lists what this agent may use; POST /invoke runs one.
POST https://windycalendar.com/invoke
Authorization: Bearer <your Eternitas passport token>
Content-Type: application/json
{"name": "book_appointment",
"arguments": {"starts_at_utc": "2026-10-14T18:00:00Z",
"booker_name": "Sarah Lee", "booker_email": "sarah@example.com",
"idempotency_key": "intro-sarah-2026-10-14"}}
idempotency_key and a retry returns the first booking instead of a second one.slot_taken and the next open times.confirm_required (waiting in the owner’s Windy Inbox), rate_limited (the owner’s daily limit), agent_blocked (the owner turned you off).27 tools, from the live contract control.mcp.v1.
| Tool | What it does | Access |
|---|---|---|
get_health | The FIRST tool to call when the owner says anything is wrong with their bookings. | reads |
get_status | Read what Windy Calendar is doing right now: the running version, whether the database is reachable, and how many appointments are on the books coming up. | reads |
get_config | Read the owner's effective Windy Calendar configuration (secrets omitted): their timezone, the address confirmation email is sent from, and their reminder cadence. | reads |
get_logs | Read the owner's recent Windy Calendar activity log when something seems off — bookings, cancellations, availability changes — as a timeline of what happened. | reads |
run_selftest | Actively test whether Windy Calendar's core booking path works right now: it checks the atomic slot-lock index is present, confirms the database answers a query, and confirms an .ics invite can be generated. | reads |
get_capabilities | Probe which Windy Calendar features actually work for this owner right now — taking bookings, sending confirmation email, sending reminders, and generating calendar invites — each reported as supported, unsupported, or unknown (probed, never assumed). | reads |
reconnect | Re-establish and verify Windy Calendar's connection to its database without restarting anything. | reads |
check_for_update | Ask whether a newer version of Windy Calendar is available. | reads |
list_settings | List every setting the owner can change — their timezone, display name, the from-address, and their reminder cadence — each with its type, current value, and a plain description. | reads |
set_setting | Change one Windy Calendar setting by its path (from list_settings) — e.g. | asks first below top trust |
undo_last_change | Undo the most recent setting change, stepping back through the owner's change history. | asks first below top trust |
enter_safe_mode | Pause taking NEW bookings — the safe state when something seems wrong with intake. | reads |
exit_safe_mode | Leave safe mode and resume taking new bookings. | asks first below top trust |
reset_to_defaults | Reset the owner's notification and display settings to their defaults — reminder cadence back to day-before-and-hour-before, and resume bookings if paused. | always confirms |
list_appointments | Show the owner what is booked — the 'you've got two knitting lessons Tuesday' call an agent makes every morning. | reads |
get_appointment | Read one booking's full detail by its id — the time, the booker's name and contact, the location, and its status. | reads |
get_availability | List the open, bookable slots for a date range, rendered in a given timezone. | reads |
set_availability | Define or replace the owner's weekly open hours and slot length — e.g. | asks first below top trust |
block_time | Mark a stretch of time off — a vacation, an appointment elsewhere, 'gone fishing'. | asks first below top trust |
book_appointment | Create a booking on the owner's behalf — an agent booking a slot for a caller. | asks first below top trust |
reschedule_appointment | Move an existing booking to a new open slot and re-notify both the owner and the booker. | asks first below top trust |
cancel_appointment | Cancel a booking, free its slot atomically, and notify the other party. | asks first below top trust |
set_reminder_policy | Change how far ahead reminder emails go out, separately for the owner and the booker — e.g. | asks first below top trust |
set_meeting_location | Set where a specific appointment happens — a physical address for in-person work (the carpenter, the in-home lesson) OR a meeting link for remote (a consultant, a future Windy Chat video room). | asks first below top trust |
get_booking_page | Return the public booking-page URL the owner shares so customers can book themselves — no account required of the customer. | reads |
get_calendar_feed | Return the read-only .ics subscription URL so the owner can pull their Windy Calendar bookings into their own Google, Apple, or Outlook calendar, with no login and no two-way sync. | reads |
rotate_feed_token | Issue a new secret token for the owner's .ics feed and week view, revoking every previously shared feed or calendar URL. | asks first below top trust |