Workday Capabilities

Naftiko 0.5 capability definitions for Workday - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves absence calendar for a department.

naftiko: "0.5"
info:
  label: "Absence Calendar Lookup"
  description: "Retrieves absence calendar for a department."
  tags:
    - hr
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-absence
          description: "Retrieves absence calendar for a department."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The absence calendar lookup identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: absence
          path: "/absence/calendar/lookup/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-absence
              method: GET

When a worker submits a time-off request in Workday, creates a corresponding out-of-office event in Google Calendar and notifies the team in Slack.

naftiko: "0.5"
info:
  label: "Absence Request with Calendar Sync"
  description: "When a worker submits a time-off request in Workday, creates a corresponding out-of-office event in Google Calendar and notifies the team in Slack."
  tags:
    - hr
    - time-off
    - workday
    - google-calendar
    - slack
capability:
  exposes:
    - type: mcp
      namespace: absence-sync
      port: 8080
      tools:
        - name: sync-absence-to-calendar
          description: "Given a Workday absence request, create an OOO event in Google Calendar and notify the team."
          inputParameters:
            - name: absence_request_id
              in: body
              type: string
              description: "The Workday absence request ID."
            - name: team_channel
              in: body
              type: string
              description: "The Slack channel for team notifications."
          steps:
            - name: get-absence
              type: call
              call: "workday.get-absence-request"
              with:
                request_id: "{{absence_request_id}}"
            - name: create-ooo-event
              type: call
              call: "gcal.create-event"
              with:
                calendar_id: "{{get-absence.work_email}}"
                summary: "OOO — {{get-absence.worker_name}}"
                start_date: "{{get-absence.start_date}}"
                end_date: "{{get-absence.end_date}}"
                description: "{{get-absence.absence_type}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "{{team_channel}}"
                text: "{{get-absence.worker_name}} will be OOO {{get-absence.start_date}} to {{get-absence.end_date}} ({{get-absence.absence_type}})."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: absences
          path: "/absence/requests/{{request_id}}"
          inputParameters:
            - name: request_id
              in: path
          operations:
            - name: get-absence-request
              method: GET
    - type: http
      namespace: gcal
      baseUri: "https://www.googleapis.com/calendar/v3"
      authentication:
        type: bearer
        token: "$secrets.google_service_token"
      resources:
        - name: events
          path: "/calendars/{{calendar_id}}/events"
          inputParameters:
            - name: calendar_id
              in: path
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a Workday supplier invoice exceeds the auto-approval threshold, routes for manager approval via Workday, posts to the AP Slack channel, and logs the approval in Confluence.

naftiko: "0.5"
info:
  label: "Accounts Payable Invoice Approval"
  description: "When a Workday supplier invoice exceeds the auto-approval threshold, routes for manager approval via Workday, posts to the AP Slack channel, and logs the approval in Confluence."
  tags:
    - finance
    - accounts-payable
    - workday-financials
    - slack
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: ap-approval
      port: 8080
      tools:
        - name: route-invoice-approval
          description: "Given a Workday invoice and threshold, route for manager approval, notify AP in Slack, and log in Confluence."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The Workday supplier invoice number."
            - name: ap_channel
              in: body
              type: string
              description: "The Slack channel for AP notifications."
            - name: confluence_page_id
              in: body
              type: string
              description: "The Confluence page ID for the AP approval log."
          steps:
            - name: get-invoice
              type: call
              call: "workday.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: notify-ap
              type: call
              call: "slack.post-message"
              with:
                channel: "{{ap_channel}}"
                text: "Invoice {{invoice_number}} from {{get-invoice.vendor}} for {{get-invoice.amount}} requires approval. Due: {{get-invoice.due_date}}."
            - name: log-to-confluence
              type: call
              call: "confluence.append-to-page"
              with:
                page_id: "{{confluence_page_id}}"
                content: "| {{invoice_number}} | {{get-invoice.vendor}} | {{get-invoice.amount}} | {{get-invoice.due_date}} | Pending |"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: invoices
          path: "/financial_management/supplier_invoices/{{invoice_number}}"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://workday.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: append-to-page
              method: PUT

Retrieves a forecast version from Workday Adaptive Planning by plan name and version, returning revenue, expense, and headcount projections.

naftiko: "0.5"
info:
  label: "Adaptive Planning Forecast Lookup"
  description: "Retrieves a forecast version from Workday Adaptive Planning by plan name and version, returning revenue, expense, and headcount projections."
  tags:
    - planning
    - finance
    - workday
capability:
  exposes:
    - type: mcp
      namespace: adaptive-planning
      port: 8080
      tools:
        - name: get-forecast
          description: "Retrieve a Workday Adaptive Planning forecast by plan and version. Returns revenue, expense, and headcount projections."
          inputParameters:
            - name: plan_name
              in: body
              type: string
              description: "The Adaptive Planning plan name."
            - name: version_name
              in: body
              type: string
              description: "The forecast version name."
          call: "workday.get-forecast"
          with:
            plan: "{{plan_name}}"
            version: "{{version_name}}"
          outputParameters:
            - name: total_revenue
              type: number
              mapping: "$.projections.revenue"
            - name: total_expense
              type: number
              mapping: "$.projections.expense"
            - name: headcount
              type: number
              mapping: "$.projections.headcount"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: forecasts
          path: "/planning/forecasts"
          inputParameters:
            - name: plan
              in: query
            - name: version
              in: query
          operations:
            - name: get-forecast
              method: GET

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: "0.5"
info:
  label: "Annual Compliance Certification Orchestrator"
  description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
  tags:
    - compliance
    - hr
    - legal
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-annual-compliance-certification-orchestrator
          description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Annual Compliance Certification Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: "0.5"
info:
  label: "API Lifecycle Management Orchestrator"
  description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
  tags:
    - engineering
    - api
    - operations
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: run-api-lifecycle-management-orchestrator
          description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed API Lifecycle Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves benefit plan details by plan ID.

naftiko: "0.5"
info:
  label: "Benefit Plan Details"
  description: "Retrieves benefit plan details by plan ID."
  tags:
    - hr
    - benefits
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-benefit
          description: "Retrieves benefit plan details by plan ID."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The benefit plan details identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: benefit
          path: "/benefit/plan/details/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-benefit
              method: GET

During open enrollment, queries Workday for workers who have not yet completed their benefits elections, then sends personalized reminder emails via SendGrid and logs reminders in Workday.

naftiko: "0.5"
info:
  label: "Benefits Enrollment Reminder"
  description: "During open enrollment, queries Workday for workers who have not yet completed their benefits elections, then sends personalized reminder emails via SendGrid and logs reminders in Workday."
  tags:
    - hr
    - benefits
    - workday
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: benefits-enrollment
      port: 8080
      tools:
        - name: send-enrollment-reminders
          description: "Query Workday for incomplete benefits enrollments and send reminder emails through SendGrid."
          inputParameters:
            - name: enrollment_period_id
              in: body
              type: string
              description: "The Workday open enrollment period ID."
            - name: reminder_template_id
              in: body
              type: string
              description: "The SendGrid email template ID for the reminder."
          steps:
            - name: get-incomplete-enrollments
              type: call
              call: "workday.get-enrollment-status"
              with:
                period_id: "{{enrollment_period_id}}"
                status: "incomplete"
            - name: send-reminders
              type: call
              call: "sendgrid.send-template-email"
              with:
                template_id: "{{reminder_template_id}}"
                recipients: "{{get-incomplete-enrollments.worker_emails}}"
                subject: "Action Required: Complete Your Benefits Enrollment"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: enrollments
          path: "/benefits/enrollments"
          inputParameters:
            - name: period_id
              in: query
            - name: status
              in: query
          operations:
            - name: get-enrollment-status
              method: GET
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-template-email
              method: POST

Compares Workday Adaptive Planning budget forecast against actual spend from Workday Financials, and alerts finance leadership in Slack when variance exceeds a threshold.

naftiko: "0.5"
info:
  label: "Budget Variance Alert"
  description: "Compares Workday Adaptive Planning budget forecast against actual spend from Workday Financials, and alerts finance leadership in Slack when variance exceeds a threshold."
  tags:
    - finance
    - budgeting
    - workday-financials
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: budget-variance
      port: 8080
      tools:
        - name: check-budget-variance
          description: "Compare planned vs actual spend for a cost center. Alert finance leadership in Slack if variance exceeds threshold."
          inputParameters:
            - name: cost_center_code
              in: body
              type: string
              description: "The Workday cost center code."
            - name: fiscal_year
              in: body
              type: string
              description: "Fiscal year in YYYY format."
            - name: variance_pct_threshold
              in: body
              type: number
              description: "Maximum acceptable variance percentage."
            - name: finance_channel
              in: body
              type: string
              description: "The Slack channel for finance alerts."
          steps:
            - name: get-budget
              type: call
              call: "workday.get-budget"
              with:
                cost_center: "{{cost_center_code}}"
                year: "{{fiscal_year}}"
            - name: get-actuals
              type: call
              call: "workday.get-actuals"
              with:
                cost_center: "{{cost_center_code}}"
                year: "{{fiscal_year}}"
            - name: alert-finance
              type: call
              call: "slack.post-message"
              with:
                channel: "{{finance_channel}}"
                text: "Budget variance alert for {{cost_center_code}} (FY{{fiscal_year}}): Budget {{get-budget.allocated}}, Actual {{get-actuals.total_spend}}. Remaining: {{get-budget.remaining}}. Threshold: {{variance_pct_threshold}}%."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/financial_management/cost_centers/{{cost_center}}/budgets"
          inputParameters:
            - name: cost_center
              in: path
            - name: year
              in: query
          operations:
            - name: get-budget
              method: GET
        - name: actuals
          path: "/financial_management/cost_centers/{{cost_center}}/actuals"
          inputParameters:
            - name: cost_center
              in: path
            - name: year
              in: query
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Returns the current status and pending step of a Workday business process instance, useful for tracking approvals and workflow progress.

naftiko: "0.5"
info:
  label: "Business Process Status Check"
  description: "Returns the current status and pending step of a Workday business process instance, useful for tracking approvals and workflow progress."
  tags:
    - platform
    - workflow
    - workday
capability:
  exposes:
    - type: mcp
      namespace: platform-bpm
      port: 8080
      tools:
        - name: get-business-process-status
          description: "Check the status of a Workday business process by instance ID. Returns overall status, current step, and assigned approver."
          inputParameters:
            - name: process_instance_id
              in: body
              type: string
              description: "The Workday business process instance ID."
          call: "workday.get-bp-status"
          with:
            instance_id: "{{process_instance_id}}"
          outputParameters:
            - name: overall_status
              type: string
              mapping: "$.overallStatus"
            - name: current_step
              type: string
              mapping: "$.currentStep.name"
            - name: assigned_to
              type: string
              mapping: "$.currentStep.assignedTo"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: business-processes
          path: "/businessProcesses/{{instance_id}}/status"
          inputParameters:
            - name: instance_id
              in: path
          operations:
            - name: get-bp-status
              method: GET

Retrieves the current status of a candidate application in Workday Recruiting, including stage, disposition, and recruiter.

naftiko: "0.5"
info:
  label: "Candidate Application Status"
  description: "Retrieves the current status of a candidate application in Workday Recruiting, including stage, disposition, and recruiter."
  tags:
    - recruiting
    - hr
    - workday-recruiting
capability:
  exposes:
    - type: mcp
      namespace: recruiting-candidate
      port: 8080
      tools:
        - name: get-candidate-status
          description: "Look up a candidate application by ID in Workday Recruiting. Returns application stage, disposition reason, and assigned recruiter."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Workday candidate application ID."
          call: "workday.get-application"
          with:
            app_id: "{{application_id}}"
          outputParameters:
            - name: stage
              type: string
              mapping: "$.currentStage"
            - name: disposition
              type: string
              mapping: "$.dispositionReason"
            - name: recruiter
              type: string
              mapping: "$.recruiter.fullName"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: applications
          path: "/recruiting/applications/{{app_id}}"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-application
              method: GET

When a compensation change is proposed in Workday, fetches the current and proposed amounts, routes for manager approval, and notifies HR and the employee in Slack upon completion.

naftiko: "0.5"
info:
  label: "Compensation Change Approval Pipeline"
  description: "When a compensation change is proposed in Workday, fetches the current and proposed amounts, routes for manager approval, and notifies HR and the employee in Slack upon completion."
  tags:
    - hr
    - compensation
    - workday
    - slack
    - approval
capability:
  exposes:
    - type: mcp
      namespace: comp-approval
      port: 8080
      tools:
        - name: route-comp-change
          description: "Given a compensation change event ID, fetch details from Workday, get manager approval context, and notify stakeholders in Slack."
          inputParameters:
            - name: comp_event_id
              in: body
              type: string
              description: "The Workday compensation change event ID."
            - name: hr_channel
              in: body
              type: string
              description: "The Slack channel ID for HR notifications."
          steps:
            - name: get-comp-event
              type: call
              call: "workday.get-comp-event"
              with:
                event_id: "{{comp_event_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-comp-event.worker_id}}"
            - name: get-manager
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-employee.manager_id}}"
            - name: notify-hr
              type: call
              call: "slack.post-message"
              with:
                channel: "{{hr_channel}}"
                text: "Comp change approved for {{get-employee.full_name}}: {{get-comp-event.current_amount}} -> {{get-comp-event.proposed_amount}} ({{get-comp-event.reason}}). Approved by {{get-manager.full_name}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: comp-events
          path: "/compensation/events/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-comp-event
              method: GET
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Returns the current compensation details for a Workday worker, including base pay, bonus target, pay grade, and currency.

naftiko: "0.5"
info:
  label: "Compensation Detail Lookup"
  description: "Returns the current compensation details for a Workday worker, including base pay, bonus target, pay grade, and currency."
  tags:
    - hr
    - compensation
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hcm-compensation
      port: 8080
      tools:
        - name: get-compensation
          description: "Retrieve current compensation for a worker by employee ID. Returns base pay, bonus target percentage, pay grade, and currency."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-compensation"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: base_salary
              type: number
              mapping: "$.basePay.amount"
            - name: bonus_target_pct
              type: number
              mapping: "$.bonusTarget.percentage"
            - name: pay_grade
              type: string
              mapping: "$.payGrade"
            - name: currency
              type: string
              mapping: "$.basePay.currency"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/workers/{{worker_id}}/compensation"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-compensation
              method: GET

Retrieves a Confluence wiki page.

naftiko: "0.5"
info:
  label: "Confluence Page Viewer"
  description: "Retrieves a Confluence wiki page."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-confluence
          description: "Retrieves a Confluence wiki page."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The confluence page viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.workday.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: confluence
          path: "/confluence/page/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-confluence
              method: GET

Converts a contingent worker to full-time employee in Workday, provisions benefits enrollment, creates an Azure AD permanent account, and notifies HR and the hiring manager.

naftiko: "0.5"
info:
  label: "Contractor Conversion to FTE"
  description: "Converts a contingent worker to full-time employee in Workday, provisions benefits enrollment, creates an Azure AD permanent account, and notifies HR and the hiring manager."
  tags:
    - hr
    - workday
    - microsoft-teams
    - onboarding
    - contingent-worker
capability:
  exposes:
    - type: mcp
      namespace: contractor-conversion
      port: 8080
      tools:
        - name: convert-to-fte
          description: "Convert a Workday contingent worker to FTE, provision benefits, create permanent AD account, and notify stakeholders."
          inputParameters:
            - name: contingent_worker_id
              in: body
              type: string
              description: "The Workday contingent worker ID."
            - name: fte_start_date
              in: body
              type: string
              description: "The FTE start date in YYYY-MM-DD format."
            - name: hr_channel
              in: body
              type: string
              description: "The Teams channel webhook for HR notifications."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{contingent_worker_id}}"
            - name: convert-worker
              type: call
              call: "workday.convert-to-employee"
              with:
                worker_id: "{{contingent_worker_id}}"
                start_date: "{{fte_start_date}}"
            - name: provision-ad
              type: call
              call: "msgraph.update-user"
              with:
                user_id: "{{get-worker.work_email}}"
                employeeType: "Full-Time"
                accountEnabled: true
            - name: notify-hr
              type: call
              call: "msteams.send-webhook"
              with:
                webhook_url: "{{hr_channel}}"
                text: "Contractor {{get-worker.full_name}} converted to FTE effective {{fte_start_date}}. New employee ID: {{convert-worker.employee_id}}. Benefits enrollment initiated."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: conversions
          path: "/workers/{{worker_id}}/convertToEmployee"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: convert-to-employee
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://outlook.office.com/webhook"
      authentication:
        type: none
      resources:
        - name: incoming-webhook
          path: "/{{webhook_url}}"
          inputParameters:
            - name: webhook_url
              in: path
          operations:
            - name: send-webhook
              method: POST

Looks up a Workday Financials cost center budget by code and fiscal year, returning allocated budget, spend-to-date, and remaining balance.

naftiko: "0.5"
info:
  label: "Cost Center Budget Query"
  description: "Looks up a Workday Financials cost center budget by code and fiscal year, returning allocated budget, spend-to-date, and remaining balance."
  tags:
    - finance
    - budgeting
    - workday-financials
capability:
  exposes:
    - type: mcp
      namespace: finance-budget
      port: 8080
      tools:
        - name: get-cost-center-budget
          description: "Retrieve budget allocation for a Workday cost center and fiscal year. Returns allocated amount, spend-to-date, and remaining balance."
          inputParameters:
            - name: cost_center_code
              in: body
              type: string
              description: "The Workday cost center code."
            - name: fiscal_year
              in: body
              type: string
              description: "Fiscal year in YYYY format."
          call: "workday.get-budget"
          with:
            cost_center: "{{cost_center_code}}"
            year: "{{fiscal_year}}"
          outputParameters:
            - name: allocated
              type: number
              mapping: "$.allocatedBudget"
            - name: spent
              type: number
              mapping: "$.spendToDate"
            - name: remaining
              type: number
              mapping: "$.remainingBalance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/financial_management/cost_centers/{{cost_center}}/budgets"
          inputParameters:
            - name: cost_center
              in: path
            - name: year
              in: query
          operations:
            - name: get-budget
              method: GET

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: "0.5"
info:
  label: "Cross-Functional Project Kickoff Orchestrator"
  description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
  tags:
    - project-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: run-cross-functional-project-kickoff-orchestrator
          description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: "0.5"
info:
  label: "Customer Data Privacy Request Handler"
  description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
  tags:
    - compliance
    - privacy
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-customer-data-privacy-request-handler
          description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Data Privacy Request Handler for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: "0.5"
info:
  label: "Customer Journey Mapping Orchestrator"
  description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
  tags:
    - customer-experience
    - analytics
    - product-management
capability:
  exposes:
    - type: mcp
      namespace: customer-experience
      port: 8080
      tools:
        - name: run-customer-journey-mapping-orchestrator
          description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Journey Mapping Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: "0.5"
info:
  label: "Data Governance Review Orchestrator"
  description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
  tags:
    - data-governance
    - compliance
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: run-data-governance-review-orchestrator
          description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Data Governance Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: "0.5"
info:
  label: "Digital Transformation Progress Orchestrator"
  description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
  tags:
    - strategy
    - analytics
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: strategy
      port: 8080
      tools:
        - name: run-digital-transformation-progress-orchestrator
          description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Digital Transformation Progress Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: "0.5"
info:
  label: "Disaster Recovery Test Orchestrator"
  description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
  tags:
    - infrastructure
    - operations
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-disaster-recovery-test-orchestrator
          description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Disaster Recovery Test Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Runs Workday diversity and inclusion reports, loads aggregated metrics into Snowflake, and triggers a Tableau dashboard refresh for the DEI leadership team.

naftiko: "0.5"
info:
  label: "Diversity Metrics Dashboard Refresh"
  description: "Runs Workday diversity and inclusion reports, loads aggregated metrics into Snowflake, and triggers a Tableau dashboard refresh for the DEI leadership team."
  tags:
    - hr
    - analytics
    - workday-reporting
    - snowflake
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: dei-metrics
      port: 8080
      tools:
        - name: refresh-dei-dashboard
          description: "Run Workday DEI reports, load to Snowflake, and refresh the Tableau DEI dashboard."
          inputParameters:
            - name: report_name
              in: body
              type: string
              description: "The Workday diversity report name."
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau datasource ID to refresh."
          steps:
            - name: run-dei-report
              type: call
              call: "workday.run-report"
              with:
                report: "{{report_name}}"
                format: "json"
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO HR_ANALYTICS.DEI_METRICS (report_date, data) SELECT CURRENT_DATE(), PARSE_JSON('{{run-dei-report.data}}')"
            - name: refresh-tableau
              type: call
              call: "tableau.refresh-datasource"
              with:
                datasource_id: "{{datasource_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://workday.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.workday.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/default/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-datasource
              method: POST

Generates an offer letter from Workday Recruiting candidate data, sends it for e-signature via DocuSign, and updates the candidate status in Workday upon completion.

naftiko: "0.5"
info:
  label: "DocuSign Offer Letter Pipeline"
  description: "Generates an offer letter from Workday Recruiting candidate data, sends it for e-signature via DocuSign, and updates the candidate status in Workday upon completion."
  tags:
    - recruiting
    - hr
    - workday-recruiting
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: offer-letter
      port: 8080
      tools:
        - name: send-offer-letter
          description: "Pull candidate details from Workday, send an offer letter via DocuSign, and update candidate status."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Workday candidate application ID."
            - name: template_id
              in: body
              type: string
              description: "The DocuSign template ID for the offer letter."
          steps:
            - name: get-candidate
              type: call
              call: "workday.get-application"
              with:
                app_id: "{{application_id}}"
            - name: send-envelope
              type: call
              call: "docusign.create-envelope"
              with:
                template_id: "{{template_id}}"
                signer_email: "{{get-candidate.candidate_email}}"
                signer_name: "{{get-candidate.candidate_name}}"
                tabs:
                  position_title: "{{get-candidate.job_title}}"
                  start_date: "{{get-candidate.proposed_start_date}}"
                  salary: "{{get-candidate.proposed_salary}}"
            - name: update-candidate-status
              type: call
              call: "workday.update-application-status"
              with:
                app_id: "{{application_id}}"
                status: "Offer Sent"
                envelope_id: "{{send-envelope.envelope_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: applications
          path: "/recruiting/applications/{{app_id}}"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-application
              method: GET
        - name: application-status
          path: "/recruiting/applications/{{app_id}}/status"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: update-application-status
              method: PUT
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/envelopes"
          operations:
            - name: create-envelope
              method: POST

Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
  tags:
    - hr
    - identity
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-employee-offboarding-orchestrator
          description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Employee Offboarding Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

On worker termination in Workday, disables the Azure AD account, revokes Okta sessions, creates a ServiceNow offboarding ticket, and notifies the manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Termination Workflow"
  description: "On worker termination in Workday, disables the Azure AD account, revokes Okta sessions, creates a ServiceNow offboarding ticket, and notifies the manager in Microsoft Teams."
  tags:
    - hr
    - offboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: orchestrate-termination
          description: "Given a terminated employee ID, disable AD account, revoke Okta sessions, open offboarding ticket, and notify the manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID of the terminated worker."
            - name: termination_date
              in: body
              type: string
              description: "The effective termination date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: disable-ad-account
              type: call
              call: "msgraph.update-user"
              with:
                user_id: "{{get-employee.work_email}}"
                accountEnabled: false
            - name: revoke-sessions
              type: call
              call: "okta.clear-sessions"
              with:
                user_id: "{{get-employee.work_email}}"
            - name: open-offboard-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Offboarding: {{get-employee.full_name}} — {{termination_date}}"
                category: "hr_offboarding"
                assigned_group: "IT_Offboarding"
                description: "Recover equipment, revoke building access, archive mailbox for {{get-employee.full_name}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "Offboarding initiated for {{get-employee.full_name}} effective {{termination_date}}. IT ticket: {{open-offboard-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-user
              method: PATCH
    - type: http
      namespace: okta
      baseUri: "https://workday.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: sessions
          path: "/users/{{user_id}}/sessions"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: clear-sessions
              method: DELETE
    - type: http
      namespace: servicenow
      baseUri: "https://workday.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: "0.5"
info:
  label: "Executive Dashboard Refresh Orchestrator"
  description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
  tags:
    - analytics
    - power-bi
    - business
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-executive-dashboard-refresh-orchestrator
          description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves expense reports from Workday, validates against corporate policy thresholds, and opens a Jira ticket for finance audit when violations are detected.

naftiko: "0.5"
info:
  label: "Expense Report Compliance Check"
  description: "Retrieves expense reports from Workday, validates against corporate policy thresholds, and opens a Jira ticket for finance audit when violations are detected."
  tags:
    - finance
    - expense
    - workday
    - jira
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-compliance
      port: 8080
      tools:
        - name: check-expense-compliance
          description: "Fetch a Workday expense report and validate against policy. If violations found, open a Jira audit ticket."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The Workday expense report ID."
            - name: employee_id
              in: body
              type: string
              description: "The employee ID who submitted the report."
          steps:
            - name: get-expense
              type: call
              call: "workday.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-audit-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FINAUDIT"
                summary: "Expense policy review: {{get-expense.report_name}} — {{get-employee.full_name}}"
                description: "Report total: {{get-expense.total_amount}} {{get-expense.currency}}. Submitted: {{get-expense.submit_date}}. Cost center: {{get-employee.cost_center}}."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://workday.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Orchestrates the Workday financial period close by running the close report, posting pending journal entries, and notifying the controller team in Microsoft Teams when complete.

naftiko: "0.5"
info:
  label: "Finance Period Close Orchestrator"
  description: "Orchestrates the Workday financial period close by running the close report, posting pending journal entries, and notifying the controller team in Microsoft Teams when complete."
  tags:
    - finance
    - accounting
    - workday-financials
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: run-period-close
          description: "Trigger a Workday fiscal period close sequence: run the close report, post pending journals, and notify controllers."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period identifier (e.g. FY2026-Q1)."
            - name: controller_channel
              in: body
              type: string
              description: "The Teams channel webhook URL for controller notifications."
          steps:
            - name: run-close-report
              type: call
              call: "workday.run-report"
              with:
                report: "Period_Close_Summary"
                format: "json"
            - name: post-journals
              type: call
              call: "workday.post-pending-journals"
              with:
                period: "{{fiscal_period}}"
            - name: notify-controllers
              type: call
              call: "msteams.send-webhook"
              with:
                webhook_url: "{{controller_channel}}"
                text: "Period {{fiscal_period}} close complete. {{run-close-report.row_count}} items reviewed. {{post-journals.posted_count}} journals posted."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET
        - name: journal-posting
          path: "/financial_management/journal_entries/post"
          inputParameters:
            - name: period
              in: query
          operations:
            - name: post-pending-journals
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://outlook.office.com/webhook"
      authentication:
        type: none
      resources:
        - name: incoming-webhook
          path: "/{{webhook_url}}"
          inputParameters:
            - name: webhook_url
              in: path
          operations:
            - name: send-webhook
              method: POST

Pulls Workday GL trial balance and bank statement data, compares balances, and creates a ServiceNow task for treasury when discrepancies are found.

naftiko: "0.5"
info:
  label: "General Ledger Reconciliation Pipeline"
  description: "Pulls Workday GL trial balance and bank statement data, compares balances, and creates a ServiceNow task for treasury when discrepancies are found."
  tags:
    - finance
    - accounting
    - workday-financials
    - servicenow
    - reconciliation
capability:
  exposes:
    - type: mcp
      namespace: gl-reconciliation
      port: 8080
      tools:
        - name: reconcile-gl
          description: "Compare Workday GL trial balance against bank data. Create a ServiceNow task if discrepancies exist."
          inputParameters:
            - name: ledger_account
              in: body
              type: string
              description: "The GL ledger account code."
            - name: as_of_date
              in: body
              type: string
              description: "The reconciliation date in YYYY-MM-DD format."
          steps:
            - name: get-trial-balance
              type: call
              call: "workday.get-trial-balance"
              with:
                account: "{{ledger_account}}"
                date: "{{as_of_date}}"
            - name: get-bank-balance
              type: call
              call: "workday.get-bank-statement"
              with:
                account: "{{ledger_account}}"
                date: "{{as_of_date}}"
            - name: open-discrepancy-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "GL reconciliation discrepancy: {{ledger_account}} as of {{as_of_date}}"
                description: "GL balance: {{get-trial-balance.balance}}, Bank balance: {{get-bank-balance.balance}}. Variance: {{get-trial-balance.balance}} - {{get-bank-balance.balance}}."
                assigned_group: "Treasury_Operations"
                category: "gl_reconciliation"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: trial-balance
          path: "/financial_management/trial_balance/{{account}}"
          inputParameters:
            - name: account
              in: path
            - name: date
              in: query
          operations:
            - name: get-trial-balance
              method: GET
        - name: bank-statements
          path: "/financial_management/bank_statements/{{account}}"
          inputParameters:
            - name: account
              in: path
            - name: date
              in: query
          operations:
            - name: get-bank-statement
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://workday.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Retrieves a file from Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive File Viewer"
  description: "Retrieves a file from Google Drive."
  tags:
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-google
          description: "Retrieves a file from Google Drive."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The google drive file viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.workday.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: google
          path: "/google/drive/file/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-google
              method: GET

Syncs approved headcount from Workday Adaptive Planning to a Snowflake data warehouse for BI reporting, then triggers a Tableau extract refresh for the executive dashboard.

naftiko: "0.5"
info:
  label: "Headcount Planning Sync"
  description: "Syncs approved headcount from Workday Adaptive Planning to a Snowflake data warehouse for BI reporting, then triggers a Tableau extract refresh for the executive dashboard."
  tags:
    - planning
    - finance
    - workday
    - snowflake
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: headcount-sync
      port: 8080
      tools:
        - name: sync-headcount-plan
          description: "Pull approved headcount from Workday Adaptive Planning, load into Snowflake, and refresh the Tableau executive dashboard."
          inputParameters:
            - name: plan_name
              in: body
              type: string
              description: "The Adaptive Planning plan name."
            - name: version_name
              in: body
              type: string
              description: "The approved version name."
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau datasource ID to refresh."
          steps:
            - name: get-headcount
              type: call
              call: "workday.get-forecast"
              with:
                plan: "{{plan_name}}"
                version: "{{version_name}}"
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO HR_ANALYTICS.HEADCOUNT_PLAN (plan, version, headcount, revenue, expense) VALUES ('{{plan_name}}', '{{version_name}}', {{get-headcount.headcount}}, {{get-headcount.total_revenue}}, {{get-headcount.total_expense}})"
            - name: refresh-tableau
              type: call
              call: "tableau.refresh-datasource"
              with:
                datasource_id: "{{datasource_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: forecasts
          path: "/planning/forecasts"
          inputParameters:
            - name: plan
              in: query
            - name: version
              in: query
          operations:
            - name: get-forecast
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://workday.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.workday.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/default/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-datasource
              method: POST

Extracts terminated worker records from Workday past retention period, archives them to Amazon S3 cold storage, and logs the archival event in Datadog for audit.

naftiko: "0.5"
info:
  label: "Hire-to-Retire Data Archival"
  description: "Extracts terminated worker records from Workday past retention period, archives them to Amazon S3 cold storage, and logs the archival event in Datadog for audit."
  tags:
    - hr
    - compliance
    - workday
    - amazon-s3
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: data-archival
      port: 8080
      tools:
        - name: archive-terminated-workers
          description: "Extract terminated Workday workers past retention, archive to S3, and log in Datadog."
          inputParameters:
            - name: retention_cutoff_date
              in: body
              type: string
              description: "Archive workers terminated before this date (YYYY-MM-DD)."
            - name: s3_bucket
              in: body
              type: string
              description: "The S3 bucket for archived data."
          steps:
            - name: get-terminated-workers
              type: call
              call: "workday.run-report"
              with:
                report: "Terminated_Workers_Archive"
                format: "json"
            - name: upload-to-s3
              type: call
              call: "s3.put-object"
              with:
                bucket: "{{s3_bucket}}"
                key: "hr-archive/terminated/{{retention_cutoff_date}}.json"
                body: "{{get-terminated-workers.data}}"
            - name: log-to-datadog
              type: call
              call: "datadog.create-event"
              with:
                title: "Worker data archived: {{retention_cutoff_date}}"
                text: "Archived {{get-terminated-workers.row_count}} terminated worker records to s3://{{s3_bucket}}/hr-archive/terminated/{{retention_cutoff_date}}.json"
                tags: "service:workday,env:production,team:hr-platform"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_s3_token"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

Orchestrates hr tech workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 1"
  description: "Orchestrates hr tech workflow 1 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-001
          description: "Orchestrates hr tech workflow 1 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 1 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates hr tech workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 2"
  description: "Orchestrates hr tech workflow 2 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-002
          description: "Orchestrates hr tech workflow 2 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 2 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves hr tech operational data for workflow 3.

naftiko: "0.5"
info:
  label: "Hr Tech Data Query 3"
  description: "Retrieves hr tech operational data for workflow 3."
  tags:
    - hr
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-data-3
          description: "Query hr tech data for workflow 3."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr-tech/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-3
              method: GET

Orchestrates hr tech workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 4"
  description: "Orchestrates hr tech workflow 4 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-004
          description: "Orchestrates hr tech workflow 4 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 4 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates hr tech workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 5"
  description: "Orchestrates hr tech workflow 5 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-005
          description: "Orchestrates hr tech workflow 5 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 5 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves hr tech operational data for workflow 6.

naftiko: "0.5"
info:
  label: "Hr Tech Data Query 6"
  description: "Retrieves hr tech operational data for workflow 6."
  tags:
    - hr
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-data-6
          description: "Query hr tech data for workflow 6."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr-tech/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-6
              method: GET

Orchestrates hr tech workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 7"
  description: "Orchestrates hr tech workflow 7 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-007
          description: "Orchestrates hr tech workflow 7 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 7 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates hr tech workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 8"
  description: "Orchestrates hr tech workflow 8 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-008
          description: "Orchestrates hr tech workflow 8 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 8 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves hr tech operational data for workflow 9.

naftiko: "0.5"
info:
  label: "Hr Tech Data Query 9"
  description: "Retrieves hr tech operational data for workflow 9."
  tags:
    - hr
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-data-9
          description: "Query hr tech data for workflow 9."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr-tech/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-9
              method: GET

Orchestrates hr tech workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 10"
  description: "Orchestrates hr tech workflow 10 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-010
          description: "Orchestrates hr tech workflow 10 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 10 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates hr tech workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 11"
  description: "Orchestrates hr tech workflow 11 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-011
          description: "Orchestrates hr tech workflow 11 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 11 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves hr tech operational data for workflow 12.

naftiko: "0.5"
info:
  label: "Hr Tech Data Query 12"
  description: "Retrieves hr tech operational data for workflow 12."
  tags:
    - hr
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-data-12
          description: "Query hr tech data for workflow 12."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr-tech/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-12
              method: GET

Orchestrates hr tech workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 13"
  description: "Orchestrates hr tech workflow 13 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-013
          description: "Orchestrates hr tech workflow 13 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 13 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates hr tech workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Hr Tech Workflow 14"
  description: "Orchestrates hr tech workflow 14 by coordinating across systems, validating data, and sending notifications."
  tags:
    - hr
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-hr-tech-workflow-014
          description: "Orchestrates hr tech workflow 14 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Hr Tech Workflow 14 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves hr tech operational data for workflow 15.

naftiko: "0.5"
info:
  label: "Hr Tech Data Query 15"
  description: "Retrieves hr tech operational data for workflow 15."
  tags:
    - hr
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-data-15
          description: "Query hr tech data for workflow 15."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr-tech/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-15
              method: GET

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: "0.5"
info:
  label: "Infrastructure Capacity Planning Orchestrator"
  description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
  tags:
    - infrastructure
    - planning
    - finance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-infrastructure-capacity-planning-orchestrator
          description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Monitors Workday integration runs, and when a run fails, creates a PagerDuty incident and posts details to the platform engineering Slack channel.

naftiko: "0.5"
info:
  label: "Integration Failure Alert Pipeline"
  description: "Monitors Workday integration runs, and when a run fails, creates a PagerDuty incident and posts details to the platform engineering Slack channel."
  tags:
    - integrations
    - platform-engineering
    - workday-integrations
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: integration-alerting
      port: 8080
      tools:
        - name: alert-integration-failure
          description: "Given a failed Workday integration run ID, create a PagerDuty incident and alert the platform team in Slack."
          inputParameters:
            - name: integration_run_id
              in: body
              type: string
              description: "The failed Workday integration run ID."
            - name: platform_channel
              in: body
              type: string
              description: "The Slack channel ID for platform engineering."
          steps:
            - name: get-run-details
              type: call
              call: "workday.get-integration-run"
              with:
                run_id: "{{integration_run_id}}"
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "Workday Integration Failed: {{get-run-details.integration_name}}"
                service_id: "$secrets.pagerduty_workday_service_id"
                urgency: "high"
                body: "Run {{integration_run_id}} failed. Records processed: {{get-run-details.records_processed}}, failed: {{get-run-details.records_failed}}. Completed: {{get-run-details.completed_at}}."
            - name: notify-platform
              type: call
              call: "slack.post-message"
              with:
                channel: "{{platform_channel}}"
                text: "Integration failure: {{get-run-details.integration_name}} (run {{integration_run_id}}). {{get-run-details.records_failed}} records failed. PagerDuty incident: {{create-incident.incident_url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: integration-runs
          path: "/integrations/runs/{{run_id}}"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-integration-run
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks the execution status of a Workday Integration (EIB or Studio integration) by run ID, returning completion state, record counts, and error summary.

naftiko: "0.5"
info:
  label: "Integration Run Status"
  description: "Checks the execution status of a Workday Integration (EIB or Studio integration) by run ID, returning completion state, record counts, and error summary."
  tags:
    - integrations
    - platform
    - workday-integrations
capability:
  exposes:
    - type: mcp
      namespace: integration-status
      port: 8080
      tools:
        - name: get-integration-run
          description: "Check the status of a Workday integration run. Returns state, records processed, records failed, and completion time."
          inputParameters:
            - name: integration_run_id
              in: body
              type: string
              description: "The Workday integration run ID."
          call: "workday.get-integration-run"
          with:
            run_id: "{{integration_run_id}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.status"
            - name: records_processed
              type: number
              mapping: "$.recordsProcessed"
            - name: records_failed
              type: number
              mapping: "$.recordsFailed"
            - name: completed_at
              type: string
              mapping: "$.completedDateTime"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: integration-runs
          path: "/integrations/runs/{{run_id}}"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-integration-run
              method: GET

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: "0.5"
info:
  label: "IT Change Management Orchestrator"
  description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
  tags:
    - it
    - servicenow
    - operations
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: run-it-change-management-orchestrator
          description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed IT Change Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a Jira ticket by issue key.

naftiko: "0.5"
info:
  label: "Jira Ticket Viewer"
  description: "Retrieves a Jira ticket by issue key."
  tags:
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-jira
          description: "Retrieves a Jira ticket by issue key."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The jira ticket viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.workday.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: jira
          path: "/jira/ticket/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-jira
              method: GET

When a Workday job requisition is approved, extracts the job details, creates a LinkedIn job posting via the LinkedIn API, and updates the requisition with the external posting URL.

naftiko: "0.5"
info:
  label: "Job Requisition to LinkedIn Posting"
  description: "When a Workday job requisition is approved, extracts the job details, creates a LinkedIn job posting via the LinkedIn API, and updates the requisition with the external posting URL."
  tags:
    - recruiting
    - hr
    - workday-recruiting
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: recruiting-syndication
      port: 8080
      tools:
        - name: syndicate-to-linkedin
          description: "Given a Workday requisition ID, pull job details and create a LinkedIn job posting. Returns the LinkedIn posting URL."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                req_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.job_description}}"
                location: "{{get-requisition.location}}"
                company_id: "{{get-requisition.company_linkedin_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/requisitions/{{req_id}}"
          inputParameters:
            - name: req_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/simpleJobPostings"
          operations:
            - name: create-job-posting
              method: POST

Retrieves the status of a Workday Financials journal entry by ID, returning posting status, ledger, amount, and company.

naftiko: "0.5"
info:
  label: "Journal Entry Status"
  description: "Retrieves the status of a Workday Financials journal entry by ID, returning posting status, ledger, amount, and company."
  tags:
    - finance
    - accounting
    - workday-financials
capability:
  exposes:
    - type: mcp
      namespace: finance-journal
      port: 8080
      tools:
        - name: get-journal-entry
          description: "Look up a Workday journal entry by ID. Returns status, ledger account, total amount, and company."
          inputParameters:
            - name: journal_id
              in: body
              type: string
              description: "The Workday journal entry ID."
          call: "workday.get-journal"
          with:
            journal_id: "{{journal_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.postingStatus"
            - name: ledger
              type: string
              mapping: "$.ledgerAccount"
            - name: total_amount
              type: number
              mapping: "$.totalAmount"
            - name: company
              type: string
              mapping: "$.company"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: journals
          path: "/financial_management/journal_entries/{{journal_id}}"
          inputParameters:
            - name: journal_id
              in: path
          operations:
            - name: get-journal
              method: GET

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: "0.5"
info:
  label: "Knowledge Base Refresh Orchestrator"
  description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
  tags:
    - knowledge-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: knowledge-management
      port: 8080
      tools:
        - name: run-knowledge-base-refresh-orchestrator
          description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Knowledge Base Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Queries Workday Learning for overdue compliance training assignments, sends reminder emails via SendGrid, and creates a Jira ticket for the compliance team when deadlines pass.

naftiko: "0.5"
info:
  label: "Learning Assignment Compliance Tracker"
  description: "Queries Workday Learning for overdue compliance training assignments, sends reminder emails via SendGrid, and creates a Jira ticket for the compliance team when deadlines pass."
  tags:
    - hr
    - learning
    - workday
    - sendgrid
    - jira
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: learning-compliance
      port: 8080
      tools:
        - name: track-overdue-training
          description: "Find overdue Workday Learning assignments, send email reminders, and escalate to the compliance team via Jira."
          inputParameters:
            - name: course_id
              in: body
              type: string
              description: "The Workday Learning course ID for the compliance training."
            - name: reminder_template_id
              in: body
              type: string
              description: "The SendGrid template ID for the reminder email."
          steps:
            - name: get-overdue-assignments
              type: call
              call: "workday.get-learning-assignments"
              with:
                course_id: "{{course_id}}"
                status: "overdue"
            - name: send-reminders
              type: call
              call: "sendgrid.send-template-email"
              with:
                template_id: "{{reminder_template_id}}"
                recipients: "{{get-overdue-assignments.worker_emails}}"
                subject: "Overdue: Required Compliance Training"
            - name: escalate-to-compliance
              type: call
              call: "jira.create-issue"
              with:
                project_key: "COMPLY"
                summary: "Overdue compliance training: {{get-overdue-assignments.count}} workers for course {{course_id}}"
                description: "{{get-overdue-assignments.count}} workers have not completed required compliance training. Course: {{course_id}}. Reminder emails sent."
                issue_type: "Task"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning-assignments
          path: "/learning/assignments"
          inputParameters:
            - name: course_id
              in: query
            - name: status
              in: query
          operations:
            - name: get-learning-assignments
              method: GET
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-template-email
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://workday.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves available courses from the learning catalog.

naftiko: "0.5"
info:
  label: "Learning Course Catalog"
  description: "Retrieves available courses from the learning catalog."
  tags:
    - hr
    - learning
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-learning
          description: "Retrieves available courses from the learning catalog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The learning course catalog identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: learning
          path: "/learning/course/catalog/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-learning
              method: GET

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Orchestrator"
  description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
  tags:
    - marketing
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: run-marketing-campaign-performance-orchestrator
          description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Marketing Campaign Performance Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Sends a message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Message Sender"
  description: "Sends a message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-microsoft
          description: "Sends a message to a Microsoft Teams channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The microsoft teams message sender identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.workday.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: microsoft
          path: "/microsoft/teams/message/sender/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-microsoft
              method: GET

Fetches Workday expense reports with foreign currency transactions, converts amounts using live exchange rates, and syncs reconciled totals to the finance Smartsheet tracker.

naftiko: "0.5"
info:
  label: "Multi-Currency Expense Reconciliation"
  description: "Fetches Workday expense reports with foreign currency transactions, converts amounts using live exchange rates, and syncs reconciled totals to the finance Smartsheet tracker."
  tags:
    - finance
    - expense
    - workday
    - smartsheet
    - currency
capability:
  exposes:
    - type: mcp
      namespace: fx-expense
      port: 8080
      tools:
        - name: reconcile-fx-expenses
          description: "Pull Workday foreign currency expenses, convert at live rates, and update the Smartsheet finance tracker."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The Workday expense report ID."
            - name: base_currency
              in: body
              type: string
              description: "The base currency for conversion (e.g. USD)."
            - name: sheet_id
              in: body
              type: string
              description: "The Smartsheet sheet ID for the finance tracker."
          steps:
            - name: get-expense
              type: call
              call: "workday.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-exchange-rate
              type: call
              call: "exchangerate.get-rate"
              with:
                base: "{{base_currency}}"
                target: "{{get-expense.currency}}"
            - name: update-tracker
              type: call
              call: "smartsheet.add-row"
              with:
                sheet_id: "{{sheet_id}}"
                cells:
                  report_id: "{{expense_report_id}}"
                  original_amount: "{{get-expense.total_amount}}"
                  original_currency: "{{get-expense.currency}}"
                  exchange_rate: "{{get-exchange-rate.rate}}"
                  converted_amount: "{{get-expense.total_amount}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: exchangerate
      baseUri: "https://api.exchangerate-api.com/v4"
      authentication:
        type: none
      resources:
        - name: rates
          path: "/latest/{{base}}"
          inputParameters:
            - name: base
              in: path
            - name: target
              in: query
          operations:
            - name: get-rate
              method: GET
    - type: http
      namespace: smartsheet
      baseUri: "https://api.smartsheet.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.smartsheet_token"
      resources:
        - name: rows
          path: "/sheets/{{sheet_id}}/rows"
          inputParameters:
            - name: sheet_id
              in: path
          operations:
            - name: add-row
              method: POST

On new hire creation in Workday, provisions an Azure AD account, creates a ServiceNow onboarding ticket, and sends a Slack welcome message to the team channel.

naftiko: "0.5"
info:
  label: "New Hire Onboarding Orchestrator"
  description: "On new hire creation in Workday, provisions an Azure AD account, creates a ServiceNow onboarding ticket, and sends a Slack welcome message to the team channel."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: orchestrate-onboarding
          description: "Given a Workday employee ID and start date, provision Azure AD, open ServiceNow ticket, and welcome the hire in Slack."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: team_channel
              in: body
              type: string
              description: "The Slack channel ID for the hiring team."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: provision-ad
              type: call
              call: "msgraph.create-user"
              with:
                displayName: "{{get-employee.full_name}}"
                mailNickname: "{{get-employee.username}}"
                userPrincipalName: "{{get-employee.work_email}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} starting {{start_date}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "New hire {{get-employee.full_name}} — provision laptop, badge, and workspace."
            - name: send-welcome
              type: call
              call: "slack.post-message"
              with:
                channel: "{{team_channel}}"
                text: "Welcome {{get-employee.first_name}} to the team! Starting {{start_date}}. IT ticket: {{open-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://workday.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves details of an open job requisition in Workday Recruiting, including title, hiring manager, department, and posting status.

naftiko: "0.5"
info:
  label: "Open Position Lookup"
  description: "Retrieves details of an open job requisition in Workday Recruiting, including title, hiring manager, department, and posting status."
  tags:
    - recruiting
    - hr
    - workday-recruiting
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: get-job-requisition
          description: "Look up a Workday job requisition by ID. Returns title, hiring manager, department, location, and current status."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          call: "workday.get-requisition"
          with:
            req_id: "{{requisition_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.jobTitle"
            - name: hiring_manager
              type: string
              mapping: "$.hiringManager.fullName"
            - name: department
              type: string
              mapping: "$.department"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/requisitions/{{req_id}}"
          inputParameters:
            - name: req_id
              in: path
          operations:
            - name: get-requisition
              method: GET

Retrieves organizational chart for a department.

naftiko: "0.5"
info:
  label: "Org Chart Viewer"
  description: "Retrieves organizational chart for a department."
  tags:
    - hr
    - organization
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-org
          description: "Retrieves organizational chart for a department."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The org chart viewer identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: org
          path: "/org/chart/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-org
              method: GET

Returns the supervisory organization hierarchy for a given organization ID in Workday, including parent org, manager, and direct child orgs.

naftiko: "0.5"
info:
  label: "Organization Hierarchy Lookup"
  description: "Returns the supervisory organization hierarchy for a given organization ID in Workday, including parent org, manager, and direct child orgs."
  tags:
    - hr
    - organization
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hcm-org
      port: 8080
      tools:
        - name: get-org-hierarchy
          description: "Retrieve the supervisory organization tree for a Workday org ID. Returns parent org, org manager, and child organizations."
          inputParameters:
            - name: org_id
              in: body
              type: string
              description: "The Workday supervisory organization ID."
          call: "workday.get-org"
          with:
            org_id: "{{org_id}}"
          outputParameters:
            - name: org_name
              type: string
              mapping: "$.name"
            - name: manager
              type: string
              mapping: "$.manager.fullName"
            - name: parent_org
              type: string
              mapping: "$.parentOrg.name"
            - name: child_orgs
              type: array
              mapping: "$.childOrgs[*].name"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: organizations
          path: "/organizations/{{org_id}}"
          inputParameters:
            - name: org_id
              in: path
          operations:
            - name: get-org
              method: GET

Compares Workday payroll results against ADP payroll register for a pay period, identifies discrepancies, and opens a ServiceNow task for payroll ops when variances exceed threshold.

naftiko: "0.5"
info:
  label: "Payroll Discrepancy Alert"
  description: "Compares Workday payroll results against ADP payroll register for a pay period, identifies discrepancies, and opens a ServiceNow task for payroll ops when variances exceed threshold."
  tags:
    - payroll
    - finance
    - workday-payroll
    - adp
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: payroll-reconciliation
      port: 8080
      tools:
        - name: reconcile-payroll
          description: "Compare Workday and ADP payroll totals for a pay period. If variance exceeds threshold, create a ServiceNow task."
          inputParameters:
            - name: pay_period_id
              in: body
              type: string
              description: "The Workday pay period identifier."
            - name: adp_payroll_id
              in: body
              type: string
              description: "The ADP payroll batch ID."
            - name: variance_threshold
              in: body
              type: number
              description: "Maximum acceptable variance in dollars."
          steps:
            - name: get-wd-payroll
              type: call
              call: "workday.get-payroll-summary"
              with:
                period_id: "{{pay_period_id}}"
            - name: get-adp-payroll
              type: call
              call: "adp.get-payroll-summary"
              with:
                payroll_id: "{{adp_payroll_id}}"
            - name: open-discrepancy-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Payroll discrepancy: period {{pay_period_id}}"
                description: "Workday gross: {{get-wd-payroll.total_gross}}, ADP gross: {{get-adp-payroll.total_gross}}. Variance exceeds ${{variance_threshold}}."
                assigned_group: "Payroll_Operations"
                category: "payroll_reconciliation"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payroll-runs
          path: "/payroll/runs/{{period_id}}/summary"
          inputParameters:
            - name: period_id
              in: path
          operations:
            - name: get-payroll-summary
              method: GET
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll-summaries
          path: "/payroll-summaries/{{payroll_id}}"
          inputParameters:
            - name: payroll_id
              in: path
          operations:
            - name: get-payroll-summary
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://workday.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Fetches a Workday payroll run summary by pay period, returning total gross, net, deductions, and headcount for the period.

naftiko: "0.5"
info:
  label: "Payroll Run Summary"
  description: "Fetches a Workday payroll run summary by pay period, returning total gross, net, deductions, and headcount for the period."
  tags:
    - payroll
    - finance
    - workday-payroll
capability:
  exposes:
    - type: mcp
      namespace: payroll-summary
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Retrieve a Workday payroll run summary for a given pay period. Returns gross pay, net pay, total deductions, and headcount."
          inputParameters:
            - name: pay_period_id
              in: body
              type: string
              description: "The Workday pay period identifier (e.g. 2026-Q1-biweekly-06)."
          call: "workday.get-payroll-summary"
          with:
            period_id: "{{pay_period_id}}"
          outputParameters:
            - name: total_gross
              type: number
              mapping: "$.totalGross"
            - name: total_net
              type: number
              mapping: "$.totalNet"
            - name: total_deductions
              type: number
              mapping: "$.totalDeductions"
            - name: headcount
              type: integer
              mapping: "$.headcount"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payroll-runs
          path: "/payroll/runs/{{period_id}}/summary"
          inputParameters:
            - name: period_id
              in: path
          operations:
            - name: get-payroll-summary
              method: GET

Extracts payroll tax data from Workday Payroll for a tax period, formats it for filing, submits to the tax filing service, and notifies the payroll team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Payroll Tax Filing Automation"
  description: "Extracts payroll tax data from Workday Payroll for a tax period, formats it for filing, submits to the tax filing service, and notifies the payroll team in Microsoft Teams."
  tags:
    - payroll
    - tax
    - workday-payroll
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: payroll-tax
      port: 8080
      tools:
        - name: file-payroll-taxes
          description: "Extract Workday payroll tax data, submit to filing service, and notify the payroll team."
          inputParameters:
            - name: tax_period
              in: body
              type: string
              description: "The tax filing period (e.g. 2026-Q1)."
            - name: jurisdiction
              in: body
              type: string
              description: "Tax jurisdiction code (e.g. US-FED, US-CA)."
          steps:
            - name: get-tax-data
              type: call
              call: "workday.get-payroll-tax-data"
              with:
                period: "{{tax_period}}"
                jurisdiction: "{{jurisdiction}}"
            - name: submit-filing
              type: call
              call: "tax-service.submit-filing"
              with:
                period: "{{tax_period}}"
                jurisdiction: "{{jurisdiction}}"
                total_tax: "{{get-tax-data.total_tax_liability}}"
                employee_count: "{{get-tax-data.employee_count}}"
            - name: notify-payroll
              type: call
              call: "msteams.send-webhook"
              with:
                webhook_url: "$secrets.payroll_teams_webhook"
                text: "Payroll tax filing submitted for {{jurisdiction}} — {{tax_period}}. Total liability: ${{get-tax-data.total_tax_liability}}. Filing ID: {{submit-filing.filing_id}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payroll-tax
          path: "/payroll/tax"
          inputParameters:
            - name: period
              in: query
            - name: jurisdiction
              in: query
          operations:
            - name: get-payroll-tax-data
              method: GET
    - type: http
      namespace: tax-service
      baseUri: "https://api.taxfilingservice.com/v2"
      authentication:
        type: bearer
        token: "$secrets.tax_service_token"
      resources:
        - name: filings
          path: "/filings"
          operations:
            - name: submit-filing
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://outlook.office.com/webhook"
      authentication:
        type: none
      resources:
        - name: incoming-webhook
          path: "/{{webhook_url}}"
          inputParameters:
            - name: webhook_url
              in: path
          operations:
            - name: send-webhook
              method: POST

Launches a performance review cycle by querying Workday for eligible workers, creating review tasks in Workday, and notifying managers in Microsoft Teams with review timelines.

naftiko: "0.5"
info:
  label: "Performance Review Kickoff"
  description: "Launches a performance review cycle by querying Workday for eligible workers, creating review tasks in Workday, and notifying managers in Microsoft Teams with review timelines."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: performance-reviews
      port: 8080
      tools:
        - name: kick-off-review-cycle
          description: "Launch a performance review cycle: query eligible workers, create review tasks, and notify managers in Teams."
          inputParameters:
            - name: review_cycle_id
              in: body
              type: string
              description: "The Workday performance review cycle ID."
            - name: due_date
              in: body
              type: string
              description: "Review submission due date in YYYY-MM-DD format."
          steps:
            - name: get-eligible-workers
              type: call
              call: "workday.get-review-eligible"
              with:
                cycle_id: "{{review_cycle_id}}"
            - name: create-review-tasks
              type: call
              call: "workday.create-review-tasks"
              with:
                cycle_id: "{{review_cycle_id}}"
                due_date: "{{due_date}}"
            - name: notify-managers
              type: call
              call: "msteams.send-webhook"
              with:
                webhook_url: "$secrets.hr_teams_webhook"
                text: "Performance review cycle {{review_cycle_id}} launched. {{get-eligible-workers.count}} workers eligible. Reviews due by {{due_date}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: review-eligible
          path: "/performance/reviews/{{cycle_id}}/eligible"
          inputParameters:
            - name: cycle_id
              in: path
          operations:
            - name: get-review-eligible
              method: GET
        - name: review-tasks
          path: "/performance/reviews/{{cycle_id}}/tasks"
          inputParameters:
            - name: cycle_id
              in: path
          operations:
            - name: create-review-tasks
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://outlook.office.com/webhook"
      authentication:
        type: none
      resources:
        - name: incoming-webhook
          path: "/{{webhook_url}}"
          inputParameters:
            - name: webhook_url
              in: path
          operations:
            - name: send-webhook
              method: POST

Triggers a Power BI dataset refresh.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresher"
  description: "Triggers a Power BI dataset refresh."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-power
          description: "Triggers a Power BI dataset refresh."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The power bi dashboard refresher identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.workday.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: power
          path: "/power/bi/dashboard/refresher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-power
              method: GET

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: "0.5"
info:
  label: "Procurement Spend Analysis Orchestrator"
  description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
  tags:
    - procurement
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-procurement-spend-analysis-orchestrator
          description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Procurement Spend Analysis Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Pulls procurement spend data from Workday Financials by category and period, loads into Snowflake spend analytics tables, and notifies the procurement lead in Slack.

naftiko: "0.5"
info:
  label: "Procurement Spend Analysis"
  description: "Pulls procurement spend data from Workday Financials by category and period, loads into Snowflake spend analytics tables, and notifies the procurement lead in Slack."
  tags:
    - finance
    - procurement
    - workday-financials
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: spend-analysis
      port: 8080
      tools:
        - name: analyze-procurement-spend
          description: "Pull Workday procurement spend by category, load to Snowflake, and notify the procurement lead."
          inputParameters:
            - name: spend_category
              in: body
              type: string
              description: "The spend category to analyze."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period to analyze."
            - name: procurement_channel
              in: body
              type: string
              description: "The Slack channel for procurement alerts."
          steps:
            - name: get-spend-data
              type: call
              call: "workday.get-procurement-spend"
              with:
                category: "{{spend_category}}"
                period: "{{fiscal_period}}"
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO FINANCE.PROCUREMENT_SPEND (category, period, total, supplier_count) VALUES ('{{spend_category}}', '{{fiscal_period}}', {{get-spend-data.total_spend}}, {{get-spend-data.supplier_count}})"
            - name: notify-procurement
              type: call
              call: "slack.post-message"
              with:
                channel: "{{procurement_channel}}"
                text: "Spend analysis complete for {{spend_category}} — {{fiscal_period}}: ${{get-spend-data.total_spend}} across {{get-spend-data.supplier_count}} suppliers."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: procurement-spend
          path: "/financial_management/procurement/spend"
          inputParameters:
            - name: category
              in: query
            - name: period
              in: query
          operations:
            - name: get-procurement-spend
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://workday.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Orchestrator"
  description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
  tags:
    - analytics
    - business
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-quarterly-business-review-orchestrator
          description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Quarterly Business Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Pulls completed revenue schedules from Workday Financials, posts them to the general ledger, and syncs the revenue data to Salesforce for sales operations reporting.

naftiko: "0.5"
info:
  label: "Revenue Recognition Sync"
  description: "Pulls completed revenue schedules from Workday Financials, posts them to the general ledger, and syncs the revenue data to Salesforce for sales operations reporting."
  tags:
    - finance
    - accounting
    - workday-financials
    - salesforce
    - revenue
capability:
  exposes:
    - type: mcp
      namespace: revenue-sync
      port: 8080
      tools:
        - name: sync-revenue-recognition
          description: "Pull Workday revenue schedules, post to GL, and sync to Salesforce for reporting."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period for revenue recognition."
            - name: revenue_type
              in: body
              type: string
              description: "Revenue type filter (e.g. subscription, services)."
          steps:
            - name: get-revenue-schedules
              type: call
              call: "workday.get-revenue-schedules"
              with:
                period: "{{fiscal_period}}"
                type: "{{revenue_type}}"
            - name: post-to-gl
              type: call
              call: "workday.post-journal-entry"
              with:
                ledger: "Revenue"
                period: "{{fiscal_period}}"
                amount: "{{get-revenue-schedules.total_recognized}}"
                memo: "Revenue recognition — {{revenue_type}} — {{fiscal_period}}"
            - name: sync-to-salesforce
              type: call
              call: "salesforce.upsert-revenue"
              with:
                period: "{{fiscal_period}}"
                type: "{{revenue_type}}"
                amount: "{{get-revenue-schedules.total_recognized}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: revenue-schedules
          path: "/financial_management/revenue_schedules"
          inputParameters:
            - name: period
              in: query
            - name: type
              in: query
          operations:
            - name: get-revenue-schedules
              method: GET
        - name: journal-entries
          path: "/financial_management/journal_entries"
          operations:
            - name: post-journal-entry
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://workday.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: revenue
          path: "/sobjects/Revenue_Recognition__c"
          operations:
            - name: upsert-revenue
              method: POST

Retrieves a Salesforce account by account ID.

naftiko: "0.5"
info:
  label: "Salesforce Account Viewer"
  description: "Retrieves a Salesforce account by account ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-salesforce
          description: "Retrieves a Salesforce account by account ID."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The salesforce account viewer identifier."
          call: "sales-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: sales-api
      baseUri: "https://api.workday.com/sales/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: salesforce
          path: "/salesforce/account/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-salesforce
              method: GET

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: "0.5"
info:
  label: "Security Audit Orchestrator"
  description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
  tags:
    - security
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: run-security-audit-orchestrator
          description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Security Audit Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Creates a new incident in ServiceNow.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Creator"
  description: "Creates a new incident in ServiceNow."
  tags:
    - it
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: get-servicenow
          description: "Creates a new incident in ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The servicenow incident creator identifier."
          call: "it-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: it-api
      baseUri: "https://api.workday.com/it/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: servicenow
          path: "/servicenow/incident/creator/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-servicenow
              method: GET

Extracts worker skills profiles from Workday, compares against role competency frameworks, identifies gaps, and creates personalized learning paths in Workday Learning.

naftiko: "0.5"
info:
  label: "Skills Gap Analysis Pipeline"
  description: "Extracts worker skills profiles from Workday, compares against role competency frameworks, identifies gaps, and creates personalized learning paths in Workday Learning."
  tags:
    - hr
    - talent-management
    - workday
    - learning
capability:
  exposes:
    - type: mcp
      namespace: skills-analysis
      port: 8080
      tools:
        - name: analyze-skills-gap
          description: "Pull worker skills from Workday, compare against role framework, and create a learning plan for identified gaps."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: role_profile_id
              in: body
              type: string
              description: "The Workday role competency profile ID."
          steps:
            - name: get-worker-skills
              type: call
              call: "workday.get-worker-skills"
              with:
                worker_id: "{{employee_id}}"
            - name: get-role-framework
              type: call
              call: "workday.get-competency-framework"
              with:
                profile_id: "{{role_profile_id}}"
            - name: create-learning-plan
              type: call
              call: "workday.create-learning-assignment"
              with:
                worker_id: "{{employee_id}}"
                skills_gap: "{{get-role-framework.required_skills}}"
                current_skills: "{{get-worker-skills.skills}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker-skills
          path: "/workers/{{worker_id}}/skills"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker-skills
              method: GET
        - name: competency-frameworks
          path: "/talent/competencyFrameworks/{{profile_id}}"
          inputParameters:
            - name: profile_id
              in: path
          operations:
            - name: get-competency-framework
              method: GET
        - name: learning-assignments
          path: "/learning/assignments"
          operations:
            - name: create-learning-assignment
              method: POST

Sends a notification to a Slack channel.

naftiko: "0.5"
info:
  label: "Slack Notification Publisher"
  description: "Sends a notification to a Slack channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-slack
          description: "Sends a notification to a Slack channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The slack notification publisher identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.workday.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: slack
          path: "/slack/notification/publisher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-slack
              method: GET

Runs an analytics query against the Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Analytics Query"
  description: "Runs an analytics query against the Snowflake data warehouse."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-snowflake
          description: "Runs an analytics query against the Snowflake data warehouse."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The snowflake analytics query identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.workday.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: snowflake
          path: "/snowflake/analytics/query/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-snowflake
              method: GET

Retrieves a supplier invoice from Workday Financials by invoice number, returning vendor, amount, due date, and approval status.

naftiko: "0.5"
info:
  label: "Supplier Invoice Lookup"
  description: "Retrieves a supplier invoice from Workday Financials by invoice number, returning vendor, amount, due date, and approval status."
  tags:
    - finance
    - accounts-payable
    - workday-financials
capability:
  exposes:
    - type: mcp
      namespace: finance-ap
      port: 8080
      tools:
        - name: get-supplier-invoice
          description: "Look up a Workday supplier invoice by number. Returns vendor name, invoice amount, due date, and approval status."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The Workday supplier invoice number."
          call: "workday.get-invoice"
          with:
            invoice_number: "{{invoice_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.supplierName"
            - name: amount
              type: number
              mapping: "$.invoiceAmount"
            - name: due_date
              type: string
              mapping: "$.dueDate"
            - name: approval_status
              type: string
              mapping: "$.approvalStatus"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: invoices
          path: "/financial_management/supplier_invoices/{{invoice_number}}"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET

When a new supplier is created in Workday, validates the vendor tax ID against an IRS TIN check service, provisions the supplier in Coupa for procurement, and notifies accounts payable in Slack.

naftiko: "0.5"
info:
  label: "Supplier Onboarding Pipeline"
  description: "When a new supplier is created in Workday, validates the vendor tax ID against an IRS TIN check service, provisions the supplier in Coupa for procurement, and notifies accounts payable in Slack."
  tags:
    - finance
    - procurement
    - workday-financials
    - coupa
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supplier-onboarding
      port: 8080
      tools:
        - name: onboard-supplier
          description: "Validate a new Workday supplier's tax ID, provision in Coupa, and notify AP in Slack."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The Workday supplier ID."
            - name: ap_channel
              in: body
              type: string
              description: "The Slack channel for accounts payable notifications."
          steps:
            - name: get-supplier
              type: call
              call: "workday.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: validate-tin
              type: call
              call: "tin-check.validate"
              with:
                tin: "{{get-supplier.tax_id}}"
                name: "{{get-supplier.supplier_name}}"
            - name: create-coupa-supplier
              type: call
              call: "coupa.create-supplier"
              with:
                name: "{{get-supplier.supplier_name}}"
                tax_id: "{{get-supplier.tax_id}}"
                payment_terms: "{{get-supplier.payment_terms}}"
            - name: notify-ap
              type: call
              call: "slack.post-message"
              with:
                channel: "{{ap_channel}}"
                text: "New supplier onboarded: {{get-supplier.supplier_name}} (TIN verified: {{validate-tin.is_valid}}). Coupa ID: {{create-coupa-supplier.supplier_id}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: suppliers
          path: "/financial_management/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: tin-check
      baseUri: "https://api.tincheck.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.tincheck_token"
      resources:
        - name: validation
          path: "/validate"
          operations:
            - name: validate
              method: POST
    - type: http
      namespace: coupa
      baseUri: "https://workday.coupahost.com/api"
      authentication:
        type: bearer
        token: "$secrets.coupa_token"
      resources:
        - name: suppliers
          path: "/suppliers"
          operations:
            - name: create-supplier
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Orchestrator"
  description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
  tags:
    - sustainability
    - analytics
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: run-sustainability-metrics-collection-orchestrator
          description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves talent pipeline metrics for recruiting.

naftiko: "0.5"
info:
  label: "Talent Pipeline Report"
  description: "Retrieves talent pipeline metrics for recruiting."
  tags:
    - hr
    - recruiting
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-talent
          description: "Retrieves talent pipeline metrics for recruiting."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The talent pipeline report identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: talent
          path: "/talent/pipeline/report/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-talent
              method: GET

Extracts talent review ratings and succession data from Workday, pushes structured records to Snowflake, and updates a Tableau dashboard for CHRO visibility.

naftiko: "0.5"
info:
  label: "Talent Review Dashboard Sync"
  description: "Extracts talent review ratings and succession data from Workday, pushes structured records to Snowflake, and updates a Tableau dashboard for CHRO visibility."
  tags:
    - hr
    - talent-management
    - workday
    - snowflake
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: talent-sync
      port: 8080
      tools:
        - name: sync-talent-reviews
          description: "Pull talent review data from Workday, load into Snowflake, and refresh the Tableau talent dashboard."
          inputParameters:
            - name: review_cycle
              in: body
              type: string
              description: "The talent review cycle identifier (e.g. FY2026-annual)."
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau datasource ID to refresh."
          steps:
            - name: get-talent-data
              type: call
              call: "workday.run-report"
              with:
                report: "Talent_Review_Summary"
                format: "json"
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO HR_ANALYTICS.TALENT_REVIEWS SELECT * FROM TABLE(RESULT_SCAN('{{get-talent-data.query_id}}'))"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-datasource"
              with:
                datasource_id: "{{datasource_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://workday.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.workday.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/default/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: datasource_id
              in: path
          operations:
            - name: refresh-datasource
              method: POST

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: "0.5"
info:
  label: "Third Party Risk Assessment Orchestrator"
  description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
  tags:
    - risk
    - procurement
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: run-third-party-risk-assessment-orchestrator
          description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Third Party Risk Assessment Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a worker's current time-off balances from Workday, including vacation, sick leave, and personal days remaining.

naftiko: "0.5"
info:
  label: "Time Off Balance Check"
  description: "Retrieves a worker's current time-off balances from Workday, including vacation, sick leave, and personal days remaining."
  tags:
    - hr
    - time-off
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hcm-timeoff
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Check a worker's time-off balances by employee ID. Returns vacation, sick, and personal day balances."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-time-off-balance"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: vacation_hours
              type: number
              mapping: "$.balances[?(@.planName=='Vacation')].remainingHours"
            - name: sick_hours
              type: number
              mapping: "$.balances[?(@.planName=='Sick')].remainingHours"
            - name: personal_days
              type: number
              mapping: "$.balances[?(@.planName=='Personal')].remainingDays"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-off
          path: "/workers/{{worker_id}}/timeOffBalances"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-time-off-balance
              method: GET

Pulls approved time entries from Workday for a project, pushes hours to the billing system in Salesforce, and updates the project budget tracker in Smartsheet.

naftiko: "0.5"
info:
  label: "Time Tracking to Project Billing"
  description: "Pulls approved time entries from Workday for a project, pushes hours to the billing system in Salesforce, and updates the project budget tracker in Smartsheet."
  tags:
    - hr
    - finance
    - workday
    - salesforce
    - smartsheet
    - time-tracking
capability:
  exposes:
    - type: mcp
      namespace: time-billing
      port: 8080
      tools:
        - name: sync-time-to-billing
          description: "Pull approved Workday time entries for a project, push to Salesforce billing, and update Smartsheet budget tracker."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The Workday project ID."
            - name: billing_period
              in: body
              type: string
              description: "The billing period in YYYY-MM format."
            - name: sheet_id
              in: body
              type: string
              description: "The Smartsheet sheet ID for budget tracking."
          steps:
            - name: get-time-entries
              type: call
              call: "workday.get-project-time"
              with:
                project_id: "{{project_id}}"
                period: "{{billing_period}}"
            - name: create-billing-record
              type: call
              call: "salesforce.create-billing"
              with:
                project_id: "{{project_id}}"
                hours: "{{get-time-entries.total_hours}}"
                amount: "{{get-time-entries.total_billable_amount}}"
                period: "{{billing_period}}"
            - name: update-budget-sheet
              type: call
              call: "smartsheet.add-row"
              with:
                sheet_id: "{{sheet_id}}"
                cells:
                  project: "{{project_id}}"
                  period: "{{billing_period}}"
                  hours: "{{get-time-entries.total_hours}}"
                  billed: "{{get-time-entries.total_billable_amount}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: project-time
          path: "/time_tracking/projects/{{project_id}}/entries"
          inputParameters:
            - name: project_id
              in: path
            - name: period
              in: query
          operations:
            - name: get-project-time
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://workday.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: billing
          path: "/sobjects/Billing__c"
          operations:
            - name: create-billing
              method: POST
    - type: http
      namespace: smartsheet
      baseUri: "https://api.smartsheet.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.smartsheet_token"
      resources:
        - name: rows
          path: "/sheets/{{sheet_id}}/rows"
          inputParameters:
            - name: sheet_id
              in: path
          operations:
            - name: add-row
              method: POST

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: "0.5"
info:
  label: "Vendor Contract Renewal Pipeline"
  description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
  tags:
    - procurement
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-vendor-contract-renewal-pipeline
          description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Vendor Contract Renewal Pipeline for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.workday.com/v2"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Triggers a Workday Enterprise Interface Builder (EIB) data export, monitors completion, and uploads the output file to Amazon S3 for downstream consumption.

naftiko: "0.5"
info:
  label: "Workday EIB Data Export"
  description: "Triggers a Workday Enterprise Interface Builder (EIB) data export, monitors completion, and uploads the output file to Amazon S3 for downstream consumption."
  tags:
    - integrations
    - platform-engineering
    - workday-integrations
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: eib-export
      port: 8080
      tools:
        - name: run-eib-export
          description: "Trigger a Workday EIB export, wait for completion, and upload output to S3."
          inputParameters:
            - name: eib_id
              in: body
              type: string
              description: "The Workday EIB integration system ID."
            - name: s3_bucket
              in: body
              type: string
              description: "The target S3 bucket name."
            - name: s3_prefix
              in: body
              type: string
              description: "The S3 key prefix for the output file."
          steps:
            - name: trigger-eib
              type: call
              call: "workday.launch-integration"
              with:
                integration_id: "{{eib_id}}"
            - name: check-status
              type: call
              call: "workday.get-integration-run"
              with:
                run_id: "{{trigger-eib.run_id}}"
            - name: upload-to-s3
              type: call
              call: "s3.put-object"
              with:
                bucket: "{{s3_bucket}}"
                key: "{{s3_prefix}}/{{eib_id}}_{{trigger-eib.run_id}}.csv"
                body: "{{check-status.output_data}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: integrations
          path: "/integrations/{{integration_id}}/launch"
          inputParameters:
            - name: integration_id
              in: path
          operations:
            - name: launch-integration
              method: POST
        - name: integration-runs
          path: "/integrations/runs/{{run_id}}"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-integration-run
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_s3_token"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT

Retrieves employee profile from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Profile"
  description: "Retrieves employee profile from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-workday
          description: "Retrieves employee profile from Workday."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The workday employee profile identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.workday.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_api_token"
      resources:
        - name: workday
          path: "/workday/employee/profile/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-workday
              method: GET

Deploys a Workday Extend custom app by pushing the app package to the Workday Extend API, running validation, and posting deployment status to the engineering Slack channel.

naftiko: "0.5"
info:
  label: "Workday Extend App Deployment"
  description: "Deploys a Workday Extend custom app by pushing the app package to the Workday Extend API, running validation, and posting deployment status to the engineering Slack channel."
  tags:
    - platform-engineering
    - workday-extend
    - slack
    - deployment
capability:
  exposes:
    - type: mcp
      namespace: extend-deploy
      port: 8080
      tools:
        - name: deploy-extend-app
          description: "Deploy a Workday Extend app package, validate it, and notify the engineering team in Slack."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The Workday Extend application ID."
            - name: version
              in: body
              type: string
              description: "The version label to deploy."
            - name: eng_channel
              in: body
              type: string
              description: "The Slack channel for engineering notifications."
          steps:
            - name: deploy-app
              type: call
              call: "workday.deploy-extend-app"
              with:
                app_id: "{{app_id}}"
                version: "{{version}}"
            - name: validate-deployment
              type: call
              call: "workday.validate-extend-app"
              with:
                app_id: "{{app_id}}"
                deployment_id: "{{deploy-app.deployment_id}}"
            - name: notify-eng
              type: call
              call: "slack.post-message"
              with:
                channel: "{{eng_channel}}"
                text: "Workday Extend app {{app_id}} v{{version}} deployed. Status: {{validate-deployment.status}}. Deployment ID: {{deploy-app.deployment_id}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: extend-apps
          path: "/apps/{{app_id}}/deploy"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: deploy-extend-app
              method: POST
        - name: extend-validation
          path: "/apps/{{app_id}}/deployments/{{deployment_id}}/validate"
          inputParameters:
            - name: app_id
              in: path
            - name: deployment_id
              in: path
          operations:
            - name: validate-extend-app
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Executes a Workday custom report by report name and returns the results as structured data. Useful for ad-hoc analytics queries.

naftiko: "0.5"
info:
  label: "Workday Report Execution"
  description: "Executes a Workday custom report by report name and returns the results as structured data. Useful for ad-hoc analytics queries."
  tags:
    - reporting
    - analytics
    - workday-reporting
capability:
  exposes:
    - type: mcp
      namespace: reporting
      port: 8080
      tools:
        - name: run-custom-report
          description: "Execute a Workday custom report by name and optional filter parameters. Returns report data rows."
          inputParameters:
            - name: report_name
              in: body
              type: string
              description: "The Workday custom report name (URL-safe)."
            - name: format
              in: body
              type: string
              description: "Output format: json or csv."
          call: "workday.run-report"
          with:
            report: "{{report_name}}"
            format: "{{format}}"
          outputParameters:
            - name: row_count
              type: number
              mapping: "$.Report_Entry.length()"
            - name: data
              type: array
              mapping: "$.Report_Entry[*]"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET

Triggers a Workday Studio integration build, monitors execution status, and on failure creates a GitHub issue and notifies the integration team in Slack.

naftiko: "0.5"
info:
  label: "Workday Studio Integration Build Pipeline"
  description: "Triggers a Workday Studio integration build, monitors execution status, and on failure creates a GitHub issue and notifies the integration team in Slack."
  tags:
    - integrations
    - platform-engineering
    - workday-studio
    - github
    - slack
capability:
  exposes:
    - type: mcp
      namespace: studio-build
      port: 8080
      tools:
        - name: run-studio-integration
          description: "Trigger a Workday Studio integration, monitor it, and on failure create a GitHub issue and alert the team."
          inputParameters:
            - name: integration_id
              in: body
              type: string
              description: "The Workday Studio integration system ID."
            - name: github_repo
              in: body
              type: string
              description: "The GitHub repository (owner/repo) for the integration code."
            - name: team_channel
              in: body
              type: string
              description: "The Slack channel for integration team alerts."
          steps:
            - name: trigger-integration
              type: call
              call: "workday.launch-integration"
              with:
                integration_id: "{{integration_id}}"
            - name: check-status
              type: call
              call: "workday.get-integration-run"
              with:
                run_id: "{{trigger-integration.run_id}}"
            - name: create-github-issue
              type: call
              call: "github.create-issue"
              with:
                repo: "{{github_repo}}"
                title: "Integration failure: {{integration_id}} — run {{trigger-integration.run_id}}"
                body: "Status: {{check-status.state}}. Records processed: {{check-status.records_processed}}, failed: {{check-status.records_failed}}."
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "{{team_channel}}"
                text: "Studio integration {{integration_id}} run {{trigger-integration.run_id}}: {{check-status.state}}. GitHub issue: {{create-github-issue.html_url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: integrations
          path: "/integrations/{{integration_id}}/launch"
          inputParameters:
            - name: integration_id
              in: path
          operations:
            - name: launch-integration
              method: POST
        - name: integration-runs
          path: "/integrations/runs/{{run_id}}"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-integration-run
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: issues
          path: "/repos/{{repo}}/issues"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Extracts Workday tenant security and configuration settings, compares against a compliance baseline in GitHub, and opens a Jira ticket for any deviations.

naftiko: "0.5"
info:
  label: "Workday Tenant Configuration Audit"
  description: "Extracts Workday tenant security and configuration settings, compares against a compliance baseline in GitHub, and opens a Jira ticket for any deviations."
  tags:
    - platform-engineering
    - security
    - workday
    - github
    - jira
capability:
  exposes:
    - type: mcp
      namespace: tenant-audit
      port: 8080
      tools:
        - name: audit-tenant-config
          description: "Pull Workday tenant config, compare against GitHub compliance baseline, and create Jira tickets for deviations."
          inputParameters:
            - name: tenant_id
              in: body
              type: string
              description: "The Workday tenant identifier."
            - name: baseline_repo
              in: body
              type: string
              description: "The GitHub repo (owner/repo) containing the compliance baseline."
            - name: baseline_path
              in: body
              type: string
              description: "Path to the baseline config file in the repo."
          steps:
            - name: get-tenant-config
              type: call
              call: "workday.get-tenant-config"
              with:
                tenant_id: "{{tenant_id}}"
            - name: get-baseline
              type: call
              call: "github.get-file"
              with:
                repo: "{{baseline_repo}}"
                path: "{{baseline_path}}"
            - name: create-deviation-ticket
              type: call
              call: "jira.create-issue"
              with:
                project_key: "WDPLATFORM"
                summary: "Tenant config deviation detected: {{tenant_id}}"
                description: "Current config differs from baseline at {{baseline_repo}}/{{baseline_path}}. Review tenant security settings."
                issue_type: "Bug"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: tenant-config
          path: "/tenants/{{tenant_id}}/configuration"
          inputParameters:
            - name: tenant_id
              in: path
          operations:
            - name: get-tenant-config
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: contents
          path: "/repos/{{repo}}/contents/{{path}}"
          inputParameters:
            - name: repo
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://workday.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Syncs worker identity data from Workday to Okta for SSO provisioning, ensuring new hires and job changes are reflected in the identity provider within minutes.

naftiko: "0.5"
info:
  label: "Workday to Okta Identity Sync"
  description: "Syncs worker identity data from Workday to Okta for SSO provisioning, ensuring new hires and job changes are reflected in the identity provider within minutes."
  tags:
    - platform
    - identity
    - workday
    - okta
    - integrations
capability:
  exposes:
    - type: mcp
      namespace: identity-sync
      port: 8080
      tools:
        - name: sync-worker-to-okta
          description: "Given a Workday employee ID, sync their profile and group memberships to Okta."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: upsert-okta-user
              type: call
              call: "okta.upsert-user"
              with:
                email: "{{get-employee.work_email}}"
                firstName: "{{get-employee.first_name}}"
                lastName: "{{get-employee.last_name}}"
                department: "{{get-employee.department}}"
                title: "{{get-employee.job_title}}"
            - name: assign-okta-group
              type: call
              call: "okta.assign-group"
              with:
                user_id: "{{upsert-okta-user.user_id}}"
                group_name: "{{get-employee.department}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta
      baseUri: "https://workday.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: upsert-user
              method: POST
        - name: group-assignments
          path: "/groups/{{group_name}}/users/{{user_id}}"
          inputParameters:
            - name: group_name
              in: path
            - name: user_id
              in: path
          operations:
            - name: assign-group
              method: PUT

Syncs Workday worker cost center and manager data to SAP Concur to keep expense delegation and approval hierarchies current.

naftiko: "0.5"
info:
  label: "Workday to SAP Concur Expense Sync"
  description: "Syncs Workday worker cost center and manager data to SAP Concur to keep expense delegation and approval hierarchies current."
  tags:
    - finance
    - integrations
    - workday
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: concur-sync
      port: 8080
      tools:
        - name: sync-worker-to-concur
          description: "Pull worker details from Workday and update their profile in SAP Concur with current cost center and approver."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: get-manager
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-employee.manager_id}}"
            - name: update-concur-profile
              type: call
              call: "concur.update-user"
              with:
                employee_id: "{{employee_id}}"
                cost_center: "{{get-employee.cost_center}}"
                approver_email: "{{get-manager.work_email}}"
                department: "{{get-employee.department}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: users
          path: "/common/users/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: update-user
              method: PUT

Retrieves a Workday worker profile by employee ID, returning name, position, department, manager, and hire date.

naftiko: "0.5"
info:
  label: "Worker Profile Lookup"
  description: "Retrieves a Workday worker profile by employee ID, returning name, position, department, manager, and hire date."
  tags:
    - hr
    - human-capital-management
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hcm-worker
      port: 8080
      tools:
        - name: get-worker-profile
          description: "Look up a Workday worker by employee ID. Returns full name, job title, department, manager, and hire date."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.fullName"
            - name: job_title
              type: string
              mapping: "$.jobTitle"
            - name: department
              type: string
              mapping: "$.department"
            - name: manager_id
              type: string
              mapping: "$.managerId"
            - name: hire_date
              type: string
              mapping: "$.hireDate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

On an inter-company worker transfer in Workday, updates the cost center assignment, transfers the ServiceNow CMDB asset records, and notifies both the old and new managers in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Worker Transfer Orchestrator"
  description: "On an inter-company worker transfer in Workday, updates the cost center assignment, transfers the ServiceNow CMDB asset records, and notifies both the old and new managers in Microsoft Teams."
  tags:
    - hr
    - workday
    - servicenow
    - microsoft-teams
    - transfer
capability:
  exposes:
    - type: mcp
      namespace: hr-transfer
      port: 8080
      tools:
        - name: orchestrate-transfer
          description: "Given a Workday transfer event, update cost center, transfer CMDB assets, and notify both managers."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID being transferred."
            - name: new_cost_center
              in: body
              type: string
              description: "The new cost center code."
            - name: effective_date
              in: body
              type: string
              description: "Transfer effective date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: get-new-manager
              type: call
              call: "workday.get-cost-center-manager"
              with:
                cost_center: "{{new_cost_center}}"
            - name: transfer-assets
              type: call
              call: "servicenow.update-cmdb-owner"
              with:
                current_owner: "{{get-employee.work_email}}"
                new_cost_center: "{{new_cost_center}}"
            - name: notify-old-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "{{get-employee.full_name}} is transferring to {{new_cost_center}} effective {{effective_date}}. {{transfer-assets.asset_count}} assets reassigned."
            - name: notify-new-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-new-manager.manager_email}}"
                text: "{{get-employee.full_name}} is joining your team effective {{effective_date}} from {{get-employee.cost_center}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: cost-center-managers
          path: "/organizations/costCenters/{{cost_center}}/manager"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: get-cost-center-manager
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://workday.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: update-cmdb-owner
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Runs a Workday headcount report, enriches it with engagement survey scores from Qualtrics, and loads the combined dataset into Amazon Redshift for people analytics.

naftiko: "0.5"
info:
  label: "Workforce Analytics Export"
  description: "Runs a Workday headcount report, enriches it with engagement survey scores from Qualtrics, and loads the combined dataset into Amazon Redshift for people analytics."
  tags:
    - hr
    - analytics
    - workday-reporting
    - qualtrics
    - amazon-redshift
capability:
  exposes:
    - type: mcp
      namespace: workforce-analytics
      port: 8080
      tools:
        - name: export-workforce-analytics
          description: "Run Workday headcount report, join with Qualtrics survey data, and load into Redshift."
          inputParameters:
            - name: report_name
              in: body
              type: string
              description: "The Workday headcount report name."
            - name: survey_id
              in: body
              type: string
              description: "The Qualtrics survey ID for engagement data."
          steps:
            - name: run-headcount-report
              type: call
              call: "workday.run-report"
              with:
                report: "{{report_name}}"
                format: "json"
            - name: get-survey-results
              type: call
              call: "qualtrics.get-survey-responses"
              with:
                survey_id: "{{survey_id}}"
            - name: load-to-redshift
              type: call
              call: "redshift.execute-query"
              with:
                query: "INSERT INTO people_analytics.workforce_combined (headcount_data, survey_data, load_date) VALUES ('{{run-headcount-report.data}}', '{{get-survey-results.responses}}', CURRENT_DATE)"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-services1.myworkday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/{{report}}"
          inputParameters:
            - name: report
              in: path
            - name: format
              in: query
          operations:
            - name: run-report
              method: GET
    - type: http
      namespace: qualtrics
      baseUri: "https://yul1.qualtrics.com/API/v3"
      authentication:
        type: bearer
        token: "$secrets.qualtrics_token"
      resources:
        - name: surveys
          path: "/surveys/{{survey_id}}/responses"
          inputParameters:
            - name: survey_id
              in: path
          operations:
            - name: get-survey-responses
              method: GET
    - type: http
      namespace: redshift
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_redshift_token"
      resources:
        - name: statements
          path: "/execute-statement"
          operations:
            - name: execute-query
              method: POST