Shiftbase MCP server

Read Shiftbase rosters, timesheets, absences and availability; schedule shifts and review absences. Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.

Claude

  1. Open Settings → Connectors → Add custom connector
  2. Paste this URL:
    https://shiftbase.usefulapi.io/mcp
  3. Authenticate with Shiftbase when prompted

Cursor · VS Code · Windsurf · Cline

Add to your MCP config, then reload & authorize:

{
  "mcpServers": {
    "shiftbase": {
      "url": "https://shiftbase.usefulapi.io/mcp"
    }
  }
}
live25 toolsFree 100 tool calls / monthPro $9/mo · $90/yr

Tools 25

ToolTypeWhat it does
shiftbase_get_accountread
Get account
The Shiftbase account this API key belongs to: company, country, time zone, working-day start/end, plan facts. GET /accounts.
shiftbase_list_usersread
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_userread
Get employee
One employee by user id or email address, with teams and departments. GET /users/{identifier}.
shiftbase_list_departmentsread
List departments
List departments (sites/branches that own teams, shifts and schedules) with address and timesheet/clocking settings. GET /departments.
shiftbase_list_teamsread
List teams
List teams (the rows of the schedule within a department), optionally for one department. GET /teams.
shiftbase_list_locationsread
List locations
List active locations (addresses that group departments). GET /locations.
shiftbase_list_shift_typesread
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_rostersread
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_rosterread
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_shiftsread
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_availabilityread
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_timesheetsread
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_timesheetread
Get timesheet
One timesheet by id, with its clocked breaks. GET /timesheets/{timesheetId}.
shiftbase_list_clocked_inread
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_absencesread
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_absenceread
Get absence
One absence by id, with the per-day hours and who reviewed it. GET /absentees/{absenteeId}.
shiftbase_list_absence_typesread
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_hoursread
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_rosterwrite
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_rosterwrite
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_absencewrite
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_absencewrite
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_statusmeta
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_upgrademeta
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_subscriptionmeta
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.

Pricing

PlanPriceLimit
Free$0100 tool calls / month
Proper account$9/mo · $90/yrUnlimited

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.

More Business Operations MCP servers

Beds24BoulevardBuildiumConnecteamCurrent RMSDeputyFilloutFormbricksFormstackGingrHostfullyHousecall ProKickservOfficeRnDRecruiteeRotaCloudShopmonkeySmoobuSortlyTalentLMSTeachworksWhen I WorkWorkizWufoo

All Business Operations servers →