Skip to content

Connectors · Accounting & finance

When I Work MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to When I Work and the rest of your systems. It gives your agent 120 When I Work actions (50 reads, 52 writes and 18 that wait for a confirmation) and holds the When I Work credential itself, so the agent never does. It paces When I Work's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "when_i_work.users.list",  intent: "check which When I Work account is connected"}# List Users · read · 1 upstream call
  • 120actionsin one signed file
  • 50readlook, never change
  • 52writecreate and update
  • 18wait for a yesdestructive, confirmed first

Set up

Connect When I Work in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect When I Work.

    Session login. actionlake opens the session and renews it when it expires. actionlake stores what you paste write-only, sealed under your tenant's key.

    • developer_keyWhen I Work developer key (request one from When I Work via the developer/API page; sent as the W-Key header on login)
    • emailEmail address of the When I Work user the connection acts as (an account admin or manager for full access)
    • passwordPassword of that When I Work user
    • user_idYour When I Work user id
    account { op: "connections.requirements", service: "when_i_work" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "when_i_work.users.list" }# list users · read · 1 upstream callcheck { action: "when_i_work.users.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

When I Work at a glance

Sign-in
Session login. actionlake opens the session and renews it when it expires.
You provide
developer_keyemailpassword
Setup fields
user_id
Limits we pace to
300 calls a minute, per connection
API covered
When I Work API v2/v3 (OpenAPI 3.1.0) plus Login Serviceapi.wheniwork.com
Built from
When I Work's documentation, read 23 October 2026apidocs.wheniwork.comapidocs.wheniwork.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
49 of 50 reads, for up to 5 minutes; a write clears what it affects
Shared entities
3, so ask can line When I Work up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in When I Work.

120 actions in 23 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 50readlook, never change
  • 52writecreate and update
  • 18destructivewait for a confirmation
  1. Shifts

    17

    6 read · 9 write · 2 destructive

    List Shifts · Create Shift · Get Shift · Update Shift

  2. Users

    11

    3 read · 7 write · 1 destructive

    List Users · Create User · Get User · Update User

  3. Times

    7

    2 read · 4 write · 1 destructive

    List Times · Create Time · Update Time · Get Time

  4. Availability events

    6

    2 read · 3 write · 1 destructive

    Create Availability Event · List Availability Events · Get Availability Event · Update Availability Event

  5. Positions

    6

    2 read · 3 write · 1 destructive

    List Positions · Create Position · Get Position · Update Position

  6. Account

    5

    2 read · 3 write · 0 destructive

    Create Account · Get Account · Update Account · List Admins

  7. Annotations

    5

    2 read · 2 write · 1 destructive

    Create Annotation · List Annotations · Get Annotation · Update Annotation

  8. Locations

    5

    2 read · 2 write · 1 destructive

    List Schedules (Locations) · Create Schedule (Location) · Get Schedule (Location) · Update Schedule (Location)

15 more areas · 58 actions
  • Openshift approval requests 5
  • Payrolls 5
  • Schedule templates 5
  • Shift breaks 5
  • Shift requests 5
  • Shift templates 5
  • Sites 5
  • Time off requests 5
  • Paid rest records 4
  • Time off request types 4
  • Imports 3
  • People 3
  • Timezones 2
  • Punch 1
  • Scheduled breaks 1

Top actions

The When I Work API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 43 of When I Work's 50 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
when_i_work.users.listList UsersList Users.readhr.employee.list61 connectors
when_i_work.locations.listList Schedules (Locations)List Schedules (Locations).readhr.location.list32 connectors
when_i_work.users.createCreate UserCreate User.writehr.employee.create51 connectors
when_i_work.locations.createCreate Schedule (Location)Create Schedule (Location).writehr.location.create23 connectors
when_i_work.times.listList TimesList Times.readhr.time_clock_entry.list15 connectors
when_i_work.users.deleteDelete UserDelete User.destructivehr.employee.delete34 connectors
when_i_work.time_off_requests.createCreate Time Off RequestCreate Time Off Request.writehr.leave_request.create32 connectors
when_i_work.time_off_requests.listList Time Off RequestsList Time Off Requests.readhr.leave_request.list29 connectors
when_i_work.time_off_request_types.listList Of Time Off Request TypesList Of Time Off Request Types.readhr.leave_type.list23 connectors
when_i_work.shifts.listList ShiftsList Shifts.readhr.shift.list19 connectors
when_i_work.shifts.createCreate ShiftCreate Shift.writehr.shift.create18 connectors
when_i_work.times.createCreate TimeCreate Time.writehr.time_clock_entry.create17 connectors

Try it

Prompts to paste into Claude.

Each one names the When I Work actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    List everyone in When I Work with their department and start date.

    callswhen_i_work.users.list

  2. Writewrite

    Create User in When I Work. Show me exactly what you will send before you save it.

    callswhen_i_work.users.create

Governance for When I Work

Destructive actions wait for a yes.

18 When I Work actions are destructive. These are all of them:

  • Delete Userwhen_i_work.users.delete
  • Delete Schedule (Location)when_i_work.locations.delete
  • Delete Time Off Requestwhen_i_work.time_off_requests.delete
  • Delete Shiftwhen_i_work.shifts.delete
  • Delete Timewhen_i_work.times.delete
  • Delete Positionwhen_i_work.positions.delete
  • Delete Time Off Request Typewhen_i_work.time_off_request_types.delete
  • Delete the given shift request.when_i_work.shift_requests.delete
  • Delete an OpenShift Approval Request.when_i_work.openshift_approval_requests.delete
  • Delete Sitewhen_i_work.sites.delete
  • Delete Annotationwhen_i_work.annotations.delete
  • Delete Shift Breakwhen_i_work.shift_breaks.delete
  • Delete Shift Template (Block)when_i_work.shift_templates.delete
  • Delete Shift Break Paid Restwhen_i_work.paid_rest_records.delete
  • Delete Schedule Templatewhen_i_work.schedule_templates.delete
  • Delete Availability Eventwhen_i_work.availability_events.delete
  • Bulk Delete Shiftswhen_i_work.shifts.bulk_delete
  • Cancel an individual's request for an OpenShiftwhen_i_work.openshift_approval_requests.user_request_cancel

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

dowhen_i_work.users.deleteconfirm_policy: human

Delete User?

intent: the user asked me to delete User

run suspended · waiting for a named person · key when-i-work-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "when-i-work-agent",  allowed_actions: ["when_i_work.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "when_i_work.users.delete", approver: "[email protected]" },    { match: "when_i_work.locations.delete", approver: "[email protected]" },    { match: "when_i_work.time_off_requests.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to When I Work only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What When I Work costs on actionlake.

Every When I Work action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call When I Work refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 120 When I Work actions
  • 120actions pageeach page of a long list is one call
  • 49reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every When I Work action.

120 actions by area: the id your agent calls, what it does, and its effect.

Shifts17
  • when_i_work.shifts.assignAssign multiple users to an OpenShiftwrite
  • when_i_work.shifts.auto_assign_listList Auto Scheduled shiftsread
  • when_i_work.shifts.bulk_deleteBulk Delete Shiftsdestructive
  • when_i_work.shifts.bulk_updateBulk Update Shiftswrite
  • when_i_work.shifts.createCreate Shiftwrite
  • when_i_work.shifts.deleteDelete Shiftdestructive
  • when_i_work.shifts.eligible_users_listList eligible users for OpenShiftread
  • when_i_work.shifts.getGet Shiftread
  • when_i_work.shifts.history_getFetch shift historyread
  • when_i_work.shifts.listList Shiftsread
  • when_i_work.shifts.notifyNotify shiftswrite
  • when_i_work.shifts.notify_oneNotify single shiftwrite
  • when_i_work.shifts.publishPublish Shiftswrite
  • when_i_work.shifts.swap_users_listList swap usersread
  • when_i_work.shifts.unassignUnassign/Release Shiftswrite
  • when_i_work.shifts.unpublishUnpublish Shiftswrite
  • when_i_work.shifts.updateUpdate Shiftwrite
Users11
  • when_i_work.users.alerts_updateUpdate User Alert Settingswrite
  • when_i_work.users.bulk_createCreate A Batch of Userswrite
  • when_i_work.users.createCreate Userwrite
  • when_i_work.users.deleteDelete Userdestructive
  • when_i_work.users.getGet Userread
  • when_i_work.users.inviteInvite userswrite
  • when_i_work.users.invite_oneInvite single userwrite
  • when_i_work.users.listList Usersread
  • when_i_work.users.profile_getGet User Profileread
  • when_i_work.users.profile_updateUpdate User Profilewrite
  • when_i_work.users.updateUpdate Userwrite
Times7
  • when_i_work.times.clock_inClock Inwrite
  • when_i_work.times.clock_outClock Outwrite
  • when_i_work.times.createCreate Timewrite
  • when_i_work.times.deleteDelete Timedestructive
  • when_i_work.times.getGet Timeread
  • when_i_work.times.listList Timesread
  • when_i_work.times.updateUpdate Timewrite
Availability events6
  • when_i_work.availability_events.createCreate Availability Eventwrite
  • when_i_work.availability_events.deleteDelete Availability Eventdestructive
  • when_i_work.availability_events.exception_createCreate Availability Event Exceptionwrite
  • when_i_work.availability_events.getGet Availability Eventread
  • when_i_work.availability_events.listList Availability Eventsread
  • when_i_work.availability_events.updateUpdate Availability Eventwrite
Positions6
  • when_i_work.positions.bulk_updateUpdate Multiple Positionswrite
  • when_i_work.positions.createCreate Positionwrite
  • when_i_work.positions.deleteDelete Positiondestructive
  • when_i_work.positions.getGet Positionread
  • when_i_work.positions.listList Positionsread
  • when_i_work.positions.updateUpdate Positionwrite
Account5
  • when_i_work.account.admins_listList Adminsread
  • when_i_work.account.createCreate Accountwrite
  • when_i_work.account.getGet Accountread
  • when_i_work.account.settings_updateUpdate Account Settingswrite
  • when_i_work.account.updateUpdate Accountwrite
Annotations5
  • when_i_work.annotations.createCreate Annotationwrite
  • when_i_work.annotations.deleteDelete Annotationdestructive
  • when_i_work.annotations.getGet Annotationread
  • when_i_work.annotations.listList Annotationsread
  • when_i_work.annotations.updateUpdate Annotationwrite
Locations5
  • when_i_work.locations.createCreate Schedule (Location)write
  • when_i_work.locations.deleteDelete Schedule (Location)destructive
  • when_i_work.locations.getGet Schedule (Location)read
  • when_i_work.locations.listList Schedules (Locations)read
  • when_i_work.locations.updateUpdate Schedule (Location)write
Openshift approval requests5
  • when_i_work.openshift_approval_requests.deleteDelete an OpenShift Approval Request.destructive
  • when_i_work.openshift_approval_requests.getGet specific OpenShift Approval Requestread
  • when_i_work.openshift_approval_requests.listList OpenShift Approval Requestsread
  • when_i_work.openshift_approval_requests.updateUpdate an OpenShift Approval Request.write
  • when_i_work.openshift_approval_requests.user_request_cancelCancel an individual's request for an OpenShiftdestructive
Payrolls5
  • when_i_work.payrolls.getGet Payrollread
  • when_i_work.payrolls.listList Payrollsread
  • when_i_work.payrolls.notices_listList Noticesread
  • when_i_work.payrolls.stats_getGet Payroll Statistics for current hoursread
  • when_i_work.payrolls.updateUpdate Payrollwrite
Schedule templates5
  • when_i_work.schedule_templates.createCreate Schedule Templatewrite
  • when_i_work.schedule_templates.deleteDelete Schedule Templatedestructive
  • when_i_work.schedule_templates.getGet Schedule Templateread
  • when_i_work.schedule_templates.listList Schedule Templatesread
  • when_i_work.schedule_templates.updateUpdate Schedule Templatewrite
Shift breaks5
  • when_i_work.shift_breaks.createCreate Shift Breakwrite
  • when_i_work.shift_breaks.deleteDelete Shift Breakdestructive
  • when_i_work.shift_breaks.getGet Shift Breakread
  • when_i_work.shift_breaks.listList Shift Breaksread
  • when_i_work.shift_breaks.updateUpdate Shift Breakwrite
Shift requests5
  • when_i_work.shift_requests.createCreate a new shift request.write
  • when_i_work.shift_requests.deleteDelete the given shift request.destructive
  • when_i_work.shift_requests.getGet the details of a specific shift request.read
  • when_i_work.shift_requests.listGets a collection of all shift requests.read
  • when_i_work.shift_requests.updateUpdate a shift request.write
Shift templates5
  • when_i_work.shift_templates.createCreate Shift Template (Block)write
  • when_i_work.shift_templates.deleteDelete Shift Template (Block)destructive
  • when_i_work.shift_templates.getGet Shift Template (Block)read
  • when_i_work.shift_templates.listList Shift Templates (Blocks)read
  • when_i_work.shift_templates.updateUpdate Shift Template (block)write
Sites5
  • when_i_work.sites.createCreate Sitewrite
  • when_i_work.sites.deleteDelete Sitedestructive
  • when_i_work.sites.getGet Siteread
  • when_i_work.sites.listList Sitesread
  • when_i_work.sites.updateUpdate Sitewrite
Time off requests5
  • when_i_work.time_off_requests.createCreate Time Off Requestwrite
  • when_i_work.time_off_requests.deleteDelete Time Off Requestdestructive
  • when_i_work.time_off_requests.getGet Time Off Requestread
  • when_i_work.time_off_requests.listList Time Off Requestsread
  • when_i_work.time_off_requests.updateUpdate Time Off Requestwrite
Paid rest records4
  • when_i_work.paid_rest_records.createCreate Shift Break Paid Record Entrywrite
  • when_i_work.paid_rest_records.deleteDelete Shift Break Paid Restdestructive
  • when_i_work.paid_rest_records.getGet Shift Break - Paid Rest Recordread
  • when_i_work.paid_rest_records.listList Shift Break - Paid Rest recordsread
Time off request types4
  • when_i_work.time_off_request_types.deleteDelete Time Off Request Typedestructive
  • when_i_work.time_off_request_types.getGet Time Off Request Typeread
  • when_i_work.time_off_request_types.listList Of Time Off Request Typesread
  • when_i_work.time_off_request_types.upsertCreate or update a Collection of request typeswrite
Imports3
  • when_i_work.imports.finalizeFinalize Importwrite
  • when_i_work.imports.getGet Importread
  • when_i_work.imports.previewPreview Importread
People3
  • when_i_work.people.me_getGet Personread
  • when_i_work.people.password_updateUpdate Passwordwrite
  • when_i_work.people.updateUpdate Personwrite
Timezones2
  • when_i_work.timezones.getGet Timezoneread
  • when_i_work.timezones.listList Timezonesread
Punch1
  • when_i_work.punch.state_getPunch Stateread
Scheduled breaks1
  • when_i_work.scheduled_breaks.listList Scheduled Shift Breaksread

Questions

The When I Work MCP server, answered.

Is there a When I Work MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 120 When I Work actions across shifts, users, times and availability events, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by When I Work.

What do I need to connect When I Work?

When I Work developer key (request one from When I Work via the developer/API page; sent as the W-Key header on login), Email address of the When I Work user the connection acts as (an account admin or manager for full access) and Password of that When I Work user. Plus your user id. The free call account { op: "connections.requirements", service: "when_i_work" } lists exactly what to paste.

Can an AI agent delete or change things in When I Work?

Only if its key allows it, and only with an explicit confirmation. 18 When I Work actions are destructive, including delete User, delete Schedule (Location) and delete Time Off Request. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my When I Work API limit?

actionlake paces every call to the limits in the When I Work service file: 300 calls a minute per connection. Repeated reads are answered from cache (49 When I Work actions can be), which never reaches When I Work.

What does a When I Work action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (120 When I Work actions page). Cache hits, searches, dry runs and calls When I Work refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which When I Work API does it cover?

The When I Work API v2/v3 (OpenAPI 3.1.0) plus Login Service at api.wheniwork.com. It is built from When I Work's documentation as read on 23 October 2026. 120 actions in 23 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my When I Work data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your When I Work credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent When I Work today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.