@mindstone/mcp-server-workday

Workday HCM MCP server for Model Context Protocol hosts. Query workers, profiles, direct reports, organizations, locations, jobs, time off, and job requisitions in Workday through a standardised MCP interface using OAuth 2.0 authentication.
Status
Requirements
One-click install

After clicking the button, your host will prompt you to fill: WORKDAY_HOST, WORKDAY_TENANT, WORKDAY_CLIENT_ID, WORKDAY_CLIENT_SECRET, WORKDAY_REFRESH_TOKEN.
Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Workday)
{
"mcpServers": {
"Workday": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-workday"
],
"env": {
"WORKDAY_HOST": "",
"WORKDAY_TENANT": "",
"WORKDAY_CLIENT_ID": "",
"WORKDAY_CLIENT_SECRET": "",
"WORKDAY_REFRESH_TOKEN": ""
}
}
}
}
Quick Start
Install & build
cd <path-to-repo>/connectors/workday
npm install
npm run build
npx (once published)
npx -y @mindstone/mcp-server-workday
Local
Configuration
Environment variables
WORKDAY_HOST — Workday API host (e.g. wd5-impl-services1.workday.com)
WORKDAY_TENANT — Workday tenant ID
WORKDAY_CLIENT_ID — OAuth 2.0 client ID
WORKDAY_CLIENT_SECRET — OAuth 2.0 client secret
WORKDAY_REFRESH_TOKEN — optional OAuth 2.0 refresh token (enables the refresh_token grant; without it the client_credentials grant is used)
WORKDAY_RECRUITING_API_VERSION — optional override for the recruiting REST family version (default v41.2; Workday versions this API by platform release, so tenants on a different release may need e.g. v42.1)
MCP_HOST_BRIDGE_STATE — optional path to a host bridge state file used for credential management
MINDSTONE_REBEL_BRIDGE_STATE — backwards-compatible alias for MCP_HOST_BRIDGE_STATE
Host configuration examples
Claude Desktop / Cursor
{
"mcpServers": {
"Workday": {
"command": "npx",
"args": ["-y", "@mindstone/mcp-server-workday"],
"env": {
"WORKDAY_HOST": "wd5-impl-services1.workday.com",
"WORKDAY_TENANT": "your-tenant",
"WORKDAY_CLIENT_ID": "your-client-id",
"WORKDAY_CLIENT_SECRET": "your-client-secret",
"WORKDAY_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}
Local development (no npm publish needed)
{
"mcpServers": {
"Workday": {
"command": "node",
"args": ["<path-to-repo>/connectors/workday/dist/index.js"],
"env": {
"WORKDAY_HOST": "wd5-impl-services1.workday.com",
"WORKDAY_TENANT": "your-tenant",
"WORKDAY_CLIENT_ID": "your-client-id",
"WORKDAY_CLIENT_SECRET": "your-client-secret",
"WORKDAY_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}
Configuration
configure_workday_credentials — Configure Workday OAuth API credentials
Workers
list_workday_workers — List or search workers (employees and contingent workers)
get_workday_worker — Get a worker's full profile by ID
list_workday_direct_reports — List a worker's direct reports (one level of the org chart)
Organizations
list_workday_organizations — List organizations (departments, supervisory orgs, cost centers)
list_workday_locations — List work locations (offices, sites)
Time off
list_workday_time_off — List a worker's time-off entries (requires the ISU to have Absence Management domain access)
Recruiting
list_workday_job_requisitions — List job requisitions / open roles (requires Recruiting domain access; see WORKDAY_RECRUITING_API_VERSION if your tenant 404s)
Jobs
list_workday_jobs — List worker job assignments (position, title, location, organization)
Notes
- Search is client-side. Workday's
/workers collection documents only limit/offset, so list_workday_workers' search argument pages through workers and filters locally (case-insensitive match on name, email, title), scanning at most 1000 workers. On larger tenants, use a specific term.
- Field allowlisting. Every tool trims Workday's responses to an allowlisted set of fields (and deep-picks nested references to ID + name), so free-text fields such as time-off comments, requisition descriptions, and street addresses never reach the model.
- Untrusted-content envelopes. Every allowlisted string returned from Workday (names, titles, emails, statuses, dates — including values that arrive in an unexpected shape) is wrapped in
<untrusted-content source="workday"> envelopes so the model treats them as data, not instructions; keys inside vendor-shaped sub-objects are enveloped too. id and href stay raw so they can be passed back into later tool calls.
- Strict pagination.
limit must be an integer 1-100 and offset a non-negative integer; out-of-range or fractional values are rejected rather than silently clamped. worker_id arguments must be non-blank.
- Bounded errors & no redirect following. API and token errors return connector-authored messages (never raw vendor error bodies), and HTTP redirects are refused rather than followed, so credentials can never be replayed to a redirect target. The configured host is validated against loopback/private ranges (including non-canonical IP spellings and IPv6 forms) and re-resolved via DNS before credentials are sent.
- ISU security domains. Workday gates each REST family behind Integration System User domain permissions; a 403 from
list_workday_time_off, list_workday_job_requisitions, or list_workday_jobs means the ISU's security group needs the corresponding domain (Absence Management, Recruiting, Payroll).
Licence
FSL-1.1-MIT — Functional Source License, Version 1.1, with MIT future licence. The software converts to MIT licence on 2030-04-08.