MCP Server
Connect AI agents to Slatis over the Model Context Protocol — remote Streamable HTTP endpoint or local stdio server, 25 time-aware scheduling tools.
The Slatis MCP server gives any MCP-capable agent host (Claude Code, Cursor, custom agents) time-aware scheduling tools backed by the public API: discover event types, check availability and team capacity, run the full booking lifecycle, manage time layers and out-of-office, and read team-health analytics — with idempotent, retry-safe mutations and undo support.
Two ways to connect:
| Transport | URL / command | Best for |
|---|---|---|
| Remote (Streamable HTTP) | https://slatis.com/api/mcp | Hosts that support custom headers — zero install |
| Local (stdio) | npx @slatis/mcp | Hosts without header support, air-gapped configs |
Both speak to the same API with the same key — tools, scopes, and behavior are identical.
Authentication
Authenticate every request with your API key (Settings → API Keys):
- Header:
Slatis-Api-Key: sk_live_...(also accepted, in precedence order:x-api-key,Authorization: Bearer sk_live_...) pk_*public keys cover discovery + booking creation;sk_*secret keys unlock everything else (see the scope column in the tool reference below).
Treat the key like a password. The server never logs or echoes it, but your MCP host config stores it — use your host's secret management where available.
Remote setup
Claude Code
Cursor
.cursor/mcp.json:
Custom agents (TypeScript SDK)
The remote endpoint is stateless: no session ids, every request is self-contained, and JSON-RPC batching is not supported (one message per request). Hosts that require OAuth for remote connectors (claude.ai web, Claude Desktop connectors directory) are not yet supported — use the local stdio server there.
Local setup (stdio)
Claude Desktop (claude_desktop_config.json) or any host with command-based servers:
Environment variables: SLATIS_API_KEY (required), SLATIS_API_URL (optional,
defaults to production), SLATIS_API_TIMEOUT_MS (optional).
Rate limits
The remote endpoint shares your key's API rate limit. Each tool call costs two
rate-limit units (one for the MCP request, one for the underlying API call); protocol
messages like initialize and tools/list cost one. Standard X-RateLimit-* headers
apply. Defaults: 1000 req/min for secret keys, 100 req/min for public keys.
Tool reference
25 tools. The scope column shows the minimum key type and API scope; calls without
the scope fail with an actionable forbidden error naming the missing scope.
Discovery & availability
| Tool | Description | Key / scope |
|---|---|---|
list_event_types | Discover bookable services — call first | pk |
get_event_type | Detail + booking form fields | pk |
get_availability | Open slots by date range | pk |
check_slot | Preflight one specific slot | pk |
get_freebusy | Free/busy + working hours for a member | pk |
get_capacity | Team utilization, booked/available hours, timeline | pk |
list_team_members | Members, ids, skills | pk |
find_available_members | Who can take a booking on a date | pk |
Booking lifecycle
| Tool | Description | Key / scope |
|---|---|---|
create_booking | Book a slot (auto idempotency key, DRAFT→poll) | pk |
get_booking | Status/detail — poll until SCHEDULED | sk |
list_bookings | Filtered, paginated booking search | sk |
cancel_booking | Cancel with reason | sk |
reschedule_booking | Move to a new verified slot | sk |
confirm_booking | Confirm PENDING_CONFIRMATION | sk |
check_booking_guardrails | Preflight org booking policy before create_booking | sk |
log_time_entry | Record actual minutes on a completed booking | sk + time-entries:write |
Intelligence
| Tool | Description | Key / scope |
|---|---|---|
get_team_health | Aggregated team analytics: load distribution, burnout headcounts | sk + analytics:read |
score_slot | Rank candidate slots by calendar-health impact (max 10) | sk + analytics:read |
get_member_load | Individual load + burnout (org must opt in, else 403) | sk + analytics:read |
Time layers & OOO
| Tool | Description | Key / scope |
|---|---|---|
list_time_layers | List a user's working/bookable/break/OOO layers | sk + layers:read |
create_time_layer | Add a layer to a user's schedule (undoable) | sk + layers:write |
replace_time_layers | Replace ALL layers of given types — destructive, not undoable | sk + layers:write |
delete_time_layer | Soft-delete one layer (also the undo for create) | sk + layers:write |
create_ooo | Create out-of-office — always PENDING human approval | sk + layers:write |
cancel_ooo | Cancel an OOO entry (also the undo for create_ooo) | sk + layers:write |
Behavior notes for agent builders
- Idempotency — mutations auto-generate an idempotency key when omitted; retries
replay the original result (
idempotent_replay: true) instead of duplicating. - Undo — write commands return an
inverse_command;delete_time_layerundoescreate_time_layer,cancel_oooundoescreate_ooo.replace_time_layersis not invertible — the tool description warns the agent before use. - Human-in-the-loop — agent-created OOO is always created
PENDINGapproval, regardless of team settings. - Errors are prompts — every error returns an actionable next step (e.g. a booking
conflict tells the agent to call
get_availabilityfor alternatives). - Guardrails — org booking policies (max bookings per member/day, burnout
protection) are enforced server-side on
create_booking; usecheck_booking_guardrailsto preflight instead of burning a 422.