Yoya Booking

Book meetings on a host's real availability. No auth - mirrors their public Yoya page.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
81%
이름 품질
94%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,873토큰 (도구 정의)
~3.1 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.24%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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": {}
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 7개
검증됨버전이 기록되지 않음도구 7개