{"agentsJson":"0.1.0","info":{"title":"Schedultary scheduling flows","version":"1.0.0","description":"Flows an assistant uses to read a workplace, build a month, build a residency year, decide a request, and file time off. Authenticate with Authorization: Bearer sk_live_... from Settings > API Keys, or with OAuth at the MCP server."},"sources":[{"id":"schedultary","path":"https://schedultary.com/openapi.json"}],"overrides":[],"flows":[{"id":"read_workplace","title":"Read the workplace","description":"Confirm who the key is, then read the workplace and the roster before any change.","actions":[{"id":"who","operationId":"getMe","sourceId":"schedultary"},{"id":"workplace","operationId":"getWorkplace","sourceId":"schedultary"},{"id":"roster","operationId":"listPeople","sourceId":"schedultary"}],"links":[],"fields":{"parameters":[]},"additionalProperties":false},{"id":"build_month","title":"Build a monthly draft","description":"Read readiness for a month, then generate a draft. Send replace true only when a draft already exists and the person asked to replace it. Publish is a separate action after conflicts are clear.","actions":[{"id":"readiness","operationId":"getScheduleBuilder","sourceId":"schedultary"},{"id":"generate","operationId":"generateSchedule","sourceId":"schedultary"}],"links":[],"fields":{"parameters":[{"name":"month","type":"string","description":"YYYY-MM. Omit when periodId is known.","required":false},{"name":"periodId","type":"string","description":"Scheduling period id. Wins over month.","required":false}]},"additionalProperties":false},{"id":"build_residency_year","title":"Build a residency year","description":"Generate an unpublished academic year, then read the open issues. A published year is refused.","actions":[{"id":"generate","operationId":"generateYear","sourceId":"schedultary"},{"id":"issues","operationId":"listProgramIssues","sourceId":"schedultary"}],"links":[],"fields":{"parameters":[{"name":"year","type":"integer","description":"Academic year, the July start year.","required":true}]},"additionalProperties":false},{"id":"decide_request","title":"Decide a request","description":"Approve or deny one shop request. For a residency request, use decideProgramRequest with the academic year.","actions":[{"id":"decide","operationId":"decideRequest","sourceId":"schedultary"}],"links":[],"fields":{"parameters":[{"name":"id","type":"string","description":"Request id from the request list.","required":true},{"name":"status","type":"string","description":"approved or denied.","required":true}]},"additionalProperties":false},{"id":"request_time_off","title":"Request time off","description":"Read the caller's published shifts, then file their own time-off request. This does not approve it.","actions":[{"id":"schedule","operationId":"getMySchedule","sourceId":"schedultary"},{"id":"request","operationId":"createMyRequest","sourceId":"schedultary"}],"links":[],"fields":{"parameters":[{"name":"startDate","type":"string","description":"First day, YYYY-MM-DD.","required":true},{"name":"endDate","type":"string","description":"Last day, YYYY-MM-DD.","required":true},{"name":"reason","type":"string","description":"Short reason in the person's words.","required":false}]},"additionalProperties":false}],"additionalProperties":false}