MCP server
sync.day is a public MCP (Model Context Protocol) server. Connect it to Claude, Cursor, ChatGPT or your own bot, and the AI can create events, fill in availability for people and check who is free when.
Endpoint
https://sync.day/mcp/mcpStreamable HTTP, stateless, no login and no API key. CORS is open. 60 requests per minute per IP. The legacy SSE transport (/mcp/sse) is not supported.
Tools
create_event- Create an event; returns the share link, organizer link and adminKey
parse_event_text- Turn a sentence (“dinner next Saturday afternoon, 3 hours”) into create_event input without creating anything
get_event- Read an event: settings, candidate start times per day, who responded, the top 10 start times, the times everyone can make with their votes, and the decided time
submit_availability- Save the start times one person can make (people are matched by identity; the same identity overwrites); returns the updated ranking
vote_time- Set every start one person accepts (matched by identity; any number, resubmitting replaces the set; they must have saved times first)
decide_time- Organizer settles the time (needs adminKey; null reopens); picking and voting lock afterwards
remove_participant- Organizer removes a participant (needs adminKey)
update_event- Organizer edits the settings (needs adminKey; omitted fields stay as they are)
Time keys are candidate start times such as 2026-09-05T14:00, taken from startOptions in get_event. The adminKey is for the organizer only; don’t post it in the group.
identity in submit_availability and vote_time is a random, hard-to-guess secret you generate and keep per person (at least 16 characters, e.g. 32 hex chars) — never a plain user id or name, since anyone who guesses it can act as that person on every event. The server stores only its hash; the same identity is the same person, and names are display-only and may repeat.
Claude Code
claude mcp add --transport http syncday https://sync.day/mcp/mcpClaude Desktop
Add the URL under Settings → Connectors, or put it in claude_desktop_config.json:
{
"mcpServers": {
"syncday": {
"url": "https://sync.day/mcp/mcp"
}
}
}Cursor
.cursor/mcp.json in the project (or the global ~/.cursor/mcp.json):
{
"mcpServers": {
"syncday": {
"url": "https://sync.day/mcp/mcp"
}
}
}Try it with curl
# initialize
curl -s https://sync.day/mcp/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
# tools/list
curl -s https://sync.day/mcp/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'Responses come as SSE (event: message followed by a data: line) wrapping JSON-RPC.
Typical conversation
“Set up dinner next Saturday or Sunday afternoon, 3 hours” → the AI calls parse_event_text then create_event and hands you the link; “Mark Sam as free Saturday 14:00 and 15:00” → submit_availability; “Which time works for the most people?” → get_event; “Sam votes for Saturday 15:00” → vote_time; “Let’s go with Saturday 15:00” → decide_time.