Read Shiftbase rosters, timesheets, absences and availability; schedule shifts and review absences. Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.
Add to your MCP config, then reload & authorize:
{
"mcpServers": {
"shiftbase": {
"url": "https://shiftbase.usefulapi.io/mcp"
}
}
}| Tool | Type | What it does |
|---|---|---|
shiftbase_get_account | read | Get account The Shiftbase account this API key belongs to: company, country, time zone, working-day start/end, plan facts. GET /accounts. |
shiftbase_list_users | read | List employees List employees (users) with their teams and departments, contact details, employee number, start/end dates and plus-min hours balance. Use it to map user ids in schedules, timesheets and absences to names. Identity, bank and birth data are never returned. GET /users. |
shiftbase_get_user | read | Get employee One employee by user id or email address, with teams and departments. GET /users/{identifier}. |
shiftbase_list_departments | read | List departments List departments (sites/branches that own teams, shifts and schedules) with address and timesheet/clocking settings. GET /departments. |
shiftbase_list_teams | read | List teams List teams (the rows of the schedule within a department), optionally for one department. GET /teams. |
shiftbase_list_locations | read | List locations List active locations (addresses that group departments). GET /locations. |
shiftbase_list_shift_types | read | List shift types List shift types (the templates a scheduled shift uses: name, short name, default start/end time and break), optionally for one department. Their ids are the shift_id for shiftbase_create_roster. GET /shifts. |
shiftbase_list_rosters | read | List scheduled shifts List the schedule (rosters = shifts assigned to employees) for a date range of at most 62 days: date, start/end time, break, employee, team, shift type, department, published state, hours and cost. Each item's occurrence_id identifies it for shiftbase_get_roster and shiftbase_update_roster. GET /rosters. |
shiftbase_get_roster | read | Get scheduled shift One scheduled shift by its occurrence_id, with the employee, shift type, team and who created/changed it. GET /rosters/{occurrenceId}. |
shiftbase_list_open_shifts | read | List open shifts List open (unassigned) shifts that employees can pick up, for a date range of at most 62 days (default: today). Needs the Basic plan or higher. GET /open_shifts. |
shiftbase_get_availability | read | Get employee availability Employee availability (available / unavailable, all day or from a time) for a date range of at most 62 days, from Shiftbase's availability report. Needs the Basic plan and the "View reports" permission. POST /reports/availability (export json; reads only). |
shiftbase_list_timesheets | read | List timesheets List timesheets (worked hours: clock in/out, breaks, total, status Approved/Declined/Pending, wage and surcharges) for a date range of at most 62 days. GET /timesheets. |
shiftbase_get_timesheet | read | Get timesheet One timesheet by id, with its clocked breaks. GET /timesheets/{timesheetId}. |
shiftbase_list_clocked_in | read | List clocked-in employees Who is clocked in right now: employee, since when, their scheduled shift, team, department and location. GET /timesheets/clock. |
shiftbase_list_absences | read | List absences List absences (leave, sick leave, other time off) overlapping a date range of at most 366 days: employee, absence type, start/end date, hours or days, status Approved/Declined/Pending and who reviewed it. Needs the Basic plan. GET /absentees. |
shiftbase_get_absence | read | Get absence One absence by id, with the per-day hours and who reviewed it. GET /absentees/{absenteeId}. |
shiftbase_list_absence_types | read | List absence types List absence types (e.g. Holiday, Sick, Unpaid leave): name, unit (hours or days), whether it costs leave hours, colour. Their ids are the absence_type_id for absences. GET /absentee_options. |
shiftbase_get_expected_absence_hours | read | Get expected absence hours How many hours an absence would cost for an employee, per day and in total (from the schedule or the contract, per the absence policy), for a period of at most 366 days. Changes nothing. POST /absentees/expected. |
shiftbase_create_roster | write | Schedule a shift WRITE: put one employee on the schedule for one date (a single, non-recurring shift) in a team, with a shift type, start/end time and break. The employee is notified only when notify is true. POST /rosters. |
shiftbase_update_roster | write | Change a scheduled shift WRITE: change a scheduled shift: move it to another date, time, employee, team or shift type, or change its break or note. Reads the shift first and sends it back with your changes. For a recurring shift, scope says what changes: "occurrence" (this date only), "sequence" (this date and all later ones) or "original" (the whole series; also the right scope for a non-recurring shift). PUT /rosters/{occurrenceId}/{scope}. |
shiftbase_request_absence | write | Request an absence WRITE: add an absence (leave/time-off request) for an employee. By default it is a Pending request for a manager to review; status Approved books it directly (needs the approve-absence permission). The hours per day come from Shiftbase's own expected-hours calculation (the same as shiftbase_get_expected_absence_hours). Needs the Basic plan. POST /absentees. |
shiftbase_review_absence | write | Approve or decline an absence WRITE: approve or decline an absence request. Reads the absence first and sends it back unchanged except for the status (needs the approve-absence permission). PUT /absentees/{absenteeId}. |
shiftbase_usage_status | Usage status (free-tier meter) Report the caller's current free-tier usage this month: calls used, monthly limit, remaining, and whether the cap is reached. Read-only; does not count against the meter. | |
shiftbase_upgrade | Upgrade to Pro (unlimited) Subscribe to the Pro plan for UNLIMITED Shiftbase tool calls (the free tier caps monthly usage). Choose monthly ($9/month) or yearly ($90/year — 2 months free) billing. Returns a Stripe Checkout link to open in your browser; after payment your account upgrades automatically. Does not count against the meter. | |
shiftbase_cancel_subscription | Cancel the Pro subscription Cancel the caller's Shiftbase Pro subscription at the end of the paid period (no refund for the current period; unlimited calls continue until then, then the free tier applies). Requires confirm: true. Run shiftbase_upgrade later to undo the cancel before the period ends. Does not count against the meter. |
| Plan | Price | Limit |
|---|---|---|
| Free | $0 | 100 tool calls / month |
| Proper account | $9/mo · $90/yr | Unlimited |
Pro covers this Shiftbase server only. Subscribe with shiftbase_upgrade (it returns a Stripe Checkout link). Cancel any time with shiftbase_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running shiftbase_upgrade before then undoes the cancel. Or write to [email protected].
This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.