sync
Check availability, book meetings and find group times — without sharing your calendar.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"sync": {
"url": "https://sync.lucie.network/api/mcp"
}
}
}원격 엔드포인트
https://sync.lucie.network/api/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟢check_availability(handle, durationMinutes, viewerTimeZone, from, to)
Return the open meeting slots a Lucie Sync host offers, plus their booking rules (durations offered, minimum notice, how far ahead you can book, buffer between meetings). Returns only bookable slots and policy — never the host's raw calendar. Use this to find a time before proposing one to the user. Slots are absolute instants (ISO-8601 UTC). Pass the booker's viewerTimeZone so times display in THEIR local zone — the booker should never have to do time-zone math.
입력 스키마
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"description": "The host's booking handle, e.g. \"@alice\" or \"alice\" (from their lucie.network/book/@<handle> link). The leading @ is optional."
},
"durationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Desired meeting length in minutes. Must be one the host offers. Defaults to 30 if omitted."
},
"viewerTimeZone": {
"type": "string",
"description": "The booker's IANA time zone, e.g. \"Asia/Singapore\" or \"America/New_York\". Pass the booker's own zone so slots are shown in their local time. Defaults to the host's zone if omitted."
},
"from": {
"type": "string",
"description": "ISO-8601 start of the search window. Defaults to now + the host's minimum notice."
},
"to": {
"type": "string",
"description": "ISO-8601 end of the search window. Defaults to the host's max-advance horizon."
}
},
"required": [
"handle"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢book_meeting(handle, startAt, durationMinutes, bookerName, bookerEmail, ...)
Book a confirmed meeting on a Lucie Sync host's calendar at a specific start time. This is a real write: it creates a calendar event and emails both the host and the booker. Always call check_availability first and use one of the open slots it returns. Before calling, (1) show the booker the specific date/time you're about to book — in their own time zone — and get their explicit confirmation, and (2) collect their name, email, AND a brief reason for the meeting (ask for the reason if not given; it's required and shared with the host).
입력 스키마
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"description": "The host's booking handle, e.g. \"@alice\" or \"alice\" (the leading @ is optional)."
},
"startAt": {
"type": "string",
"description": "The exact ISO-8601 `start` value copied verbatim from a check_availability slot (an absolute UTC instant, e.g. 2026-07-28T17:00:00Z). Do NOT construct this from a local wall-clock time the booker said — that risks the wrong time zone; always copy the slot's start."
},
"durationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Meeting length in minutes. Must be one the host offers."
},
"bookerName": {
"type": "string",
"description": "Full name of the person the meeting is for (the booker)."
},
"bookerEmail": {
"type": "string",
"format": "email",
"description": "The booker's email. The confirmation and calendar invite are sent here."
},
"reason": {
"type": "string",
"minLength": 1,
"description": "A short description of why the booker wants to meet (the agenda / purpose). Required — ask the booker for it before booking. Shared with the host alongside the invite."
},
"viewerTimeZone": {
"type": "string",
"description": "The BOOKER's IANA time zone (e.g. America/New_York) — the same one you passed to check_availability. Their confirmation email and reminders are written in this zone, so without it they read the host's zone instead and have to do the time-zone maths themselves."
}
},
"required": [
"handle",
"startAt",
"durationMinutes",
"bookerName",
"bookerEmail",
"reason"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢find_group_times(handles, durationMinutes, viewerTimeZone, from, to)
Given several Lucie hosts (by @handle), return the meeting times when ALL of them are free — the intersection of their availability — for a meeting of the given length. Read-only: never books, never exposes anyone's raw calendar (only the shared open slots). Use it to propose a group time. Times are absolute instants; pass viewerTimeZone so they show in the organizer's local zone.
입력 스키마
{
"type": "object",
"properties": {
"handles": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 8,
"description": "The participants' booking handles, e.g. [\"@alice\", \"@bob\"]. The leading @ is optional."
},
"durationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Meeting length in minutes. Must be one every participant offers. Defaults to 30."
},
"viewerTimeZone": {
"type": "string",
"description": "The organizer's IANA time zone, e.g. \"America/New_York\". Common times are shown in this zone. Defaults to UTC."
},
"from": {
"type": "string",
"description": "ISO-8601 start of the search window."
},
"to": {
"type": "string",
"description": "ISO-8601 end of the search window."
}
},
"required": [
"handles"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_group_event(title, handles, organizerName, organizerEmail, durationMinutes, ...)
Create a Lucie group event (a poll) for several participants, pre-filled with candidate times when everyone is free (the intersection of their availability). Returns a vote link to share: participants pick which proposed times work, and people WITHOUT a Lucie handle can vote manually too. This is a write (creates a poll) but sends no emails and touches no calendars. Confirm the title, participants, and duration with the organizer before creating. Note: agent group scheduling is a Sync Pro feature — the organizer's email must be on Sync Pro (or a Lucie Membership).
입력 스키마
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "The meeting title, e.g. \"Q3 planning sync\"."
},
"handles": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 8,
"description": "Participants' @handles whose availability seeds the candidate times. The leading @ is optional."
},
"organizerName": {
"type": "string",
"minLength": 1,
"description": "The organizer's name (shown on the poll)."
},
"organizerEmail": {
"type": "string",
"format": "email",
"description": "The organizer's email."
},
"durationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Meeting length in minutes. Defaults to 30."
},
"timeZone": {
"type": "string",
"description": "IANA time zone for the poll's displayed times, e.g. \"America/New_York\". Defaults to UTC."
},
"from": {
"type": "string",
"description": "ISO-8601 start of the search window."
},
"to": {
"type": "string",
"description": "ISO-8601 end of the search window."
}
},
"required": [
"title",
"handles",
"organizerName",
"organizerEmail"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢book_group_meeting(participantHandles, startAt, durationMinutes, title, reason)
Confirm a group meeting at a specific time across several Lucie hosts (by @handle), creating ONE shared Google Calendar event with everyone invited. YOU (the connector's owner) are the organizer and host the event on your calendar — no organizer handle needed. This is a real write: it re-verifies every participant (you included) is free at that instant and refuses if anyone isn't — so it never double-books. Always call find_group_times first and copy an exact common-slot start. Before calling, confirm the time (in each person's zone), the participants, the title, and the reason. Requires you to be on Sync Pro (or a Lucie Membership) via your personal connector; everyone must have a live booking page.
입력 스키마
{
"type": "object",
"properties": {
"participantHandles": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 8,
"description": "The other participants' @handles, e.g. [\"@lucie\", \"@taylor\"]. Each must have a live Lucie booking page. Leading @ optional."
},
"startAt": {
"type": "string",
"description": "The exact ISO-8601 `start` copied verbatim from a find_group_times common slot (absolute UTC instant). Do NOT construct it from a wall-clock time."
},
"durationMinutes": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Meeting length in minutes. Must be one the organizer offers."
},
"title": {
"type": "string",
"minLength": 1,
"description": "The meeting title, e.g. \"Q3 planning sync\"."
},
"reason": {
"type": "string",
"minLength": 1,
"description": "A short agenda/purpose, shared with everyone on the invite."
}
},
"required": [
"participantHandles",
"startAt",
"durationMinutes",
"title",
"reason"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거