Yoya Booking
Book meetings on a host's real availability. No auth - mirrors their public Yoya page.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"yoya-booking": {
"url": "https://yoya.ai/api/mcp/book"
}
}
}원격 엔드포인트
https://yoya.ai/api/mcp/bookstreamable-http할 수 있는 일
도구 목록
도구 (7)
🟢get_booking_page(slug)
Read a public Yoya booking link or slug. Includes required guest fields and meeting options. No host account access.
입력 스키마
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 2048
}
},
"required": [
"slug"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢list_available_times(slug, timezone, timeOfDay, from, to, ...)
Find up to 10 times (max 50), labeled in the guest's IANA timezone. Filter by inclusive from/exclusive to datetimes and morning (06–12), afternoon (12–18) or evening (18–24) in the guest timezone. Pass nextCursor unchanged to continue with the same filters. Slots are suggestions; preview then book rechecks availability. Never invent slot IDs.
입력 스키마
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"timezone": {
"type": "string",
"maxLength": 100
},
"timeOfDay": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"cursor": {
"type": "string",
"pattern": "^s_\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z$"
}
},
"required": [
"slug"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢preview_booking(meetingFormat, requestId, slug, name, email, ...)
Validate guest details and the selected time without booking or sending email. Show the returned summary to the guest and ask for explicit approval. Then call book_meeting with the returned normalized booking, requestId and confirmationToken.
입력 스키마
{
"type": "object",
"properties": {
"meetingFormat": {
"description": "Copy the value from preview_booking unchanged.",
"type": "string",
"maxLength": 1000
},
"requestId": {
"description": "Reuse the ID returned by preview_booking for retries.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 320
},
"slotId": {
"type": "string",
"pattern": "^s_\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z$"
},
"purpose": {
"default": "",
"type": "string",
"maxLength": 2000
},
"meetingType": {
"type": "string",
"enum": [
"google_meet",
"zoom",
"in_person"
]
},
"timezone": {
"type": "string",
"maxLength": 100
},
"fieldAnswers": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"additionalProperties": {
"type": "string",
"maxLength": 2000
}
}
},
"required": [
"slug",
"name",
"email",
"slotId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🔴book_meeting(meetingFormat, requestId, slug, name, email, ...)
Creates a free booking or returns PAYMENT_REQUIRED with a secure payment URL for paid meetings. Paid meetings are not booked until payment succeeds; show the link and never claim confirmation before that. Only call after the guest explicitly approves preview_booking. Copy the preview's booking fields and confirmationToken unchanged. Reuse requestId and token on network retries; never claim notifications are delivered until syncStatus is ready.
입력 스키마
{
"type": "object",
"properties": {
"meetingFormat": {
"description": "Copy the value from preview_booking unchanged.",
"type": "string",
"maxLength": 1000
},
"requestId": {
"description": "Reuse the ID returned by preview_booking for retries.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"type": "string",
"maxLength": 320
},
"slotId": {
"type": "string",
"pattern": "^s_\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z$"
},
"purpose": {
"default": "",
"type": "string",
"maxLength": 2000
},
"meetingType": {
"type": "string",
"enum": [
"google_meet",
"zoom",
"in_person"
]
},
"timezone": {
"type": "string",
"maxLength": 100
},
"fieldAnswers": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"additionalProperties": {
"type": "string",
"maxLength": 2000
}
},
"confirmationToken": {
"type": "string",
"maxLength": 1000
},
"confirmed": {
"type": "boolean",
"const": true
}
},
"required": [
"slug",
"name",
"email",
"slotId",
"confirmationToken",
"confirmed"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🟢get_booking(token)
Read a booking using its private manage-link token. Includes meeting-link synchronization status. Treat this token as a password; do not share it publicly.
입력 스키마
{
"type": "object",
"properties": {
"token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"token"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🔴cancel_booking(token, confirmed, reason)
Cancel using a private manage token. Ask the guest for explicit approval first; this sends cancellation notifications.
입력 스키마
{
"type": "object",
"properties": {
"token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"confirmed": {
"type": "boolean",
"const": true
},
"reason": {
"type": "string",
"maxLength": 500
}
},
"required": [
"token",
"confirmed"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}🔴reschedule_booking(token, slotId, confirmed, reason)
Move a booking using its private manage token and a fresh slot ID from list_available_times. Ask for explicit approval first. The original booking stays intact if the new time cannot be reserved.
입력 스키마
{
"type": "object",
"properties": {
"token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"slotId": {
"type": "string",
"pattern": "^s_\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z$"
},
"confirmed": {
"type": "boolean",
"const": true
},
"reason": {
"type": "string",
"maxLength": 500
}
},
"required": [
"token",
"slotId",
"confirmed"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"syncStatus": {
"type": "string",
"enum": [
"pending",
"ready",
"attention"
]
},
"nextCursor": {
"type": [
"string",
"null"
]
},
"nextOffset": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"ok"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {}
}커뮤니티
증거