ADP Capabilities

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

Sort
Expand

Retrieves the current 401k contribution election and employer match details for an employee from ADP retirement services.

naftiko: "0.5"
info:
  label: "401k Contribution Lookup"
  description: "Retrieves the current 401k contribution election and employer match details for an employee from ADP retirement services."
  tags:
    - benefits
    - retirement
    - adp
capability:
  exposes:
    - type: mcp
      namespace: retirement-benefits
      port: 8080
      tools:
        - name: get-401k-contributions
          description: "Retrieve 401k contribution details for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-retirement-contributions"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: employee_pct
              type: string
              mapping: "$.retirementPlan.employeeContributionPercentage"
            - name: employer_match_pct
              type: string
              mapping: "$.retirementPlan.employerMatchPercentage"
            - name: ytd_contribution
              type: string
              mapping: "$.retirementPlan.ytdContribution"
            - name: plan_name
              type: string
              mapping: "$.retirementPlan.planName"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/benefits/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: retirement-plans
          path: "/workers/{{associate_oid}}/retirement-contributions"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-retirement-contributions
              method: GET

Extracts ACA data from ADP, validates eligibility in Snowflake, generates 1095-C forms, files with IRS, and notifies compliance team.

naftiko: "0.5"
info:
  label: "ACA Compliance Reporting Pipeline"
  description: "Extracts ACA data from ADP, validates eligibility in Snowflake, generates 1095-C forms, files with IRS, and notifies compliance team."
  tags:
    - compliance
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: aca_compliance_reporting_pipeline
          description: "Orchestrate aca compliance reporting pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves company and organizational unit details by company code from ADP.

naftiko: "0.5"
info:
  label: "ADP Company Code Lookup"
  description: "Retrieves company and organizational unit details by company code from ADP."
  tags:
    - hr
    - organization
    - adp
capability:
  exposes:
    - type: mcp
      namespace: org-lookup
      port: 8080
      tools:
        - name: get-company-info
          description: "Look up company or organizational unit details by ADP company code."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The ADP company code."
          call: "adp.get-company"
          with:
            company_code: "{{company_code}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.company.legalName"
            - name: ein
              type: string
              mapping: "$.company.federalEmployerIdNumber"
            - name: state_of_incorporation
              type: string
              mapping: "$.company.stateOfIncorporation"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/core/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: companies
          path: "/organizations/{{company_code}}"
          inputParameters:
            - name: company_code
              in: path
          operations:
            - name: get-company
              method: GET

Retrieves pending event notifications from ADP such as new hires, terminations, and status changes.

naftiko: "0.5"
info:
  label: "ADP Event Notification Lookup"
  description: "Retrieves pending event notifications from ADP such as new hires, terminations, and status changes."
  tags:
    - hr
    - events
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: hr-events
      port: 8080
      tools:
        - name: get-event-notifications
          description: "Retrieve pending HR event notifications from ADP."
          inputParameters:
            - name: event_type
              in: body
              type: string
              description: "The event type filter (e.g. new-hire, termination, status-change)."
            - name: since_date
              in: body
              type: string
              description: "The start date for event retrieval in YYYY-MM-DD format."
          call: "adp.get-events"
          with:
            event_type: "{{event_type}}"
            since_date: "{{since_date}}"
          outputParameters:
            - name: event_count
              type: string
              mapping: "$.events.length"
            - name: latest_event_type
              type: string
              mapping: "$.events[0].eventType"
            - name: latest_event_date
              type: string
              mapping: "$.events[0].eventDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/core/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: event-notifications
          path: "/event-notification-messages?eventType={{event_type}}&sinceDate={{since_date}}"
          inputParameters:
            - name: event_type
              in: query
            - name: since_date
              in: query
          operations:
            - name: get-events
              method: GET

Checks the status of a payroll processing run in ADP including completion percentage, error count, and expected completion time.

naftiko: "0.5"
info:
  label: "ADP Pay Run Status"
  description: "Checks the status of a payroll processing run in ADP including completion percentage, error count, and expected completion time."
  tags:
    - payroll
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: payroll-status
      port: 8080
      tools:
        - name: get-pay-run-status
          description: "Check the status of a payroll run by ADP pay run identifier."
          inputParameters:
            - name: pay_run_id
              in: body
              type: string
              description: "The ADP payroll run identifier."
          call: "adp.get-run-status"
          with:
            pay_run_id: "{{pay_run_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.payRun.status"
            - name: completion_pct
              type: string
              mapping: "$.payRun.completionPercentage"
            - name: error_count
              type: string
              mapping: "$.payRun.errorCount"
            - name: expected_completion
              type: string
              mapping: "$.payRun.expectedCompletionTime"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: pay-runs
          path: "/pay-runs/{{pay_run_id}}/status"
          inputParameters:
            - name: pay_run_id
              in: path
          operations:
            - name: get-run-status
              method: GET

Searches for employees in ADP Workforce Now by name or employee ID and returns matching worker records.

naftiko: "0.5"
info:
  label: "ADP Worker Search"
  description: "Searches for employees in ADP Workforce Now by name or employee ID and returns matching worker records."
  tags:
    - hr
    - search
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: hr-search
      port: 8080
      tools:
        - name: search-workers
          description: "Search for workers in ADP by name or employee number."
          inputParameters:
            - name: search_term
              in: body
              type: string
              description: "The name or employee ID to search for."
          call: "adp.search-workers"
          with:
            search_term: "{{search_term}}"
          outputParameters:
            - name: total_results
              type: string
              mapping: "$.workers.length"
            - name: first_match_name
              type: string
              mapping: "$.workers[0].person.legalName.formattedName"
            - name: first_match_oid
              type: string
              mapping: "$.workers[0].associateOID"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: worker-search
          path: "/workers?$filter=contains(person/legalName,'{{search_term}}')"
          inputParameters:
            - name: search_term
              in: query
          operations:
            - name: search-workers
              method: GET

Pulls benefits enrollment data from ADP and cost data from Oracle, merges them in Databricks for per-employee cost analysis, and publishes results to Power BI.

naftiko: "0.5"
info:
  label: "Benefits Cost Analysis Pipeline"
  description: "Pulls benefits enrollment data from ADP and cost data from Oracle, merges them in Databricks for per-employee cost analysis, and publishes results to Power BI."
  tags:
    - benefits
    - analytics
    - adp
    - oracle
    - databricks
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: benefits-analytics
      port: 8080
      tools:
        - name: analyze-benefits-cost
          description: "Run a benefits cost analysis combining ADP enrollment data with Oracle financials."
          inputParameters:
            - name: plan_year
              in: body
              type: string
              description: "The benefits plan year to analyze."
            - name: department
              in: body
              type: string
              description: "The department to scope the analysis."
          steps:
            - name: get-enrollment-data
              type: call
              call: "adp.get-enrollment-report"
              with:
                plan_year: "{{plan_year}}"
                department: "{{department}}"
            - name: get-cost-data
              type: call
              call: "oracle.get-benefits-costs"
              with:
                fiscal_year: "{{plan_year}}"
                cost_center: "{{department}}"
            - name: run-analysis
              type: call
              call: "databricks.submit-job"
              with:
                job_name: "benefits_cost_analysis"
                parameters: "enrollment={{get-enrollment-data.reportUri}}&costs={{get-cost-data.reportUri}}"
            - name: publish-results
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "benefits_cost_dashboard"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: enrollment-reports
          path: "/reports/benefit-enrollment?planYear={{plan_year}}&department={{department}}"
          inputParameters:
            - name: plan_year
              in: query
            - name: department
              in: query
          operations:
            - name: get-enrollment-report
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: benefits-costs
          path: "/benefitsCosts?fiscalYear={{fiscal_year}}&costCenter={{cost_center}}"
          inputParameters:
            - name: fiscal_year
              in: query
            - name: cost_center
              in: query
          operations:
            - name: get-benefits-costs
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://adp-workspace.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: submit-job
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Retrieves the current benefits enrollment from ADP, logs the inquiry in ServiceNow for audit tracking, and posts a summary to the HR Slack channel.

naftiko: "0.5"
info:
  label: "Benefits Enrollment Audit Pipeline"
  description: "Retrieves the current benefits enrollment from ADP, logs the inquiry in ServiceNow for audit tracking, and posts a summary to the HR Slack channel."
  tags:
    - benefits
    - adp
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: benefits-lookup
      port: 8080
      tools:
        - name: get-benefits-enrollment
          description: "Retrieve current benefits enrollment by ADP associate OID, log the inquiry, and post a summary."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID for the employee."
          steps:
            - name: fetch-enrollment
              type: call
              call: "adp.get-enrollment"
              with:
                associate_oid: "{{associate_oid}}"
            - name: log-inquiry
              type: call
              call: "servicenow.create-record"
              with:
                short_description: "Benefits enrollment lookup: {{associate_oid}}"
                category: "benefits_audit"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "#benefits-inquiries"
                text: "Benefits lookup for {{associate_oid}}: Medical={{fetch-enrollment.medicalPlan}}, Coverage={{fetch-enrollment.coverageLevel}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/benefits/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: enrollments
          path: "/workers/{{associate_oid}}/benefit-enrollments"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-enrollment
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              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

Launches enrollment in ADP, sends communications, tracks participation in Snowflake, generates reports in Power BI, and notifies HR.

naftiko: "0.5"
info:
  label: "Benefits Open Enrollment Orchestrator"
  description: "Launches enrollment in ADP, sends communications, tracks participation in Snowflake, generates reports in Power BI, and notifies HR."
  tags:
    - benefits
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: benefits_open_enrollment_orchestrator
          description: "Orchestrate benefits open enrollment orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

When a candidate advances in ADP Recruiting, checks interviewer availability in Microsoft Outlook, books a Zoom meeting, and updates the candidate status in ADP.

naftiko: "0.5"
info:
  label: "Candidate Interview Scheduling Pipeline"
  description: "When a candidate advances in ADP Recruiting, checks interviewer availability in Microsoft Outlook, books a Zoom meeting, and updates the candidate status in ADP."
  tags:
    - talent
    - recruiting
    - adp
    - microsoft-outlook
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: interview-scheduling
      port: 8080
      tools:
        - name: schedule-interview
          description: "Schedule a candidate interview by checking availability, booking a meeting, and updating ADP."
          inputParameters:
            - name: candidate_id
              in: body
              type: string
              description: "The ADP candidate identifier."
            - name: interviewer_email
              in: body
              type: string
              description: "The interviewer's email address."
            - name: interview_date
              in: body
              type: string
              description: "The preferred interview date in YYYY-MM-DD format."
          steps:
            - name: get-candidate
              type: call
              call: "adp.get-candidate"
              with:
                candidate_id: "{{candidate_id}}"
            - name: check-availability
              type: call
              call: "outlook.get-free-busy"
              with:
                user_email: "{{interviewer_email}}"
                date: "{{interview_date}}"
            - name: create-zoom-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Interview: {{get-candidate.fullName}} - {{get-candidate.requisitionTitle}}"
                start_time: "{{check-availability.firstAvailableSlot}}"
                duration: 60
                host_email: "{{interviewer_email}}"
            - name: update-candidate-status
              type: call
              call: "adp.update-candidate"
              with:
                candidate_id: "{{candidate_id}}"
                status: "interview_scheduled"
                notes: "Zoom meeting {{create-zoom-meeting.meetingId}} scheduled for {{check-availability.firstAvailableSlot}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/staffing/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: candidates
          path: "/candidates/{{candidate_id}}"
          inputParameters:
            - name: candidate_id
              in: path
          operations:
            - name: get-candidate
              method: GET
            - name: update-candidate
              method: PATCH
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: calendar
          path: "/users/{{user_email}}/calendar/getSchedule"
          inputParameters:
            - name: user_email
              in: path
          operations:
            - name: get-free-busy
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_jwt_token"
      resources:
        - name: meetings
          path: "/users/{{host_email}}/meetings"
          inputParameters:
            - name: host_email
              in: path
          operations:
            - name: create-meeting
              method: POST

Extracts data from legacy system, validates in Snowflake, loads into ADP, runs parallel test, and notifies implementation team.

naftiko: "0.5"
info:
  label: "Client Payroll Migration Orchestrator"
  description: "Extracts data from legacy system, validates in Snowflake, loads into ADP, runs parallel test, and notifies implementation team."
  tags:
    - migration
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: migration
      port: 8080
      tools:
        - name: client_payroll_migration_orchestrator
          description: "Orchestrate client payroll migration orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Tracks service delivery metrics from ServiceNow, calculates SLA compliance in Snowflake, updates Grafana dashboards, and alerts account managers.

naftiko: "0.5"
info:
  label: "Client SLA Monitoring Pipeline"
  description: "Tracks service delivery metrics from ServiceNow, calculates SLA compliance in Snowflake, updates Grafana dashboards, and alerts account managers."
  tags:
    - service-delivery
    - servicenow
    - snowflake
    - grafana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: service-delivery
      port: 8080
      tools:
        - name: client_sla_monitoring_pipeline
          description: "Orchestrate client sla monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://adp-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Checks COBRA continuation coverage eligibility for a recently terminated employee from ADP benefits administration.

naftiko: "0.5"
info:
  label: "COBRA Eligibility Check"
  description: "Checks COBRA continuation coverage eligibility for a recently terminated employee from ADP benefits administration."
  tags:
    - benefits
    - cobra
    - adp
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: benefits-cobra
      port: 8080
      tools:
        - name: check-cobra-eligibility
          description: "Check COBRA eligibility for a terminated employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: termination_date
              in: body
              type: string
              description: "The termination date in YYYY-MM-DD format."
          call: "adp.get-cobra-eligibility"
          with:
            associate_oid: "{{associate_oid}}"
            termination_date: "{{termination_date}}"
          outputParameters:
            - name: eligible
              type: string
              mapping: "$.cobra.isEligible"
            - name: qualifying_event
              type: string
              mapping: "$.cobra.qualifyingEvent"
            - name: coverage_end_date
              type: string
              mapping: "$.cobra.maxCoverageEndDate"
            - name: monthly_premium
              type: string
              mapping: "$.cobra.monthlyPremium"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/benefits/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: cobra-eligibility
          path: "/workers/{{associate_oid}}/cobra-eligibility?terminationDate={{termination_date}}"
          inputParameters:
            - name: associate_oid
              in: path
            - name: termination_date
              in: query
          operations:
            - name: get-cobra-eligibility
              method: GET

Retrieves compensation details from ADP, compares against market benchmarks stored in Google Sheets, and generates a compa-ratio report in Power BI.

naftiko: "0.5"
info:
  label: "Compensation Benchmark Pipeline"
  description: "Retrieves compensation details from ADP, compares against market benchmarks stored in Google Sheets, and generates a compa-ratio report in Power BI."
  tags:
    - compensation
    - adp
    - google-sheets
    - power-bi
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: compensation
      port: 8080
      tools:
        - name: get-compensation
          description: "Retrieve compensation details, compare against benchmarks, and push to analytics."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-comp
              type: call
              call: "adp.get-compensation-detail"
              with:
                associate_oid: "{{associate_oid}}"
            - name: get-benchmarks
              type: call
              call: "google-sheets.get-range"
              with:
                spreadsheet_id: "salary_benchmarks_2026"
                range: "Benchmarks!A:D"
            - name: push-to-powerbi
              type: call
              call: "powerbi.push-dataset-rows"
              with:
                dataset_id: "compensation_analytics"
                table_name: "compa_ratios"
                rows: "associate={{associate_oid}},salary={{fetch-comp.baseSalary}},grade={{fetch-comp.payGrade}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: compensation
          path: "/workers/{{associate_oid}}/compensation"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-compensation-detail
              method: GET
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheet-values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-range
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-rows
          path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
            - name: table_name
              in: path
          operations:
            - name: push-dataset-rows
              method: POST

Monitors compensation changes in ADP, validates approvals, audits against policies in Snowflake, and notifies HR compliance.

naftiko: "0.5"
info:
  label: "Compensation Change Audit Pipeline"
  description: "Monitors compensation changes in ADP, validates approvals, audits against policies in Snowflake, and notifies HR compliance."
  tags:
    - audit
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: audit
      port: 8080
      tools:
        - name: compensation_change_audit_pipeline
          description: "Orchestrate compensation change audit pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Generates a compliance audit report by pulling employee data from ADP, cross-referencing with SailPoint access records, producing a report in Google Docs, and filing it in Box.

naftiko: "0.5"
info:
  label: "Compliance Audit Report Generator"
  description: "Generates a compliance audit report by pulling employee data from ADP, cross-referencing with SailPoint access records, producing a report in Google Docs, and filing it in Box."
  tags:
    - compliance
    - audit
    - adp
    - sailpoint
    - google-docs
    - box
capability:
  exposes:
    - type: mcp
      namespace: compliance-audit
      port: 8080
      tools:
        - name: generate-audit-report
          description: "Generate a compliance audit report cross-referencing ADP employee data with SailPoint access."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to audit."
            - name: audit_date
              in: body
              type: string
              description: "The audit date in YYYY-MM-DD format."
          steps:
            - name: get-employees
              type: call
              call: "adp.list-workers-by-department"
              with:
                department: "{{department}}"
            - name: get-access-records
              type: call
              call: "sailpoint.get-access-review"
              with:
                group: "{{department}}"
                review_date: "{{audit_date}}"
            - name: create-report
              type: call
              call: "google-docs.create-document"
              with:
                title: "Compliance Audit: {{department}} - {{audit_date}}"
                body: "Audit of {{get-employees.totalCount}} employees. Access review status: {{get-access-records.status}}. Findings: {{get-access-records.findingsCount}} discrepancies."
            - name: file-in-box
              type: call
              call: "box.upload-file"
              with:
                folder_id: "compliance_audits"
                file_name: "audit_{{department}}_{{audit_date}}.pdf"
                content_url: "{{create-report.exportUrl}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: department-workers
          path: "/workers?$filter=department eq '{{department}}'"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: list-workers-by-department
              method: GET
    - type: http
      namespace: sailpoint
      baseUri: "https://adp-corp.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: access-reviews
          path: "/access-reviews?group={{group}}&reviewDate={{review_date}}"
          inputParameters:
            - name: group
              in: query
            - name: review_date
              in: query
          operations:
            - name: get-access-review
              method: GET
    - type: http
      namespace: google-docs
      baseUri: "https://docs.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_docs_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Checks overdue compliance training in Pluralsight for employees managed in ADP, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow.

naftiko: "0.5"
info:
  label: "Compliance Training Enforcement Pipeline"
  description: "Checks overdue compliance training in Pluralsight for employees managed in ADP, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow."
  tags:
    - compliance
    - training
    - adp
    - pluralsight
    - microsoft-outlook
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: enforce-training-compliance
          description: "Check overdue compliance training and send reminders with escalation tracking."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to check for overdue training."
            - name: course_id
              in: body
              type: string
              description: "The Pluralsight course identifier for the required training."
          steps:
            - name: get-department-workers
              type: call
              call: "adp.list-workers-by-department"
              with:
                department: "{{department}}"
            - name: check-completions
              type: call
              call: "pluralsight.get-course-completions"
              with:
                course_id: "{{course_id}}"
                group_id: "{{get-department-workers.groupId}}"
            - name: send-reminders
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{check-completions.overdueEmails}}"
                subject: "Action Required: Overdue Compliance Training"
                body: "You have overdue compliance training for course {{course_id}}. Please complete by end of week."
            - name: log-escalation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Overdue compliance training: {{department}} - {{course_id}}"
                category: "compliance"
                assigned_group: "HR_Compliance"
                description: "{{check-completions.overdueCount}} employees in {{department}} have not completed required training {{course_id}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: department-workers
          path: "/workers?$filter=department eq '{{department}}'"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: list-workers-by-department
              method: GET
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_api_token"
      resources:
        - name: course-completions
          path: "/courses/{{course_id}}/completions?groupId={{group_id}}"
          inputParameters:
            - name: course_id
              in: path
            - name: group_id
              in: query
          operations:
            - name: get-course-completions
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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

Retrieves Confluence page content for ADP knowledge base.

naftiko: "0.5"
info:
  label: "Confluence Page Retrieval"
  description: "Retrieves Confluence page content for ADP knowledge base."
  tags:
    - collaboration
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-page
          description: "Get page at ADP."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The page_id to look up." 
          call: "confluence.get-page_id"
          with:
            page_id: "{{page_id}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://adp.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence_page_retrieval
              method: GET

Retrieves Datadog monitor status for ADP infrastructure.

naftiko: "0.5"
info:
  label: "Datadog Monitor Status"
  description: "Retrieves Datadog monitor status for ADP infrastructure."
  tags:
    - monitoring
    - datadog
    - alerting
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-monitor
          description: "Check monitor at ADP."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The monitor_id to look up." 
          call: "datadog.get-monitor_id"
          with:
            monitor_id: "{{monitor_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog_monitor_status
              method: GET

Retrieves direct deposit configuration from ADP, logs the access event in Splunk for security auditing, and sends a confirmation to the employee via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Direct Deposit Audit and Notification Pipeline"
  description: "Retrieves direct deposit configuration from ADP, logs the access event in Splunk for security auditing, and sends a confirmation to the employee via Microsoft Outlook."
  tags:
    - payroll
    - direct-deposit
    - adp
    - splunk
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: payroll-banking
      port: 8080
      tools:
        - name: get-direct-deposit
          description: "Look up direct deposit accounts, log the audit event, and notify the employee."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-deposits
              type: call
              call: "adp.get-deposit-accounts"
              with:
                associate_oid: "{{associate_oid}}"
            - name: log-audit-event
              type: call
              call: "splunk.send-event"
              with:
                index: "payroll_audit"
                event: "direct_deposit_access"
                associate_oid: "{{associate_oid}}"
                account_count: "{{fetch-deposits.accountCount}}"
            - name: notify-employee
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{fetch-deposits.workerEmail}}"
                subject: "Direct Deposit Information Accessed"
                body: "Your direct deposit information was accessed. {{fetch-deposits.accountCount}} accounts on file. Primary bank: {{fetch-deposits.primaryBank}}. If this was not you, contact HR."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: deposit-accounts
          path: "/workers/{{associate_oid}}/direct-deposits"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-deposit-accounts
              method: GET
    - type: http
      namespace: splunk
      baseUri: "https://adp-splunk.splunkcloud.com:8088"
      authentication:
        type: bearer
        token: "$secrets.splunk_hec_token"
      resources:
        - name: events
          path: "/services/collector/event"
          operations:
            - name: send-event
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Detects direct deposit changes in ADP, validates against fraud patterns in Snowflake, sends verification, and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Direct Deposit Change Verification Pipeline"
  description: "Detects direct deposit changes in ADP, validates against fraud patterns in Snowflake, sends verification, and logs in ServiceNow."
  tags:
    - security
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: direct_deposit_change_verification_pipel
          description: "Orchestrate direct deposit change verification pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Extracts workforce demographics from ADP, aggregates data in Databricks, publishes to Power BI dashboards, and shares the report link in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Diversity and Inclusion Reporting Pipeline"
  description: "Extracts workforce demographics from ADP, aggregates data in Databricks, publishes to Power BI dashboards, and shares the report link in Microsoft Teams."
  tags:
    - hr
    - analytics
    - adp
    - databricks
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dei-reporting
      port: 8080
      tools:
        - name: generate-dei-report
          description: "Generate a diversity and inclusion report from ADP workforce data."
          inputParameters:
            - name: report_period
              in: body
              type: string
              description: "The reporting period (e.g. Q1-2026)."
            - name: scope
              in: body
              type: string
              description: "The organizational scope (e.g. company-wide, division, department)."
          steps:
            - name: extract-demographics
              type: call
              call: "adp.get-demographics-report"
              with:
                report_period: "{{report_period}}"
                scope: "{{scope}}"
            - name: run-aggregation
              type: call
              call: "databricks.submit-job"
              with:
                job_name: "dei_analytics"
                parameters: "data={{extract-demographics.reportUri}}&period={{report_period}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "dei_dashboard"
            - name: share-report
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "hr_leadership"
                channel: "dei-reports"
                text: "D&I report for {{report_period}} ({{scope}}) is ready. Dashboard refreshed. Key metrics: {{extract-demographics.summaryStats}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: demographics-reports
          path: "/reports/demographics?period={{report_period}}&scope={{scope}}"
          inputParameters:
            - name: report_period
              in: query
            - name: scope
              in: query
          operations:
            - name: get-demographics-report
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://adp-workspace.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: submit-job
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel
              in: path
          operations:
            - name: send-channel-message
              method: POST

Searches Elasticsearch indexes for ADP.

naftiko: "0.5"
info:
  label: "Elasticsearch Log Query"
  description: "Searches Elasticsearch indexes for ADP."
  tags:
    - data
    - elasticsearch
    - search
capability:
  exposes:
    - type: mcp
      namespace: search
      port: 8080
      tools:
        - name: search-logs
          description: "Search ES logs at ADP."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The query to look up." 
          call: "elasticsearch.get-query"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://adp-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: elasticsearch_log_query
              method: GET

Retrieves emergency contact information from ADP, validates completeness, and creates a ServiceNow task for HR to follow up if contacts are missing.

naftiko: "0.5"
info:
  label: "Emergency Contact Verification Pipeline"
  description: "Retrieves emergency contact information from ADP, validates completeness, and creates a ServiceNow task for HR to follow up if contacts are missing."
  tags:
    - hr
    - safety
    - adp
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-safety
      port: 8080
      tools:
        - name: get-emergency-contacts
          description: "Retrieve and verify emergency contacts, creating a follow-up task if incomplete."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-contacts
              type: call
              call: "adp.get-emergency-contacts"
              with:
                associate_oid: "{{associate_oid}}"
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: create-followup
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Emergency contact verification: {{get-employee.legalName.formattedName}}"
                category: "hr_safety"
                assigned_group: "HR_Administration"
                description: "Emergency contacts for {{get-employee.legalName.formattedName}}: Primary={{fetch-contacts.primaryName}}, Phone={{fetch-contacts.primaryPhone}}. Please verify completeness."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: emergency-contacts
          path: "/workers/{{associate_oid}}/emergency-contacts"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-emergency-contacts
              method: GET
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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

Updates an employee address in ADP, triggers a tax jurisdiction review in ServiceNow, and syncs the new address to Salesforce contact records.

naftiko: "0.5"
info:
  label: "Employee Address Change Pipeline"
  description: "Updates an employee address in ADP, triggers a tax jurisdiction review in ServiceNow, and syncs the new address to Salesforce contact records."
  tags:
    - hr
    - demographics
    - adp
    - servicenow
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: hr-demographics
      port: 8080
      tools:
        - name: update-employee-address
          description: "Update an employee address in ADP, trigger tax review, and sync to Salesforce."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: street_address
              in: body
              type: string
              description: "The new street address."
            - name: city
              in: body
              type: string
              description: "The new city."
            - name: state
              in: body
              type: string
              description: "The new state code."
            - name: postal_code
              in: body
              type: string
              description: "The new postal code."
          steps:
            - name: update-adp-address
              type: call
              call: "adp.update-address"
              with:
                associate_oid: "{{associate_oid}}"
                street_address: "{{street_address}}"
                city: "{{city}}"
                state: "{{state}}"
                postal_code: "{{postal_code}}"
            - name: trigger-tax-review
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Tax jurisdiction review: {{associate_oid}} moved to {{state}}"
                category: "tax_compliance"
                assigned_group: "Payroll_Tax"
                description: "Employee {{associate_oid}} changed address to {{city}}, {{state}} {{postal_code}}. Review state tax withholding."
            - name: sync-salesforce
              type: call
              call: "salesforce.update-contact"
              with:
                associate_oid: "{{associate_oid}}"
                mailing_street: "{{street_address}}"
                mailing_city: "{{city}}"
                mailing_state: "{{state}}"
                mailing_postal_code: "{{postal_code}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: worker-addresses
          path: "/workers/{{associate_oid}}/person/legalAddress"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-address
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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: salesforce
      baseUri: "https://adp.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-contact
              method: PATCH

Compares benefits enrollment data between ADP and carrier systems, identifies discrepancies, creates cases in ServiceNow, and notifies HR.

naftiko: "0.5"
info:
  label: "Employee Benefits Reconciliation Pipeline"
  description: "Compares benefits enrollment data between ADP and carrier systems, identifies discrepancies, creates cases in ServiceNow, and notifies HR."
  tags:
    - benefits
    - adp
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: employee_benefits_reconciliation_pipelin
          description: "Orchestrate employee benefits reconciliation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Tracks certifications in ADP, identifies expirations, sends reminders, creates renewal tasks in ServiceNow, and notifies managers.

naftiko: "0.5"
info:
  label: "Employee Certification Tracker Pipeline"
  description: "Tracks certifications in ADP, identifies expirations, sends reminders, creates renewal tasks in ServiceNow, and notifies managers."
  tags:
    - compliance
    - adp
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: employee_certification_tracker_pipeline
          description: "Orchestrate employee certification tracker pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves active professional certifications for an employee from ADP talent management.

naftiko: "0.5"
info:
  label: "Employee Certification Tracker"
  description: "Retrieves active professional certifications for an employee from ADP talent management."
  tags:
    - talent
    - certifications
    - adp
capability:
  exposes:
    - type: mcp
      namespace: talent-certs
      port: 8080
      tools:
        - name: get-certifications
          description: "Retrieve professional certifications for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-certifications"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: certification_count
              type: string
              mapping: "$.certifications.length"
            - name: latest_cert_name
              type: string
              mapping: "$.certifications[0].certificationName"
            - name: expiration_date
              type: string
              mapping: "$.certifications[0].expirationDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/talent/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: certifications
          path: "/workers/{{associate_oid}}/certifications"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-certifications
              method: GET

Audits employee records in ADP, identifies incomplete data in Snowflake, creates cleanup tasks in Jira, and notifies HR data team.

naftiko: "0.5"
info:
  label: "Employee Data Quality Pipeline"
  description: "Audits employee records in ADP, identifies incomplete data in Snowflake, creates cleanup tasks in Jira, and notifies HR data team."
  tags:
    - data-quality
    - adp
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: employee_data_quality_pipeline
          description: "Orchestrate employee data quality pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adp.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Distributes surveys via ADP, collects responses, analyzes in Snowflake, generates insights in Power BI, and notifies HR leaders.

naftiko: "0.5"
info:
  label: "Employee Engagement Survey Pipeline"
  description: "Distributes surveys via ADP, collects responses, analyzes in Snowflake, generates insights in Power BI, and notifies HR leaders."
  tags:
    - engagement
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: engagement
      port: 8080
      tools:
        - name: employee_engagement_survey_pipeline
          description: "Orchestrate employee engagement survey pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Retrieves the complete job history for an employee from ADP including prior positions, departments, and effective dates.

naftiko: "0.5"
info:
  label: "Employee Job History Lookup"
  description: "Retrieves the complete job history for an employee from ADP including prior positions, departments, and effective dates."
  tags:
    - hr
    - job-history
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: hr-history
      port: 8080
      tools:
        - name: get-job-history
          description: "Retrieve complete job history for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-job-history"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: total_positions
              type: string
              mapping: "$.jobHistory.length"
            - name: current_title
              type: string
              mapping: "$.jobHistory[0].jobTitle"
            - name: current_department
              type: string
              mapping: "$.jobHistory[0].department"
            - name: original_hire_date
              type: string
              mapping: "$.jobHistory[-1].effectiveDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: job-history
          path: "/workers/{{associate_oid}}/job-history"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-job-history
              method: GET

Retrieves an employee payroll summary from ADP Workforce Now by employee ID, returning gross pay, net pay, deductions, and pay period details.

naftiko: "0.5"
info:
  label: "Employee Payroll Summary"
  description: "Retrieves an employee payroll summary from ADP Workforce Now by employee ID, returning gross pay, net pay, deductions, and pay period details."
  tags:
    - payroll
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: payroll-lookup
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Look up an employee payroll summary by ADP associate OID. Returns gross pay, net pay, deductions, and pay period."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID for the employee."
          call: "adp.get-pay-statement"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: gross_pay
              type: string
              mapping: "$.payStatements[0].grossPayAmount.amount"
            - name: net_pay
              type: string
              mapping: "$.payStatements[0].netPayAmount.amount"
            - name: pay_period_start
              type: string
              mapping: "$.payStatements[0].payPeriod.startDate"
            - name: pay_period_end
              type: string
              mapping: "$.payStatements[0].payPeriod.endDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: pay-statements
          path: "/workers/{{associate_oid}}/pay-statements"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-pay-statement
              method: GET

Tracks ESS portal usage from ADP, analyzes adoption in Snowflake, identifies improvement areas, and reports to product team.

naftiko: "0.5"
info:
  label: "Employee Self-Service Analytics"
  description: "Tracks ESS portal usage from ADP, analyzes adoption in Snowflake, identifies improvement areas, and reports to product team."
  tags:
    - analytics
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: employee_self_service_analytics
          description: "Orchestrate employee self-service analytics workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Processes termination in ADP, calculates final pay, disables system access via Okta, creates offboarding tasks in ServiceNow, and notifies HR.

naftiko: "0.5"
info:
  label: "Employee Separation Processor"
  description: "Processes termination in ADP, calculates final pay, disables system access via Okta, creates offboarding tasks in ServiceNow, and notifies HR."
  tags:
    - hr
    - adp
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: employee_separation_processor
          description: "Orchestrate employee separation processor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-okta
              type: call
              call: "okta.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://adp.okta.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.okta_api_token"
        header: "Authorization" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: okta-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves the skills and competencies recorded for an employee in ADP talent management.

naftiko: "0.5"
info:
  label: "Employee Skills Inventory Lookup"
  description: "Retrieves the skills and competencies recorded for an employee in ADP talent management."
  tags:
    - talent
    - skills
    - adp
capability:
  exposes:
    - type: mcp
      namespace: talent-skills
      port: 8080
      tools:
        - name: get-skills-inventory
          description: "Retrieve skills and competencies for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-skills"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: skills_count
              type: string
              mapping: "$.skills.length"
            - name: top_skill
              type: string
              mapping: "$.skills[0].skillName"
            - name: proficiency_level
              type: string
              mapping: "$.skills[0].proficiencyLevel"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/talent/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: skills
          path: "/workers/{{associate_oid}}/skills"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-skills
              method: GET

Processes an internal employee transfer by updating the work assignment in ADP, reassigning the Jira board, moving their SharePoint folder, and notifying both old and new managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Transfer Orchestrator"
  description: "Processes an internal employee transfer by updating the work assignment in ADP, reassigning the Jira board, moving their SharePoint folder, and notifying both old and new managers via Microsoft Teams."
  tags:
    - hr
    - transfer
    - adp
    - jira
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-transfers
      port: 8080
      tools:
        - name: process-transfer
          description: "Execute the full transfer workflow for an employee moving between departments."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: new_department
              in: body
              type: string
              description: "The new department name."
            - name: effective_date
              in: body
              type: string
              description: "The transfer effective date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: update-assignment
              type: call
              call: "adp.update-work-assignment"
              with:
                associate_oid: "{{associate_oid}}"
                department: "{{new_department}}"
                effective_date: "{{effective_date}}"
            - name: reassign-jira
              type: call
              call: "jira.update-user-board"
              with:
                user_email: "{{get-employee.businessCommunication.emailUri}}"
                new_board: "{{new_department}}"
            - name: move-sharepoint
              type: call
              call: "sharepoint.move-folder"
              with:
                site_id: "department_drives"
                source_path: "{{get-employee.currentDepartment}}/{{get-employee.legalName.formattedName}}"
                destination_path: "{{new_department}}/{{get-employee.legalName.formattedName}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.reportsTo.emailUri}}"
                text: "{{get-employee.legalName.formattedName}} is transferring to {{new_department}} effective {{effective_date}}. Jira and SharePoint updated."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: work-assignments
          path: "/workers/{{associate_oid}}/work-assignments"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-work-assignment
              method: PATCH
    - type: http
      namespace: jira
      baseUri: "https://adp-corp.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: boards
          path: "/board/{{new_board}}/configuration"
          inputParameters:
            - name: new_board
              in: path
          operations:
            - name: update-user-board
              method: PUT
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{source_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: source_path
              in: path
          operations:
            - name: move-folder
              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

Retrieves the current work assignment details for an employee from ADP including location, shift, and assignment status.

naftiko: "0.5"
info:
  label: "Employee Work Assignment Lookup"
  description: "Retrieves the current work assignment details for an employee from ADP including location, shift, and assignment status."
  tags:
    - hr
    - work-assignment
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: hr-assignments
      port: 8080
      tools:
        - name: get-work-assignment
          description: "Retrieve work assignment details for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-assignment"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: work_location
              type: string
              mapping: "$.workAssignment.location.nameCode.shortName"
            - name: shift
              type: string
              mapping: "$.workAssignment.shiftCode"
            - name: status
              type: string
              mapping: "$.workAssignment.assignmentStatus"
            - name: full_part_time
              type: string
              mapping: "$.workAssignment.fullTimeOrPartTime"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: work-assignments
          path: "/workers/{{associate_oid}}/work-assignments"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-assignment
              method: GET

Retrieves active garnishment orders from ADP payroll, logs them in ServiceNow for legal compliance tracking, and notifies the payroll team via Slack.

naftiko: "0.5"
info:
  label: "Garnishment Deduction Compliance Pipeline"
  description: "Retrieves active garnishment orders from ADP payroll, logs them in ServiceNow for legal compliance tracking, and notifies the payroll team via Slack."
  tags:
    - payroll
    - garnishment
    - adp
    - compliance
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll-garnishments
      port: 8080
      tools:
        - name: get-garnishments
          description: "Look up active garnishments, log for compliance, and notify payroll team."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-garnishments
              type: call
              call: "adp.get-garnishment-orders"
              with:
                associate_oid: "{{associate_oid}}"
            - name: log-compliance
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Garnishment review: {{associate_oid}}"
                category: "legal_compliance"
                assigned_group: "Payroll_Legal"
                description: "{{fetch-garnishments.activeOrders}} active garnishment orders totaling {{fetch-garnishments.totalDeduction}}."
            - name: notify-payroll
              type: call
              call: "slack.post-message"
              with:
                channel: "#payroll-compliance"
                text: "Garnishment audit for {{associate_oid}}: {{fetch-garnishments.activeOrders}} active orders, total deduction {{fetch-garnishments.totalDeduction}}. ServiceNow: {{log-compliance.number}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: garnishments
          path: "/workers/{{associate_oid}}/garnishments"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-garnishment-orders
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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

Receives garnishment orders, validates in ADP, calculates deductions, creates compliance records in ServiceNow, and notifies payroll.

naftiko: "0.5"
info:
  label: "Garnishment Processing Pipeline"
  description: "Receives garnishment orders, validates in ADP, calculates deductions, creates compliance records in ServiceNow, and notifies payroll."
  tags:
    - compliance
    - adp
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: garnishment_processing_pipeline
          description: "Orchestrate garnishment processing pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves GitHub repository metadata for ADP.

naftiko: "0.5"
info:
  label: "GitHub Repository Lookup"
  description: "Retrieves GitHub repository metadata for ADP."
  tags:
    - devops
    - github
    - source-control
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-repo
          description: "Look up repo at ADP."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repo_name to look up." 
          call: "github.get-repo_name"
          with:
            repo_name: "{{repo_name}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: github_repository_lookup
              method: GET

Queries Grafana dashboard data for ADP monitoring.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Query"
  description: "Queries Grafana dashboard data for ADP monitoring."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-dashboard
          description: "Query dashboard at ADP."
          inputParameters:
            - name: dashboard_uid
              in: body
              type: string
              description: "The dashboard_uid to look up." 
          call: "grafana.get-dashboard_uid"
          with:
            dashboard_uid: "{{dashboard_uid}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://adp-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana_dashboard_query
              method: GET

Collects HR data from ADP, validates against labor laws in Snowflake, creates audit findings in ServiceNow, and notifies compliance.

naftiko: "0.5"
info:
  label: "HR Compliance Audit Pipeline"
  description: "Collects HR data from ADP, validates against labor laws in Snowflake, creates audit findings in ServiceNow, and notifies compliance."
  tags:
    - audit
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: audit
      port: 8080
      tools:
        - name: hr_compliance_audit_pipeline
          description: "Orchestrate hr compliance audit pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Monitors ADP API health via Datadog, checks data sync status, creates alerts in PagerDuty, logs in ServiceNow, and notifies IT.

naftiko: "0.5"
info:
  label: "HR System Integration Health Monitor"
  description: "Monitors ADP API health via Datadog, checks data sync status, creates alerts in PagerDuty, logs in ServiceNow, and notifies IT."
  tags:
    - integration
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: integration
      port: 8080
      tools:
        - name: hr_system_integration_health_monitor
          description: "Orchestrate hr system integration health monitor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Validates HRIS migration data between systems, compares counts in Snowflake, creates discrepancy tickets in Jira, and notifies project team.

naftiko: "0.5"
info:
  label: "HRIS Data Migration Validator"
  description: "Validates HRIS migration data between systems, compares counts in Snowflake, creates discrepancy tickets in Jira, and notifies project team."
  tags:
    - migration
    - snowflake
    - jira
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: migration
      port: 8080
      tools:
        - name: hris_data_migration_validator
          description: "Orchestrate hris data migration validator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adp.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Identifies employees needing reverification from ADP, sends notifications, tracks completion, escalates in ServiceNow, and notifies HR compliance.

naftiko: "0.5"
info:
  label: "I-9 Reverification Pipeline"
  description: "Identifies employees needing reverification from ADP, sends notifications, tracks completion, escalates in ServiceNow, and notifies HR compliance."
  tags:
    - compliance
    - adp
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: i9_reverification_pipeline
          description: "Orchestrate i-9 reverification pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves Jira issue status for ADP engineering teams.

naftiko: "0.5"
info:
  label: "Jira Issue Status"
  description: "Retrieves Jira issue status for ADP engineering teams."
  tags:
    - devops
    - jira
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-issue
          description: "Look up Jira issue at ADP."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The issue_key to look up." 
          call: "jira.get-issue_key"
          with:
            issue_key: "{{issue_key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://adp.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira_issue_status
              method: GET

Processes LOA request in ADP, validates FMLA eligibility, adjusts benefits, creates case in ServiceNow, and notifies HR and manager.

naftiko: "0.5"
info:
  label: "Leave of Absence Orchestrator"
  description: "Processes LOA request in ADP, validates FMLA eligibility, adjusts benefits, creates case in ServiceNow, and notifies HR and manager."
  tags:
    - hr
    - adp
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: leave_of_absence_orchestrator
          description: "Orchestrate leave of absence orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a leave request is submitted in ADP, notifies the manager via Microsoft Teams for approval and updates the request status in ADP based on the response.

naftiko: "0.5"
info:
  label: "Leave Request Approval Pipeline"
  description: "When a leave request is submitted in ADP, notifies the manager via Microsoft Teams for approval and updates the request status in ADP based on the response."
  tags:
    - time-off
    - adp
    - microsoft-teams
    - workforce-management
capability:
  exposes:
    - type: mcp
      namespace: leave-approval
      port: 8080
      tools:
        - name: process-leave-request
          description: "Process a leave request by notifying the manager and tracking approval."
          inputParameters:
            - name: leave_request_id
              in: body
              type: string
              description: "The ADP leave request identifier."
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID of the requestor."
          steps:
            - name: get-leave-request
              type: call
              call: "adp.get-leave-request"
              with:
                leave_request_id: "{{leave_request_id}}"
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.reportsTo.emailUri}}"
                text: "Leave request from {{get-employee.legalName.formattedName}}: {{get-leave-request.leaveType}} from {{get-leave-request.startDate}} to {{get-leave-request.endDate}} ({{get-leave-request.totalDays}} days). Please approve or deny."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/time/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: leave-requests
          path: "/leave-requests/{{leave_request_id}}"
          inputParameters:
            - name: leave_request_id
              in: path
          operations:
            - name: get-leave-request
              method: GET
    - type: http
      namespace: adp-hr
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - 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

Aggregates payroll data from multiple ADP country instances, consolidates in Snowflake, generates global reports, and notifies finance.

naftiko: "0.5"
info:
  label: "Multi-Country Payroll Consolidation"
  description: "Aggregates payroll data from multiple ADP country instances, consolidates in Snowflake, generates global reports, and notifies finance."
  tags:
    - global-payroll
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: global-payroll
      port: 8080
      tools:
        - name: multi_country_payroll_consolidation
          description: "Orchestrate multi-country payroll consolidation workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Validates payroll data against jurisdiction tax rules, checks ADP compliance database, creates exception reports, and notifies payroll team.

naftiko: "0.5"
info:
  label: "Multi-Jurisdiction Payroll Compliance Pipeline"
  description: "Validates payroll data against jurisdiction tax rules, checks ADP compliance database, creates exception reports, and notifies payroll team."
  tags:
    - payroll
    - compliance
    - adp
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: multi_jurisdiction_payroll_compliance_pi
          description: "Orchestrate multi-jurisdiction payroll compliance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

For employees working across multiple states, pulls work location data from ADP, retrieves state tax rates from Oracle, and generates a compliance report in Google Sheets with Slack notification.

naftiko: "0.5"
info:
  label: "Multi-State Payroll Tax Compliance Pipeline"
  description: "For employees working across multiple states, pulls work location data from ADP, retrieves state tax rates from Oracle, and generates a compliance report in Google Sheets with Slack notification."
  tags:
    - payroll
    - tax
    - compliance
    - adp
    - oracle
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: multistate-tax
      port: 8080
      tools:
        - name: audit-multistate-tax
          description: "Audit multi-state tax compliance for remote and traveling employees."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: tax_year
              in: body
              type: string
              description: "The tax year to audit."
          steps:
            - name: get-work-locations
              type: call
              call: "adp.get-work-locations"
              with:
                associate_oid: "{{associate_oid}}"
                tax_year: "{{tax_year}}"
            - name: get-tax-rates
              type: call
              call: "oracle.get-state-tax-rates"
              with:
                states: "{{get-work-locations.stateList}}"
                tax_year: "{{tax_year}}"
            - name: generate-report
              type: call
              call: "google-sheets.create-spreadsheet"
              with:
                title: "Multi-State Tax Audit: {{associate_oid}} - {{tax_year}}"
                data: "States: {{get-work-locations.stateList}}, Days: {{get-work-locations.daysByState}}, Rates: {{get-tax-rates.ratesByState}}"
            - name: notify-tax-team
              type: call
              call: "slack.post-message"
              with:
                channel: "#tax-compliance"
                text: "Multi-state tax audit complete for associate {{associate_oid}} ({{tax_year}}). {{get-work-locations.stateCount}} states identified. Report: {{generate-report.spreadsheetUrl}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: work-locations
          path: "/workers/{{associate_oid}}/work-locations?taxYear={{tax_year}}"
          inputParameters:
            - name: associate_oid
              in: path
            - name: tax_year
              in: query
          operations:
            - name: get-work-locations
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: tax-rates
          path: "/taxRates?states={{states}}&taxYear={{tax_year}}"
          inputParameters:
            - name: states
              in: query
            - name: tax_year
              in: query
          operations:
            - name: get-state-tax-rates
              method: GET
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              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

Creates client profile in ADP, provisions Salesforce account, configures ServiceNow support, sets up analytics in Snowflake, and notifies implementation.

naftiko: "0.5"
info:
  label: "New Client Payroll Setup Pipeline"
  description: "Creates client profile in ADP, provisions Salesforce account, configures ServiceNow support, sets up analytics in Snowflake, and notifies implementation."
  tags:
    - onboarding
    - adp
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: onboarding
      port: 8080
      tools:
        - name: new_client_payroll_setup_pipeline
          description: "Orchestrate new client payroll setup pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adp.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

On new hire event in ADP, creates a ServiceNow equipment request, provisions Azure AD account, and assigns a Microsoft Intune device profile.

naftiko: "0.5"
info:
  label: "New Hire Equipment Provisioning Pipeline"
  description: "On new hire event in ADP, creates a ServiceNow equipment request, provisions Azure AD account, and assigns a Microsoft Intune device profile."
  tags:
    - onboarding
    - adp
    - servicenow
    - azure-active-directory
    - microsoft-intune
capability:
  exposes:
    - type: mcp
      namespace: equipment-provisioning
      port: 8080
      tools:
        - name: provision-new-hire-equipment
          description: "Provision IT equipment and accounts for a new hire based on ADP role data."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: equipment_type
              in: body
              type: string
              description: "The equipment type (e.g. laptop, desktop, mobile)."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: create-equipment-request
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Equipment provisioning: {{get-employee.legalName.formattedName}}"
                category: "hardware"
                item: "{{equipment_type}}"
                assigned_group: "IT_Provisioning"
            - name: create-ad-account
              type: call
              call: "azure-ad.create-user"
              with:
                display_name: "{{get-employee.legalName.formattedName}}"
                mail_nickname: "{{get-employee.legalName.givenName}}.{{get-employee.legalName.familyName}}"
                department: "{{get-employee.department}}"
            - name: assign-intune-profile
              type: call
              call: "intune.assign-device-profile"
              with:
                user_id: "{{create-ad-account.userId}}"
                profile_name: "standard_{{equipment_type}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: azure-ad
      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: intune
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: device-profiles
          path: "/deviceManagement/deviceConfigurations/{{profile_name}}/assign"
          inputParameters:
            - name: profile_name
              in: path
          operations:
            - name: assign-device-profile
              method: POST

On hire event in ADP, triggers I-9 document verification, stores results in SharePoint, and creates a compliance tracking ticket in ServiceNow.

naftiko: "0.5"
info:
  label: "New Hire I-9 Verification Pipeline"
  description: "On hire event in ADP, triggers I-9 document verification, stores results in SharePoint, and creates a compliance tracking ticket in ServiceNow."
  tags:
    - compliance
    - i9-verification
    - adp
    - sharepoint
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: compliance-i9
      port: 8080
      tools:
        - name: verify-i9-documents
          description: "Initiate I-9 verification for a new hire and track compliance status."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID for the new hire."
            - name: hire_date
              in: body
              type: string
              description: "The hire date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: initiate-verification
              type: call
              call: "adp.create-i9-verification"
              with:
                associate_oid: "{{associate_oid}}"
                hire_date: "{{hire_date}}"
            - name: store-documents
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "hr_compliance_site"
                folder_path: "I9_Documents/{{get-employee.legalName.formattedName}}_{{hire_date}}"
                file_name: "i9_verification_{{associate_oid}}.pdf"
            - name: create-tracking-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "I-9 verification: {{get-employee.legalName.formattedName}}"
                category: "compliance"
                assigned_group: "HR_Compliance"
                description: "I-9 verification initiated for {{get-employee.legalName.formattedName}} hired {{hire_date}}. Verification ID: {{initiate-verification.verificationId}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: i9-verifications
          path: "/workers/{{associate_oid}}/i9-verifications"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: create-i9-verification
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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

On new hire creation in ADP Workforce Now, provisions a SharePoint folder for documents, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "New Hire Onboarding Orchestrator"
  description: "On new hire creation in ADP Workforce Now, provisions a SharePoint folder for documents, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - adp
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given an ADP associate OID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.legalName.formattedName}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.legalName.formattedName}} starting {{start_date}} in {{department}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.legalName.formattedName}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.businessCommunication.emailUri}}"
                text: "Welcome aboard! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              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

Configures tax withholding in ADP for new hires, validates state registrations, creates compliance records, and notifies payroll.

naftiko: "0.5"
info:
  label: "New Hire Tax Setup Pipeline"
  description: "Configures tax withholding in ADP for new hires, validates state registrations, creates compliance records, and notifies payroll."
  tags:
    - tax
    - adp
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: tax
      port: 8080
      tools:
        - name: new_hire_tax_setup_pipeline
          description: "Orchestrate new hire tax setup pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves Okta user profile for ADP identity management.

naftiko: "0.5"
info:
  label: "Okta User Profile Lookup"
  description: "Retrieves Okta user profile for ADP identity management."
  tags:
    - security
    - okta
    - identity
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user
          description: "Look up user at ADP."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The user_email to look up." 
          call: "okta.get-user_email"
          with:
            user_email: "{{user_email}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://adp.okta.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.okta_api_token"
        header: "Authorization" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: okta_user_profile_lookup
              method: GET

During benefits open enrollment, sends personalized emails via MailChimp with current plan details from ADP, tracks opens in Google Analytics, and logs activity in Salesforce.

naftiko: "0.5"
info:
  label: "Open Enrollment Campaign Orchestrator"
  description: "During benefits open enrollment, sends personalized emails via MailChimp with current plan details from ADP, tracks opens in Google Analytics, and logs activity in Salesforce."
  tags:
    - benefits
    - open-enrollment
    - adp
    - mailchimp
    - google-analytics
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: open-enrollment
      port: 8080
      tools:
        - name: launch-enrollment-campaign
          description: "Launch a personalized open enrollment campaign for a specific employee segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The employee segment identifier for targeting."
            - name: plan_year
              in: body
              type: string
              description: "The benefits plan year (e.g. 2026)."
          steps:
            - name: get-segment-employees
              type: call
              call: "adp.list-workers-by-segment"
              with:
                segment_id: "{{segment_id}}"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "{{get-segment-employees.listId}}"
                template_id: "open_enrollment_{{plan_year}}"
                subject: "Your {{plan_year}} Benefits Open Enrollment Is Now Open"
            - name: log-campaign
              type: call
              call: "salesforce.create-campaign-activity"
              with:
                campaign_name: "OE_{{plan_year}}_{{segment_id}}"
                status: "sent"
                recipient_count: "{{get-segment-employees.totalCount}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: worker-segments
          path: "/workers?$filter=segment eq '{{segment_id}}'"
          inputParameters:
            - name: segment_id
              in: query
          operations:
            - name: list-workers-by-segment
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adp.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaign-activities
          path: "/sobjects/CampaignMember"
          operations:
            - name: create-campaign-activity
              method: POST

Retrieves the organizational hierarchy from ADP, syncs it to Azure Active Directory group memberships, and updates the org chart visualization in SharePoint.

naftiko: "0.5"
info:
  label: "Organization Chart Sync Pipeline"
  description: "Retrieves the organizational hierarchy from ADP, syncs it to Azure Active Directory group memberships, and updates the org chart visualization in SharePoint."
  tags:
    - hr
    - org-chart
    - adp
    - azure-active-directory
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: hr-org
      port: 8080
      tools:
        - name: get-org-chart
          description: "Retrieve the reporting hierarchy, sync to Azure AD, and update SharePoint org chart."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-hierarchy
              type: call
              call: "adp.get-reports-to"
              with:
                associate_oid: "{{associate_oid}}"
            - name: sync-ad-groups
              type: call
              call: "azure-ad.update-manager"
              with:
                user_id: "{{fetch-hierarchy.workerEmail}}"
                manager_id: "{{fetch-hierarchy.managerEmail}}"
            - name: update-sharepoint
              type: call
              call: "sharepoint.update-list-item"
              with:
                site_id: "hr_org_charts"
                list_name: "OrgChart"
                associate_oid: "{{associate_oid}}"
                manager_name: "{{fetch-hierarchy.managerName}}"
                direct_reports: "{{fetch-hierarchy.directReportsCount}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: org-hierarchy
          path: "/workers/{{associate_oid}}/organizational-hierarchy"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-reports-to
              method: GET
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: manager-ref
          path: "/users/{{user_id}}/manager/$ref"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: update-manager
              method: PUT
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: update-list-item
              method: POST

When overtime is recorded in ADP time tracking, routes approval to the manager via Microsoft Teams and updates the timecard status in ADP.

naftiko: "0.5"
info:
  label: "Overtime Approval Workflow"
  description: "When overtime is recorded in ADP time tracking, routes approval to the manager via Microsoft Teams and updates the timecard status in ADP."
  tags:
    - workforce-management
    - overtime
    - adp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: overtime-approval
      port: 8080
      tools:
        - name: request-overtime-approval
          description: "Route an overtime request for manager approval and update the ADP timecard."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: overtime_hours
              in: body
              type: string
              description: "The number of overtime hours requested."
            - name: work_date
              in: body
              type: string
              description: "The date of overtime in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: notify-manager
              type: call
              call: "msteams.send-adaptive-card"
              with:
                recipient_upn: "{{get-employee.reportsTo.emailUri}}"
                card_title: "Overtime Approval Request"
                card_body: "{{get-employee.legalName.formattedName}} requests {{overtime_hours}} hours OT on {{work_date}}."
            - name: update-timecard
              type: call
              call: "adp.update-timecard-note"
              with:
                associate_oid: "{{associate_oid}}"
                work_date: "{{work_date}}"
                note: "Overtime approval requested: {{overtime_hours}} hours. Manager notified."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: adp-time
      baseUri: "https://api.adp.com/time/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: timecard-notes
          path: "/workers/{{associate_oid}}/timecards/{{work_date}}/notes"
          inputParameters:
            - name: associate_oid
              in: path
            - name: work_date
              in: path
          operations:
            - name: update-timecard-note
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: adaptive-cards
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-adaptive-card
              method: POST

Retrieves PagerDuty incident details for ADP on-call teams.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Details"
  description: "Retrieves PagerDuty incident details for ADP on-call teams."
  tags:
    - devops
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: incident-mgmt
      port: 8080
      tools:
        - name: get-incident
          description: "Look up incident at ADP."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The incident_id to look up." 
          call: "pagerduty.get-incident_id"
          with:
            incident_id: "{{incident_id}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty_incident_details
              method: GET

Retrieves the most recent pay stub for an employee from ADP payroll.

naftiko: "0.5"
info:
  label: "Pay Stub Retrieval"
  description: "Retrieves the most recent pay stub for an employee from ADP payroll."
  tags:
    - payroll
    - pay-stub
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll-stubs
      port: 8080
      tools:
        - name: get-latest-pay-stub
          description: "Retrieve the most recent pay stub for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-latest-stub"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: pay_date
              type: string
              mapping: "$.payStatement.payDate"
            - name: gross_pay
              type: string
              mapping: "$.payStatement.grossPayAmount"
            - name: net_pay
              type: string
              mapping: "$.payStatement.netPayAmount"
            - name: document_url
              type: string
              mapping: "$.payStatement.documentUri"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: pay-stubs
          path: "/workers/{{associate_oid}}/pay-statements?$top=1&$orderby=payDate desc"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-latest-stub
              method: GET

Validates pre-payroll data in ADP, checks for exceptions in Snowflake, creates approval workflow in ServiceNow, and notifies payroll managers.

naftiko: "0.5"
info:
  label: "Payroll Cycle Pre-Check Pipeline"
  description: "Validates pre-payroll data in ADP, checks for exceptions in Snowflake, creates approval workflow in ServiceNow, and notifies payroll managers."
  tags:
    - payroll
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: payroll_cycle_pre_check_pipeline
          description: "Orchestrate payroll cycle pre-check pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves a breakdown of all payroll deductions for an employee from ADP including pre-tax, post-tax, and voluntary deductions.

naftiko: "0.5"
info:
  label: "Payroll Deduction Summary"
  description: "Retrieves a breakdown of all payroll deductions for an employee from ADP including pre-tax, post-tax, and voluntary deductions."
  tags:
    - payroll
    - deductions
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll-deductions
      port: 8080
      tools:
        - name: get-deduction-summary
          description: "Retrieve a deduction summary for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-deductions"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: pre_tax_total
              type: string
              mapping: "$.deductions.preTaxTotal"
            - name: post_tax_total
              type: string
              mapping: "$.deductions.postTaxTotal"
            - name: voluntary_total
              type: string
              mapping: "$.deductions.voluntaryTotal"
            - name: total_deductions
              type: string
              mapping: "$.deductions.grandTotal"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: deductions
          path: "/workers/{{associate_oid}}/deductions"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-deductions
              method: GET

When a payroll run completes in ADP, compares gross pay against SAP cost center budgets and posts a Slack alert if the variance exceeds the threshold.

naftiko: "0.5"
info:
  label: "Payroll Discrepancy Alert Pipeline"
  description: "When a payroll run completes in ADP, compares gross pay against SAP cost center budgets and posts a Slack alert if the variance exceeds the threshold."
  tags:
    - payroll
    - adp
    - sap
    - slack
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: payroll-audit
      port: 8080
      tools:
        - name: check-payroll-variance
          description: "Compare a completed payroll run against cost center budgets and alert on variances exceeding the threshold."
          inputParameters:
            - name: pay_run_id
              in: body
              type: string
              description: "The ADP payroll run identifier."
            - name: variance_threshold
              in: body
              type: string
              description: "Maximum allowed variance percentage before alerting."
          steps:
            - name: get-payroll-totals
              type: call
              call: "adp.get-payroll-run"
              with:
                pay_run_id: "{{pay_run_id}}"
            - name: get-budget
              type: call
              call: "sap.get-cost-center-budget"
              with:
                cost_center: "{{get-payroll-totals.costCenterCode}}"
                fiscal_period: "{{get-payroll-totals.payPeriod}}"
            - name: notify-variance
              type: call
              call: "slack.post-message"
              with:
                channel: "#payroll-alerts"
                text: "Payroll variance alert: Run {{pay_run_id}} total {{get-payroll-totals.grossTotal}} vs budget {{get-budget.plannedAmount}}. Variance exceeds {{variance_threshold}}%."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: payroll-runs
          path: "/pay-runs/{{pay_run_id}}"
          inputParameters:
            - name: pay_run_id
              in: path
          operations:
            - name: get-payroll-run
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adp-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-center-budgets
          path: "/A_CostCenter('{{cost_center}}')/to_Budget(FiscalPeriod='{{fiscal_period}}')"
          inputParameters:
            - name: cost_center
              in: path
            - name: fiscal_period
              in: path
          operations:
            - name: get-cost-center-budget
              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

Runs validation rules against ADP payroll data, identifies errors in Snowflake, creates correction tasks in Jira, and notifies payroll ops.

naftiko: "0.5"
info:
  label: "Payroll Error Detection Pipeline"
  description: "Runs validation rules against ADP payroll data, identifies errors in Snowflake, creates correction tasks in Jira, and notifies payroll ops."
  tags:
    - payroll
    - adp
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: payroll_error_detection_pipeline
          description: "Orchestrate payroll error detection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adp.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Monitors payroll transactions in ADP, runs anomaly detection in Snowflake, creates investigation cases, and escalates suspicious activity.

naftiko: "0.5"
info:
  label: "Payroll Fraud Detection Pipeline"
  description: "Monitors payroll transactions in ADP, runs anomaly detection in Snowflake, creates investigation cases, and escalates suspicious activity."
  tags:
    - security
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: payroll_fraud_detection_pipeline
          description: "Orchestrate payroll fraud detection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

After payroll processing in ADP, extracts journal entries and posts them to SAP for general ledger reconciliation, then logs the sync status in Confluence.

naftiko: "0.5"
info:
  label: "Payroll Journal Entry Export to SAP"
  description: "After payroll processing in ADP, extracts journal entries and posts them to SAP for general ledger reconciliation, then logs the sync status in Confluence."
  tags:
    - payroll
    - adp
    - sap
    - confluence
    - accounting
capability:
  exposes:
    - type: mcp
      namespace: payroll-gl-sync
      port: 8080
      tools:
        - name: export-payroll-to-gl
          description: "Export ADP payroll journal entries to SAP general ledger and document in Confluence."
          inputParameters:
            - name: pay_run_id
              in: body
              type: string
              description: "The ADP payroll run identifier."
            - name: posting_date
              in: body
              type: string
              description: "The GL posting date in YYYY-MM-DD format."
          steps:
            - name: get-journal-entries
              type: call
              call: "adp.get-payroll-journal"
              with:
                pay_run_id: "{{pay_run_id}}"
            - name: post-to-sap
              type: call
              call: "sap.create-journal-entry"
              with:
                company_code: "{{get-journal-entries.companyCode}}"
                posting_date: "{{posting_date}}"
                line_items: "{{get-journal-entries.lineItems}}"
            - name: document-sync
              type: call
              call: "confluence.create-page"
              with:
                space_key: "PAYROLL"
                title: "GL Sync: Pay Run {{pay_run_id}} - {{posting_date}}"
                body: "Payroll journal entries from run {{pay_run_id}} posted to SAP document {{post-to-sap.documentNumber}}. Total amount: {{get-journal-entries.totalAmount}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: payroll-journals
          path: "/pay-runs/{{pay_run_id}}/journal-entries"
          inputParameters:
            - name: pay_run_id
              in: path
          operations:
            - name: get-payroll-journal
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adp-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: journal-entries
          path: "/A_JournalEntry"
          operations:
            - name: create-journal-entry
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://adp-corp.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Extracts payroll journals from ADP, transforms for GL posting, loads into ERP, reconciles in Snowflake, and notifies accounting.

naftiko: "0.5"
info:
  label: "Payroll Journal Integration Pipeline"
  description: "Extracts payroll journals from ADP, transforms for GL posting, loads into ERP, reconciles in Snowflake, and notifies accounting."
  tags:
    - finance
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: payroll_journal_integration_pipeline
          description: "Orchestrate payroll journal integration pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Generates standard payroll reports from ADP data in Snowflake, publishes to Power BI, distributes via email, and notifies stakeholders.

naftiko: "0.5"
info:
  label: "Payroll Reporting Automation Pipeline"
  description: "Generates standard payroll reports from ADP data in Snowflake, publishes to Power BI, distributes via email, and notifies stakeholders."
  tags:
    - reporting
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: reporting
      port: 8080
      tools:
        - name: payroll_reporting_automation_pipeline
          description: "Orchestrate payroll reporting automation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Extracts payroll tax data from ADP, validates calculations in Snowflake, submits filings, logs confirmation in ServiceNow, and notifies tax team.

naftiko: "0.5"
info:
  label: "Payroll Tax Filing Orchestrator"
  description: "Extracts payroll tax data from ADP, validates calculations in Snowflake, submits filings, logs confirmation in ServiceNow, and notifies tax team."
  tags:
    - tax
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: tax
      port: 8080
      tools:
        - name: payroll_tax_filing_orchestrator
          description: "Orchestrate payroll tax filing orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Initiates a performance review cycle by pulling employee data from ADP, creating review documents in Google Docs, assigning tasks in Jira, and notifying managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Performance Review Cycle Orchestrator"
  description: "Initiates a performance review cycle by pulling employee data from ADP, creating review documents in Google Docs, assigning tasks in Jira, and notifying managers via Microsoft Teams."
  tags:
    - talent
    - performance
    - adp
    - google-docs
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-performance
      port: 8080
      tools:
        - name: initiate-review-cycle
          description: "Kick off a performance review cycle for a department."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department for the review cycle."
            - name: review_period
              in: body
              type: string
              description: "The review period label (e.g. Q1-2026)."
          steps:
            - name: get-department-roster
              type: call
              call: "adp.list-workers-by-department"
              with:
                department: "{{department}}"
            - name: create-review-template
              type: call
              call: "google-docs.create-document"
              with:
                title: "Performance Review {{review_period}} - {{department}}"
                template_id: "perf_review_template"
            - name: create-jira-epic
              type: call
              call: "jira.create-issue"
              with:
                project: "PERF"
                summary: "Performance Reviews: {{department}} - {{review_period}}"
                issue_type: "Epic"
                description: "Track {{get-department-roster.totalCount}} reviews for {{department}} during {{review_period}}."
            - name: notify-managers
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "hr_management"
                channel: "performance-reviews"
                text: "Performance review cycle initiated for {{department}} ({{review_period}}). {{get-department-roster.totalCount}} employees. Jira epic: {{create-jira-epic.key}}. Template: {{create-review-template.url}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: department-workers
          path: "/workers?$filter=department eq '{{department}}'"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: list-workers-by-department
              method: GET
    - type: http
      namespace: google-docs
      baseUri: "https://docs.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_docs_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adp-corp.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
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel
              in: path
          operations:
            - name: send-channel-message
              method: POST

Triggers Power BI dataset refresh for ADP reporting.

naftiko: "0.5"
info:
  label: "Power BI Refresh Trigger"
  description: "Triggers Power BI dataset refresh for ADP reporting."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: trigger-refresh
          description: "Trigger refresh at ADP."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The dataset_id to look up." 
          call: "powerbi.get-dataset_id"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: power_bi_refresh_trigger
              method: GET

Processes a promotion by updating the job title and compensation in ADP, generating an offer letter in Google Docs, and notifying HR leadership via Slack.

naftiko: "0.5"
info:
  label: "Promotion and Salary Adjustment Pipeline"
  description: "Processes a promotion by updating the job title and compensation in ADP, generating an offer letter in Google Docs, and notifying HR leadership via Slack."
  tags:
    - hr
    - compensation
    - adp
    - google-docs
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-promotions
      port: 8080
      tools:
        - name: process-promotion
          description: "Process an employee promotion with title change, salary adjustment, and notifications."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: new_title
              in: body
              type: string
              description: "The new job title."
            - name: new_salary
              in: body
              type: string
              description: "The new annual salary."
            - name: effective_date
              in: body
              type: string
              description: "The promotion effective date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: update-job
              type: call
              call: "adp.update-job-title"
              with:
                associate_oid: "{{associate_oid}}"
                new_title: "{{new_title}}"
                effective_date: "{{effective_date}}"
            - name: update-comp
              type: call
              call: "adp.update-compensation"
              with:
                associate_oid: "{{associate_oid}}"
                new_salary: "{{new_salary}}"
                effective_date: "{{effective_date}}"
            - name: generate-letter
              type: call
              call: "google-docs.create-document"
              with:
                title: "Promotion Letter: {{get-employee.legalName.formattedName}} - {{new_title}}"
                template_id: "promotion_letter_template"
            - name: notify-hr
              type: call
              call: "slack.post-message"
              with:
                channel: "#hr-actions"
                text: "Promotion processed: {{get-employee.legalName.formattedName}} to {{new_title}} at {{new_salary}} effective {{effective_date}}. Letter: {{generate-letter.url}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: job-titles
          path: "/workers/{{associate_oid}}/work-assignments/job-title"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-job-title
              method: PATCH
        - name: compensation
          path: "/workers/{{associate_oid}}/compensation"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-compensation
              method: PATCH
    - type: http
      namespace: google-docs
      baseUri: "https://docs.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_docs_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: create-document
              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

Pulls quarterly payroll tax data from ADP, reconciles against Oracle general ledger entries, generates a reconciliation report in Google Sheets, and notifies the finance team via Slack.

naftiko: "0.5"
info:
  label: "Quarterly Payroll Tax Reconciliation Pipeline"
  description: "Pulls quarterly payroll tax data from ADP, reconciles against Oracle general ledger entries, generates a reconciliation report in Google Sheets, and notifies the finance team via Slack."
  tags:
    - payroll
    - tax
    - adp
    - oracle
    - google-sheets
    - slack
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: tax-reconciliation
      port: 8080
      tools:
        - name: reconcile-quarterly-taxes
          description: "Reconcile quarterly payroll taxes between ADP and Oracle GL."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "The fiscal quarter (e.g. Q1-2026)."
            - name: company_code
              in: body
              type: string
              description: "The company code for the entity."
          steps:
            - name: get-adp-tax-totals
              type: call
              call: "adp.get-tax-summary"
              with:
                quarter: "{{quarter}}"
                company_code: "{{company_code}}"
            - name: get-gl-tax-entries
              type: call
              call: "oracle.get-gl-balances"
              with:
                period: "{{quarter}}"
                account_group: "payroll_tax"
            - name: write-recon-report
              type: call
              call: "google-sheets.update-range"
              with:
                spreadsheet_id: "payroll_tax_recon_{{quarter}}"
                range: "Reconciliation!A1"
                values: "ADP Total: {{get-adp-tax-totals.totalTax}}, GL Total: {{get-gl-tax-entries.totalBalance}}, Variance: {{get-adp-tax-totals.totalTax}} - {{get-gl-tax-entries.totalBalance}}"
            - name: notify-finance
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance-payroll"
                text: "Quarterly tax reconciliation complete for {{quarter}} ({{company_code}}). ADP: {{get-adp-tax-totals.totalTax}}, GL: {{get-gl-tax-entries.totalBalance}}. Report: {{write-recon-report.spreadsheetUrl}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: tax-summaries
          path: "/tax-summaries?quarter={{quarter}}&companyCode={{company_code}}"
          inputParameters:
            - name: quarter
              in: query
            - name: company_code
              in: query
          operations:
            - name: get-tax-summary
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: gl-balances
          path: "/generalLedgerBalances?period={{period}}&accountGroup={{account_group}}"
          inputParameters:
            - name: period
              in: query
            - name: account_group
              in: query
          operations:
            - name: get-gl-balances
              method: GET
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheet-values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-range
              method: PUT
    - 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 401k contributions from ADP, reconciles with plan administrator, identifies variances, and notifies benefits team.

naftiko: "0.5"
info:
  label: "Retirement Plan Contribution Reconciliation"
  description: "Extracts 401k contributions from ADP, reconciles with plan administrator, identifies variances, and notifies benefits team."
  tags:
    - benefits
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: retirement_plan_contribution_reconciliat
          description: "Orchestrate retirement plan contribution reconciliation workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Extracts compensation data from ADP, compares against market data in Snowflake, generates reports in Power BI, and notifies compensation team.

naftiko: "0.5"
info:
  label: "Salary Benchmarking Pipeline"
  description: "Extracts compensation data from ADP, compares against market data in Snowflake, generates reports in Power BI, and notifies compensation team."
  tags:
    - compensation
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compensation
      port: 8080
      tools:
        - name: salary_benchmarking_pipeline
          description: "Orchestrate salary benchmarking pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Extracts compensation data from ADP for salary benchmarking, anonymizes it, and exports to an Amazon S3 bucket for third-party survey submission.

naftiko: "0.5"
info:
  label: "Salary Survey Data Export"
  description: "Extracts compensation data from ADP for salary benchmarking, anonymizes it, and exports to an Amazon S3 bucket for third-party survey submission."
  tags:
    - compensation
    - analytics
    - adp
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: compensation-export
      port: 8080
      tools:
        - name: export-salary-survey
          description: "Export anonymized salary data to S3 for benchmarking surveys."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "The salary survey identifier."
            - name: department
              in: body
              type: string
              description: "The department to include in the export."
          steps:
            - name: get-comp-data
              type: call
              call: "adp.get-compensation-report"
              with:
                department: "{{department}}"
                report_type: "salary_survey"
            - name: upload-to-s3
              type: call
              call: "s3.put-object"
              with:
                bucket: "adp-salary-surveys"
                key: "surveys/{{survey_id}}/{{department}}_export.csv"
                body: "{{get-comp-data.anonymizedData}}"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: compensation-reports
          path: "/reports/compensation?department={{department}}&reportType={{report_type}}"
          inputParameters:
            - name: department
              in: query
            - name: report_type
              in: query
          operations:
            - name: get-compensation-report
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://adp-salary-surveys.s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_s3_token"
      resources:
        - name: objects
          path: "/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT

Retrieves Salesforce account details for ADP sales teams.

naftiko: "0.5"
info:
  label: "Salesforce Account Info"
  description: "Retrieves Salesforce account details for ADP sales teams."
  tags:
    - crm
    - salesforce
    - accounts
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-account
          description: "Look up account at ADP."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The account_id to look up." 
          call: "salesforce.get-account_id"
          with:
            account_id: "{{account_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adp.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce_account_info
              method: GET

Checks ServiceNow incident status for ADP IT operations.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Check"
  description: "Checks ServiceNow incident status for ADP IT operations."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident
          description: "Look up incident at ADP."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The incident_id to look up." 
          call: "servicenow.get-incident_id"
          with:
            incident_id: "{{incident_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow_incident_status_che
              method: GET

Sends a message to a Slack channel for ADP notifications.

naftiko: "0.5"
info:
  label: "Slack Channel Post"
  description: "Sends a message to a Slack channel for ADP notifications."
  tags:
    - collaboration
    - slack
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: send-message
          description: "Post to Slack at ADP."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "The channel to look up." 
          call: "slack.get-channel"
          with:
            channel: "{{channel}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack_channel_post
              method: GET

Executes SQL queries against ADP Snowflake warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Query Executor"
  description: "Executes SQL queries against ADP Snowflake warehouse."
  tags:
    - data
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-query
          description: "Run query at ADP."
          inputParameters:
            - name: sql_query
              in: body
              type: string
              description: "The sql_query to look up." 
          call: "snowflake.get-sql_query"
          with:
            sql_query: "{{sql_query}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake_query_executor
              method: GET

Searches Splunk indexes for log entries at ADP.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk indexes for log entries at ADP."
  tags:
    - devops
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: logging
      port: 8080
      tools:
        - name: search-logs
          description: "Search Splunk logs for ADP."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The query to look up." 
          call: "splunk.get-query"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://adp-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: splunk_log_search
              method: GET

When a new talent requisition is approved in ADP Recruiting, publishes the job posting to LinkedIn and logs the posting in Jira for recruiting team tracking.

naftiko: "0.5"
info:
  label: "Talent Requisition to Job Posting Pipeline"
  description: "When a new talent requisition is approved in ADP Recruiting, publishes the job posting to LinkedIn and logs the posting in Jira for recruiting team tracking."
  tags:
    - talent
    - recruiting
    - adp
    - linkedin
    - jira
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: publish-requisition
          description: "Publish an approved ADP requisition to LinkedIn and track in Jira."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The ADP requisition identifier."
          steps:
            - name: get-requisition
              type: call
              call: "adp.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
                company_id: "{{get-requisition.companyId}}"
            - name: create-jira-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "RECRUIT"
                summary: "Job posted: {{get-requisition.title}} - LinkedIn ID {{post-to-linkedin.postingId}}"
                issue_type: "Task"
                description: "Requisition {{requisition_id}} published to LinkedIn on {{post-to-linkedin.publishedDate}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/staffing/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: requisitions
          path: "/job-requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_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: "/jobPostings"
          operations:
            - name: create-job-posting
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adp-corp.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 the federal and state tax filing status from ADP, validates against compliance rules in ServiceNow, and logs the audit result in Confluence.

naftiko: "0.5"
info:
  label: "Tax Filing Status and Compliance Check"
  description: "Retrieves the federal and state tax filing status from ADP, validates against compliance rules in ServiceNow, and logs the audit result in Confluence."
  tags:
    - payroll
    - tax
    - adp
    - compliance
    - servicenow
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: payroll-tax
      port: 8080
      tools:
        - name: get-tax-filing-status
          description: "Look up tax withholding elections, validate compliance, and log the audit."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-withholdings
              type: call
              call: "adp.get-tax-withholdings"
              with:
                associate_oid: "{{associate_oid}}"
            - name: validate-compliance
              type: call
              call: "servicenow.check-compliance"
              with:
                state_code: "{{fetch-withholdings.stateCode}}"
                filing_status: "{{fetch-withholdings.federalFilingStatus}}"
            - name: log-audit
              type: call
              call: "confluence.create-page"
              with:
                space_key: "TAX_AUDIT"
                title: "Tax Filing Audit: {{associate_oid}}"
                body: "Federal: {{fetch-withholdings.federalFilingStatus}}, State: {{fetch-withholdings.stateCode}}, Compliance: {{validate-compliance.status}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: tax-withholdings
          path: "/workers/{{associate_oid}}/tax-withholdings"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-tax-withholdings
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: compliance-checks
          path: "/table/tax_compliance_check"
          operations:
            - name: check-compliance
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://adp-corp.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

When an employee is terminated in ADP, revokes Azure Active Directory access, closes their ServiceNow tickets, archives their Google Drive folder, and notifies the manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Termination Offboarding Orchestrator"
  description: "When an employee is terminated in ADP, revokes Azure Active Directory access, closes their ServiceNow tickets, archives their Google Drive folder, and notifies the manager via Microsoft Teams."
  tags:
    - hr
    - offboarding
    - adp
    - azure-active-directory
    - servicenow
    - google-drive
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Execute the full offboarding sequence for a terminated employee."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID for the terminated employee."
            - name: termination_date
              in: body
              type: string
              description: "The termination effective date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: disable-ad-account
              type: call
              call: "azure-ad.disable-user"
              with:
                user_principal_name: "{{get-employee.businessCommunication.emailUri}}"
            - name: close-tickets
              type: call
              call: "servicenow.close-user-tickets"
              with:
                caller_id: "{{get-employee.businessCommunication.emailUri}}"
                close_notes: "Employee terminated on {{termination_date}}. Tickets auto-closed."
            - name: archive-drive
              type: call
              call: "google-drive.move-folder"
              with:
                folder_id: "{{get-employee.driveFolder}}"
                destination: "archived_employees"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.reportsTo.emailUri}}"
                text: "Offboarding complete for {{get-employee.legalName.formattedName}} effective {{termination_date}}. AD disabled, tickets closed, drive archived."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_principal_name}}"
          inputParameters:
            - name: user_principal_name
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://adp-corp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=caller_id={{caller_id}}"
          inputParameters:
            - name: caller_id
              in: query
          operations:
            - name: close-user-tickets
              method: PATCH
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files/{{folder_id}}"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: move-folder
              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

Monitors timecard patterns from ADP, detects anomalies in Snowflake, creates investigation cases, and notifies managers.

naftiko: "0.5"
info:
  label: "Time and Attendance Anomaly Detector"
  description: "Monitors timecard patterns from ADP, detects anomalies in Snowflake, creates investigation cases, and notifies managers."
  tags:
    - workforce
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: workforce
      port: 8080
      tools:
        - name: time_and_attendance_anomaly_detector
          description: "Orchestrate time and attendance anomaly detector workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Queries ADP for an employee's PTO balances, cross-references upcoming scheduled shifts, and sends the combined summary via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Time-Off Balance and Schedule Check"
  description: "Queries ADP for an employee's PTO balances, cross-references upcoming scheduled shifts, and sends the combined summary via Microsoft Teams."
  tags:
    - time-off
    - adp
    - workforce-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: time-off
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Retrieve time-off balances and upcoming schedule for an employee, then notify via Teams."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          steps:
            - name: fetch-balances
              type: call
              call: "adp.get-leave-balances"
              with:
                associate_oid: "{{associate_oid}}"
            - name: get-upcoming-schedule
              type: call
              call: "adp.get-shift-schedule"
              with:
                associate_oid: "{{associate_oid}}"
            - name: notify-employee
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{fetch-balances.workerEmail}}"
                text: "Your PTO balances: Vacation={{fetch-balances.vacationHours}}h, Sick={{fetch-balances.sickHours}}h. Next scheduled shift: {{get-upcoming-schedule.nextShiftDate}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/time/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: leave-balances
          path: "/workers/{{associate_oid}}/time-off-balances"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-leave-balances
              method: GET
        - name: shift-schedules
          path: "/workers/{{associate_oid}}/schedules"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-shift-schedule
              method: GET
    - 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

Retrieves timecard submission status from ADP, checks for missing submissions, and notifies the manager via Microsoft Teams if the timecard is incomplete.

naftiko: "0.5"
info:
  label: "Timecard Status and Manager Notification"
  description: "Retrieves timecard submission status from ADP, checks for missing submissions, and notifies the manager via Microsoft Teams if the timecard is incomplete."
  tags:
    - time-attendance
    - adp
    - workforce-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: time-attendance
      port: 8080
      tools:
        - name: get-timecard-status
          description: "Check timecard submission status and notify the manager if incomplete."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: pay_period_end
              in: body
              type: string
              description: "The pay period end date in YYYY-MM-DD format."
          steps:
            - name: fetch-timecard
              type: call
              call: "adp.get-timecard"
              with:
                associate_oid: "{{associate_oid}}"
                pay_period_end: "{{pay_period_end}}"
            - name: get-employee
              type: call
              call: "adp.get-worker"
              with:
                associate_oid: "{{associate_oid}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.reportsTo.emailUri}}"
                text: "Timecard status for {{get-employee.legalName.formattedName}} (period ending {{pay_period_end}}): {{fetch-timecard.status}}. Total hours: {{fetch-timecard.totalHours}}, OT: {{fetch-timecard.overtimeHours}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/time/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: timecards
          path: "/workers/{{associate_oid}}/timecards?periodEnd={{pay_period_end}}"
          inputParameters:
            - name: associate_oid
              in: path
            - name: pay_period_end
              in: query
          operations:
            - name: get-timecard
              method: GET
    - type: http
      namespace: adp-hr
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker
              method: GET
    - 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

Calculates union dues from ADP payroll, reconciles with union records, generates remittance, and notifies labor relations team.

naftiko: "0.5"
info:
  label: "Union Dues Processing Pipeline"
  description: "Calculates union dues from ADP payroll, reconciles with union records, generates remittance, and notifies labor relations team."
  tags:
    - labor-relations
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: labor-relations
      port: 8080
      tools:
        - name: union_dues_processing_pipeline
          description: "Orchestrate union dues processing pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves a W-2 tax document from ADP, archives it in SharePoint for document retention, and sends the employee a notification via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "W-2 Document Retrieval and Archive Pipeline"
  description: "Retrieves a W-2 tax document from ADP, archives it in SharePoint for document retention, and sends the employee a notification via Microsoft Outlook."
  tags:
    - payroll
    - tax
    - adp
    - sharepoint
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: tax-documents
      port: 8080
      tools:
        - name: get-w2-document
          description: "Retrieve a W-2, archive in SharePoint, and notify the employee."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
            - name: tax_year
              in: body
              type: string
              description: "The tax year (e.g. 2025)."
          steps:
            - name: fetch-w2
              type: call
              call: "adp.get-w2"
              with:
                associate_oid: "{{associate_oid}}"
                tax_year: "{{tax_year}}"
            - name: archive-document
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "tax_documents_site"
                folder_path: "W2/{{tax_year}}/{{associate_oid}}"
                file_name: "W2_{{tax_year}}_{{associate_oid}}.pdf"
            - name: notify-employee
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{fetch-w2.workerEmail}}"
                subject: "Your {{tax_year}} W-2 is Available"
                body: "Your W-2 for tax year {{tax_year}} is now available. Wages: {{fetch-w2.wages}}. Federal tax withheld: {{fetch-w2.federalTaxWithheld}}. Document archived in SharePoint."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: w2-documents
          path: "/workers/{{associate_oid}}/tax-documents/w2?taxYear={{tax_year}}"
          inputParameters:
            - name: associate_oid
              in: path
            - name: tax_year
              in: query
          operations:
            - name: get-w2
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-mail
              method: POST

Retrieves employee profile from Workday at ADP.

naftiko: "0.5"
info:
  label: "Workday Employee Lookup"
  description: "Retrieves employee profile from Workday at ADP."
  tags:
    - hr
    - workday
    - employee-data
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee
          description: "Look up Workday employee at ADP."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee_id to look up." 
          call: "workday.get-employee_id"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/adp"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday_employee_lookup
              method: GET

Retrieves an employee's demographic and job profile from ADP Workforce Now including name, title, department, and hire date.

naftiko: "0.5"
info:
  label: "Worker Profile Lookup"
  description: "Retrieves an employee's demographic and job profile from ADP Workforce Now including name, title, department, and hire date."
  tags:
    - hr
    - adp
    - workforce-now
capability:
  exposes:
    - type: mcp
      namespace: hr-profile
      port: 8080
      tools:
        - name: get-worker-profile
          description: "Retrieve a worker's profile by ADP associate OID. Returns legal name, job title, department, and hire date."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-worker-detail"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.workers[0].person.legalName.formattedName"
            - name: job_title
              type: string
              mapping: "$.workers[0].workAssignments[0].jobTitle"
            - name: department
              type: string
              mapping: "$.workers[0].workAssignments[0].homeOrganizationalUnits[0].nameCode.shortName"
            - name: hire_date
              type: string
              mapping: "$.workers[0].workAssignments[0].hireDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workers
          path: "/workers/{{associate_oid}}"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-worker-detail
              method: GET

Receives claim from ADP, validates employment, creates case in ServiceNow, calculates exposure in Snowflake, and notifies risk management.

naftiko: "0.5"
info:
  label: "Workers Comp Claims Processor"
  description: "Receives claim from ADP, validates employment, creates case in ServiceNow, calculates exposure in Snowflake, and notifies risk management."
  tags:
    - insurance
    - adp
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: insurance
      port: 8080
      tools:
        - name: workers_comp_claims_processor
          description: "Orchestrate workers comp claims processor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves workers compensation claim details for an employee from ADP insurance services.

naftiko: "0.5"
info:
  label: "Workers Compensation Claim Lookup"
  description: "Retrieves workers compensation claim details for an employee from ADP insurance services."
  tags:
    - benefits
    - workers-compensation
    - adp
    - insurance
capability:
  exposes:
    - type: mcp
      namespace: workers-comp
      port: 8080
      tools:
        - name: get-wc-claims
          description: "Retrieve workers compensation claims for an employee by ADP associate OID."
          inputParameters:
            - name: associate_oid
              in: body
              type: string
              description: "The ADP associate OID."
          call: "adp.get-wc-claims"
          with:
            associate_oid: "{{associate_oid}}"
          outputParameters:
            - name: active_claims
              type: string
              mapping: "$.claims.length"
            - name: latest_claim_status
              type: string
              mapping: "$.claims[0].status"
            - name: latest_claim_date
              type: string
              mapping: "$.claims[0].incidentDate"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/insurance/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: wc-claims
          path: "/workers/{{associate_oid}}/workers-comp-claims"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: get-wc-claims
              method: GET

Extracts HR metrics from ADP, aggregates in Snowflake, generates Power BI dashboards, identifies trends, and notifies HR leadership.

naftiko: "0.5"
info:
  label: "Workforce Analytics Pipeline"
  description: "Extracts HR metrics from ADP, aggregates in Snowflake, generates Power BI dashboards, identifies trends, and notifies HR leadership."
  tags:
    - analytics
    - adp
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: workforce_analytics_pipeline
          description: "Orchestrate workforce analytics pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Pulls active headcount data from ADP and pushes it to Power BI for real-time workforce analytics dashboards, then notifies HR leadership via Slack.

naftiko: "0.5"
info:
  label: "Workforce Headcount Dashboard Sync"
  description: "Pulls active headcount data from ADP and pushes it to Power BI for real-time workforce analytics dashboards, then notifies HR leadership via Slack."
  tags:
    - workforce-management
    - adp
    - power-bi
    - slack
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: workforce-analytics
      port: 8080
      tools:
        - name: sync-headcount-dashboard
          description: "Sync current ADP headcount data to Power BI and notify stakeholders."
          inputParameters:
            - name: as_of_date
              in: body
              type: string
              description: "The date for the headcount snapshot in YYYY-MM-DD format."
          steps:
            - name: get-headcount
              type: call
              call: "adp.get-workforce-analytics"
              with:
                report_type: "headcount"
                as_of_date: "{{as_of_date}}"
            - name: push-to-powerbi
              type: call
              call: "powerbi.push-dataset-rows"
              with:
                dataset_id: "workforce_headcount"
                table_name: "headcount_daily"
                rows: "{{get-headcount.data}}"
            - name: notify-hr
              type: call
              call: "slack.post-message"
              with:
                channel: "#hr-analytics"
                text: "Workforce headcount dashboard updated for {{as_of_date}}. Total active: {{get-headcount.totalActive}}. Power BI refresh complete."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: workforce-analytics
          path: "/reports/{{report_type}}?asOfDate={{as_of_date}}"
          inputParameters:
            - name: report_type
              in: path
            - name: as_of_date
              in: query
          operations:
            - name: get-workforce-analytics
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-rows
          path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
            - name: table_name
              in: path
          operations:
            - name: push-dataset-rows
              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

Pulls shift schedules from ADP Workforce Now and syncs them to Google Calendar for team visibility, then posts the weekly schedule summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workforce Scheduling Sync to Google Calendar"
  description: "Pulls shift schedules from ADP Workforce Now and syncs them to Google Calendar for team visibility, then posts the weekly schedule summary to Microsoft Teams."
  tags:
    - workforce-management
    - scheduling
    - adp
    - google-workspace
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: schedule-sync
      port: 8080
      tools:
        - name: sync-weekly-schedule
          description: "Sync ADP shift schedules to Google Calendar and post a summary to Teams."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to sync schedules for."
            - name: week_start
              in: body
              type: string
              description: "The week start date in YYYY-MM-DD format."
          steps:
            - name: get-schedules
              type: call
              call: "adp.get-shift-schedules"
              with:
                department: "{{department}}"
                week_start: "{{week_start}}"
            - name: create-calendar-events
              type: call
              call: "google-calendar.create-event"
              with:
                calendar_id: "{{department}}_shifts"
                summary: "Shift Schedule: {{department}} - Week of {{week_start}}"
                start_date: "{{week_start}}"
                description: "{{get-schedules.scheduleDetails}}"
            - name: post-summary
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "operations"
                channel: "scheduling"
                text: "Weekly schedule posted for {{department}} starting {{week_start}}. {{get-schedules.totalShifts}} shifts across {{get-schedules.employeeCount}} employees. Calendar: {{create-calendar-events.eventUrl}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/time/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: shift-schedules
          path: "/schedules?department={{department}}&weekStart={{week_start}}"
          inputParameters:
            - name: department
              in: query
            - name: week_start
              in: query
          operations:
            - name: get-shift-schedules
              method: GET
    - type: http
      namespace: google-calendar
      baseUri: "https://www.googleapis.com/calendar/v3"
      authentication:
        type: bearer
        token: "$secrets.google_calendar_token"
      resources:
        - name: events
          path: "/calendars/{{calendar_id}}/events"
          inputParameters:
            - name: calendar_id
              in: path
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel
              in: path
          operations:
            - name: send-channel-message
              method: POST

Analyzes turnover data from ADP analytics, compares against thresholds stored in Google Sheets, and posts alerts to Slack and creates a Jira ticket when turnover exceeds targets.

naftiko: "0.5"
info:
  label: "Workforce Turnover Alert Pipeline"
  description: "Analyzes turnover data from ADP analytics, compares against thresholds stored in Google Sheets, and posts alerts to Slack and creates a Jira ticket when turnover exceeds targets."
  tags:
    - workforce-management
    - analytics
    - adp
    - google-sheets
    - slack
    - jira
capability:
  exposes:
    - type: mcp
      namespace: turnover-alerts
      port: 8080
      tools:
        - name: check-turnover-rate
          description: "Check workforce turnover against targets and alert if thresholds are breached."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to analyze."
            - name: period
              in: body
              type: string
              description: "The reporting period (e.g. Q1-2026)."
          steps:
            - name: get-turnover-data
              type: call
              call: "adp.get-turnover-report"
              with:
                department: "{{department}}"
                period: "{{period}}"
            - name: get-targets
              type: call
              call: "google-sheets.get-range"
              with:
                spreadsheet_id: "turnover_targets_2026"
                range: "Targets!A:C"
            - name: post-alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#hr-analytics"
                text: "Turnover alert: {{department}} at {{get-turnover-data.turnoverRate}}% for {{period}} (target: {{get-targets.targetRate}}%). {{get-turnover-data.separationCount}} separations."
            - name: create-action-item
              type: call
              call: "jira.create-issue"
              with:
                project: "HR"
                summary: "High turnover: {{department}} - {{period}}"
                issue_type: "Task"
                description: "Turnover rate {{get-turnover-data.turnoverRate}}% exceeds target {{get-targets.targetRate}}%. Review retention strategies."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_bearer_token"
      resources:
        - name: turnover-reports
          path: "/reports/turnover?department={{department}}&period={{period}}"
          inputParameters:
            - name: department
              in: query
            - name: period
              in: query
          operations:
            - name: get-turnover-report
              method: GET
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheet-values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-range
              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: jira
      baseUri: "https://adp-corp.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

Runs year-end calculations in ADP, generates W-2 forms, validates in Snowflake, files with SSA, and notifies payroll leadership.

naftiko: "0.5"
info:
  label: "Year-End Processing Orchestrator"
  description: "Runs year-end calculations in ADP, generates W-2 forms, validates in Snowflake, files with SSA, and notifies payroll leadership."
  tags:
    - payroll
    - adp
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: year_end_processing_orchestrator
          description: "Orchestrate year-end processing orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-adp
              type: call
              call: "adp.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: adp-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adp.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adp.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST