Scheduling
iCalendar Parse & Schedule Guard
Inspect and parse iCalendar text, expand recurrence, find event overlaps, and calculate busy/free windows with explicit timezone and DST policies.
CONTRACT
Predictable for agents. Legible for reviewers.
- REST
POST /v1/icalendar/inspect- MCP tool
inspect_icalendar- Inputs
- Up to 256 KiB of caller-supplied iCalendar text. Expansion, conflict, and availability operations also require an explicit RFC 3339 window, IANA interpretation timezone, DST-fold policy, and occurrence cap.
- Returns
- CLEAR, REVIEW_REQUIRED, or BLOCKED with named interoperability issues; a normalized VEVENT model; bounded RRULE/RDATE/EXDATE/RECURRENCE-ID occurrences; positive-duration conflicts; or merged half-open busy and free intervals.
- Latency
- Synchronous
- Usage unit
- iCalendar operation
The focused suite also exposes /v1/icalendar/parse, /v1/icalendar/expand, /v1/icalendar/conflicts, and /v1/icalendar/availability plus the separate /mcp/icalendar server. It never fetches a calendar URL, attachment, organizer, attendee, or event URL; sends no invitation; changes no calendar; and infers no attendee availability. Floating and all-day values are interpreted only under the supplied IANA zone. Repeated local times require REJECT, EARLIER, or LATER explicitly. Conflict and availability intervals are half-open, so one event ending exactly when another starts is not an overlap.
AGENT-READABLE EXCEPTIONS
ICAL_COMPONENT_MISMATCHICAL_VERSION_UNSUPPORTEDICAL_EVENT_UID_MISSINGICAL_UNKNOWN_TIME_ZONEICAL_LOCAL_TIME_AMBIGUOUSICAL_RECURRENCE_FREQUENCY_TOO_DENSEICAL_OCCURRENCE_LIMIT_EXCEEDEDICAL_CONFLICT_LIMIT_EXCEEDEDICAL_OUTPUT_TOO_LARGEPOST /v1/icalendar/availability
Authorization: Bearer apc_...
Content-Type: application/json
{
"ics": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Example//EN\r\nBEGIN:VEVENT\r\nUID:standup@example.com\r\nDTSTAMP:20260810T120000Z\r\nDTSTART;TZID=America/Denver:20260811T090000\r\nDTEND;TZID=America/Denver:20260811T093000\r\nRRULE:FREQ=DAILY;COUNT=3\r\nSUMMARY:Operations standup\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
"window_start": "2026-08-11T14:00:00Z",
"window_end": "2026-08-11T18:00:00Z",
"interpretation_time_zone": "America/Denver",
"dst_disambiguation": "REJECT",
"max_occurrences": 100,
"include_tentative": true
}curl --request POST \
--url 'https://api-production-9502.up.railway.app/v1/icalendar/availability' \
--header 'Authorization: Bearer ${AP_CONTROL_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"ics": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Example//EN\r\nBEGIN:VEVENT\r\nUID:standup@example.com\r\nDTSTAMP:20260810T120000Z\r\nDTSTART;TZID=America/Denver:20260811T090000\r\nDTEND;TZID=America/Denver:20260811T093000\r\nRRULE:FREQ=DAILY;COUNT=3\r\nSUMMARY:Operations standup\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n",
"window_start": "2026-08-11T14:00:00Z",
"window_end": "2026-08-11T18:00:00Z",
"interpretation_time_zone": "America/Denver",
"dst_disambiguation": "REJECT",
"max_occurrences": 100,
"include_tentative": true
}'{
"status": "COMPLETED",
"decision": "CLEAR",
"source_sha256": "c2a1...",
"window_start_utc": "2026-08-11T14:00:00Z",
"window_end_utc": "2026-08-11T18:00:00Z",
"busy_seconds": 1800,
"free_seconds": 12600,
"busy": [
{
"start_utc": "2026-08-11T15:00:00Z",
"end_utc": "2026-08-11T15:30:00Z",
"duration_seconds": 1800,
"occurrence_ids": [
"b7d9..."
]
}
],
"free": [
{
"start_utc": "2026-08-11T14:00:00Z",
"end_utc": "2026-08-11T15:00:00Z",
"duration_seconds": 3600,
"occurrence_ids": []
},
{
"start_utc": "2026-08-11T15:30:00Z",
"end_utc": "2026-08-11T18:00:00Z",
"duration_seconds": 9000,
"occurrence_ids": []
}
],
"excluded_transparent_count": 0,
"excluded_cancelled_count": 0,
"excluded_tentative_count": 0,
"issues": [],
"ruleset_version": "2026-08-10",
"next_action": "Use the returned half-open free intervals only under the documented status and transparency policy; confirm attendees and external calendars separately."
}Use iCalendar Parse & Schedule Guard through RapidAPI.
Choose a capped marketplace plan, copy the generated request, and route the structured result through your own authorized workflow.