@mindstone/mcp-server-workday
v0.3.1
Published
Workday HCM MCP server for Model Context Protocol hosts — workers, profiles, organizations
Readme
@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
- Version: 0.3.1 · npm
- Auth: OAuth (
WORKDAY_REFRESH_TOKEN) - Tools: 9 (workers, organizations, time off, recruiting, locations, jobs)
- Surface: cloud-api
- Machine-readable:
STATUS.json
Requirements
- Node.js 20+
- npm
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.
{
"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 buildnpx (once published)
npx -y @mindstone/mcp-server-workdayLocal
node dist/index.jsConfiguration
Environment variables
WORKDAY_HOST— Workday API host (e.g.wd5-impl-services1.workday.com)WORKDAY_TENANT— Workday tenant IDWORKDAY_CLIENT_ID— OAuth 2.0 client IDWORKDAY_CLIENT_SECRET— OAuth 2.0 client secretWORKDAY_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 (defaultv41.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 managementMINDSTONE_REBEL_BRIDGE_STATE— backwards-compatible alias forMCP_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"
}
}
}
}Tools (9)
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 IDlist_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; seeWORKDAY_RECRUITING_API_VERSIONif your tenant 404s)
Jobs
list_workday_jobs— List worker job assignments (position, title, location, organization)
Notes
- Search is client-side. Workday's
/workerscollection documents onlylimit/offset, solist_workday_workers'searchargument 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.idandhrefstay raw so they can be passed back into later tool calls. - Strict pagination.
limitmust be an integer 1-100 andoffseta non-negative integer; out-of-range or fractional values are rejected rather than silently clamped.worker_idarguments 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, orlist_workday_jobsmeans 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.
