ADP Capabilities
Naftiko 0.5 capability definitions for ADP - 100 capabilities showing integration workflows and service orchestrations.
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