Kairos
Allows using Apache as a reverse proxy for authentication, enabling single sign-on and identity-based access control.
Allows using Authelia as an authentication reverse proxy, providing single sign-on and identity verification.
Allows using Cloudflare Access for identity-based authentication via reverse proxy headers.
Allows using Tailscale for identity-based authentication via reverse proxy headers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kairoscreate a poll for Friday team lunch"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kairos
Website · ▶ Try it in your browser — the actual Python server on Pyodide/WASM, nothing leaves your machine.
when2meet-style scheduling polls — self-hostable, reverse-proxy-auth friendly, agent-first API (OpenAPI + llms.txt + MCP).
Quickstart
uvx --from kairos-scheduler kairos # SQLite + demo auth on :8003or with Docker / a real database:
KAIROS_DB_URL=mysql://user:pass@host:3306/db \
KAIROS_AUTH=header SESSION_SECRET=$(openssl rand -hex 32) \
uvx --from 'kairos-scheduler[mysql]' kairos --host 0.0.0.0Related MCP server: timergy
Features
Full-day or time-slot polls, when2meet drag grids, heatmaps
Public share links + personal email invites (required/optional participants)
Convergence light: collecting → ready / partial / blocked
Idempotent smart reminders + per-participant contact audit trail
Decide a final date → .ics download + "email everyone" with the file attached
Light/dark colorblind-friendly theme (Dalton)
Agents: REST API (Bearer),
/llms.txt, OpenAPI, Swagger UI, MCP serverReverse-calendar (optional): push candidate slots into the respondent's calendar instead of reading their free/busy — subscribe-able feeds + native iMIP Accept/Maybe/Decline. Off by default (see below).
Reverse the calendar (iMIP) — optional
Instead of asking for calendar access, Kairos can push the candidate slots into the respondent's calendar and let them Accept/Maybe/Decline — capturing what's truly blocking, not mechanical free/busy. Two layers, both opt-in:
Candidate feed (
KAIROS_FEED=on) — a subscribe-able, disposable.icscalendar of the poll's slots. The per-invite feed (/p/i/<token>/feed.ics) embeds deep-link Accept/Maybe/Decline URLs; tapping one records that slot and lands on the poll page (the instant surface — subscribed feeds refresh slowly, Google ~daily, so never rely on the calendar reflecting a vote quickly).Native iMIP invitations (
KAIROS_IMIP=on) — realMETHOD:REQUESTinvites with Accept/Maybe/Decline buttons.KAIROS_IMIP_ORGANIZERis the mailbox replies route to; it must equal the IMAP mailbox Kairos polls (KAIROS_IMAP_HOST/PORT/USER/PASSWORD/MAILBOX). SchedulePOST /api/imip/poll(cron / systemd timer, Bearer auth) to ingest replies;POST /api/polls/{id}/imip-decisionsends the decided slot as a native invite.
Cross-client reality (verified live): Outlook and Apple render native Accept/Maybe/Decline; Gmail does not for a Gmail-organized event (Google policy) — the deep-link Accept/Maybe/Decline in the event description covers it, so every client gets one-click RSVP. For native Gmail RSVP, use a non-Gmail (custom-domain) organizer.
Agent-native (no API key): the invite link self-describes —
GET /p/i/<token>/agent.json returns the options, your current vote, and the
one-click vote URLs (also feed.ics, and /s/<slot>/<yes|maybe|no> to vote).
Hand your assistant the link and it RSVPs for you. See /llms.txt.
See docs/design/reverse-calendar-imip.md and issue #23 for the full design.
Deployment model
Kairos trusts identity headers from whatever reverse proxy you already run
(KAIROS_AUTH=header): Shibboleth/Apache, oauth2-proxy, Authelia, Cloudflare
Access, Tailscale… Respondents never need accounts — share links and invite
tokens are self-contained. See kairos/settings.py for all env knobs.
Cookie note for operators: Kairos sets only strictly-necessary cookies (session, signed response-edit token, theme preference) — disclosed on
/privacy, no consent banner required (ePrivacy Art. 5(3) / Swiss TCA 45c exemptions). If you add analytics or any third-party embeds to your deployment, that changes — you'll need consent management.
This server cannot be deployed
Maintenance
Related MCP Connectors
Agent-first meeting schedule polls for humans and agents. Create polls, vote, find times.
Free no-signup group scheduling (a modern When2meet): share one link, find a time for everyone.
Find a time a group can meet: no-login availability poll that picks the best meeting slot.
Scheduling infrastructure for AI agents across Google and Microsoft calendars.
Related MCP Servers
- AlicenseAqualityCmaintenanceCalendar MCP server with atomic booking, conflict prevention, deterministic RRULE expansion, and TOON token compression for AI agents.1813MIT
- AlicenseAqualityCmaintenanceCreate scheduling polls (like Doodle) from AI agents. Find the best time for meetings, dinners, and events. 5 tools: create_poll, get_poll, vote_on_poll, get_results, finalize_poll. No authentication required.536 npm1MIT
- AlicenseAqualityBmaintenanceMCP server for a self-hostable personal planner — exposes memo, todo, calendar event, and cross-resource full-text search tools so Claude, Cursor, or any MCP client can manage your schedule and notes in natural language.181MIT
- AlicenseAqualityDmaintenanceMCP server that connects AI agents to calendars, bookings, and scheduling polls via the Model Context Protocol.224 npmMIT