MCP server for the Orita scheduling API — let AI agents book, query and cancel appointments
Orita MCP has well-structured tool definitions with consistent naming (verb_noun pattern: orita_get_*, orita_book_*, orita_cancel_*) and comprehensive descriptions (avg 180 chars, within 10-1024 baseline). All 6 tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, responses are inferred from docstrings only. Parameter descriptions are good but lack explicit format constraints (e.g., date format 'YYYY-MM-DD' is mentioned but not formalized as a regex pattern). Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, REVERSIBLE). Security is sound (API key via env var, not params), but no audit logging or permission gates documented.
Book an appointment for a specific event type and time slot. Args: event_type_id: The id of the event type to book. start: ISO 8601 start datetime of the slot (e.g. "2025-08-15T10:00:00Z"). end: ISO 8601 end datetime of the slot (e.g. "2025-08-15T10:30:00Z"). attendee_name: Full name of the person booking. attendee_email: Email address of the person booking. attendee_notes: Optional notes or reason for the meeting. timezone: IANA timezone string of the attendee (default: "UTC"). Returns the created booking object including its id, confirmation code, and meeting link if applicable. Requires ORITA_API_KEY to be set.
Cancel an existing booking. Args: booking_id: The unique identifier of the booking to cancel. reason: Optional cancellation reason to include in the notification. Returns the updated booking object with status set to "cancelled". Requires ORITA_API_KEY to be set.
Retrieve details of an existing booking by its id. Args: booking_id: The unique identifier of the booking. Returns full booking details including status, attendee info, and times. Requires ORITA_API_KEY to be set.
Retrieve all event types configured for the authenticated Orita account. Returns a list of event types, each with an id, title, duration (minutes), slug, and whether it is active. Use the id when calling orita_get_slots. Requires ORITA_API_KEY to be set.
Output schemas not documented. Tool descriptions mention return structure (e.g., 'list of event types, each with an id, title, duration, slug, active') but no formal JSON Schema is provided. LLMs cannot reliably extract fields or plan downstream calls without explicit output schemas.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are declared in metadata (READ_ONLY, WRITE, REVERSIBLE) but not exposed via MCP tool annotations. Agents cannot distinguish safe reads from destructive writes without parsing comments.
No error recovery guidance. Functions raise ValueError or httpx.HTTPError without actionable messages. E.g., 'ORITA_API_KEY environment variable is not set' is clear, but HTTP 404 or 400 responses are not caught or translated. LLMs receive raw exceptions with no guidance on retry, fallback, or user correction.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Retrieve the public scheduling profile of an Orita user by their username. This endpoint is public — no API key is required. Args: username: The Orita username (slug) to look up (e.g. "jane-smith"). Returns the profile including display name, bio, avatar URL, and the list of active event types available for public booking.
Retrieve available booking slots for a specific event type on a given date. Args: event_type_id: The id of the event type (from orita_get_event_types). date: The date to check in YYYY-MM-DD format (e.g. "2025-08-15"). Returns a list of available time slots with start and end times in ISO 8601. Requires ORITA_API_KEY to be set.
Parameter format constraints not formalized. 'date' parameter description says 'YYYY-MM-DD format (e.g. "2025-08-15")' but no JSON Schema pattern or format keyword enforces it. 'start' and 'end' mention ISO 8601 but lack format:'date-time' declaration. LLMs may pass invalid formats.
No pagination support. orita_get_event_types and orita_get_slots return full lists with no limit, offset, or cursor parameters. If an account has hundreds of event types or slots, responses could exhaust context windows. No documented result limits.