When I Work MCP by usefulapi

io.usefulapiPublished by usefulapi.ioOfficial publisherv1.39.1Updated Nov 14, 2026

Check shifts, time clock entries, time-off requests, swaps and availability, and manage shifts.

The publisher's own server: Ably MCP by usefulapi

VerifiedStreamable HTTPWeb executableProductivity & WorkflowBusiness & Commerce

Overview

AI-generated overview

Hosted MCP server for When I Work that lets an assistant read schedules, shifts, timesheets, time-off, swaps and availability, and create or publish shifts.

What you can do
  • Read account, users, schedules (locations) and positions
  • List and inspect shifts, plus users eligible for an open shift
  • List clocked times, time-off requests and time-off types
  • List shift swaps and drops, availability and schedule annotations
  • Create, update, publish and unpublish shifts
  • Create and approve, deny or change time-off requests
When to use it
Useful when you manage or check a When I Work workplace from a chat client: asking who works tomorrow, which shifts are still open, pending time-off requests, or making schedule changes without opening the When I Work dashboard.
Requirements
Remote endpoint only, no local install; connect with the server URL and sign in through OAuth. On first connect you supply your When I Work developer key (W-Key), email and password, plus an optional workplace user id. A free plan allows 50 tool calls per month; paid plans raise the limit.
Before you install
The login page collects your When I Work developer key, email and password, which the service stores per user. Write tools create, change, publish or unpublish shifts and create or decide time-off requests, so confirm before running them. Paid plans cost $9 or $39 per month per user and upgrades charge a Stripe Checkout link; cancelling gives no refund for the current period.

Installation

In SourceWeft

  1. Open When I Work MCP by usefulapi in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.usefulapi%2Fwhen-i-work/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "when-i-work-by-usefulapi": {
      "type": "http",
      "url": "https://when-i-work.usefulapi.io/mcp"
    }
  }
}

README

When I Work MCP by usefulapi

Use When I Work from Claude, Cursor, or any MCP client — check schedules, shifts, clocked times, time-off requests, shift swaps and availability, and create, publish or update shifts. Hosted, no local install: connect with your own When I Work credentials.

Live endpoint: https://when-i-work.usefulapi.io/mcp · Homepage: https://usefulapi.io/when-i-work

Connect

  • Claude (claude.ai, Desktop): open Customize → Connectors, click + Add → Add custom connector, and paste https://when-i-work.usefulapi.io/mcp.
  • Claude Code: claude mcp add --transport http when-i-work https://when-i-work.usefulapi.io/mcp, then run /mcp to log in.
  • VS Code: Add to VS Code.
  • Cursor and other clients: add the URL as a remote MCP server:
json
{  "mcpServers": {    "when-i-work": {      "url": "https://when-i-work.usefulapi.io/mcp"    }  }}

Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your When I Work credentials.

Step-by-step setup, where to find your credentials, and FAQ: https://usefulapi.io/when-i-work/

On first connect you'll provide your When I Work developer key (W-Key), email and password, plus an optional workplace user id. They're validated, stored per-user, and scoped to you — no keys in config files.

Tools

ToolTypeWhat it does
wheniwork_get_accountreadGet the account
wheniwork_list_usersreadList users
wheniwork_get_userreadGet one user
wheniwork_list_locationsreadList schedules (locations)
wheniwork_list_positionsreadList positions
wheniwork_list_shiftsreadList shifts
wheniwork_get_shiftreadGet one shift
wheniwork_list_eligible_users_for_shiftreadList users eligible for an open shift
wheniwork_list_timesreadList clocked times (timesheets)
wheniwork_list_time_off_requestsreadList time-off requests
wheniwork_get_time_off_requestreadGet one time-off request
wheniwork_list_time_off_typesreadList time-off types
wheniwork_list_shift_swapsreadList shift swaps and drops
wheniwork_list_availabilityreadList availability
wheniwork_list_annotationsreadList schedule annotations
wheniwork_create_shiftwriteCreate a shift
wheniwork_update_shiftwriteUpdate a shift
wheniwork_publish_shiftswritePublish shifts
wheniwork_unpublish_shiftswriteUnpublish shifts
wheniwork_create_time_off_requestwriteCreate a time-off request
wheniwork_update_time_off_requestwriteApprove, deny or change a time-off request
wheniwork_usage_statusmetaUsage status (free-tier meter)
wheniwork_request_featuremetaRequest a missing feature
wheniwork_upgrademetaUpgrade to Pro or Pro+
wheniwork_cancel_subscriptionmetaCancel the Pro subscription

read tools are read-only; write tools mutate data (clients should confirm them); meta tools report usage, manage your subscription or send a feature request.

Pricing

PlanPriceLimit
Free$050 tool calls / month
Pro (per user)$9/mo or $90/yr (2 months free)10,000 tool calls / month
Pro+ (per user)$39/mo or $390/yr (2 months free)100,000 tool calls / month

Each paid plan covers this server only. Ask your AI to run wheniwork_upgrade and choose Pro or Pro+, billed monthly or yearly (it returns a Stripe Checkout link). If you already have Pro, ask to change it to Pro+. The change requires your confirmation, keeps your billing interval and charges the price difference for the rest of the period immediately. Cancel any time with wheniwork_cancel_subscription: your paid plan continues to the end of the paid period, with no refund for the current period, and asking to resume the same plan with wheniwork_upgrade before then undoes the cancel. Or write to [email protected].

License

MIT © usefulapi. Not affiliated with or endorsed by When I Work.

Source: servers/when-i-work/README.md at commit f22f848

Tools

21

wheniwork_get_account

Get the account

Fetch the When I Work account (workplace) the token acts on — company name, plan and settings; for a parent account also its child accounts. A cheap way to confirm the credentials work. When I Work: GET /2/account.

Takes no parameters.

wheniwork_list_users

List users

List the employees, supervisors, managers and admins in the account, optionally limited to some schedules or searched by name/email. Role codes: 1 admin, 2 manager, 3 employee, 5 supervisor. When I Work: GET /2/users.

Parameterssearchlocation_idonly_deletedonly_pendingshow_deletedshow_pending

wheniwork_get_user

Get one user

Fetch one user by id — name, email, role, positions, schedules, wage. When I Work: GET /2/users/{id}.

Parametersuser_idrequired

wheniwork_list_locations

List schedules (locations)

List the schedules in the account. The API calls a schedule a "location"; its id is the location_id every shift belongs to. When I Work: GET /2/locations.

Parametersonly_unconfirmed

wheniwork_list_positions

List positions

List the positions (job roles such as Cashier or Dishwasher) in the account. When I Work: GET /2/positions.

Parametersshow_deleted

wheniwork_list_shifts

List shifts

List scheduled shifts in a time window — who works when, where and in which position — optionally including open shifts and unpublished drafts. Answers "who is on on Friday?" and "what open shifts are left?". When I Work: GET /2/shifts.

Parametersendlimitstartdeleteduser_idlocation_idunpublishedinclude_openall_locationsinclude_swapsinclude_allopeninclude_onlyopen+1 more

wheniwork_get_shift

Get one shift

Fetch one shift by id, including its breaks and publish state. When I Work: GET /2/shifts/{id}.

Parametersshift_idrequiredinclude_repeating_shifts_to

wheniwork_list_eligible_users_for_shift

List users eligible for an open shift

Find who could take an open shift — either an existing shift (shift_id) or a hypothetical one (start, end, position_id and location_id all required). When I Work: GET /2/shifts/eligible.

Parametersendstartshift_idis_sharedlocation_idposition_idinclude_objects

wheniwork_list_times

List clocked times (timesheets)

List clocked time entries — actual hours worked, clock-in/out times, length and approval state. Use only_open to see who is clocked in right now. When I Work: GET /2/times.

Parametersendstartuser_idonly_openupdated_at

wheniwork_list_time_off_requests

List time-off requests

List time-off requests in a date range, with the requesting users. Status: 0 pending, 1 canceled, 2 accepted, 3 expired, 4 denied. When I Work: GET /2/requests.

Parametersendpagetypelimitstartmax_idsortbystatususer_idsince_idlocation_idinclude_deleted_users

wheniwork_get_time_off_request

Get one time-off request

Fetch one time-off request by id, with its message thread and users. When I Work: GET /2/requests/{request_id}.

Parametersrequest_idrequired

wheniwork_list_time_off_types

List time-off types

List the time-off types (e.g. Personal, Sick, Holiday) and whether each allows paid time. Their ids are the type_id for a new request. When I Work: GET /2/requesttypes.

Takes no parameters.

wheniwork_list_shift_swaps

List shift swaps and drops

List shift requests: swaps, drops and alerts, with the shifts and users involved. Status: 0 pending, 1 approved, 2 declined, 3 completed, 4 canceled, 5 expired. Type: 1 swap, 2 drop, 3 alert. start and end must be given together. When I Work: GET /2/swaps.

Parametersendpagetypelimitstartstatususer_idshift_idopen_only

wheniwork_list_availability

List availability

List availability events — when people said they can or cannot work, including recurring patterns that fall in the window. Defaults to the caller, from now to two weeks out. When I Work: GET /2/availabilityevents.

Parametersendstartuser_idinclude_all

wheniwork_list_annotations

List schedule annotations

List schedule annotations — announcements, business-closed days and blackout dates when time off is not allowed. Defaults to today through one year out. When I Work: GET /2/annotations.

Parametersend_datestart_dateno_time_off

wheniwork_create_shift

Create a shift

Create one shift on a schedule — assigned to a user, or open (user_id 0). Created as a draft unless published is true. Undo by editing it or unpublishing. When I Work: POST /2/shifts.

Parameterscolornotessite_iduser_idend_timerequiredis_sharedpublishedbreak_timestart_timerequiredlocation_idrequiredposition_id

wheniwork_update_shift

Update a shift

Change a shift — reassign it, move it, change position or notes. When I Work requires start_time, end_time and location_id on every update, so fetch the shift first and pass them back. This tool never sends a breaks array; When I Work documents that breaks omitted from an update's breaks list are removed, so re-check the shift's breaks afterwards. When I Work: PUT /2/shifts/{id}.

Parameterscolornotessite_iduser_idend_timerequiredshift_idrequiredis_sharedpublishedbreak_timestart_timerequiredlocation_idrequiredposition_id

wheniwork_publish_shifts

Publish shifts

Publish draft shifts so employees can see them. Publishing does not itself send notifications. Undo with wheniwork_unpublish_shifts. When I Work: POST /2/shifts/publish.

Parametersidsrequired

wheniwork_unpublish_shifts

Unpublish shifts

Return published shifts to draft, hiding them from employees. Undo with wheniwork_publish_shifts. When I Work: POST /2/shifts/unpublish.

Parametersidsrequired

wheniwork_create_time_off_request

Create a time-off request

Create a time-off request for a user (default the calling user). It starts pending; cancel it with wheniwork_update_time_off_request (status 1). Get type ids from wheniwork_list_time_off_types. When I Work: POST /2/requests.

Parameterspaidhourstype_iduser_idend_timerequiredstart_timerequired

wheniwork_update_time_off_request

Approve, deny or change a time-off request

Change a time-off request: set its status (0 pending, 1 canceled, 2 accepted/approved, 3 expired, 4 denied) and/or its dates or hours. Reversible — set the status back. start_time and end_time must be given together. When I Work: PUT /2/requests/{request_id}.

Parametershoursstatusend_timerequest_idrequiredstart_time

Version history

24
  1. v1.39.1LatestNov 13, 2026
  2. v1.38.0Nov 12, 2026
  3. v1.37.3Nov 11, 2026
  4. v1.36.3Nov 7, 2026
  5. v1.35.3Nov 5, 2026
  6. v1.35.2Nov 5, 2026
  7. v1.35.1Nov 4, 2026
  8. v1.35.0Nov 3, 2026
  9. v1.34.1Nov 3, 2026
  10. v1.33.0Nov 1, 2026
  11. v1.31.0Oct 31, 2026
  12. v1.30.0Oct 31, 2026
  13. v1.29.2Oct 30, 2026
  14. v1.29.0Oct 30, 2026
  15. v1.24.0Oct 26, 2026
  16. v1.21.3Oct 25, 2026
  17. v1.21.0Oct 25, 2026
  18. v1.20.0Oct 24, 2026
  19. v1.17.0Oct 23, 2026
  20. v1.16.4Oct 22, 2026
  21. v1.16.3Oct 21, 2026
  22. v1.11.1Oct 9, 2026
  23. v1.10.0Oct 9, 2026
  24. v1.0.0Sep 30, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Usefulapi integrations