{"name":"io.github.syncday-app/sync-day","slug":"syncday-app-sync-day","title":null,"description":"Free no-signup group scheduling; share a link and rank times by who's free.","url":"https://mcp.market/server/syncday-app-sync-day","rating":null,"grade":"C","score":57,"certified":false,"status":"active","category":"seo","tags":["seo"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":5,"ok":5,"last_checked_at":"2026-09-20T18:26:21.688Z","last_ok_at":"2026-09-20T18:26:21.688Z","latency_ms":285},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://sync.day","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://sync.day/mcp/mcp"}],"packages":[],"tools":[{"name":"create_event","description":"Create a sync.day availability poll and get its share link. Candidate days run from startDate to endDate (inclusive; or give days instead). Each day offers candidate START times from hourFrom, every startStepMinutes, as long as start + durationMinutes <= hourTo. Returns slug, public url (share this), adminUrl and adminKey (keep private; needed for update_event / remove_participant). Example: 周六周日下午聚餐 3 小时 -> {title:'周末聚餐', startDate:'2026-09-05', endDate:'2026-09-06', hourFrom:13, hourTo:18, durationMinutes:180, startStepMinutes:60}.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":60,"description":"Event name, max 60 chars. e.g. 周末聚餐, Team sync"},"question":{"description":"Optional prompt shown to participants, max 200 chars. e.g. 哪天晚上有空？","type":"string","maxLength":200},"startDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First candidate day, YYYY-MM-DD. e.g. 2026-09-05"},"endDate":{"description":"Last candidate day, inclusive, YYYY-MM-DD (same as startDate for a single day; at most 21 days). Give this or days; endDate wins when both are set.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"days":{"description":"Number of consecutive days from startDate (1-21); alternative to endDate.","type":"integer","minimum":1,"maximum":21},"hourFrom":{"type":"integer","minimum":0,"maximum":23,"description":"Earliest hour of each day (0-23). e.g. 9"},"hourTo":{"type":"integer","minimum":1,"maximum":24,"description":"End of each day's window, exclusive (1-24), must be > hourFrom. e.g. 22"},"durationMinutes":{"anyOf":[{"type":"number","const":30},{"type":"number","const":60},{"type":"number","const":90},{"type":"number","const":120},{"type":"number","const":180},{"type":"number","const":240},{"type":"number","const":480}],"description":"Event length in minutes. One of 30, 60, 90, 120, 180, 240, 480."},"startStepMinutes":{"default":60,"anyOf":[{"type":"number","const":30},{"type":"number","const":60}],"description":"Gap between candidate start times in minutes: 30 or 60 (default 60)."}},"required":["title","startDate","hourFrom","hourTo","durationMinutes"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"decide_time","description":"Organiser only: settle on a start time (locks availability picking and voting; the page shows 已定). Pass start=null to reopen. Requires the adminKey from create_event.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"},"adminKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$","description":"Organiser key returned by create_event (the ?key= part of adminUrl)."},"start":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"},{"type":"null"}],"description":"A candidate start key of the event (normally one of voteOptions), or null to reopen."}},"required":["slug","adminKey","start"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_event","description":"Read an event: settings, every candidate start key per day (startOptions), who has answered (participants with their start keys; names may repeat), the top 10 start times by head-count (ranked), the starts EVERYONE with picks can make with their votes (voteOptions), each person's vote (votes) and decidedStart. No key needed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"}},"required":["slug"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"parse_event_text","description":"Turn a natural-language sentence (Chinese works best) into create_event input using sync.day's AI parser. Does NOT create anything; review the result, then call create_event. Example: '下周六或周日下午聚餐，大概 3 小时'.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":300,"description":"One sentence describing the event, max 300 chars."},"today":{"description":"Reference date for relative words like 明天/下周, YYYY-MM-DD. Defaults to today in Asia/Shanghai.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["text"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"remove_participant","description":"Organiser only: remove one participant by name (the oldest row with that name when it repeats), together with their vote. Requires the adminKey from create_event.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"},"name":{"type":"string","minLength":1,"maxLength":20,"description":"Exact participant name to remove."},"adminKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$","description":"Organiser key returned by create_event (the ?key= part of adminUrl)."}},"required":["slug","name","adminKey"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"submit_availability","description":"Save (or replace) one person's availability: the candidate start keys they can make, from get_event.startOptions. The person is identified by `identity`, not by name: the same identity later overwrites the same row (and can rename it), a different identity with the same name is a second participant. Keys outside the event's start options are rejected. Returns the updated ranking.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"},"identity":{"type":"string","minLength":16,"maxLength":256,"description":"Random secret for this person that you generate and keep per person, 16-256 chars (e.g. 32 hex chars; NOT a plain user id or name, since anyone who guesses it can act as them). Same identity = same participant; the server stores only a hash. Example: 3f9a1c77b2e04d5e8a61f0c9d2b7e415"},"name":{"type":"string","minLength":1,"maxLength":20,"description":"Display name, 1-20 chars, may repeat. e.g. 小明"},"starts":{"maxItems":1008,"type":"array","items":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"},"description":"Start keys like 2026-09-05T14:00. Empty array clears this person's picks."}},"required":["slug","identity","name","starts"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"update_event","description":"Organiser only: change any event settings (same fields and rules as create_event; omitted fields keep their current value; endDate wins over days). Existing picks are kept; those no longer valid starts are just hidden.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"},"adminKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$","description":"Organiser key returned by create_event (the ?key= part of adminUrl)."},"title":{"type":"string","minLength":1,"maxLength":60,"description":"Event name, max 60 chars. e.g. 周末聚餐, Team sync"},"question":{"description":"Optional prompt shown to participants, max 200 chars. e.g. 哪天晚上有空？","type":"string","maxLength":200},"startDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"First candidate day, YYYY-MM-DD. e.g. 2026-09-05"},"endDate":{"description":"Last candidate day, inclusive, YYYY-MM-DD (same as startDate for a single day; at most 21 days). Give this or days; endDate wins when both are set.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"days":{"description":"Number of consecutive days from startDate (1-21); alternative to endDate.","type":"integer","minimum":1,"maximum":21},"hourFrom":{"type":"integer","minimum":0,"maximum":23,"description":"Earliest hour of each day (0-23). e.g. 9"},"hourTo":{"type":"integer","minimum":1,"maximum":24,"description":"End of each day's window, exclusive (1-24), must be > hourFrom. e.g. 22"},"durationMinutes":{"anyOf":[{"type":"number","const":30},{"type":"number","const":60},{"type":"number","const":90},{"type":"number","const":120},{"type":"number","const":180},{"type":"number","const":240},{"type":"number","const":480}],"description":"Event length in minutes. One of 30, 60, 90, 120, 180, 240, 480."},"startStepMinutes":{"default":60,"anyOf":[{"type":"number","const":30},{"type":"number","const":60}],"description":"Gap between candidate start times in minutes: 30 or 60 (default 60)."}},"required":["slug","adminKey"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"vote_time","description":"Approval voting: set every start one person accepts (replaces their earlier approvals; an empty list clears them). The voter is the `identity` used in submit_availability and must have at least one start saved. Only keys listed in get_event.voteOptions are accepted; the error lists the current options otherwise. Rejected once the organiser decided. Example: {slug:'calm-otter-4821', identity:'3f9a1c77b2e04d5e8a61f0c9d2b7e415', starts:['2026-09-05T15:00','2026-09-06T10:00']}. `start` is shorthand for a single-item `starts`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$","description":"Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"},"identity":{"type":"string","minLength":16,"maxLength":256,"description":"Random secret for this person that you generate and keep per person, 16-256 chars (e.g. 32 hex chars; NOT a plain user id or name, since anyone who guesses it can act as them). Same identity = same participant; the server stores only a hash. Example: 3f9a1c77b2e04d5e8a61f0c9d2b7e415"},"starts":{"description":"All start keys this person accepts (from get_event.voteOptions); [] clears their approvals","maxItems":500,"type":"array","items":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$","description":"Start key, e.g. 2026-09-05T15:00"}},"start":{"description":"Shorthand for starts: [start]","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"}},"required":["slug","identity"],"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":57,"grade":"C","scanned_at":"2026-09-20T11:38:16.211Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:38:16.156Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1782ms"]},"poisoning":{"score":15,"max":15,"notes":["8 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 4 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://sync.day/mcp/mcp","reachable":true,"authRequired":false,"latencyMs":1782,"serverInfo":{"name":"sync.day","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://sync.day/icon.svg?e1b3b8c72bee198f","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}