Skip to main content
Glama
pranjalkumar-evonence

Workday MCP Server

Workday MCP Server

Un servidor de solo lectura MCP que expone datos de Workday HCM — trabajadores, organizaciones, organizaciones supervisoras, ubicaciones, perfiles de puesto y centros de coste — como herramientas que un LLM puede llamar, respaldado por la Workday REST API v1.0 (el conjunto de recursos «Common»/Foundation presente en todos los inquilinos de Workday).

Construido con el SDK de Python mcp oficial, que utiliza su transporte HTTP Streamable para poder ejecutarse como un servicio HTTP sin estado normal en Google Cloud Run.

Alcance

La superficie real de la API de Workday está dividida en varias familias de API REST versionadas de forma independiente (Common, Staffing, Absence Management, Compensation, Recruiting, Payroll, Talent, ...). Este proyecto implementa los recursos de Common v1, que son los más útiles en general, de solo lectura y presentes en todos los inquilinos:

Herramienta

Recurso de Workday

get_worker / list_workers

workers

get_organization / list_organizations

organizations

get_supervisory_organization / list_supervisory_organizations

supervisoryOrganizations

get_location / list_locations

locations

get_job_profile / list_job_profiles

jobProfiles

get_cost_center / list_cost_centers

costCenters

Todas las herramientas son de solo lectura (solo peticiones GET).

Para añadir otra familia de la API de Workday (p. ej., Absence Management), añade una nueva función @mcp.tool() en tools.py que llame a client.get(...) con la ruta adecuada; la autenticación, el manejo de errores y el mecanismo de paginación en workday_client.py ya están compartidos por todas las herramientas. Ten en cuenta que algunas familias de la API de Workday tienen versiones diferentes (p. ej., /ccx/api/staffing/v6/... o /ccx/api/absenceManagement/v2/...); si añades herramientas para esas, extiende WorkdayClient con un helper adicional de URL base en lugar de codificar rutas en tools.py.

Related MCP server: HRIS MCP Connector

Archivos

server.py           MCP server entrypoint (FastMCP + Streamable HTTP transport)
tools.py            Tool definitions: params, docstrings, JSON -> summary text
workday_client.py   Workday REST client: OAuth2 auth, requests, error handling
requirements.txt    Pinned dependencies
Dockerfile          Slim, non-root container image for Cloud Run

Autenticación

El servidor se autentica en Workday usando el flujo de credenciales de cliente OAuth2 contra:

{WORKDAY_HOST}/ccx/oauth2/{WORKDAY_TENANT}/token

Esto requiere un Registered API Client de Workday (usuario de sistema de integración) con acceso a la API habilitado y acceso de lectura a los dominios que quieras consultar (Worker Data, Organization Data, etc.). Configúralo en Workday en SystemAPI Clients, y concede al Integration System User resultante el acceso al grupo de seguridad correspondiente; esa es una tarea de administración de Workday, no algo que este código pueda hacer por ti.

Variables de entorno requeridas

Variable

Ejemplo

Notas

WORKDAY_TENANT

acme_gms

Nombre del inquilino de Workday

WORKDAY_HOST

https://wd2-impl-services1.workday.com

Host de API de tu inquilino, sin barra final

WORKDAY_CLIENT_ID

abcd1234...

ID de cliente OAuth2 del API client registrado

WORKDAY_CLIENT_SECRET

••••••••

Secreto de cliente OAuth2 — nunca lo incluyas en un commit

Opcionales:

Variable

Por defecto

Notas

PORT

8080

Puerto HTTP en el que escucha el servidor (Cloud Run lo establece automáticamente)

LOG_LEVEL

INFO

Nivel de registro de Python

WORKDAY_TOKEN_ENDPOINT

{WORKDAY_HOST}/ccx/oauth2/{WORKDAY_TENANT}/token

Sustituye la URL de token calculada. Establécelo si Workday te asignó un endpoint literal diferente.

WORKDAY_AUTHORIZATION_ENDPOINT

{WORKDAY_HOST}/ccx/oauth2/{WORKDAY_TENANT}/authorize

Capturado para uso futuro. No lo usa este cliente — consulta la nota sobre «Tipo de concesión» más abajo.

Tipo de concesión: Client Credentials vs. Authorization Code

Este cliente solo implementa la concesión Client Credentials (de dos partes, máquina a máquina, sin inicio de sesión de usuario) — hace POST al endpoint de token con grant_type=client_credentials y tu ID/secreto de cliente, y nunca toca el endpoint de autorización.

Si tu API Client de Workday está registrado solo para la concesión Authorization Code (consulta System → API Clients en Workday; busca el campo «Authentication Grant Type» y si hay una Redirect URI configurada), una solicitud de token client_credentials será rechazada con 401, por muy correctos que sean el ID y el secreto de cliente. Ese flujo requiere un inicio de sesión interactivo único a través del endpoint de autorización para obtener un refresh token, que es una integración diferente (más grande) de construir; avísanos si eso es lo que necesitas.

Si recibes un 401 y no estás seguro de qué tipo de concesión está habilitado, revisa los registros del servidor al inicio para ver una línea como:

Workday client configured: token_url=... api_base=... client_id=...

y confirma que esa URL coincide exactamente con lo que la página API Client de Workday muestra como endpoint de token para tu cliente.

Si falta cualquiera de las cuatro variables obligatorias, el servidor registra un error claro y se cierra al inicio en lugar de fallar de forma confusa en la primera llamada a una herramienta.

Si tu integración también necesita acceso de escritura, se requerirán scopes/concesiones adicionales en el API client — este servidor solo realiza peticiones GET, por lo que no se necesitan scopes de escritura para lo implementado aquí.

Ejecución local

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

export WORKDAY_TENANT=acme_gms
export WORKDAY_HOST=https://wd2-impl-services1.workday.com
export WORKDAY_CLIENT_ID=your-client-id
export WORKDAY_CLIENT_SECRET=your-client-secret

python server.py

El servidor escucha en http://0.0.0.0:8080/mcp/ (Streamable HTTP). Apunta cualquier cliente compatible con MCP (Claude, un MCP Inspector, etc.) a esa URL.

Comprobación rápida con el MCP Inspector:

npx @modelcontextprotocol/inspector http://localhost:8080/mcp/

Despliegue en Google Cloud Run

  1. Compila y sube la imagen (usando Cloud Build, para que no necesites Docker instalado localmente):

    gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/workday-mcp

    O compila localmente y sube:

    docker build -t gcr.io/YOUR_PROJECT_ID/workday-mcp .
    docker push gcr.io/YOUR_PROJECT_ID/workday-mcp
  2. Guarda el secreto del cliente en Secret Manager (no lo pases como una variable de entorno en texto plano en producción):

    echo -n "your-client-secret" | gcloud secrets create workday-client-secret --data-file=-
  3. Despliega:

    gcloud run deploy workday-mcp \
      --image gcr.io/YOUR_PROJECT_ID/workday-mcp \
      --region YOUR_REGION \
      --set-env-vars WORKDAY_TENANT=acme_gms,WORKDAY_HOST=https://wd2-impl-services1.workday.com,WORKDAY_CLIENT_ID=your-client-id \
      --set-secrets WORKDAY_CLIENT_SECRET=workday-client-secret:latest \
      --no-allow-unauthenticated

    --no-allow-unauthenticated es intencional: este servidor no implementa su propia capa de autenticación (por diseño), por lo que se espera que el control de acceso provenga de Cloud Run IAM (roles/run.invoker) o de un proxy inverso delante de él. Concede run.invoker solo a las identidades/servicios que deberían poder llamarlo, por ejemplo:

    gcloud run services add-iam-policy-binding workday-mcp \
      --region YOUR_REGION \
      --member="serviceAccount:your-caller@your-project.iam.gserviceaccount.com" \
      --role="roles/run.invoker"
  4. Cloud Run establece PORT automáticamente y la aplicación ya escucha en 0.0.0.0:$PORT, por lo que no se necesita configuración adicional. El contenedor es totalmente sin estado (no escribe archivos locales), por lo que escala a cero y vuelve a subir sin problemas, y varias instancias/réplicas pueden ejecutarse a la vez sin tener que preocuparse por estado compartido.

Manejo de errores y comportamiento de paginación

  • Las respuestas 4xx/5xx de Workday se convierten en un mensaje de error breve y legible y se devuelven como un error de herramienta MCP (isError: true) — nunca un stack trace en bruto.

  • Los fallos de red (DNS, timeout, conexión rechazada) también se capturan y se devuelven de la misma manera.

  • Los endpoints de listado devuelven una sola página (limit, por defecto 20, máximo 100; offset, por defecto 0). Si existen más resultados, la respuesta te indica el recuento total y qué offset pasar a continuación, en lugar de obtener todas las páginas automáticamente.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables Claude, Cursor, and other MCP clients to query PeopleForce HRIS data (employees, time-off, recruitment) via 27 read-only tools.
    28
    3
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables querying HR data like recent hires, employee details, departments, and PTO balances through natural language in an MCP client.
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to query Moka recruitment system data including candidates, jobs, pipelines, and talent pools through read-only MCP tools.
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes SAP SuccessFactors HR data as MCP tools for AI agents, enabling natural language queries about employees, jobs, performance, and organizational structure.

View all related MCP servers

Related MCP Connectors

  • Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.

  • A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud

  • Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pranjalkumar-evonence/workday-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server