Hyundai Capabilities
Naftiko 0.5 capability definitions for Hyundai - 100 capabilities showing integration workflows and service orchestrations.
When assembly line downtime exceeds a threshold, retrieves Splunk error logs, creates a ServiceNow priority incident, and escalates to the plant manager and engineering lead via Microsoft Teams.
naftiko: "0.5"
info:
label: "Assembly Line Downtime Escalation"
description: "When assembly line downtime exceeds a threshold, retrieves Splunk error logs, creates a ServiceNow priority incident, and escalates to the plant manager and engineering lead via Microsoft Teams."
tags:
- manufacturing
- quality
- splunk
- servicenow
- microsoft-teams
- production
capability:
exposes:
- type: mcp
namespace: mfg-escalation
port: 8080
tools:
- name: escalate-line-downtime
description: "Given a plant code, assembly line ID, and downtime duration, pull error logs from Splunk, create a priority ServiceNow incident, and escalate via Microsoft Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: line_id
in: body
type: string
description: "The assembly line identifier."
- name: downtime_minutes
in: body
type: number
description: "The duration of downtime in minutes."
steps:
- name: get-error-logs
type: call
call: "splunk.search-line-errors"
with:
plant_code: "{{plant_code}}"
line_id: "{{line_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Assembly line downtime: {{plant_code}} Line {{line_id}} — {{downtime_minutes}} min"
priority: "1"
category: "manufacturing_downtime"
assigned_group: "Plant_Engineering"
description: "Line {{line_id}} at {{plant_code}} has been down for {{downtime_minutes}} minutes. Error count: {{get-error-logs.total_count}}. Latest error: {{get-error-logs.latest_error}}."
- name: escalate-teams
type: call
call: "msteams.post-channel"
with:
channel_id: "plant-ops-critical"
text: "CRITICAL: Line {{line_id}} at {{plant_code}} down {{downtime_minutes}} min. INC: {{create-incident.number}}. {{get-error-logs.total_count}} errors detected. Immediate attention required."
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.hyundai.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs/export?search=search+index%3Dassembly+plant%3D{{plant_code}}+line%3D{{line_id}}+severity%3DERROR+earliest%3D-4h&output_mode=json"
inputParameters:
- name: plant_code
in: query
- name: line_id
in: query
operations:
- name: search-line-errors
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-plant-ops/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves the latest version of an AutoCAD design file from SharePoint, logs the version in Confluence as an engineering change record, and notifies the design review team in Microsoft Teams.
naftiko: "0.5"
info:
label: "AutoCAD Design File Version Tracker"
description: "Retrieves the latest version of an AutoCAD design file from SharePoint, logs the version in Confluence as an engineering change record, and notifies the design review team in Microsoft Teams."
tags:
- engineering
- design
- autocad
- sharepoint
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: design-versioning
port: 8080
tools:
- name: track-design-version
description: "Given a design file path and change description, retrieve the file metadata from SharePoint, log the change in Confluence, and notify the review team."
inputParameters:
- name: file_path
in: body
type: string
description: "The SharePoint path to the AutoCAD design file."
- name: change_description
in: body
type: string
description: "A description of the design change."
- name: engineer_email
in: body
type: string
description: "The email of the engineer who made the change."
steps:
- name: get-file-metadata
type: call
call: "sharepoint.get-file-info"
with:
site_id: "engineering_designs"
file_path: "{{file_path}}"
- name: log-change
type: call
call: "confluence.create-page"
with:
space_key: "ENG"
title: "Design change: {{file_path}} — v{{get-file-metadata.version}}"
body: "File: {{file_path}}. Version: {{get-file-metadata.version}}. Modified by: {{engineer_email}}. Change: {{change_description}}. Size: {{get-file-metadata.size_bytes}} bytes."
- name: notify-reviewers
type: call
call: "msteams.post-channel"
with:
channel_id: "design-review"
text: "Design updated: {{file_path}} (v{{get-file-metadata.version}}) by {{engineer_email}}. Change: {{change_description}}. Confluence: {{log-change.url}}"
consumes:
- 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:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file-info
method: GET
- type: http
namespace: confluence
baseUri: "https://hyundai-motor.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-engineering/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves real-time vehicle telemetry data from AWS IoT Core by VIN, returning location, speed, battery level, and engine status.
naftiko: "0.5"
info:
label: "AWS IoT Vehicle Telemetry Lookup"
description: "Retrieves real-time vehicle telemetry data from AWS IoT Core by VIN, returning location, speed, battery level, and engine status."
tags:
- connected-car
- telemetry
- amazon-web-services
capability:
exposes:
- type: mcp
namespace: vehicle-telemetry
port: 8080
tools:
- name: get-telemetry
description: "Get real-time vehicle telemetry by VIN."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle identification number."
call: "aws-iot.get-thing-shadow"
with:
thing_name: "vehicle_{{vin}}"
outputParameters:
- name: location
type: object
mapping: "$.state.reported.location"
- name: speed
type: number
mapping: "$.state.reported.speed"
- name: battery_level
type: number
mapping: "$.state.reported.batteryLevel"
consumes:
- type: http
namespace: aws-iot
baseUri: "https://iot.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_iot_token"
resources:
- name: shadows
path: "/things/{{thing_name}}/shadow"
inputParameters:
- name: thing_name
in: path
operations:
- name: get-thing-shadow
method: GET
Retrieves the latest build status for an Azure DevOps pipeline used by Hyundai connected car software teams. Returns build result, duration, and triggered branch.
naftiko: "0.5"
info:
label: "Azure DevOps Build Pipeline Status"
description: "Retrieves the latest build status for an Azure DevOps pipeline used by Hyundai connected car software teams. Returns build result, duration, and triggered branch."
tags:
- engineering
- ci-cd
- azure-devops
- connected-car
capability:
exposes:
- type: mcp
namespace: devops-builds
port: 8080
tools:
- name: get-latest-build
description: "Get the latest build result for an Azure DevOps pipeline by definition ID. Returns build status, result, duration, and source branch."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "The Azure DevOps build definition ID."
call: "azdevops.get-builds"
with:
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: result
type: string
mapping: "$.value[0].result"
- name: source_branch
type: string
mapping: "$.value[0].sourceBranch"
consumes:
- type: http
namespace: azdevops
baseUri: "https://dev.azure.com/hyundai-motor/ConnectedCar/_apis/build"
authentication:
type: basic
username: "$secrets.azdevops_user"
password: "$secrets.azdevops_pat"
resources:
- name: builds
path: "/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
inputParameters:
- name: pipeline_id
in: query
operations:
- name: get-builds
method: GET
Handles remote vehicle commands through the Hyundai Bluelink connected car platform, supporting remote start, lock/unlock, climate control, and horn/light activation.
naftiko: "0.5"
info:
label: "Bluelink Remote Vehicle Command Handler"
description: "Handles remote vehicle commands through the Hyundai Bluelink connected car platform, supporting remote start, lock/unlock, climate control, and horn/light activation."
tags:
- connected-car
- bluelink
- remote-commands
capability:
exposes:
- type: mcp
namespace: bluelink-commands
port: 8080
tools:
- name: send-remote-command
description: "Send a remote command to a Hyundai vehicle via Bluelink."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: command_type
in: body
type: string
description: "Command type such as remote-start, lock, unlock, or climate-control."
- name: owner_id
in: body
type: string
description: "The Bluelink account owner identifier."
call: "bluelink-api.send-command"
with:
vin: "{{vehicle_vin}}"
command: "{{command_type}}"
owner: "{{owner_id}}"
outputParameters:
- name: command_status
type: string
mapping: "$.command.status"
- name: execution_time
type: string
mapping: "$.command.executedAt"
- name: vehicle_response
type: string
mapping: "$.command.vehicleResponse"
consumes:
- type: http
namespace: bluelink-api
baseUri: "https://api.hyundai.com/bluelink/v1"
authentication:
type: bearer
token: "$secrets.hyundai_bluelink_api_token"
resources:
- name: commands
path: "/vehicles/{{vin}}/commands"
inputParameters:
- name: vin
in: path
operations:
- name: send-command
method: POST
Manages the Hyundai Certified Pre-Owned 173-point inspection checklist, tracking completion status, pass/fail results, and required reconditioning work for CPO certification.
naftiko: "0.5"
info:
label: "Certified Pre-Owned Inspection Checklist"
description: "Manages the Hyundai Certified Pre-Owned 173-point inspection checklist, tracking completion status, pass/fail results, and required reconditioning work for CPO certification."
tags:
- certified-pre-owned
- inspection
- quality-assurance
capability:
exposes:
- type: mcp
namespace: cpo-inspection
port: 8080
tools:
- name: get-inspection-status
description: "Retrieve CPO inspection checklist status for a vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: dealer_id
in: body
type: string
description: "The certifying dealer identifier."
call: "cpo-api.get-inspection"
with:
vin: "{{vehicle_vin}}"
dealer: "{{dealer_id}}"
outputParameters:
- name: points_completed
type: integer
mapping: "$.inspection.pointsCompleted"
- name: points_failed
type: integer
mapping: "$.inspection.pointsFailed"
- name: certification_eligible
type: boolean
mapping: "$.inspection.certificationEligible"
consumes:
- type: http
namespace: cpo-api
baseUri: "https://api.hyundai.com/cpo/v1"
authentication:
type: bearer
token: "$secrets.hyundai_cpo_api_token"
resources:
- name: inspections
path: "/vehicles/{{vin}}/inspections"
inputParameters:
- name: vin
in: path
operations:
- name: get-inspection
method: GET
Searches Hyundai engineering knowledge base in Confluence by keyword query. Returns matching pages with titles, space keys, and excerpt snippets.
naftiko: "0.5"
info:
label: "Confluence Engineering Knowledge Search"
description: "Searches Hyundai engineering knowledge base in Confluence by keyword query. Returns matching pages with titles, space keys, and excerpt snippets."
tags:
- engineering
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: engineering-kb
port: 8080
tools:
- name: search-engineering-docs
description: "Search the Confluence engineering knowledge base by keyword query. Returns page titles, space keys, and content excerpts."
inputParameters:
- name: query
in: body
type: string
description: "The search query string."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://hyundai-motor.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/content/search?cql=text~'{{query}}'+and+space=ENG"
inputParameters:
- name: query
in: query
operations:
- name: search
method: GET
Orchestrates an over-the-air software update for connected vehicles by validating the update package in Azure DevOps, scheduling deployment via Bluelink, and logging the rollout in ServiceNow.
naftiko: "0.5"
info:
label: "Connected Car OTA Update Deployment"
description: "Orchestrates an over-the-air software update for connected vehicles by validating the update package in Azure DevOps, scheduling deployment via Bluelink, and logging the rollout in ServiceNow."
tags:
- connected-car
- ota-updates
- azure-devops
- bluelink
- servicenow
capability:
exposes:
- type: mcp
namespace: ota-deployment
port: 8080
tools:
- name: deploy-ota-update
description: "Given a software version, target vehicle model, and model year, validate the build in Azure DevOps, schedule deployment via Bluelink, and log in ServiceNow."
inputParameters:
- name: software_version
in: body
type: string
description: "The software version to deploy (e.g. 2.4.1-rc3)."
- name: target_model
in: body
type: string
description: "The target vehicle model (e.g. Ioniq 5)."
- name: model_year
in: body
type: number
description: "The target model year."
steps:
- name: validate-build
type: call
call: "azdevops.get-build-artifact"
with:
version: "{{software_version}}"
- name: schedule-deployment
type: call
call: "bluelink.schedule-ota"
with:
model: "{{target_model}}"
model_year: "{{model_year}}"
package_url: "{{validate-build.artifact_url}}"
version: "{{software_version}}"
- name: log-rollout
type: call
call: "servicenow.create-change"
with:
short_description: "OTA deployment: {{target_model}} MY{{model_year}} — v{{software_version}}"
description: "Scheduled OTA update for {{target_model}} MY{{model_year}}. Version: {{software_version}}. Deployment ID: {{schedule-deployment.deployment_id}}. Target vehicles: {{schedule-deployment.target_count}}."
category: "ota_deployment"
assigned_group: "Connected_Car_Ops"
consumes:
- type: http
namespace: azdevops
baseUri: "https://dev.azure.com/hyundai-motor/ConnectedCar/_apis/build"
authentication:
type: basic
username: "$secrets.azdevops_user"
password: "$secrets.azdevops_pat"
resources:
- name: artifacts
path: "/builds?buildNumber={{version}}&api-version=7.0"
inputParameters:
- name: version
in: query
operations:
- name: get-build-artifact
method: GET
- type: http
namespace: bluelink
baseUri: "https://api.bluelink.hyundai.com/v2"
authentication:
type: bearer
token: "$secrets.bluelink_api_token"
resources:
- name: ota-deployments
path: "/ota/deployments"
operations:
- name: schedule-ota
method: POST
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
Runs remote diagnostics on a connected vehicle by pulling DTC codes from AWS IoT, matching against the repair knowledge base, and creating a dealer service appointment.
naftiko: "0.5"
info:
label: "Connected Car Remote Diagnostics Pipeline"
description: "Runs remote diagnostics on a connected vehicle by pulling DTC codes from AWS IoT, matching against the repair knowledge base, and creating a dealer service appointment."
tags:
- connected-car
- diagnostics
- amazon-web-services
- salesforce
capability:
exposes:
- type: mcp
namespace: remote-diagnostics
port: 8080
tools:
- name: run-remote-diagnostics
description: "Run remote diagnostics and schedule service if needed."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle VIN."
steps:
- name: get-dtc-codes
type: call
call: "aws-iot.get-thing-shadow"
with:
thing_name: "vehicle_{{vin}}"
- name: lookup-repair
type: call
call: "knowledge-base.search-dtc"
with:
dtc_codes: "{{get-dtc-codes.state.reported.activeDTCs}}"
- name: create-service-appointment
type: call
call: "salesforce.create-case"
with:
vin: "{{vin}}"
type: "remote_diagnostics"
description: "DTCs: {{get-dtc-codes.state.reported.activeDTCs}}. Recommended: {{lookup-repair.recommended_action}}."
consumes:
- type: http
namespace: aws-iot
baseUri: "https://iot.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_iot_token"
resources:
- name: shadows
path: "/things/{{thing_name}}/shadow"
inputParameters:
- name: thing_name
in: path
operations:
- name: get-thing-shadow
method: GET
- type: http
namespace: knowledge-base
baseUri: "https://kb.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.kb_token"
resources:
- name: dtc
path: "/dtc/search"
operations:
- name: search-dtc
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Activates connected car subscriptions by provisioning in the telematics platform, creating a billing record in SAP, and sending activation confirmation via push notification.
naftiko: "0.5"
info:
label: "Connected Car Subscription Activation Pipeline"
description: "Activates connected car subscriptions by provisioning in the telematics platform, creating a billing record in SAP, and sending activation confirmation via push notification."
tags:
- connected-car
- subscription
- sap
capability:
exposes:
- type: mcp
namespace: subscription-activation
port: 8080
tools:
- name: activate-subscription
description: "Activate a connected car subscription."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle VIN."
- name: plan
in: body
type: string
description: "Subscription plan (basic, premium, ultimate)."
steps:
- name: provision-telematics
type: call
call: "telematics.activate-plan"
with:
vin: "{{vin}}"
plan: "{{plan}}"
- name: create-billing
type: call
call: "sap.create-subscription-billing"
with:
vin: "{{vin}}"
plan: "{{plan}}"
activation_date: "{{provision-telematics.activation_date}}"
- name: send-confirmation
type: call
call: "push-service.send-notification"
with:
vin: "{{vin}}"
title: "Bluelink Subscription Activated"
body: "Your {{plan}} plan is now active. Enjoy connected car features."
consumes:
- type: http
namespace: telematics
baseUri: "https://telematics.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.telematics_token"
resources:
- name: plans
path: "/vehicles/{{vin}}/plans"
inputParameters:
- name: vin
in: path
operations:
- name: activate-plan
method: POST
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZSD_SUBSCRIPTION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: subscriptions
path: "/SubscriptionBillingSet"
operations:
- name: create-subscription-billing
method: POST
- type: http
namespace: push-service
baseUri: "https://push.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.push_service_token"
resources:
- name: notifications
path: "/notifications"
operations:
- name: send-notification
method: POST
Retrieves real-time telematics data for a connected Hyundai vehicle from the Bluelink IoT platform. Returns battery/fuel level, odometer, tire pressure, and GPS location.
naftiko: "0.5"
info:
label: "Connected Car Telematics Snapshot"
description: "Retrieves real-time telematics data for a connected Hyundai vehicle from the Bluelink IoT platform. Returns battery/fuel level, odometer, tire pressure, and GPS location."
tags:
- connected-car
- telematics
- iot
- bluelink
capability:
exposes:
- type: mcp
namespace: connected-vehicle
port: 8080
tools:
- name: get-vehicle-telematics
description: "Fetch real-time telematics snapshot for a connected vehicle by VIN. Returns battery or fuel level, odometer reading, tire pressures, and last known GPS coordinates."
inputParameters:
- name: vin
in: body
type: string
description: "The 17-character Vehicle Identification Number."
call: "bluelink.get-vehicle-status"
with:
vin: "{{vin}}"
outputParameters:
- name: battery_level
type: number
mapping: "$.vehicleStatus.batteryStatus.stateOfCharge"
- name: odometer_km
type: number
mapping: "$.vehicleStatus.odometer"
- name: tire_pressure
type: object
mapping: "$.vehicleStatus.tirePressure"
- name: gps_latitude
type: number
mapping: "$.vehicleStatus.location.latitude"
- name: gps_longitude
type: number
mapping: "$.vehicleStatus.location.longitude"
consumes:
- type: http
namespace: bluelink
baseUri: "https://api.bluelink.hyundai.com/v2"
authentication:
type: bearer
token: "$secrets.bluelink_api_token"
resources:
- name: vehicle-status
path: "/vehicles/{{vin}}/status"
inputParameters:
- name: vin
in: path
operations:
- name: get-vehicle-status
method: GET
When a connected vehicle reports a critical DTC via Bluelink, looks up the vehicle owner in Salesforce, creates a ServiceNow case, and notifies the nearest dealer service center via Microsoft Teams.
naftiko: "0.5"
info:
label: "Connected Vehicle Diagnostic Alert Handler"
description: "When a connected vehicle reports a critical DTC via Bluelink, looks up the vehicle owner in Salesforce, creates a ServiceNow case, and notifies the nearest dealer service center via Microsoft Teams."
tags:
- connected-car
- diagnostics
- bluelink
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vehicle-diagnostics
port: 8080
tools:
- name: handle-diagnostic-alert
description: "Given a VIN and DTC code, look up the vehicle owner, create a service case, and notify the dealer."
inputParameters:
- name: vin
in: body
type: string
description: "The 17-character VIN."
- name: dtc_code
in: body
type: string
description: "The diagnostic trouble code (e.g. P0300)."
- name: severity
in: body
type: string
description: "The severity level (CRITICAL, WARNING, INFO)."
steps:
- name: get-vehicle-data
type: call
call: "bluelink.get-vehicle-info"
with:
vin: "{{vin}}"
- name: get-owner
type: call
call: "salesforce.get-owner"
with:
vin: "{{vin}}"
- name: create-service-case
type: call
call: "servicenow.create-case"
with:
short_description: "DTC {{dtc_code}} — VIN {{vin}} — {{severity}}"
description: "Vehicle {{get-vehicle-data.model}} {{get-vehicle-data.year}} (VIN: {{vin}}) reported DTC {{dtc_code}} at severity {{severity}}. Owner: {{get-owner.name}} ({{get-owner.email}}). Odometer: {{get-vehicle-data.odometer_km}} km."
category: "vehicle_diagnostic"
priority: "1"
- name: notify-dealer
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-owner.dealer_service_email}}"
text: "Diagnostic alert: {{get-vehicle-data.model}} {{get-vehicle-data.year}} VIN {{vin}} — DTC {{dtc_code}} ({{severity}}). Owner: {{get-owner.name}}. Case: {{create-service-case.number}}. Proactive outreach recommended."
consumes:
- type: http
namespace: bluelink
baseUri: "https://api.bluelink.hyundai.com/v2"
authentication:
type: bearer
token: "$secrets.bluelink_api_token"
resources:
- name: vehicles
path: "/vehicles/{{vin}}"
inputParameters:
- name: vin
in: path
operations:
- name: get-vehicle-info
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: owners
path: "/query?q=SELECT+Name,Email,Dealer_Service_Email__c+FROM+Vehicle_Owner__c+WHERE+VIN__c='{{vin}}'"
inputParameters:
- name: vin
in: query
operations:
- name: get-owner
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
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
When a vehicle service is completed, sends a satisfaction survey via Google Forms, logs the response in Salesforce, and escalates low scores to the dealer operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Satisfaction Survey Pipeline"
description: "When a vehicle service is completed, sends a satisfaction survey via Google Forms, logs the response in Salesforce, and escalates low scores to the dealer operations team in Microsoft Teams."
tags:
- customer-service
- dealer-management
- google-forms
- salesforce
- microsoft-teams
- feedback
capability:
exposes:
- type: mcp
namespace: customer-satisfaction
port: 8080
tools:
- name: process-service-survey
description: "Given a service case number and customer email, send a survey, log the response in Salesforce, and escalate low scores to the dealer team."
inputParameters:
- name: case_number
in: body
type: string
description: "The ServiceNow service case number."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: dealer_code
in: body
type: string
description: "The dealer code where service was performed."
- name: satisfaction_score
in: body
type: number
description: "The customer satisfaction score (1-10)."
steps:
- name: log-survey-result
type: call
call: "salesforce.create-survey-record"
with:
case_number: "{{case_number}}"
customer_email: "{{customer_email}}"
dealer_code: "{{dealer_code}}"
score: "{{satisfaction_score}}"
- name: escalate-low-score
type: call
call: "msteams.post-channel"
with:
channel_id: "dealer-ops-escalations"
text: "Low CSAT alert: Score {{satisfaction_score}}/10 for case {{case_number}} at dealer {{dealer_code}}. Customer: {{customer_email}}. Survey record: {{log-survey-result.id}}. Follow-up required."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: survey-records
path: "/sobjects/Service_Survey__c"
operations:
- name: create-survey-record
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/hyundai-dealer-ops/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Processes customer test drive bookings by creating a lead in Salesforce, checking vehicle availability at the dealer, and sending confirmation via SendGrid.
naftiko: "0.5"
info:
label: "Customer Test Drive Booking Orchestrator"
description: "Processes customer test drive bookings by creating a lead in Salesforce, checking vehicle availability at the dealer, and sending confirmation via SendGrid."
tags:
- sales
- customer-experience
- salesforce
- sendgrid
capability:
exposes:
- type: mcp
namespace: test-drive
port: 8080
tools:
- name: book-test-drive
description: "Book a customer test drive at a dealer."
inputParameters:
- name: customer_name
in: body
type: string
description: "Customer name."
- name: customer_email
in: body
type: string
description: "Customer email."
- name: model
in: body
type: string
description: "Vehicle model."
- name: dealer_id
in: body
type: string
description: "Dealer ID."
steps:
- name: create-lead
type: call
call: "salesforce.create-lead"
with:
name: "{{customer_name}}"
email: "{{customer_email}}"
model_interest: "{{model}}"
dealer: "{{dealer_id}}"
- name: check-vehicle
type: call
call: "dealer-portal.check-demo-availability"
with:
dealer: "{{dealer_id}}"
model: "{{model}}"
- name: send-confirmation
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
template_id: "test_drive_confirmation"
dynamic_data:
name: "{{customer_name}}"
model: "{{model}}"
dealer_name: "{{check-vehicle.dealer_name}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
- type: http
namespace: dealer-portal
baseUri: "https://dealer-portal.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.dealer_portal_token"
resources:
- name: demos
path: "/dealers/{{dealer}}/demo-vehicles?model={{model}}"
inputParameters:
- name: dealer
in: path
- name: model
in: query
operations:
- name: check-demo-availability
method: GET
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Queries Datadog for infrastructure health metrics of a specific manufacturing plant. Returns host count, average CPU utilization, memory usage, and active alerts.
naftiko: "0.5"
info:
label: "Datadog Plant Infrastructure Health"
description: "Queries Datadog for infrastructure health metrics of a specific manufacturing plant. Returns host count, average CPU utilization, memory usage, and active alerts."
tags:
- manufacturing
- monitoring
- datadog
- infrastructure
capability:
exposes:
- type: mcp
namespace: plant-monitoring
port: 8080
tools:
- name: get-plant-health
description: "Fetch infrastructure health metrics for a manufacturing plant by plant tag in Datadog. Returns host count, average CPU, memory usage, and alert count."
inputParameters:
- name: plant_tag
in: body
type: string
description: "The Datadog tag for the plant (e.g. plant:ulsan-1)."
call: "datadog.query-metrics"
with:
plant_tag: "{{plant_tag}}"
outputParameters:
- name: host_count
type: number
mapping: "$.series[0].pointlist[-1][1]"
- name: avg_cpu
type: number
mapping: "$.series[1].pointlist[-1][1]"
- name: avg_memory
type: number
mapping: "$.series[2].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query?query=avg:system.cpu.user{{{plant_tag}}}&from=-1h"
inputParameters:
- name: plant_tag
in: query
operations:
- name: query-metrics
method: GET
When a batch of vehicles completes production, allocates units to dealers in Salesforce based on demand, creates shipping orders in SAP, and notifies dealers of incoming allocations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Dealer Allocation and Logistics Coordinator"
description: "When a batch of vehicles completes production, allocates units to dealers in Salesforce based on demand, creates shipping orders in SAP, and notifies dealers of incoming allocations via Microsoft Teams."
tags:
- dealer-management
- logistics
- salesforce
- sap
- microsoft-teams
- production
capability:
exposes:
- type: mcp
namespace: dealer-allocation
port: 8080
tools:
- name: allocate-and-ship
description: "Given a production batch ID and model, allocate vehicles to dealers in Salesforce, create SAP shipping orders, and notify dealers via Teams."
inputParameters:
- name: batch_id
in: body
type: string
description: "The production batch identifier."
- name: model
in: body
type: string
description: "The vehicle model produced."
- name: unit_count
in: body
type: number
description: "The number of units in the batch."
steps:
- name: get-dealer-demand
type: call
call: "salesforce.get-demand"
with:
model: "{{model}}"
- name: create-allocations
type: call
call: "salesforce.create-allocation"
with:
batch_id: "{{batch_id}}"
model: "{{model}}"
unit_count: "{{unit_count}}"
demand_data: "{{get-dealer-demand.records}}"
- name: create-shipping-order
type: call
call: "sap.create-delivery"
with:
batch_id: "{{batch_id}}"
allocation_count: "{{create-allocations.dealer_count}}"
- name: notify-dealers
type: call
call: "msteams.post-channel"
with:
channel_id: "dealer-logistics"
text: "Vehicle allocation complete: {{unit_count}} units of {{model}} from batch {{batch_id}} allocated to {{create-allocations.dealer_count}} dealers. Shipping order: {{create-shipping-order.delivery_number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: demand
path: "/query?q=SELECT+Dealer_Code__c,Demand_Units__c+FROM+Dealer_Demand__c+WHERE+Model__c='{{model}}'"
inputParameters:
- name: model
in: query
operations:
- name: get-demand
method: GET
- name: allocations
path: "/sobjects/Vehicle_Allocation__c"
operations:
- name: create-allocation
method: POST
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/A_OutboundDelivery"
operations:
- name: create-delivery
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/hyundai-logistics/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Improves dealer customer satisfaction by pulling CSI scores from Snowflake, identifying low-performing areas, and creating improvement action plans in Jira.
naftiko: "0.5"
info:
label: "Dealer Customer Satisfaction Improvement Pipeline"
description: "Improves dealer customer satisfaction by pulling CSI scores from Snowflake, identifying low-performing areas, and creating improvement action plans in Jira."
tags:
- dealer
- customer-satisfaction
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: dealer-csi
port: 8080
tools:
- name: improve-dealer-csi
description: "Analyze and create CSI improvement plans for a dealer."
inputParameters:
- name: dealer_id
in: body
type: string
description: "The dealer ID."
steps:
- name: get-csi-scores
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT category, score, benchmark FROM dealer_csi_scores WHERE dealer_id = '{{dealer_id}}' ORDER BY score ASC LIMIT 5"
- name: get-dealer-info
type: call
call: "salesforce.get-account"
with:
id: "{{dealer_id}}"
- name: create-improvement-plan
type: call
call: "jira.create-issue"
with:
project: "DEALER"
issue_type: "Task"
summary: "CSI improvement: {{get-dealer-info.Name}} ({{dealer_id}})"
description: "Lowest scoring areas: {{get-csi-scores.data}}. Action plan required."
consumes:
- type: http
namespace: snowflake
baseUri: "https://hyundai.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai.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
Aggregates dealer digital marketing performance by pulling Google Ads metrics, website traffic from Google Analytics, and publishing a consolidated report to Power BI.
naftiko: "0.5"
info:
label: "Dealer Digital Marketing Performance Aggregator"
description: "Aggregates dealer digital marketing performance by pulling Google Ads metrics, website traffic from Google Analytics, and publishing a consolidated report to Power BI."
tags:
- marketing
- dealer
- google-analytics
- google-ads
- power-bi
capability:
exposes:
- type: mcp
namespace: dealer-marketing
port: 8080
tools:
- name: aggregate-dealer-marketing
description: "Aggregate dealer digital marketing performance."
inputParameters:
- name: dealer_id
in: body
type: string
description: "The dealer ID."
- name: month
in: body
type: string
description: "Month in YYYY-MM."
steps:
- name: get-ads-performance
type: call
call: "google-ads.get-dealer-report"
with:
dealer: "{{dealer_id}}"
month: "{{month}}"
- name: get-website-traffic
type: call
call: "google-analytics.get-dealer-traffic"
with:
dealer: "{{dealer_id}}"
month: "{{month}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "dealer-marketing-performance"
consumes:
- type: http
namespace: google-ads
baseUri: "https://googleads.googleapis.com/v15"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: reports
path: "/customers/hyundai/campaigns/dealer_{{dealer}}/metrics"
inputParameters:
- name: dealer
in: path
operations:
- name: get-dealer-report
method: GET
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/dealer_{{dealer}}:runReport"
inputParameters:
- name: dealer
in: path
operations:
- name: get-dealer-traffic
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
Calculates dealer incentive payouts by pulling sales data from SAP, verifying program eligibility in Salesforce, and posting payments in Oracle Cloud Financials.
naftiko: "0.5"
info:
label: "Dealer Incentive Program Calculator"
description: "Calculates dealer incentive payouts by pulling sales data from SAP, verifying program eligibility in Salesforce, and posting payments in Oracle Cloud Financials."
tags:
- sales
- dealer
- sap
- salesforce
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: dealer-incentives
port: 8080
tools:
- name: calculate-incentives
description: "Calculate and process dealer incentive payouts."
inputParameters:
- name: dealer_id
in: body
type: string
description: "The dealer ID."
- name: period
in: body
type: string
description: "Incentive period in YYYY-MM."
steps:
- name: get-sales-data
type: call
call: "sap.get-dealer-sales"
with:
dealer: "{{dealer_id}}"
period: "{{period}}"
- name: check-eligibility
type: call
call: "salesforce.get-incentive-program"
with:
dealer_id: "{{dealer_id}}"
units_sold: "{{get-sales-data.total_units}}"
- name: post-payment
type: call
call: "oracle-financials.create-payment"
with:
vendor: "{{dealer_id}}"
amount: "{{check-eligibility.payout_amount}}"
reference: "incentive_{{period}}_{{dealer_id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZSD_DEALER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales
path: "/DealerSalesSet(Dealer='{{dealer}}',Period='{{period}}')"
inputParameters:
- name: dealer
in: path
- name: period
in: path
operations:
- name: get-dealer-sales
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: incentives
path: "/sobjects/Incentive_Program__c"
operations:
- name: get-incentive-program
method: POST
- type: http
namespace: oracle-financials
baseUri: "https://hyundai-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: payments
path: "/payablesPayments"
operations:
- name: create-payment
method: POST
Queries current dealer inventory from Salesforce, identifies vehicles exceeding a days-on-lot threshold, and sends an aging alert to the regional sales manager in Microsoft Teams with recommended price actions.
naftiko: "0.5"
info:
label: "Dealer Inventory Aging Alert"
description: "Queries current dealer inventory from Salesforce, identifies vehicles exceeding a days-on-lot threshold, and sends an aging alert to the regional sales manager in Microsoft Teams with recommended price actions."
tags:
- dealer-management
- inventory
- salesforce
- microsoft-teams
- sales
capability:
exposes:
- type: mcp
namespace: dealer-inventory
port: 8080
tools:
- name: alert-aging-inventory
description: "Given a dealer code and days-on-lot threshold, query inventory in Salesforce and alert the regional manager in Teams about aging units."
inputParameters:
- name: dealer_code
in: body
type: string
description: "The Hyundai dealer code (6-character)."
- name: aging_threshold_days
in: body
type: number
description: "The days-on-lot threshold to flag vehicles."
steps:
- name: query-inventory
type: call
call: "salesforce.query-aging-inventory"
with:
dealer_code: "{{dealer_code}}"
threshold: "{{aging_threshold_days}}"
- name: notify-regional-manager
type: call
call: "msteams.post-channel"
with:
channel_id: "regional-sales"
text: "Inventory aging alert for dealer {{dealer_code}}: {{query-inventory.aging_count}} vehicles exceed {{aging_threshold_days}} days on lot. Oldest: {{query-inventory.oldest_model}} at {{query-inventory.max_days}} days. Action recommended."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: inventory
path: "/query?q=SELECT+VIN__c,Model__c,Trim__c,DaysOnLot__c+FROM+Vehicle_Inventory__c+WHERE+Dealer_Code__c='{{dealer_code}}'+AND+DaysOnLot__c>{{threshold}}+ORDER+BY+DaysOnLot__c+DESC"
inputParameters:
- name: dealer_code
in: query
- name: threshold
in: query
operations:
- name: query-aging-inventory
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-sales/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Fulfills dealer parts orders by validating stock in SAP, creating shipment in the logistics system, and sending tracking to the dealer via SendGrid.
naftiko: "0.5"
info:
label: "Dealer Parts Order Fulfillment Pipeline"
description: "Fulfills dealer parts orders by validating stock in SAP, creating shipment in the logistics system, and sending tracking to the dealer via SendGrid."
tags:
- parts
- dealer
- sap
- sendgrid
capability:
exposes:
- type: mcp
namespace: parts-fulfillment
port: 8080
tools:
- name: fulfill-parts-order
description: "Fulfill a dealer parts order."
inputParameters:
- name: order_id
in: body
type: string
description: "The parts order ID."
- name: dealer_email
in: body
type: string
description: "Dealer email."
steps:
- name: validate-stock
type: call
call: "sap.check-parts-availability"
with:
order: "{{order_id}}"
- name: create-shipment
type: call
call: "logistics.create-shipment"
with:
order_id: "{{order_id}}"
items: "{{validate-stock.available_items}}"
- name: send-tracking
type: call
call: "sendgrid.send-email"
with:
to: "{{dealer_email}}"
template_id: "parts_shipment_tracking"
dynamic_data:
order_id: "{{order_id}}"
tracking_number: "{{create-shipment.tracking_number}}"
eta: "{{create-shipment.estimated_delivery}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZMM_PARTS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: availability
path: "/OrderAvailabilitySet('{{order}}')"
inputParameters:
- name: order
in: path
operations:
- name: check-parts-availability
method: GET
- type: http
namespace: logistics
baseUri: "https://logistics.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.logistics_token"
resources:
- name: shipments
path: "/shipments"
operations:
- name: create-shipment
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Aggregates dealer sales data from Salesforce, service metrics from ServiceNow, customer satisfaction from Google Forms, and generates a quarterly performance review report posted to SharePoint and Microsoft Teams.
naftiko: "0.5"
info:
label: "Dealer Performance Review Generator"
description: "Aggregates dealer sales data from Salesforce, service metrics from ServiceNow, customer satisfaction from Google Forms, and generates a quarterly performance review report posted to SharePoint and Microsoft Teams."
tags:
- dealer-management
- sales
- salesforce
- servicenow
- sharepoint
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: dealer-performance
port: 8080
tools:
- name: generate-dealer-review
description: "Given a dealer code and quarter, aggregate performance data from multiple sources and publish a review report."
inputParameters:
- name: dealer_code
in: body
type: string
description: "The Hyundai dealer code."
- name: quarter
in: body
type: string
description: "The quarter to review (e.g. Q1-2026)."
steps:
- name: get-sales-data
type: call
call: "salesforce.get-dealer-sales"
with:
dealer_code: "{{dealer_code}}"
quarter: "{{quarter}}"
- name: get-service-metrics
type: call
call: "servicenow.get-dealer-service-metrics"
with:
dealer_code: "{{dealer_code}}"
quarter: "{{quarter}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "dealer_performance"
file_path: "Reviews/{{dealer_code}}/{{quarter}}_performance.json"
content: "Sales units: {{get-sales-data.units_sold}}. Revenue: {{get-sales-data.revenue}}. Avg service time: {{get-service-metrics.avg_service_hours}}h. CSAT: {{get-service-metrics.avg_csat}}."
- name: notify-regional-manager
type: call
call: "msteams.post-channel"
with:
channel_id: "dealer-performance"
text: "Dealer {{dealer_code}} {{quarter}} review ready. Sales: {{get-sales-data.units_sold}} units (${{get-sales-data.revenue}}). Service CSAT: {{get-service-metrics.avg_csat}}/10. Report: {{upload-report.url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: dealer-sales
path: "/query?q=SELECT+SUM(Units_Sold__c),SUM(Revenue__c)+FROM+Dealer_Sales__c+WHERE+Dealer_Code__c='{{dealer_code}}'+AND+Quarter__c='{{quarter}}'"
inputParameters:
- name: dealer_code
in: query
- name: quarter
in: query
operations:
- name: get-dealer-sales
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: service-metrics
path: "/table/u_dealer_service_metrics?sysparm_query=u_dealer_code={{dealer_code}}^u_quarter={{quarter}}"
inputParameters:
- name: dealer_code
in: query
- name: quarter
in: query
operations:
- name: get-dealer-service-metrics
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-dealer-ops/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When a new lead arrives in Salesforce, enriches the contact with LinkedIn profile data via HubSpot, assigns to the nearest dealer in Google Maps, and alerts the dealer sales manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Dealer Sales Lead Enrichment Pipeline"
description: "When a new lead arrives in Salesforce, enriches the contact with LinkedIn profile data via HubSpot, assigns to the nearest dealer in Google Maps, and alerts the dealer sales manager in Microsoft Teams."
tags:
- sales
- dealer-management
- salesforce
- hubspot
- google-maps
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dealer-leads
port: 8080
tools:
- name: enrich-and-assign-lead
description: "Given a Salesforce lead ID and customer zip code, enrich the lead with HubSpot data, find the nearest dealer via Google Maps, and notify the dealer manager in Teams."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead record ID."
- name: customer_zip
in: body
type: string
description: "The customer postal/zip code for dealer proximity matching."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: enrich-contact
type: call
call: "hubspot.enrich-contact"
with:
email: "{{get-lead.email}}"
- name: find-nearest-dealer
type: call
call: "gmaps.find-nearest"
with:
zip_code: "{{customer_zip}}"
type: "hyundai_dealer"
- name: notify-dealer-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{find-nearest-dealer.manager_email}}"
text: "New lead assigned: {{get-lead.first_name}} {{get-lead.last_name}} ({{get-lead.email}}). Interested in: {{get-lead.vehicle_interest}}. Enrichment: {{enrich-contact.company}}, {{enrich-contact.job_title}}. Dealer: {{find-nearest-dealer.dealer_name}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/contacts/v1"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/contact/email/{{email}}/profile"
inputParameters:
- name: email
in: path
operations:
- name: enrich-contact
method: GET
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: bearer
token: "$secrets.google_maps_key"
resources:
- name: places
path: "/place/nearbysearch/json?location={{zip_code}}&keyword={{type}}&rankby=distance"
inputParameters:
- name: zip_code
in: query
- name: type
in: query
operations:
- name: find-nearest
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
When a customer requests a service appointment via the Hyundai portal, looks up the dealer in Salesforce, checks technician availability in ServiceNow, and confirms the appointment via Microsoft Teams notification to both dealer and customer.
naftiko: "0.5"
info:
label: "Dealer Service Appointment Scheduler"
description: "When a customer requests a service appointment via the Hyundai portal, looks up the dealer in Salesforce, checks technician availability in ServiceNow, and confirms the appointment via Microsoft Teams notification to both dealer and customer."
tags:
- dealer-management
- customer-service
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dealer-service
port: 8080
tools:
- name: schedule-service-appointment
description: "Given a dealer code, VIN, customer email, and requested date, check availability and schedule a service appointment."
inputParameters:
- name: dealer_code
in: body
type: string
description: "The Hyundai dealer code."
- name: vin
in: body
type: string
description: "The vehicle VIN."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: requested_date
in: body
type: string
description: "The requested appointment date in YYYY-MM-DD format."
- name: service_type
in: body
type: string
description: "The type of service requested (e.g. oil change, battery check, recall)."
steps:
- name: get-dealer
type: call
call: "salesforce.get-dealer"
with:
dealer_code: "{{dealer_code}}"
- name: check-availability
type: call
call: "servicenow.check-schedule"
with:
dealer_code: "{{dealer_code}}"
date: "{{requested_date}}"
service_type: "{{service_type}}"
- name: create-appointment
type: call
call: "servicenow.create-appointment"
with:
dealer_code: "{{dealer_code}}"
vin: "{{vin}}"
customer_email: "{{customer_email}}"
date: "{{check-availability.next_available_slot}}"
service_type: "{{service_type}}"
- name: notify-dealer
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-dealer.service_manager_email}}"
text: "New service appointment: VIN {{vin}} for {{service_type}} on {{check-availability.next_available_slot}} at {{get-dealer.dealer_name}}. Appointment: {{create-appointment.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: dealers
path: "/query?q=SELECT+Name,Service_Manager_Email__c+FROM+Dealer__c+WHERE+Dealer_Code__c='{{dealer_code}}'"
inputParameters:
- name: dealer_code
in: query
operations:
- name: get-dealer
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: schedules
path: "/table/u_service_schedule?sysparm_query=u_dealer_code={{dealer_code}}^u_date={{date}}"
inputParameters:
- name: dealer_code
in: query
- name: date
in: query
operations:
- name: check-schedule
method: GET
- name: appointments
path: "/table/u_service_appointment"
operations:
- name: create-appointment
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
Processes dealer vehicle allocation requests, matching dealer inventory needs with available factory production slots and regional distribution priorities.
naftiko: "0.5"
info:
label: "Dealer Vehicle Allocation Request Processor"
description: "Processes dealer vehicle allocation requests, matching dealer inventory needs with available factory production slots and regional distribution priorities."
tags:
- dealer-management
- vehicle-allocation
- distribution
capability:
exposes:
- type: mcp
namespace: dealer-allocation
port: 8080
tools:
- name: process-allocation-request
description: "Process a dealer vehicle allocation request."
inputParameters:
- name: dealer_id
in: body
type: string
description: "The dealer identifier."
- name: model_code
in: body
type: string
description: "The vehicle model code."
- name: quantity_requested
in: body
type: integer
description: "Number of units requested."
- name: trim_level
in: body
type: string
description: "Trim level such as SE, SEL, or Limited."
call: "allocation-api.submit-request"
with:
dealer: "{{dealer_id}}"
model: "{{model_code}}"
quantity: "{{quantity_requested}}"
trim: "{{trim_level}}"
outputParameters:
- name: allocation_id
type: string
mapping: "$.allocation.id"
- name: units_allocated
type: integer
mapping: "$.allocation.unitsAllocated"
- name: estimated_delivery_date
type: string
mapping: "$.allocation.estimatedDeliveryDate"
consumes:
- type: http
namespace: allocation-api
baseUri: "https://api.hyundai.com/dealer-ops/v1"
authentication:
type: bearer
token: "$secrets.hyundai_dealer_ops_token"
resources:
- name: allocations
path: "/dealers/{{dealer}}/allocation-requests"
inputParameters:
- name: dealer
in: path
operations:
- name: submit-request
method: POST
Retrieves website traffic metrics from Google Analytics for a Hyundai dealer, syncs the data to HubSpot for marketing attribution, and posts a weekly summary to the marketing team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Dealer Website Traffic and Marketing Sync"
description: "Retrieves website traffic metrics from Google Analytics for a Hyundai dealer, syncs the data to HubSpot for marketing attribution, and posts a weekly summary to the marketing team in Microsoft Teams."
tags:
- dealer-management
- analytics
- google-analytics
- hubspot
- microsoft-teams
- marketing
capability:
exposes:
- type: mcp
namespace: dealer-analytics
port: 8080
tools:
- name: sync-dealer-traffic-metrics
description: "Fetch website traffic from Google Analytics, sync to HubSpot for attribution, and post a summary to the marketing Teams channel."
inputParameters:
- name: property_id
in: body
type: string
description: "The Google Analytics 4 property ID for the dealer website."
- name: dealer_code
in: body
type: string
description: "The Hyundai dealer code for marketing attribution."
steps:
- name: get-traffic
type: call
call: "ga4.run-report"
with:
property_id: "{{property_id}}"
- name: sync-to-hubspot
type: call
call: "hubspot.update-company-analytics"
with:
dealer_code: "{{dealer_code}}"
sessions: "{{get-traffic.sessions}}"
page_views: "{{get-traffic.page_views}}"
bounce_rate: "{{get-traffic.bounce_rate}}"
- name: post-summary
type: call
call: "msteams.post-channel"
with:
channel_id: "dealer-marketing"
text: "Dealer {{dealer_code}} website report: {{get-traffic.sessions}} sessions, {{get-traffic.page_views}} page views, {{get-traffic.bounce_rate}}% bounce rate. HubSpot synced."
consumes:
- type: http
namespace: ga4
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: companies
path: "/objects/companies/{{dealer_code}}"
inputParameters:
- name: dealer_code
in: path
operations:
- name: update-company-analytics
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-marketing/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Searches Elasticsearch for vehicle event logs by VIN and event type. Returns matching events with timestamps, event codes, and payloads for connected car diagnostics.
naftiko: "0.5"
info:
label: "Elasticsearch Vehicle Event Log Search"
description: "Searches Elasticsearch for vehicle event logs by VIN and event type. Returns matching events with timestamps, event codes, and payloads for connected car diagnostics."
tags:
- connected-car
- diagnostics
- elasticsearch
- logging
capability:
exposes:
- type: mcp
namespace: vehicle-event-logs
port: 8080
tools:
- name: search-vehicle-events
description: "Search Elasticsearch for vehicle event logs by VIN and event type. Returns events with timestamps, codes, and diagnostic payloads."
inputParameters:
- name: vin
in: body
type: string
description: "The 17-character VIN."
- name: event_type
in: body
type: string
description: "The event type to filter (e.g. dtc, ota, geofence, battery)."
call: "elasticsearch.search-events"
with:
vin: "{{vin}}"
event_type: "{{event_type}}"
outputParameters:
- name: total_hits
type: number
mapping: "$.hits.total.value"
- name: events
type: array
mapping: "$.hits.hits"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://es-cluster.hyundai.com"
authentication:
type: basic
username: "$secrets.es_user"
password: "$secrets.es_password"
resources:
- name: vehicle-events
path: "/vehicle-events-*/_search?q=vin:{{vin}}+AND+event_type:{{event_type}}&sort=timestamp:desc&size=100"
inputParameters:
- name: vin
in: query
- name: event_type
in: query
operations:
- name: search-events
method: GET
Coordinates engineering design reviews by pulling CAD files from SharePoint, scheduling the review meeting via Outlook, and creating action items in Jira.
naftiko: "0.5"
info:
label: "Engineering Design Review Coordinator"
description: "Coordinates engineering design reviews by pulling CAD files from SharePoint, scheduling the review meeting via Outlook, and creating action items in Jira."
tags:
- engineering
- design-review
- sharepoint
- microsoft-outlook
- jira
capability:
exposes:
- type: mcp
namespace: design-review
port: 8080
tools:
- name: coordinate-design-review
description: "Coordinate an engineering design review."
inputParameters:
- name: part_number
in: body
type: string
description: "The part number under review."
- name: reviewers
in: body
type: string
description: "Comma-separated reviewer emails."
steps:
- name: get-cad-files
type: call
call: "sharepoint.search-documents"
with:
query: "part:{{part_number}} filetype:step"
site: "engineering_cad"
- name: schedule-review
type: call
call: "outlook.create-event"
with:
subject: "Design Review: Part {{part_number}}"
attendees: "{{reviewers}}"
body: "CAD files: {{get-cad-files.value[0].webUrl}}"
- name: create-action-items
type: call
call: "jira.create-issue"
with:
project: "ENG"
issue_type: "Task"
summary: "Design review actions: Part {{part_number}}"
labels: "design-review"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search-documents
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/me/events"
operations:
- name: create-event
method: POST
- type: http
namespace: jira
baseUri: "https://hyundai.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
Queries the battery management system for a specific EV battery pack and returns state of health, cycle count, capacity degradation, and thermal history.
naftiko: "0.5"
info:
label: "EV Battery Health Report"
description: "Queries the battery management system for a specific EV battery pack and returns state of health, cycle count, capacity degradation, and thermal history."
tags:
- ev-battery
- quality
- battery-management
capability:
exposes:
- type: mcp
namespace: ev-battery
port: 8080
tools:
- name: get-battery-health
description: "Retrieve battery health report for an EV battery pack by serial number. Returns state of health percentage, charge cycle count, capacity degradation rate, and max temperature recorded."
inputParameters:
- name: battery_serial
in: body
type: string
description: "The battery pack serial number."
call: "battery-mgmt.get-health"
with:
battery_serial: "{{battery_serial}}"
outputParameters:
- name: state_of_health
type: number
mapping: "$.batteryHealth.sohPercent"
- name: cycle_count
type: number
mapping: "$.batteryHealth.cycleCount"
- name: degradation_rate
type: number
mapping: "$.batteryHealth.degradationRate"
- name: max_temp_celsius
type: number
mapping: "$.batteryHealth.maxTempCelsius"
consumes:
- type: http
namespace: battery-mgmt
baseUri: "https://bms-api.hyundai.com/v1"
authentication:
type: bearer
token: "$secrets.bms_api_token"
resources:
- name: battery-health
path: "/packs/{{battery_serial}}/health"
inputParameters:
- name: battery_serial
in: path
operations:
- name: get-health
method: GET
When a battery warranty claim is submitted, validates battery health data from the BMS API, checks warranty coverage in SAP, creates the claim in ServiceNow, and notifies the dealer and customer via Microsoft Teams.
naftiko: "0.5"
info:
label: "EV Battery Warranty Claim Processor"
description: "When a battery warranty claim is submitted, validates battery health data from the BMS API, checks warranty coverage in SAP, creates the claim in ServiceNow, and notifies the dealer and customer via Microsoft Teams."
tags:
- ev-battery
- warranty
- servicenow
- sap
- microsoft-teams
- dealer-management
capability:
exposes:
- type: mcp
namespace: warranty-claims
port: 8080
tools:
- name: process-battery-warranty-claim
description: "Given a VIN, battery serial, and dealer code, validate battery health, check SAP warranty, create a ServiceNow claim, and notify stakeholders."
inputParameters:
- name: vin
in: body
type: string
description: "The 17-character VIN of the vehicle."
- name: battery_serial
in: body
type: string
description: "The battery pack serial number."
- name: dealer_code
in: body
type: string
description: "The submitting dealer code."
- name: complaint_description
in: body
type: string
description: "The customer complaint description."
steps:
- name: get-battery-health
type: call
call: "battery-mgmt.get-health"
with:
battery_serial: "{{battery_serial}}"
- name: check-warranty
type: call
call: "sap.get-warranty"
with:
vin: "{{vin}}"
- name: create-claim
type: call
call: "servicenow.create-case"
with:
short_description: "Battery warranty claim — VIN {{vin}} — Dealer {{dealer_code}}"
description: "Complaint: {{complaint_description}}. Battery SOH: {{get-battery-health.soh_percent}}%. Cycles: {{get-battery-health.cycle_count}}. Warranty status: {{check-warranty.status}}. Expiry: {{check-warranty.expiry_date}}."
category: "warranty_battery"
priority: "2"
- name: notify-dealer
type: call
call: "msteams.post-channel"
with:
channel_id: "dealer-warranty-ops"
text: "Battery warranty claim filed for VIN {{vin}} at dealer {{dealer_code}}. Case: {{create-claim.number}}. Battery SOH: {{get-battery-health.soh_percent}}%. Warranty: {{check-warranty.status}}."
consumes:
- type: http
namespace: battery-mgmt
baseUri: "https://bms-api.hyundai.com/v1"
authentication:
type: bearer
token: "$secrets.bms_api_token"
resources:
- name: battery-health
path: "/packs/{{battery_serial}}/health"
inputParameters:
- name: battery_serial
in: path
operations:
- name: get-health
method: GET
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZCS_WARRANTY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: warranties
path: "/A_Warranty('{{vin}}')"
inputParameters:
- name: vin
in: path
operations:
- name: get-warranty
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
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/hyundai-warranty/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Tracks EV charging infrastructure expansion by pulling station deployment data from the charging network, comparing against targets in Jira, and updating Snowflake analytics.
naftiko: "0.5"
info:
label: "EV Charging Infrastructure Expansion Tracker"
description: "Tracks EV charging infrastructure expansion by pulling station deployment data from the charging network, comparing against targets in Jira, and updating Snowflake analytics."
tags:
- ev
- infrastructure
- jira
- snowflake
capability:
exposes:
- type: mcp
namespace: charging-expansion
port: 8080
tools:
- name: track-expansion
description: "Track EV charging infrastructure expansion progress."
inputParameters:
- name: region
in: body
type: string
description: "Deployment region."
steps:
- name: get-deployed-stations
type: call
call: "charging-network.get-stations"
with:
region: "{{region}}"
status: "active"
- name: get-deployment-targets
type: call
call: "jira.get-issues"
with:
jql: "project = EVINFRA AND region = '{{region}}' AND type = Milestone"
- name: update-analytics
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO ev_charging_expansion (region, stations_deployed, target, utilization_avg, updated_at) VALUES ('{{region}}', {{get-deployed-stations.count}}, {{get-deployment-targets.target}}, {{get-deployed-stations.avg_utilization}}, CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: charging-network
baseUri: "https://charging.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.charging_network_token"
resources:
- name: stations
path: "/stations?region={{region}}&status={{status}}"
inputParameters:
- name: region
in: query
- name: status
in: query
operations:
- name: get-stations
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: get-issues
method: GET
- type: http
namespace: snowflake
baseUri: "https://hyundai.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Aggregates charging station utilization data from the Bluelink platform, generates a report in Power BI, and shares it to the EV infrastructure team via SharePoint and Microsoft Teams.
naftiko: "0.5"
info:
label: "EV Charging Network Utilization Report"
description: "Aggregates charging station utilization data from the Bluelink platform, generates a report in Power BI, and shares it to the EV infrastructure team via SharePoint and Microsoft Teams."
tags:
- ev-battery
- charging-infrastructure
- bluelink
- power-bi
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: charging-analytics
port: 8080
tools:
- name: generate-utilization-report
description: "Given a region code and date range, aggregate charging data, refresh the Power BI report, upload to SharePoint, and notify the team."
inputParameters:
- name: region_code
in: body
type: string
description: "The geographic region code for charging stations."
- name: start_date
in: body
type: string
description: "The report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "The report end date in YYYY-MM-DD format."
steps:
- name: get-utilization-data
type: call
call: "bluelink.get-charging-stats"
with:
region: "{{region_code}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: refresh-report
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "ev-charging-utilization"
- name: notify-team
type: call
call: "msteams.post-channel"
with:
channel_id: "ev-infrastructure"
text: "Charging utilization report ready for {{region_code}} ({{start_date}} to {{end_date}}). Total sessions: {{get-utilization-data.total_sessions}}. Avg utilization: {{get-utilization-data.avg_utilization_pct}}%. Peak hour: {{get-utilization-data.peak_hour}}."
consumes:
- type: http
namespace: bluelink
baseUri: "https://api.bluelink.hyundai.com/v2"
authentication:
type: bearer
token: "$secrets.bluelink_api_token"
resources:
- name: charging-stats
path: "/charging/stats?region={{region}}&start={{start_date}}&end={{end_date}}"
inputParameters:
- name: region
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-charging-stats
method: GET
- 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/hyundai-ev/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When an EV charging station reports a fault, logs an incident in ServiceNow, dispatches a technician via SAP Field Service, and notifies the facility manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "EV Charging Station Fault Orchestrator"
description: "When an EV charging station reports a fault, logs an incident in ServiceNow, dispatches a technician via SAP Field Service, and notifies the facility manager in Microsoft Teams."
tags:
- ev-battery
- charging-infrastructure
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: charging-ops
port: 8080
tools:
- name: handle-charger-fault
description: "Given a charging station ID and fault code, create a ServiceNow incident, dispatch a field technician via SAP, and notify the facility manager in Teams."
inputParameters:
- name: station_id
in: body
type: string
description: "The charging station identifier."
- name: fault_code
in: body
type: string
description: "The diagnostic fault code reported by the station."
- name: location
in: body
type: string
description: "The physical location or site name of the charger."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Charger fault {{fault_code}} at {{location}} — Station {{station_id}}"
category: "ev_charging"
priority: "2"
assigned_group: "EV_Infrastructure"
- name: dispatch-technician
type: call
call: "sap-fsm.create-service-order"
with:
equipment_id: "{{station_id}}"
problem_description: "Fault code {{fault_code}} at {{location}}. ServiceNow INC: {{create-incident.number}}"
priority: "HIGH"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "ev-facilities-mgr@hyundai.com"
text: "Charger fault at {{location}} (Station {{station_id}}). Fault: {{fault_code}}. INC: {{create-incident.number}}. Field service order: {{dispatch-technician.order_id}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyundai.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: sap-fsm
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/PM_SERVICE_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: service-orders
path: "/A_ServiceOrder"
operations:
- name: create-service-order
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
Investigates EV range complaints by pulling vehicle telemetry from AWS IoT, checking battery diagnostics, and creating a ServiceNow quality case.
naftiko: "0.5"
info:
label: "EV Range Complaint Investigation Pipeline"
description: "Investigates EV range complaints by pulling vehicle telemetry from AWS IoT, checking battery diagnostics, and creating a ServiceNow quality case."
tags:
- ev
- quality
- amazon-web-services
- servicenow
capability:
exposes:
- type: mcp
namespace: ev-range-complaints
port: 8080
tools:
- name: investigate-range-complaint
description: "Investigate an EV range complaint."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle VIN."
- name: complaint_description
in: body
type: string
description: "Customer complaint description."
steps:
- name: get-telemetry
type: call
call: "aws-iot.get-thing-shadow"
with:
thing_name: "vehicle_{{vin}}"
- name: get-battery-diagnostics
type: call
call: "battery-mgmt.get-diagnostics"
with:
vin: "{{vin}}"
- name: create-quality-case
type: call
call: "servicenow.create-incident"
with:
short_description: "EV range complaint: {{vin}}"
category: "quality_ev_range"
description: "Complaint: {{complaint_description}}. Battery SOH: {{get-battery-diagnostics.state_of_health}}%. Avg range: {{get-telemetry.avg_range_km}}km."
consumes:
- type: http
namespace: aws-iot
baseUri: "https://iot.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_iot_token"
resources:
- name: shadows
path: "/things/{{thing_name}}/shadow"
inputParameters:
- name: thing_name
in: path
operations:
- name: get-thing-shadow
method: GET
- type: http
namespace: battery-mgmt
baseUri: "https://battery.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.battery_mgmt_token"
resources:
- name: diagnostics
path: "/vehicles/{{vin}}/diagnostics"
inputParameters:
- name: vin
in: path
operations:
- name: get-diagnostics
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
Reports fleet vehicle utilization metrics for Hyundai commercial fleet customers, tracking mileage, idle time, fuel consumption, and driver assignment efficiency.
naftiko: "0.5"
info:
label: "Fleet Management Utilization Reporter"
description: "Reports fleet vehicle utilization metrics for Hyundai commercial fleet customers, tracking mileage, idle time, fuel consumption, and driver assignment efficiency."
tags:
- fleet-management
- utilization
- commercial
capability:
exposes:
- type: mcp
namespace: fleet-utilization
port: 8080
tools:
- name: get-fleet-utilization-report
description: "Generate a fleet utilization report for a commercial customer."
inputParameters:
- name: fleet_account_id
in: body
type: string
description: "The fleet management account identifier."
- name: reporting_period
in: body
type: string
description: "Reporting period in YYYY-MM format."
call: "fleet-api.get-utilization"
with:
account: "{{fleet_account_id}}"
period: "{{reporting_period}}"
outputParameters:
- name: total_vehicles
type: integer
mapping: "$.report.totalVehicles"
- name: average_utilization_rate
type: number
mapping: "$.report.averageUtilizationRate"
- name: total_miles_driven
type: number
mapping: "$.report.totalMilesDriven"
consumes:
- type: http
namespace: fleet-api
baseUri: "https://api.hyundai.com/fleet/v1"
authentication:
type: bearer
token: "$secrets.hyundai_fleet_api_token"
resources:
- name: utilization
path: "/accounts/{{account}}/utilization-reports"
inputParameters:
- name: account
in: path
operations:
- name: get-utilization
method: GET
When a fleet vehicle crosses a geofence boundary via Bluelink, logs the violation in Salesforce fleet management, creates a ServiceNow security incident, and alerts the fleet operations manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Fleet Telematics Geofence Violation Handler"
description: "When a fleet vehicle crosses a geofence boundary via Bluelink, logs the violation in Salesforce fleet management, creates a ServiceNow security incident, and alerts the fleet operations manager in Microsoft Teams."
tags:
- connected-car
- fleet-management
- bluelink
- salesforce
- servicenow
- microsoft-teams
- security
capability:
exposes:
- type: mcp
namespace: fleet-geofence
port: 8080
tools:
- name: handle-geofence-violation
description: "Given a VIN, geofence ID, and violation type, log the event in Salesforce, create a ServiceNow security incident, and notify fleet ops in Teams."
inputParameters:
- name: vin
in: body
type: string
description: "The 17-character VIN of the fleet vehicle."
- name: geofence_id
in: body
type: string
description: "The geofence boundary identifier."
- name: violation_type
in: body
type: string
description: "The violation type (entry or exit)."
- name: latitude
in: body
type: number
description: "The latitude at time of violation."
- name: longitude
in: body
type: number
description: "The longitude at time of violation."
steps:
- name: get-vehicle-info
type: call
call: "bluelink.get-vehicle-info"
with:
vin: "{{vin}}"
- name: log-violation
type: call
call: "salesforce.create-fleet-event"
with:
vin: "{{vin}}"
event_type: "geofence_{{violation_type}}"
geofence_id: "{{geofence_id}}"
latitude: "{{latitude}}"
longitude: "{{longitude}}"
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Geofence {{violation_type}}: VIN {{vin}} — Zone {{geofence_id}}"
description: "Fleet vehicle {{get-vehicle-info.model}} (VIN: {{vin}}) triggered geofence {{violation_type}} at zone {{geofence_id}}. Location: {{latitude}}, {{longitude}}."
category: "fleet_security"
priority: "2"
assigned_group: "Fleet_Operations"
- name: notify-fleet-ops
type: call
call: "msteams.post-channel"
with:
channel_id: "fleet-ops-alerts"
text: "Geofence alert: {{get-vehicle-info.model}} (VIN {{vin}}) {{violation_type}} at zone {{geofence_id}}. Location: {{latitude}}, {{longitude}}. INC: {{create-security-incident.number}}."
consumes:
- type: http
namespace: bluelink
baseUri: "https://api.bluelink.hyundai.com/v2"
authentication:
type: bearer
token: "$secrets.bluelink_api_token"
resources:
- name: vehicles
path: "/vehicles/{{vin}}"
inputParameters:
- name: vin
in: path
operations:
- name: get-vehicle-info
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: fleet-events
path: "/sobjects/Fleet_Event__c"
operations:
- name: create-fleet-event
method: POST
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-fleet/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Handles Genesis luxury brand concierge service requests including valet maintenance pickup, complimentary car washes, and courtesy vehicle scheduling.
naftiko: "0.5"
info:
label: "Genesis Concierge Service Request Handler"
description: "Handles Genesis luxury brand concierge service requests including valet maintenance pickup, complimentary car washes, and courtesy vehicle scheduling."
tags:
- genesis
- concierge
- luxury-services
capability:
exposes:
- type: mcp
namespace: genesis-concierge
port: 8080
tools:
- name: create-concierge-request
description: "Create a Genesis concierge service request."
inputParameters:
- name: owner_id
in: body
type: string
description: "The Genesis owner account identifier."
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: service_type
in: body
type: string
description: "Service type such as valet-maintenance, car-wash, or courtesy-vehicle."
call: "genesis-api.create-service-request"
with:
owner: "{{owner_id}}"
vin: "{{vehicle_vin}}"
service: "{{service_type}}"
outputParameters:
- name: request_id
type: string
mapping: "$.request.id"
- name: scheduled_date
type: string
mapping: "$.request.scheduledDate"
- name: assigned_concierge
type: string
mapping: "$.request.assignedConcierge"
consumes:
- type: http
namespace: genesis-api
baseUri: "https://api.hyundai.com/genesis/v1"
authentication:
type: bearer
token: "$secrets.hyundai_genesis_api_token"
resources:
- name: concierge-requests
path: "/owners/{{owner}}/concierge-requests"
inputParameters:
- name: owner
in: path
operations:
- name: create-service-request
method: POST
Retrieves open pull requests from a GitHub repository for connected car software and posts a summary to the Microsoft Teams engineering channel for review coordination.
naftiko: "0.5"
info:
label: "GitHub Connected Car Code Review Notifier"
description: "Retrieves open pull requests from a GitHub repository for connected car software and posts a summary to the Microsoft Teams engineering channel for review coordination."
tags:
- engineering
- code-review
- github
- microsoft-teams
- connected-car
capability:
exposes:
- type: mcp
namespace: code-review
port: 8080
tools:
- name: notify-pending-reviews
description: "Given a GitHub repository name, fetch open PRs awaiting review and post a summary to the engineering Teams channel."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name (e.g. hyundai-motor/bluelink-firmware)."
steps:
- name: get-open-prs
type: call
call: "github.list-prs"
with:
repo_name: "{{repo_name}}"
- name: post-summary
type: call
call: "msteams.post-channel"
with:
channel_id: "connected-car-eng"
text: "Open PRs awaiting review in {{repo_name}}: {{get-open-prs.total_count}} PRs. Oldest: {{get-open-prs.oldest_title}} ({{get-open-prs.oldest_age_days}} days). Please review."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com/repos"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/{{repo_name}}/pulls?state=open&sort=created&direction=asc"
inputParameters:
- name: repo_name
in: path
operations:
- name: list-prs
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-engineering/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves plant monitoring metrics from Grafana dashboards including line throughput, defect rates, and equipment utilization.
naftiko: "0.5"
info:
label: "Grafana Plant Monitoring Dashboard"
description: "Retrieves plant monitoring metrics from Grafana dashboards including line throughput, defect rates, and equipment utilization."
tags:
- manufacturing
- monitoring
- grafana
capability:
exposes:
- type: mcp
namespace: plant-monitoring
port: 8080
tools:
- name: get-plant-metrics
description: "Get plant monitoring metrics from Grafana."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: dashboard_uid
in: body
type: string
description: "The Grafana dashboard UID."
call: "grafana.get-dashboard"
with:
uid: "{{dashboard_uid}}"
outputParameters:
- name: panels
type: array
mapping: "$.dashboard.panels"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.hyundai.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dashboard
method: GET
Locates hydrogen fuel cell refueling stations for Hyundai NEXO owners, providing real-time availability, pricing, and estimated wait times at nearby stations.
naftiko: "0.5"
info:
label: "Hydrogen Fuel Cell Station Locator"
description: "Locates hydrogen fuel cell refueling stations for Hyundai NEXO owners, providing real-time availability, pricing, and estimated wait times at nearby stations."
tags:
- hydrogen
- nexo
- fuel-cell
capability:
exposes:
- type: mcp
namespace: hydrogen-stations
port: 8080
tools:
- name: find-hydrogen-stations
description: "Find nearby hydrogen refueling stations with availability."
inputParameters:
- name: latitude
in: body
type: number
description: "Current latitude coordinate."
- name: longitude
in: body
type: number
description: "Current longitude coordinate."
- name: radius_miles
in: body
type: number
description: "Search radius in miles."
call: "fuel-api.find-stations"
with:
lat: "{{latitude}}"
lng: "{{longitude}}"
radius: "{{radius_miles}}"
outputParameters:
- name: stations
type: array
mapping: "$.results.stations"
- name: nearest_station_distance
type: number
mapping: "$.results.nearestDistanceMiles"
- name: nearest_station_available
type: boolean
mapping: "$.results.nearestStationAvailable"
consumes:
- type: http
namespace: fuel-api
baseUri: "https://api.hyundai.com/fuel-infrastructure/v1"
authentication:
type: bearer
token: "$secrets.hyundai_fuel_api_token"
resources:
- name: stations
path: "/hydrogen-stations"
operations:
- name: find-stations
method: GET
Manages EV charging sessions for Hyundai IONIQ electric vehicles, handling charger reservation, session monitoring, payment processing, and charging history retrieval.
naftiko: "0.5"
info:
label: "IONIQ Charging Session Manager"
description: "Manages EV charging sessions for Hyundai IONIQ electric vehicles, handling charger reservation, session monitoring, payment processing, and charging history retrieval."
tags:
- ev-charging
- ioniq
- charging-management
capability:
exposes:
- type: mcp
namespace: ioniq-charging
port: 8080
tools:
- name: manage-charging-session
description: "Start, monitor, or stop a charging session for an IONIQ vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The IONIQ vehicle identification number."
- name: charger_station_id
in: body
type: string
description: "The charging station identifier."
- name: action
in: body
type: string
description: "Action such as start, stop, or status."
call: "ev-charging-api.manage-session"
with:
vin: "{{vehicle_vin}}"
station: "{{charger_station_id}}"
action: "{{action}}"
outputParameters:
- name: session_id
type: string
mapping: "$.session.id"
- name: charge_level_percent
type: number
mapping: "$.session.chargeLevelPercent"
- name: estimated_completion
type: string
mapping: "$.session.estimatedCompletion"
consumes:
- type: http
namespace: ev-charging-api
baseUri: "https://api.hyundai.com/ev-charging/v1"
authentication:
type: bearer
token: "$secrets.hyundai_ev_charging_token"
resources:
- name: sessions
path: "/vehicles/{{vin}}/charging-sessions"
inputParameters:
- name: vin
in: path
operations:
- name: manage-session
method: POST
Retrieves the current sprint status for a Jira board used by vehicle engineering teams. Returns sprint name, story points completed, remaining, and burndown velocity.
naftiko: "0.5"
info:
label: "Jira Engineering Sprint Status"
description: "Retrieves the current sprint status for a Jira board used by vehicle engineering teams. Returns sprint name, story points completed, remaining, and burndown velocity."
tags:
- engineering
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: engineering-sprints
port: 8080
tools:
- name: get-sprint-status
description: "Fetch the active sprint status for a Jira board by board ID. Returns sprint name, total story points, completed points, remaining points, and velocity."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID for the engineering team."
call: "jira.get-active-sprint"
with:
board_id: "{{board_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: total_points
type: number
mapping: "$.values[0].totalPoints"
- name: completed_points
type: number
mapping: "$.values[0].completedPoints"
- name: velocity
type: number
mapping: "$.values[0].velocity"
consumes:
- type: http
namespace: jira
baseUri: "https://hyundai-motor.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint?state=active"
inputParameters:
- name: board_id
in: path
operations:
- name: get-active-sprint
method: GET
Retrieves the current sprint status and velocity for a vehicle platform development project in Jira.
naftiko: "0.5"
info:
label: "Jira Vehicle Platform Project Status"
description: "Retrieves the current sprint status and velocity for a vehicle platform development project in Jira."
tags:
- engineering
- project
- jira
capability:
exposes:
- type: mcp
namespace: platform-projects
port: 8080
tools:
- name: get-project-status
description: "Get vehicle platform project sprint status."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
call: "jira.get-active-sprint"
with:
board: "{{board_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: goal
type: string
mapping: "$.values[0].goal"
consumes:
- type: http
namespace: jira
baseUri: "https://hyundai.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board}}/sprint?state=active"
inputParameters:
- name: board
in: path
operations:
- name: get-active-sprint
method: GET
Queries Kubernetes cluster health for connected car microservices, checks pod status and resource utilization, and creates a ServiceNow incident if degraded services are detected.
naftiko: "0.5"
info:
label: "Kubernetes Connected Car Microservice Health Check"
description: "Queries Kubernetes cluster health for connected car microservices, checks pod status and resource utilization, and creates a ServiceNow incident if degraded services are detected."
tags:
- connected-car
- infrastructure
- kubernetes
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: k8s-health
port: 8080
tools:
- name: check-microservice-health
description: "Given a Kubernetes namespace, check pod status and resource usage, and escalate degraded services to ServiceNow and Teams."
inputParameters:
- name: namespace
in: body
type: string
description: "The Kubernetes namespace (e.g. bluelink-prod)."
- name: cluster_name
in: body
type: string
description: "The Kubernetes cluster name."
steps:
- name: get-pod-status
type: call
call: "k8s.list-pods"
with:
namespace: "{{namespace}}"
cluster: "{{cluster_name}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "K8s degraded pods in {{namespace}} on {{cluster_name}}"
description: "Cluster: {{cluster_name}}. Namespace: {{namespace}}. Total pods: {{get-pod-status.total_pods}}. Unhealthy: {{get-pod-status.unhealthy_count}}. Restarting: {{get-pod-status.restarting_count}}."
category: "infrastructure"
priority: "2"
assigned_group: "Connected_Car_SRE"
- name: notify-sre
type: call
call: "msteams.post-channel"
with:
channel_id: "connected-car-sre"
text: "K8s health alert: {{get-pod-status.unhealthy_count}} unhealthy pods in {{namespace}} on {{cluster_name}}. INC: {{create-incident.number}}."
consumes:
- type: http
namespace: k8s
baseUri: "https://k8s-api.hyundai.com"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: pods
path: "/api/v1/namespaces/{{namespace}}/pods"
inputParameters:
- name: namespace
in: path
operations:
- name: list-pods
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-sre/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Queries Grafana for manufacturing KPI metrics, compares against target thresholds, and if OEE or first-pass yield drops below target, creates a Jira improvement task and alerts the plant manager in Microsoft Teams.
naftiko: "0.5"
info:
label: "Manufacturing KPI Threshold Alerter"
description: "Queries Grafana for manufacturing KPI metrics, compares against target thresholds, and if OEE or first-pass yield drops below target, creates a Jira improvement task and alerts the plant manager in Microsoft Teams."
tags:
- manufacturing
- monitoring
- grafana
- kpi
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: mfg-kpi
port: 8080
tools:
- name: alert-kpi-threshold
description: "Fetch manufacturing KPIs from Grafana and escalate if OEE or yield falls below target thresholds."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: time_range
in: body
type: string
description: "The time range for the query (e.g. 24h, 7d, 30d)."
- name: oee_target
in: body
type: number
description: "The target OEE percentage."
steps:
- name: get-kpis
type: call
call: "grafana.query-kpis"
with:
plant_code: "{{plant_code}}"
time_range: "{{time_range}}"
- name: create-improvement-task
type: call
call: "jira.create-issue"
with:
project_key: "MFG"
summary: "KPI alert: {{plant_code}} OEE {{get-kpis.oee}}% — Target {{oee_target}}%"
description: "Plant {{plant_code}} KPIs over {{time_range}}: OEE {{get-kpis.oee}}% (target {{oee_target}}%). Throughput: {{get-kpis.throughput}}. Scrap rate: {{get-kpis.scrap_rate}}%. First-pass yield: {{get-kpis.first_pass_yield}}%."
issue_type: "Task"
priority: "High"
- name: notify-plant-manager
type: call
call: "msteams.post-channel"
with:
channel_id: "plant-ops-kpi"
text: "KPI alert: Plant {{plant_code}} OEE at {{get-kpis.oee}}% (target {{oee_target}}%). Scrap: {{get-kpis.scrap_rate}}%. FPY: {{get-kpis.first_pass_yield}}%. Jira: {{create-improvement-task.key}}"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.hyundai.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboard-query
path: "/ds/query"
operations:
- name: query-kpis
method: POST
- type: http
namespace: jira
baseUri: "https://hyundai-motor.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/hyundai-manufacturing/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Schedules robot predictive maintenance by pulling vibration sensor data from the SCADA system, creating a work order in SAP PM, and alerting maintenance via Slack.
naftiko: "0.5"
info:
label: "Manufacturing Robot Predictive Maintenance"
description: "Schedules robot predictive maintenance by pulling vibration sensor data from the SCADA system, creating a work order in SAP PM, and alerting maintenance via Slack."
tags:
- manufacturing
- predictive-maintenance
- sap
- slack
capability:
exposes:
- type: mcp
namespace: robot-maintenance
port: 8080
tools:
- name: schedule-robot-maintenance
description: "Schedule predictive maintenance for a manufacturing robot."
inputParameters:
- name: robot_id
in: body
type: string
description: "The robot asset ID."
- name: plant_code
in: body
type: string
description: "The plant code."
steps:
- name: get-sensor-data
type: call
call: "scada.get-robot-health"
with:
robot: "{{robot_id}}"
- name: create-work-order
type: call
call: "sap-pm.create-order"
with:
equipment: "{{robot_id}}"
plant: "{{plant_code}}"
type: "predictive"
description: "Vibration: {{get-sensor-data.vibration_rms}}mm/s. Temp: {{get-sensor-data.motor_temp}}C."
- name: alert-maintenance
type: call
call: "slack.post-message"
with:
channel: "plant-{{plant_code}}-maintenance"
text: "Predictive maintenance: Robot {{robot_id}}. Vibration trending high ({{get-sensor-data.vibration_rms}}mm/s). WO: {{create-work-order.order_number}}."
consumes:
- type: http
namespace: scada
baseUri: "https://scada.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.scada_token"
resources:
- name: robots
path: "/robots/{{robot}}/health"
inputParameters:
- name: robot
in: path
operations:
- name: get-robot-health
method: GET
- type: http
namespace: sap-pm
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZPM_WORKORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/WorkOrderSet"
operations:
- name: create-order
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves completed simulation results from a MATLAB server, uploads the report to SharePoint, and posts a summary to the vehicle dynamics engineering channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "MATLAB Simulation Results Publisher"
description: "Retrieves completed simulation results from a MATLAB server, uploads the report to SharePoint, and posts a summary to the vehicle dynamics engineering channel in Microsoft Teams."
tags:
- engineering
- simulation
- matlab
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: simulation-results
port: 8080
tools:
- name: publish-simulation-results
description: "Given a simulation job ID, retrieve results from MATLAB, upload to SharePoint, and notify the engineering team in Teams."
inputParameters:
- name: job_id
in: body
type: string
description: "The MATLAB simulation job identifier."
- name: simulation_type
in: body
type: string
description: "The type of simulation (e.g. crash, aero, thermal, NVH)."
steps:
- name: get-results
type: call
call: "matlab.get-job-results"
with:
job_id: "{{job_id}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "engineering_simulations"
file_path: "Results/{{simulation_type}}/{{job_id}}_report.json"
content: "{{get-results.report_data}}"
- name: notify-team
type: call
call: "msteams.post-channel"
with:
channel_id: "vehicle-dynamics"
text: "Simulation complete: {{simulation_type}} job {{job_id}}. Status: {{get-results.status}}. Key metric: {{get-results.primary_metric_value}} {{get-results.primary_metric_unit}}. Report: {{upload-report.url}}"
consumes:
- type: http
namespace: matlab
baseUri: "https://matlab-server.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.matlab_token"
resources:
- name: jobs
path: "/jobs/{{job_id}}/results"
inputParameters:
- name: job_id
in: path
operations:
- name: get-job-results
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-engineering/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Calculates Hyundai Motor Finance lease payment options including money factor, residual values, and monthly payments based on vehicle MSRP, term, and mileage allowance.
naftiko: "0.5"
info:
label: "Motor Finance Lease Calculator"
description: "Calculates Hyundai Motor Finance lease payment options including money factor, residual values, and monthly payments based on vehicle MSRP, term, and mileage allowance."
tags:
- motor-finance
- leasing
- payment-calculator
capability:
exposes:
- type: mcp
namespace: lease-calculator
port: 8080
tools:
- name: calculate-lease-payment
description: "Calculate lease payment options for a Hyundai vehicle."
inputParameters:
- name: vehicle_msrp
in: body
type: number
description: "The vehicle MSRP in USD."
- name: lease_term_months
in: body
type: integer
description: "Lease term in months such as 24, 36, or 48."
- name: annual_mileage
in: body
type: integer
description: "Annual mileage allowance."
- name: down_payment
in: body
type: number
description: "Down payment amount in USD."
call: "finance-api.calculate-lease"
with:
msrp: "{{vehicle_msrp}}"
term: "{{lease_term_months}}"
mileage: "{{annual_mileage}}"
down: "{{down_payment}}"
outputParameters:
- name: monthly_payment
type: number
mapping: "$.lease.monthlyPayment"
- name: residual_value
type: number
mapping: "$.lease.residualValue"
- name: total_cost
type: number
mapping: "$.lease.totalCost"
consumes:
- type: http
namespace: finance-api
baseUri: "https://api.hyundai.com/motor-finance/v1"
authentication:
type: bearer
token: "$secrets.hyundai_motor_finance_token"
resources:
- name: lease-calculations
path: "/lease-calculations"
operations:
- name: calculate-lease
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for documents, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for documents, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate onboarding across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID 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: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
description: "Onboarding for {{get-employee.full_name}} 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.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Hyundai Motor, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/hyundai"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
Validates new model launch readiness by checking production line setup in SAP, verifying dealer training in the LMS, and alerting marketing via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Model Launch Readiness Orchestrator"
description: "Validates new model launch readiness by checking production line setup in SAP, verifying dealer training in the LMS, and alerting marketing via Microsoft Teams."
tags:
- product-launch
- manufacturing
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: model-launch
port: 8080
tools:
- name: check-launch-readiness
description: "Check new vehicle model launch readiness."
inputParameters:
- name: model_code
in: body
type: string
description: "The vehicle model code."
- name: launch_date
in: body
type: string
description: "Planned launch date."
steps:
- name: check-production
type: call
call: "sap.get-production-readiness"
with:
model: "{{model_code}}"
- name: check-dealer-training
type: call
call: "lms.get-completion-report"
with:
course: "new_model_{{model_code}}"
- name: notify-marketing
type: call
call: "msteams.send-message"
with:
channel_id: "product-launches"
text: "Launch readiness for {{model_code}} ({{launch_date}}): Production={{check-production.status}}, Dealer training={{check-dealer-training.completion_pct}}% complete."
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZPP_LAUNCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: readiness
path: "/LaunchReadinessSet('{{model}}')"
inputParameters:
- name: model
in: path
operations:
- name: get-production-readiness
method: GET
- type: http
namespace: lms
baseUri: "https://lms.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.lms_token"
resources:
- name: reports
path: "/courses/{{course}}/completion"
inputParameters:
- name: course
in: path
operations:
- name: get-completion-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves material master data from Oracle Cloud ERP by material number. Returns description, unit of measure, material group, and plant-specific data.
naftiko: "0.5"
info:
label: "Oracle Cloud ERP Material Master Lookup"
description: "Retrieves material master data from Oracle Cloud ERP by material number. Returns description, unit of measure, material group, and plant-specific data."
tags:
- erp
- supply-chain
- oracle-cloud
- materials
capability:
exposes:
- type: mcp
namespace: material-master
port: 8080
tools:
- name: get-material
description: "Look up material master data in Oracle Cloud ERP by item number. Returns description, UOM, material group, and lead time."
inputParameters:
- name: item_number
in: body
type: string
description: "The Oracle item number."
call: "oracle.get-item"
with:
item_number: "{{item_number}}"
outputParameters:
- name: description
type: string
mapping: "$.Description"
- name: uom
type: string
mapping: "$.PrimaryUOMCode"
- name: material_group
type: string
mapping: "$.ItemCatalogGroupDescription"
- name: lead_time_days
type: number
mapping: "$.FullLeadTime"
consumes:
- type: http
namespace: oracle
baseUri: "https://hyundai-erp.oraclecloud.com/fscmRestApi/resources/v2"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: items
path: "/inventoryItems/{{item_number}}"
inputParameters:
- name: item_number
in: path
operations:
- name: get-item
method: GET
Retrieves vehicle manufacturing cost breakdown from Oracle Cloud ERP by model and plant, returning material, labor, and overhead costs.
naftiko: "0.5"
info:
label: "Oracle Cloud Vehicle Cost Analysis"
description: "Retrieves vehicle manufacturing cost breakdown from Oracle Cloud ERP by model and plant, returning material, labor, and overhead costs."
tags:
- finance
- manufacturing
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: vehicle-costs
port: 8080
tools:
- name: get-vehicle-cost
description: "Get manufacturing cost breakdown for a vehicle model."
inputParameters:
- name: model_code
in: body
type: string
description: "The vehicle model code."
- name: plant_code
in: body
type: string
description: "The plant code."
call: "oracle-erp.get-cost"
with:
model: "{{model_code}}"
plant: "{{plant_code}}"
outputParameters:
- name: material_cost
type: number
mapping: "$.cost.material"
- name: labor_cost
type: number
mapping: "$.cost.labor"
- name: overhead_cost
type: number
mapping: "$.cost.overhead"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://hyundai-erp.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: costs
path: "/productCosts?q=Model={{model}};Plant={{plant}}"
inputParameters:
- name: model
in: query
- name: plant
in: query
operations:
- name: get-cost
method: GET
Retrieves complete service history for Hyundai vehicles, aggregating dealer service records, recall completion status, and maintenance schedule compliance.
naftiko: "0.5"
info:
label: "Owner Service History Retriever"
description: "Retrieves complete service history for Hyundai vehicles, aggregating dealer service records, recall completion status, and maintenance schedule compliance."
tags:
- service-history
- maintenance
- owner-portal
capability:
exposes:
- type: mcp
namespace: service-history
port: 8080
tools:
- name: get-service-history
description: "Retrieve the full service history for a vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: owner_id
in: body
type: string
description: "The vehicle owner account identifier."
call: "service-api.get-history"
with:
vin: "{{vehicle_vin}}"
owner: "{{owner_id}}"
outputParameters:
- name: service_records
type: array
mapping: "$.history.serviceRecords"
- name: open_recalls
type: array
mapping: "$.history.openRecalls"
- name: next_service_due
type: string
mapping: "$.history.nextServiceDue"
consumes:
- type: http
namespace: service-api
baseUri: "https://api.hyundai.com/service/v1"
authentication:
type: bearer
token: "$secrets.hyundai_service_api_token"
resources:
- name: history
path: "/vehicles/{{vin}}/service-history"
inputParameters:
- name: vin
in: path
operations:
- name: get-history
method: GET
Retrieves the status and assigned responder for a PagerDuty incident affecting the connected car platform services.
naftiko: "0.5"
info:
label: "PagerDuty Connected Car Platform Incident"
description: "Retrieves the status and assigned responder for a PagerDuty incident affecting the connected car platform services."
tags:
- connected-car
- incident-management
- pagerduty
capability:
exposes:
- type: mcp
namespace: connected-car-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a connected car platform PagerDuty incident."
inputParameters:
- name: incident_id
in: body
type: string
description: "The PagerDuty incident ID."
call: "pagerduty.get-incident"
with:
id: "{{incident_id}}"
outputParameters:
- name: status
type: string
mapping: "$.incident.status"
- name: service
type: string
mapping: "$.incident.service.summary"
- name: responder
type: string
mapping: "$.incident.assignments[0].assignee.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-incident
method: GET
When the computer vision system detects a paint defect, retrieves the defect image from Azure Blob Storage, logs the defect in ServiceNow, updates the vehicle record in SAP, and alerts the paint shop supervisor in Microsoft Teams.
naftiko: "0.5"
info:
label: "Paint Shop Quality Vision Inspection Reporter"
description: "When the computer vision system detects a paint defect, retrieves the defect image from Azure Blob Storage, logs the defect in ServiceNow, updates the vehicle record in SAP, and alerts the paint shop supervisor in Microsoft Teams."
tags:
- manufacturing
- quality
- computer-vision
- microsoft-azure
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: paint-quality
port: 8080
tools:
- name: report-paint-defect
description: "Given a VIN, defect type, and image reference, retrieve the defect image, log in ServiceNow, update SAP, and notify the supervisor."
inputParameters:
- name: vin
in: body
type: string
description: "The VIN of the vehicle with the paint defect."
- name: defect_type
in: body
type: string
description: "The type of paint defect (e.g. orange peel, sag, crater, inclusion)."
- name: image_blob_id
in: body
type: string
description: "The Azure Blob Storage reference for the defect image."
- name: line_id
in: body
type: string
description: "The paint line identifier."
steps:
- name: get-defect-image
type: call
call: "azure-blob.get-image"
with:
container: "paint-defects"
blob_id: "{{image_blob_id}}"
- name: log-defect
type: call
call: "servicenow.create-incident"
with:
short_description: "Paint defect: {{defect_type}} — VIN {{vin}} — Line {{line_id}}"
description: "Paint defect detected by vision system. Type: {{defect_type}}. VIN: {{vin}}. Line: {{line_id}}. Image: {{get-defect-image.url}}."
category: "paint_quality"
priority: "3"
assigned_group: "Paint_Shop_Quality"
- name: update-vehicle-record
type: call
call: "sap.update-vehicle-status"
with:
vin: "{{vin}}"
quality_hold: "true"
hold_reason: "Paint defect: {{defect_type}}"
- name: notify-supervisor
type: call
call: "msteams.post-channel"
with:
channel_id: "paint-shop-quality"
text: "Paint defect detected: {{defect_type}} on VIN {{vin}}, Line {{line_id}}. Vehicle placed on quality hold. INC: {{log-defect.number}}. Image: {{get-defect-image.url}}"
consumes:
- type: http
namespace: azure-blob
baseUri: "https://hyundaimfg.blob.core.windows.net"
authentication:
type: bearer
token: "$secrets.azure_storage_token"
resources:
- name: blobs
path: "/{{container}}/{{blob_id}}"
inputParameters:
- name: container
in: path
- name: blob_id
in: path
operations:
- name: get-image
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vehicle-status
path: "/A_VehicleQualityStatus('{{vin}}')"
inputParameters:
- name: vin
in: path
operations:
- name: update-vehicle-status
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-paint-shop/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Tracks online orders for genuine Hyundai parts and accessories, providing real-time shipment status, dealer pickup availability, and installation appointment scheduling.
naftiko: "0.5"
info:
label: "Parts Accessories Online Order Tracker"
description: "Tracks online orders for genuine Hyundai parts and accessories, providing real-time shipment status, dealer pickup availability, and installation appointment scheduling."
tags:
- parts-accessories
- e-commerce
- order-tracking
capability:
exposes:
- type: mcp
namespace: parts-orders
port: 8080
tools:
- name: track-parts-order
description: "Track the status of a parts and accessories online order."
inputParameters:
- name: order_id
in: body
type: string
description: "The parts order identifier."
- name: customer_id
in: body
type: string
description: "The customer account identifier."
call: "parts-api.track-order"
with:
order: "{{order_id}}"
customer: "{{customer_id}}"
outputParameters:
- name: order_status
type: string
mapping: "$.order.status"
- name: shipment_tracking
type: string
mapping: "$.order.shipmentTracking"
- name: estimated_delivery
type: string
mapping: "$.order.estimatedDelivery"
consumes:
- type: http
namespace: parts-api
baseUri: "https://api.hyundai.com/parts/v1"
authentication:
type: bearer
token: "$secrets.hyundai_parts_api_token"
resources:
- name: orders
path: "/orders/{{order}}"
inputParameters:
- name: order
in: path
operations:
- name: track-order
method: GET
When a dealer's parts inventory falls below a minimum threshold in Salesforce, creates a SAP purchase requisition and notifies the parts manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Parts Reorder Automation"
description: "When a dealer's parts inventory falls below a minimum threshold in Salesforce, creates a SAP purchase requisition and notifies the parts manager via Microsoft Teams."
tags:
- supply-chain
- dealer-management
- salesforce
- sap
- microsoft-teams
- inventory
capability:
exposes:
- type: mcp
namespace: parts-reorder
port: 8080
tools:
- name: reorder-parts
description: "Given a dealer code and part number, check current inventory in Salesforce, create a SAP purchase requisition, and notify the parts manager."
inputParameters:
- name: dealer_code
in: body
type: string
description: "The Hyundai dealer code."
- name: part_number
in: body
type: string
description: "The Hyundai part number."
- name: reorder_quantity
in: body
type: number
description: "The quantity to reorder."
steps:
- name: check-inventory
type: call
call: "salesforce.get-parts-inventory"
with:
dealer_code: "{{dealer_code}}"
part_number: "{{part_number}}"
- name: create-requisition
type: call
call: "sap.create-purchase-req"
with:
material_number: "{{part_number}}"
quantity: "{{reorder_quantity}}"
plant: "{{check-inventory.supply_plant}}"
delivery_date: "{{check-inventory.next_delivery_date}}"
- name: notify-parts-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{check-inventory.parts_manager_email}}"
text: "Parts reorder: Part {{part_number}} for dealer {{dealer_code}}. Current stock: {{check-inventory.current_qty}}. Reorder qty: {{reorder_quantity}}. SAP PR: {{create-requisition.requisition_number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: parts-inventory
path: "/query?q=SELECT+Current_Qty__c,Supply_Plant__c,Parts_Manager_Email__c+FROM+Parts_Inventory__c+WHERE+Dealer_Code__c='{{dealer_code}}'+AND+Part_Number__c='{{part_number}}'"
inputParameters:
- name: dealer_code
in: query
- name: part_number
in: query
operations:
- name: get-parts-inventory
method: GET
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-requisitions
path: "/A_PurchaseRequisition"
operations:
- name: create-purchase-req
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
Queries Datadog for energy consumption metrics of a manufacturing plant, compares against SAP cost center budgets, and creates a Jira sustainability task if usage exceeds threshold.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitor"
description: "Queries Datadog for energy consumption metrics of a manufacturing plant, compares against SAP cost center budgets, and creates a Jira sustainability task if usage exceeds threshold."
tags:
- manufacturing
- sustainability
- datadog
- sap
- jira
- energy
capability:
exposes:
- type: mcp
namespace: energy-monitoring
port: 8080
tools:
- name: monitor-plant-energy
description: "Given a plant tag, check energy consumption in Datadog against SAP budget, and create a Jira task if the threshold is exceeded."
inputParameters:
- name: plant_tag
in: body
type: string
description: "The Datadog tag for the plant."
- name: budget_cost_center
in: body
type: string
description: "The SAP cost center for energy budget lookup."
- name: threshold_pct
in: body
type: number
description: "The percentage threshold that triggers an alert."
steps:
- name: get-energy-metrics
type: call
call: "datadog.query-energy"
with:
plant_tag: "{{plant_tag}}"
- name: get-budget
type: call
call: "sap.get-cost-center"
with:
cost_center: "{{budget_cost_center}}"
- name: create-sustainability-task
type: call
call: "jira.create-issue"
with:
project_key: "SUSTAIN"
summary: "Energy usage alert: {{plant_tag}} at {{get-energy-metrics.usage_pct}}% of monthly allocation"
description: "Plant {{plant_tag}} energy consumption: {{get-energy-metrics.kwh_consumed}} kWh. Budget: {{get-budget.energy_budget_kwh}} kWh. Usage: {{get-energy-metrics.usage_pct}}%. Threshold: {{threshold_pct}}%."
issue_type: "Task"
priority: "Medium"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: energy-metrics
path: "/query?query=sum:energy.consumption.kwh{{{plant_tag}}}&from=-30d"
inputParameters:
- name: plant_tag
in: query
operations:
- name: query-energy
method: GET
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/CO_COST_CENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai-motor.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
Reports plant environmental emissions by pulling sensor data from the SCADA system, comparing against permits in SAP EHS, and uploading to the regulatory reporting portal.
naftiko: "0.5"
info:
label: "Plant Environmental Emissions Reporter"
description: "Reports plant environmental emissions by pulling sensor data from the SCADA system, comparing against permits in SAP EHS, and uploading to the regulatory reporting portal."
tags:
- sustainability
- compliance
- sap
capability:
exposes:
- type: mcp
namespace: emissions-reporting
port: 8080
tools:
- name: report-emissions
description: "Generate and submit plant emissions report."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: reporting_period
in: body
type: string
description: "Period in YYYY-Q format."
steps:
- name: get-emissions-data
type: call
call: "scada.get-emissions"
with:
plant: "{{plant_code}}"
period: "{{reporting_period}}"
- name: get-permit-limits
type: call
call: "sap-ehs.get-permits"
with:
plant: "{{plant_code}}"
- name: submit-report
type: call
call: "regulatory-portal.submit-emissions"
with:
plant: "{{plant_code}}"
period: "{{reporting_period}}"
co2_tons: "{{get-emissions-data.co2}}"
nox_kg: "{{get-emissions-data.nox}}"
permit_ref: "{{get-permit-limits.permit_number}}"
consumes:
- type: http
namespace: scada
baseUri: "https://scada.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.scada_token"
resources:
- name: emissions
path: "/plants/{{plant}}/emissions?period={{period}}"
inputParameters:
- name: plant
in: path
- name: period
in: query
operations:
- name: get-emissions
method: GET
- type: http
namespace: sap-ehs
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZEH_PERMIT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: permits
path: "/PermitSet?$filter=Plant eq '{{plant}}'"
inputParameters:
- name: plant
in: query
operations:
- name: get-permits
method: GET
- type: http
namespace: regulatory-portal
baseUri: "https://regulatory.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.regulatory_token"
resources:
- name: emissions
path: "/emissions-reports"
operations:
- name: submit-emissions
method: POST
Reports plant safety near-misses by creating a ServiceNow incident, notifying EHS via Microsoft Teams, and logging the event in Snowflake for trend analysis.
naftiko: "0.5"
info:
label: "Plant Safety Near-Miss Reporter"
description: "Reports plant safety near-misses by creating a ServiceNow incident, notifying EHS via Microsoft Teams, and logging the event in Snowflake for trend analysis."
tags:
- safety
- manufacturing
- servicenow
- microsoft-teams
- snowflake
capability:
exposes:
- type: mcp
namespace: safety-near-miss
port: 8080
tools:
- name: report-near-miss
description: "Report a safety near-miss event."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: location
in: body
type: string
description: "Location within plant."
- name: description
in: body
type: string
description: "Near-miss description."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Near-miss: {{plant_code}} - {{location}}"
category: "safety_near_miss"
description: "{{description}}"
- name: notify-ehs
type: call
call: "msteams.send-message"
with:
channel_id: "plant-{{plant_code}}-ehs"
text: "NEAR-MISS REPORT: {{location}} at plant {{plant_code}}. {{description}}. Incident: {{create-incident.number}}."
- name: log-for-analysis
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO safety_near_misses (plant_code, location, description, incident_number, reported_at) VALUES ('{{plant_code}}', '{{location}}', '{{description}}', '{{create-incident.number}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: snowflake
baseUri: "https://hyundai.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Generates end-of-shift production reports by pulling MES data, comparing against targets in SAP, and distributing via Microsoft Outlook to plant management.
naftiko: "0.5"
info:
label: "Plant Shift Production Report Generator"
description: "Generates end-of-shift production reports by pulling MES data, comparing against targets in SAP, and distributing via Microsoft Outlook to plant management."
tags:
- manufacturing
- reporting
- sap
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: shift-report
port: 8080
tools:
- name: generate-shift-report
description: "Generate a shift production report."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: shift
in: body
type: string
description: "Shift (day, evening, night)."
- name: date
in: body
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: get-production-data
type: call
call: "mes.get-shift-output"
with:
plant: "{{plant_code}}"
shift: "{{shift}}"
date: "{{date}}"
- name: get-targets
type: call
call: "sap.get-production-plan"
with:
plant: "{{plant_code}}"
date: "{{date}}"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "plant_mgmt_{{plant_code}}@hyundai.com"
subject: "Shift Report: Plant {{plant_code}} - {{shift}} shift {{date}}"
body: "Units produced: {{get-production-data.units_completed}}. Target: {{get-targets.planned_units}}. Efficiency: {{get-production-data.efficiency_pct}}%. Quality: {{get-production-data.first_pass_yield}}%."
consumes:
- type: http
namespace: mes
baseUri: "https://mes.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.mes_token"
resources:
- name: output
path: "/plants/{{plant}}/shifts/{{shift}}/output?date={{date}}"
inputParameters:
- name: plant
in: path
- name: shift
in: path
- name: date
in: query
operations:
- name: get-shift-output
method: GET
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZPP_PLAN_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: plans
path: "/ProductionPlanSet(Plant='{{plant}}',Date='{{date}}')"
inputParameters:
- name: plant
in: path
- name: date
in: path
operations:
- name: get-production-plan
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a refresh of the EV market analysis Power BI dataset to update market share, charging infrastructure, and sales trend dashboards.
naftiko: "0.5"
info:
label: "Power BI EV Market Dashboard Refresh"
description: "Triggers a refresh of the EV market analysis Power BI dataset to update market share, charging infrastructure, and sales trend dashboards."
tags:
- analytics
- ev
- power-bi
capability:
exposes:
- type: mcp
namespace: ev-dashboard
port: 8080
tools:
- name: refresh-ev-dashboard
description: "Trigger EV market dashboard refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.refresh-dataset"
with:
id: "{{dataset_id}}"
outputParameters:
- name: refresh_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{id}}/refreshes"
inputParameters:
- name: id
in: path
operations:
- name: refresh-dataset
method: POST
Triggers a dataset refresh on a Power BI sales dashboard, exports the report to SharePoint, and notifies the regional sales team in Microsoft Teams that fresh data is available.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh and Distribution"
description: "Triggers a dataset refresh on a Power BI sales dashboard, exports the report to SharePoint, and notifies the regional sales team in Microsoft Teams that fresh data is available."
tags:
- sales
- analytics
- power-bi
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sales-analytics
port: 8080
tools:
- name: refresh-and-distribute-dashboard
description: "Trigger a Power BI dataset refresh, export the report to SharePoint, and notify the sales team in Teams."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the sales dashboard."
- name: region
in: body
type: string
description: "The sales region name for notification targeting."
steps:
- name: refresh-dataset
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
- name: export-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "sales_reports"
file_path: "Dashboards/{{region}}/sales_report_latest.pdf"
content: "{{refresh-dataset.report_export}}"
- name: notify-sales-team
type: call
call: "msteams.post-channel"
with:
channel_id: "regional-sales"
text: "Sales dashboard refreshed for {{region}}. Dataset: {{dataset_id}}. Report available at: {{export-report.url}}"
consumes:
- 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: 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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-sales/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
At shift end, collects production metrics from SAP, quality incident data from ServiceNow, and publishes a shift handover report to SharePoint and Microsoft Teams.
naftiko: "0.5"
info:
label: "Production Shift Handover Report Generator"
description: "At shift end, collects production metrics from SAP, quality incident data from ServiceNow, and publishes a shift handover report to SharePoint and Microsoft Teams."
tags:
- manufacturing
- production
- sap
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shift-handover
port: 8080
tools:
- name: generate-shift-handover
description: "Given a plant code, line ID, and shift identifier, gather production and quality data and publish a handover report to SharePoint and Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: line_id
in: body
type: string
description: "The assembly line identifier."
- name: shift_id
in: body
type: string
description: "The shift identifier (e.g. A, B, C)."
steps:
- name: get-production-data
type: call
call: "sap.get-shift-output"
with:
plant_code: "{{plant_code}}"
line_id: "{{line_id}}"
shift_id: "{{shift_id}}"
- name: get-quality-incidents
type: call
call: "servicenow.get-shift-incidents"
with:
plant_code: "{{plant_code}}"
shift_id: "{{shift_id}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "plant_ops_site"
file_path: "ShiftReports/{{plant_code}}/{{line_id}}_shift_{{shift_id}}_report.json"
content: "Units produced: {{get-production-data.units_produced}}. Target: {{get-production-data.target}}. Quality incidents: {{get-quality-incidents.count}}."
- name: notify-incoming-shift
type: call
call: "msteams.post-channel"
with:
channel_id: "shift-handover"
text: "Shift {{shift_id}} handover — {{plant_code}} Line {{line_id}}: {{get-production-data.units_produced}}/{{get-production-data.target}} units. {{get-quality-incidents.count}} quality incidents. Report: {{upload-report.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shift-output
path: "/A_ProductionOrderConfirmation?$filter=Plant eq '{{plant_code}}' and WorkCenter eq '{{line_id}}' and Shift eq '{{shift_id}}'"
inputParameters:
- name: plant_code
in: query
- name: line_id
in: query
- name: shift_id
in: query
operations:
- name: get-shift-output
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=u_plant_code={{plant_code}}^u_shift={{shift_id}}^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()"
inputParameters:
- name: plant_code
in: query
- name: shift_id
in: query
operations:
- name: get-shift-incidents
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-plant-ops/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Queries Prometheus for EV battery thermal monitoring metrics across a fleet segment. Returns max temperature, average state of charge, and anomaly count for proactive fleet battery management.
naftiko: "0.5"
info:
label: "Prometheus EV Battery Monitoring Alert"
description: "Queries Prometheus for EV battery thermal monitoring metrics across a fleet segment. Returns max temperature, average state of charge, and anomaly count for proactive fleet battery management."
tags:
- ev-battery
- monitoring
- prometheus
- fleet-management
capability:
exposes:
- type: mcp
namespace: battery-monitoring
port: 8080
tools:
- name: get-fleet-battery-metrics
description: "Query Prometheus for fleet-wide EV battery metrics by model and region. Returns max temperature, average SOC, and thermal anomaly count."
inputParameters:
- name: model
in: body
type: string
description: "The vehicle model (e.g. Ioniq5, Ioniq6)."
- name: region
in: body
type: string
description: "The geographic region code."
call: "prometheus.query-battery"
with:
model: "{{model}}"
region: "{{region}}"
outputParameters:
- name: max_temp_celsius
type: number
mapping: "$.data.result[0].value[1]"
- name: avg_soc_pct
type: number
mapping: "$.data.result[1].value[1]"
- name: anomaly_count
type: number
mapping: "$.data.result[2].value[1]"
consumes:
- type: http
namespace: prometheus
baseUri: "https://prometheus.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: query
path: "/query?query=battery_metrics{model='{{model}}',region='{{region}}'}"
inputParameters:
- name: model
in: query
- name: region
in: query
operations:
- name: query-battery
method: GET
When a quality defect exceeds a threshold PPM rate, retrieves defect analytics from Power BI, creates a Jira engineering task, attaches root cause data from Confluence, and notifies the engineering lead in Microsoft Teams.
naftiko: "0.5"
info:
label: "Quality Defect to Engineering Feedback Loop"
description: "When a quality defect exceeds a threshold PPM rate, retrieves defect analytics from Power BI, creates a Jira engineering task, attaches root cause data from Confluence, and notifies the engineering lead in Microsoft Teams."
tags:
- quality
- engineering
- power-bi
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-engineering
port: 8080
tools:
- name: escalate-defect-to-engineering
description: "Given a defect code, affected model, and current PPM rate, pull analytics from Power BI, create a Jira task, and notify the engineering lead in Teams."
inputParameters:
- name: defect_code
in: body
type: string
description: "The quality defect code."
- name: affected_model
in: body
type: string
description: "The vehicle model affected."
- name: current_ppm
in: body
type: number
description: "The current defect rate in parts per million."
steps:
- name: get-defect-analytics
type: call
call: "powerbi.get-defect-report"
with:
defect_code: "{{defect_code}}"
model: "{{affected_model}}"
- name: search-root-cause
type: call
call: "confluence.search-docs"
with:
query: "{{defect_code}} root cause {{affected_model}}"
- name: create-eng-task
type: call
call: "jira.create-issue"
with:
project_key: "VENG"
summary: "Quality escalation: {{defect_code}} on {{affected_model}} — {{current_ppm}} PPM"
description: "Defect {{defect_code}} on {{affected_model}} has reached {{current_ppm}} PPM. Trend: {{get-defect-analytics.trend}}. Related docs: {{search-root-cause.top_result_url}}."
issue_type: "Bug"
priority: "High"
- name: notify-eng-lead
type: call
call: "msteams.post-channel"
with:
channel_id: "vehicle-engineering"
text: "Quality escalation: Defect {{defect_code}} on {{affected_model}} at {{current_ppm}} PPM. Jira: {{create-eng-task.key}}. Trend: {{get-defect-analytics.trend}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: reports
path: "/datasets/quality-defects/query"
operations:
- name: get-defect-report
method: POST
- type: http
namespace: confluence
baseUri: "https://hyundai-motor.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/content/search?cql=text~'{{query}}'"
inputParameters:
- name: query
in: query
operations:
- name: search-docs
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai-motor.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/hyundai-engineering/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Prepares regulatory submission packages by gathering documents from SharePoint, creating a compliance task in ServiceNow, uploading to the regulatory portal via Box, and notifying the legal team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Document Submission Coordinator"
description: "Prepares regulatory submission packages by gathering documents from SharePoint, creating a compliance task in ServiceNow, uploading to the regulatory portal via Box, and notifying the legal team in Microsoft Teams."
tags:
- compliance
- regulatory
- sharepoint
- servicenow
- box
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-submissions
port: 8080
tools:
- name: prepare-regulatory-submission
description: "Given a regulation ID and submission deadline, gather documents from SharePoint, create a compliance task, upload to Box, and notify the legal team."
inputParameters:
- name: regulation_id
in: body
type: string
description: "The regulatory requirement identifier."
- name: submission_deadline
in: body
type: string
description: "The submission deadline in YYYY-MM-DD format."
- name: market
in: body
type: string
description: "The target market (e.g. US, EU, KR)."
steps:
- name: get-documents
type: call
call: "sharepoint.get-folder-contents"
with:
site_id: "regulatory_docs"
folder_path: "Submissions/{{regulation_id}}/{{market}}"
- name: create-compliance-task
type: call
call: "servicenow.create-task"
with:
short_description: "Regulatory submission: {{regulation_id}} — {{market}} — Due {{submission_deadline}}"
description: "Prepare and submit regulatory package for {{regulation_id}} in {{market}} market. Documents: {{get-documents.file_count}} files. Deadline: {{submission_deadline}}."
assigned_group: "Regulatory_Affairs"
category: "regulatory_submission"
- name: upload-to-portal
type: call
call: "box.upload-folder"
with:
folder_id: "regulatory_portal_{{market}}"
source_files: "{{get-documents.file_urls}}"
- name: notify-legal
type: call
call: "msteams.post-channel"
with:
channel_id: "legal-regulatory"
text: "Regulatory submission prepared: {{regulation_id}} for {{market}}. Deadline: {{submission_deadline}}. {{get-documents.file_count}} documents uploaded. Task: {{create-compliance-task.number}}."
consumes:
- 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}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: get-folder-contents
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-folder
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/hyundai-legal/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Orchestrates Hyundai roadside assistance dispatch, coordinating tow truck assignment, mobile mechanic availability, and real-time ETA updates for stranded vehicle owners.
naftiko: "0.5"
info:
label: "Roadside Assistance Dispatch Orchestrator"
description: "Orchestrates Hyundai roadside assistance dispatch, coordinating tow truck assignment, mobile mechanic availability, and real-time ETA updates for stranded vehicle owners."
tags:
- roadside-assistance
- dispatch
- customer-service
capability:
exposes:
- type: mcp
namespace: roadside-dispatch
port: 8080
tools:
- name: dispatch-roadside-assistance
description: "Dispatch roadside assistance to a stranded vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: owner_id
in: body
type: string
description: "The vehicle owner account identifier."
- name: issue_type
in: body
type: string
description: "Issue type such as flat-tire, dead-battery, lockout, or tow."
- name: location_lat
in: body
type: number
description: "Vehicle latitude coordinate."
- name: location_lng
in: body
type: number
description: "Vehicle longitude coordinate."
call: "roadside-api.dispatch-assistance"
with:
vin: "{{vehicle_vin}}"
owner: "{{owner_id}}"
issue: "{{issue_type}}"
lat: "{{location_lat}}"
lng: "{{location_lng}}"
outputParameters:
- name: dispatch_id
type: string
mapping: "$.dispatch.id"
- name: estimated_arrival
type: string
mapping: "$.dispatch.estimatedArrival"
- name: provider_name
type: string
mapping: "$.dispatch.providerName"
consumes:
- type: http
namespace: roadside-api
baseUri: "https://api.hyundai.com/roadside/v1"
authentication:
type: bearer
token: "$secrets.hyundai_roadside_api_token"
resources:
- name: dispatches
path: "/dispatches"
operations:
- name: dispatch-assistance
method: POST
Initiates a plant safety compliance audit by retrieving the checklist from SharePoint, creating inspection tasks in ServiceNow for each category, and scheduling the audit review meeting in Microsoft Teams.
naftiko: "0.5"
info:
label: "Safety Compliance Audit Orchestrator"
description: "Initiates a plant safety compliance audit by retrieving the checklist from SharePoint, creating inspection tasks in ServiceNow for each category, and scheduling the audit review meeting in Microsoft Teams."
tags:
- safety
- compliance
- sharepoint
- servicenow
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: safety-audit
port: 8080
tools:
- name: initiate-safety-audit
description: "Given a plant code and audit type, retrieve the checklist from SharePoint, create ServiceNow inspection tasks, and schedule a Teams review meeting."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: audit_type
in: body
type: string
description: "The type of safety audit (e.g. fire, chemical, ergonomic, electrical)."
- name: auditor_email
in: body
type: string
description: "The lead auditor email address."
steps:
- name: get-checklist
type: call
call: "sharepoint.get-checklist"
with:
site_id: "safety_compliance_site"
file_path: "Checklists/{{audit_type}}_checklist.json"
- name: create-inspection-tasks
type: call
call: "servicenow.create-task"
with:
short_description: "Safety audit: {{audit_type}} — Plant {{plant_code}}"
description: "{{audit_type}} safety audit for plant {{plant_code}}. Checklist items: {{get-checklist.item_count}}. Lead auditor: {{auditor_email}}."
assigned_group: "Safety_Compliance"
category: "safety_audit"
- name: schedule-review
type: call
call: "msteams.create-meeting"
with:
organizer_upn: "{{auditor_email}}"
subject: "Safety audit review: {{audit_type}} — Plant {{plant_code}}"
body: "Review findings from {{audit_type}} safety audit at plant {{plant_code}}. Task: {{create-inspection-tasks.number}}."
consumes:
- 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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-checklist
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/users/{{organizer_upn}}/events"
inputParameters:
- name: organizer_upn
in: path
operations:
- name: create-meeting
method: POST
Retrieves dealer account details from Salesforce including dealer tier, territory, and current year sales target.
naftiko: "0.5"
info:
label: "Salesforce Dealer Account Lookup"
description: "Retrieves dealer account details from Salesforce including dealer tier, territory, and current year sales target."
tags:
- sales
- dealer
- salesforce
capability:
exposes:
- type: mcp
namespace: dealer-accounts
port: 8080
tools:
- name: get-dealer-account
description: "Look up a dealer account by ID."
inputParameters:
- name: dealer_id
in: body
type: string
description: "The Salesforce dealer account ID."
call: "salesforce.get-account"
with:
id: "{{dealer_id}}"
outputParameters:
- name: dealer_name
type: string
mapping: "$.Name"
- name: tier
type: string
mapping: "$.Dealer_Tier__c"
- name: territory
type: string
mapping: "$.Territory__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-account
method: GET
Retrieves submitted travel expense reports from SAP Concur, validates cost center against Workday, and creates a ServiceNow finance review task when policy exceptions are found.
naftiko: "0.5"
info:
label: "SAP Concur Travel Expense Validator"
description: "Retrieves submitted travel expense reports from SAP Concur, validates cost center against Workday, and creates a ServiceNow finance review task when policy exceptions are found."
tags:
- finance
- expense
- sap-concur
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-expense
port: 8080
tools:
- name: validate-travel-expense
description: "Given a Concur expense report ID and employee ID, fetch report details, validate cost center from Workday, and flag policy violations in ServiceNow."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-review-task
type: call
call: "servicenow.create-task"
with:
short_description: "Travel expense review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}."
assigned_group: "Finance_Audit"
category: "expense_review"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/hyundai"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
Runs a production analytics query against SAP HANA for vehicle output, defect rates, and cycle time metrics for a given plant and date range.
naftiko: "0.5"
info:
label: "SAP HANA Production Analytics Query"
description: "Runs a production analytics query against SAP HANA for vehicle output, defect rates, and cycle time metrics for a given plant and date range."
tags:
- manufacturing
- analytics
- sap-hana
- production
capability:
exposes:
- type: mcp
namespace: production-analytics
port: 8080
tools:
- name: query-production-analytics
description: "Run a production analytics query in SAP HANA for a plant and date range. Returns total output, defect rate, average cycle time, and line efficiency."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: start_date
in: body
type: string
description: "The start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "The end date in YYYY-MM-DD format."
call: "sap-hana.run-query"
with:
plant_code: "{{plant_code}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_output
type: number
mapping: "$.results[0].total_output"
- name: defect_rate_pct
type: number
mapping: "$.results[0].defect_rate"
- name: avg_cycle_time_sec
type: number
mapping: "$.results[0].avg_cycle_time"
- name: line_efficiency_pct
type: number
mapping: "$.results[0].line_efficiency"
consumes:
- type: http
namespace: sap-hana
baseUri: "https://hyundai-hana.sap.com/api/v1"
authentication:
type: basic
username: "$secrets.sap_hana_user"
password: "$secrets.sap_hana_password"
resources:
- name: analytics
path: "/analytics/production?plant={{plant_code}}&from={{start_date}}&to={{end_date}}"
inputParameters:
- name: plant_code
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: run-query
method: GET
Looks up a SAP S/4HANA purchase order for parts or materials and returns header status, supplier name, total value, and delivery schedule.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order for parts or materials and returns header status, supplier name, total value, and delivery schedule."
tags:
- procurement
- erp
- sap
- sap-s4hana
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP S/4HANA purchase order by PO number. Returns status, supplier, total value, currency, and scheduled delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (10-digit)."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: supplier
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves the bill of materials for a vehicle model from SAP, returning component list, quantities, and supplier assignments.
naftiko: "0.5"
info:
label: "SAP Vehicle BOM Lookup"
description: "Retrieves the bill of materials for a vehicle model from SAP, returning component list, quantities, and supplier assignments."
tags:
- manufacturing
- bom
- sap
capability:
exposes:
- type: mcp
namespace: vehicle-bom
port: 8080
tools:
- name: get-vehicle-bom
description: "Look up vehicle bill of materials by model code."
inputParameters:
- name: model_code
in: body
type: string
description: "The vehicle model code."
call: "sap.get-bom"
with:
material: "{{model_code}}"
outputParameters:
- name: components
type: array
mapping: "$.d.results"
- name: total_parts
type: integer
mapping: "$.d.TotalComponents"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZPP_BOM_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: boms
path: "/BOMSet('{{material}}')/Components"
inputParameters:
- name: material
in: path
operations:
- name: get-bom
method: GET
Sends templated communications to dealer contacts via SendGrid for product updates, incentive announcements, and training notifications.
naftiko: "0.5"
info:
label: "SendGrid Dealer Communication Sender"
description: "Sends templated communications to dealer contacts via SendGrid for product updates, incentive announcements, and training notifications."
tags:
- dealer
- communications
- sendgrid
capability:
exposes:
- type: mcp
namespace: dealer-comms
port: 8080
tools:
- name: send-dealer-email
description: "Send a templated email to a dealer contact."
inputParameters:
- name: dealer_email
in: body
type: string
description: "Dealer contact email."
- name: template_id
in: body
type: string
description: "SendGrid template ID."
- name: subject
in: body
type: string
description: "Email subject."
call: "sendgrid.send-email"
with:
to: "{{dealer_email}}"
template_id: "{{template_id}}"
subject: "{{subject}}"
outputParameters:
- name: message_id
type: string
mapping: "$.messageId"
consumes:
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves the status of a plant IT incident from ServiceNow by incident number.
naftiko: "0.5"
info:
label: "ServiceNow Plant IT Incident Lookup"
description: "Retrieves the status of a plant IT incident from ServiceNow by incident number."
tags:
- it
- manufacturing
- servicenow
capability:
exposes:
- type: mcp
namespace: plant-it-incidents
port: 8080
tools:
- name: get-plant-incident
description: "Look up a plant IT incident in ServiceNow."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: status
type: string
mapping: "$.result.state"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{number}}"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Retrieves a quality incident from ServiceNow by incident number. Returns severity, affected vehicle model, root cause category, and current resolution status.
naftiko: "0.5"
info:
label: "ServiceNow Quality Incident Lookup"
description: "Retrieves a quality incident from ServiceNow by incident number. Returns severity, affected vehicle model, root cause category, and current resolution status."
tags:
- quality
- incident-management
- servicenow
capability:
exposes:
- type: mcp
namespace: quality-incidents
port: 8080
tools:
- name: get-quality-incident
description: "Look up a quality incident in ServiceNow by incident number. Returns severity, affected model, root cause, and resolution status."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g. INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: severity
type: string
mapping: "$.result.severity"
- name: affected_model
type: string
mapping: "$.result.u_vehicle_model"
- name: root_cause
type: string
mapping: "$.result.u_root_cause_category"
- name: resolution_status
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves engineering specification documents from SharePoint by part number, returning document URL, version, and approval status.
naftiko: "0.5"
info:
label: "SharePoint Engineering Spec Retrieval"
description: "Retrieves engineering specification documents from SharePoint by part number, returning document URL, version, and approval status."
tags:
- engineering
- documents
- sharepoint
capability:
exposes:
- type: mcp
namespace: engineering-specs
port: 8080
tools:
- name: get-spec-document
description: "Retrieve an engineering specification from SharePoint."
inputParameters:
- name: part_number
in: body
type: string
description: "The part number."
call: "sharepoint.search-documents"
with:
query: "part_number:{{part_number}} filetype:pdf"
site: "engineering_specs"
outputParameters:
- name: document_url
type: string
mapping: "$.value[0].webUrl"
- name: version
type: string
mapping: "$.value[0].version"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search-documents
method: POST
Sends notifications to engineering team Slack channels for build alerts, quality issues, and production updates.
naftiko: "0.5"
info:
label: "Slack Engineering Team Notifier"
description: "Sends notifications to engineering team Slack channels for build alerts, quality issues, and production updates."
tags:
- communications
- engineering
- slack
capability:
exposes:
- type: mcp
namespace: engineering-notifications
port: 8080
tools:
- name: send-engineering-notification
description: "Send a notification to an engineering Slack channel."
inputParameters:
- name: team
in: body
type: string
description: "The engineering team slug."
- name: message
in: body
type: string
description: "The notification message."
call: "slack.post-message"
with:
channel: "eng-{{team}}"
text: "{{message}}"
outputParameters:
- name: message_ts
type: string
mapping: "$.ts"
consumes:
- 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
Queries Snowflake for vehicle sales analytics by model, region, and date range, returning units sold, average transaction price, and market share.
naftiko: "0.5"
info:
label: "Snowflake Vehicle Sales Analytics Query"
description: "Queries Snowflake for vehicle sales analytics by model, region, and date range, returning units sold, average transaction price, and market share."
tags:
- analytics
- sales
- snowflake
capability:
exposes:
- type: mcp
namespace: sales-analytics
port: 8080
tools:
- name: query-vehicle-sales
description: "Query vehicle sales analytics from Snowflake."
inputParameters:
- name: model
in: body
type: string
description: "Vehicle model name."
- name: region
in: body
type: string
description: "Sales region."
call: "snowflake.execute-query"
with:
statement: "SELECT units_sold, avg_transaction_price, market_share_pct FROM vehicle_sales WHERE model = '{{model}}' AND region = '{{region}}'"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hyundai.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Searches Splunk for error logs from assembly line PLCs and SCADA systems over a time window. Returns matching log entries with timestamps and severity levels.
naftiko: "0.5"
info:
label: "Splunk Assembly Line Error Log Search"
description: "Searches Splunk for error logs from assembly line PLCs and SCADA systems over a time window. Returns matching log entries with timestamps and severity levels."
tags:
- manufacturing
- monitoring
- splunk
- quality
capability:
exposes:
- type: mcp
namespace: mfg-logging
port: 8080
tools:
- name: search-assembly-errors
description: "Search Splunk for assembly line error logs by plant code and time range. Returns log entries with timestamps, severity, and error descriptions."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code (e.g. ULSAN1)."
- name: hours_back
in: body
type: number
description: "Number of hours to search back from now."
call: "splunk.search-logs"
with:
plant_code: "{{plant_code}}"
hours_back: "{{hours_back}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: total_count
type: number
mapping: "$.total_count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.hyundai.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs/export?search=search+index%3Dassembly+plant%3D{{plant_code}}+severity%3DERROR+earliest%3D-{{hours_back}}h&output_mode=json"
inputParameters:
- name: plant_code
in: query
- name: hours_back
in: query
operations:
- name: search-logs
method: GET
Escalates supplier part shortages by checking SAP inventory, contacting the supplier via the procurement portal, and alerting production planning via Slack.
naftiko: "0.5"
info:
label: "Supplier Part Shortage Escalation Orchestrator"
description: "Escalates supplier part shortages by checking SAP inventory, contacting the supplier via the procurement portal, and alerting production planning via Slack."
tags:
- supply-chain
- procurement
- sap
- slack
capability:
exposes:
- type: mcp
namespace: part-shortage
port: 8080
tools:
- name: escalate-shortage
description: "Escalate a supplier part shortage."
inputParameters:
- name: part_number
in: body
type: string
description: "The part number."
- name: plant_code
in: body
type: string
description: "The plant code."
steps:
- name: check-inventory
type: call
call: "sap.get-stock"
with:
material: "{{part_number}}"
plant: "{{plant_code}}"
- name: contact-supplier
type: call
call: "procurement-portal.create-urgent-request"
with:
part: "{{part_number}}"
current_stock: "{{check-inventory.available_quantity}}"
days_of_supply: "{{check-inventory.days_of_supply}}"
- name: alert-planning
type: call
call: "slack.post-message"
with:
channel: "plant-{{plant_code}}-planning"
text: "PART SHORTAGE: {{part_number}} at plant {{plant_code}}. Stock: {{check-inventory.available_quantity}} ({{check-inventory.days_of_supply}} days). Supplier notified: {{contact-supplier.request_id}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZMM_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/StockSet(Material='{{material}}',Plant='{{plant}}')"
inputParameters:
- name: material
in: path
- name: plant
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: procurement-portal
baseUri: "https://procurement.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
resources:
- name: requests
path: "/urgent-requests"
operations:
- name: create-urgent-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves supplier performance metrics from SAP Ariba, and if the composite score falls below threshold, creates a Jira improvement task and notifies the procurement team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Performance Review Escalation"
description: "Retrieves supplier performance metrics from SAP Ariba, and if the composite score falls below threshold, creates a Jira improvement task and notifies the procurement team in Microsoft Teams."
tags:
- supply-chain
- supplier-management
- sap-ariba
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-performance
port: 8080
tools:
- name: review-supplier-performance
description: "Fetch supplier scorecard from Ariba and escalate underperforming suppliers with a Jira task and Teams notification."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier identifier."
- name: min_score_threshold
in: body
type: number
description: "The minimum acceptable composite score."
steps:
- name: get-scorecard
type: call
call: "ariba.get-supplier-scorecard"
with:
supplier_id: "{{supplier_id}}"
- name: create-improvement-task
type: call
call: "jira.create-issue"
with:
project_key: "SCM"
summary: "Supplier improvement: {{supplier_id}} — Score {{get-scorecard.composite_score}} below {{min_score_threshold}}"
description: "Supplier {{supplier_id}} scorecard: OTD {{get-scorecard.on_time_delivery_pct}}%, Defect PPM {{get-scorecard.defect_ppm}}, Cost Variance {{get-scorecard.cost_variance_pct}}%. Composite: {{get-scorecard.composite_score}}."
issue_type: "Task"
priority: "High"
- name: notify-procurement
type: call
call: "msteams.post-channel"
with:
channel_id: "supplier-management"
text: "Supplier performance alert: {{supplier_id}} scored {{get-scorecard.composite_score}} (threshold: {{min_score_threshold}}). OTD: {{get-scorecard.on_time_delivery_pct}}%. Defect PPM: {{get-scorecard.defect_ppm}}. Jira: {{create-improvement-task.key}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: scorecards
path: "/suppliers/{{supplier_id}}/scorecard"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier-scorecard
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai-motor.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/hyundai-procurement/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When a supplier delivery delay is detected in SAP, retrieves the affected purchase orders, identifies impacted production schedules, and notifies the supply chain team via Microsoft Teams and creates a Jira issue for tracking.
naftiko: "0.5"
info:
label: "Supply Chain Disruption Alerter"
description: "When a supplier delivery delay is detected in SAP, retrieves the affected purchase orders, identifies impacted production schedules, and notifies the supply chain team via Microsoft Teams and creates a Jira issue for tracking."
tags:
- supply-chain
- sap
- sap-s4hana
- jira
- microsoft-teams
- production
capability:
exposes:
- type: mcp
namespace: supply-chain-alerts
port: 8080
tools:
- name: alert-supply-disruption
description: "Given a supplier ID and delay reason, look up impacted POs in SAP, create a Jira tracking issue, and alert the supply chain team in Microsoft Teams."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP supplier number."
- name: delay_days
in: body
type: number
description: "The estimated delay in days."
- name: delay_reason
in: body
type: string
description: "The reason for the delivery delay."
steps:
- name: get-supplier-pos
type: call
call: "sap.get-supplier-orders"
with:
supplier_id: "{{supplier_id}}"
- name: create-tracking-issue
type: call
call: "jira.create-issue"
with:
project_key: "SCM"
summary: "Supplier delay: {{supplier_id}} — {{delay_days}} days — {{delay_reason}}"
description: "Supplier {{supplier_id}} has reported a {{delay_days}}-day delay. Reason: {{delay_reason}}. Affected POs: {{get-supplier-pos.order_count}} open orders."
issue_type: "Task"
priority: "High"
- name: notify-supply-chain
type: call
call: "msteams.post-channel"
with:
channel_id: "supply-chain-ops"
text: "SUPPLY DISRUPTION: Supplier {{supplier_id}} delayed by {{delay_days}} days. Reason: {{delay_reason}}. {{get-supplier-pos.order_count}} POs affected. Jira: {{create-tracking-issue.key}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
resources:
- name: supplier-orders
path: "/A_PurchaseOrder?$filter=Supplier eq '{{supplier_id}}' and OverallStatus eq 'OPEN'"
inputParameters:
- name: supplier_id
in: query
operations:
- name: get-supplier-orders
method: GET
- type: http
namespace: jira
baseUri: "https://hyundai-motor.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/hyundai-scm/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves dealer network performance data from Tableau including sales volume, customer satisfaction scores, and service throughput by region.
naftiko: "0.5"
info:
label: "Tableau Dealer Network Performance Snapshot"
description: "Retrieves dealer network performance data from Tableau including sales volume, customer satisfaction scores, and service throughput by region."
tags:
- analytics
- dealer
- tableau
capability:
exposes:
- type: mcp
namespace: dealer-performance
port: 8080
tools:
- name: get-dealer-performance
description: "Get dealer network performance snapshot from Tableau."
inputParameters:
- name: region
in: body
type: string
description: "The dealer region."
call: "tableau.get-view-data"
with:
workbook: "dealer-network-performance"
view: "regional-summary"
filter_region: "{{region}}"
outputParameters:
- name: total_units
type: integer
mapping: "$.data.summary.totalUnits"
- name: avg_csi
type: number
mapping: "$.data.summary.avgCSI"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.hyundai.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: views
path: "/sites/hyundai/workbooks/{{workbook}}/views/{{view}}/data"
inputParameters:
- name: workbook
in: path
- name: view
in: path
operations:
- name: get-view-data
method: GET
Retrieves the status of a Terraform Cloud workspace run for EV charging infrastructure provisioning and posts the apply status to the infrastructure team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Provisioning Tracker"
description: "Retrieves the status of a Terraform Cloud workspace run for EV charging infrastructure provisioning and posts the apply status to the infrastructure team in Microsoft Teams."
tags:
- infrastructure
- ev-battery
- terraform
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: track-terraform-run
description: "Given a Terraform workspace ID and run ID, check the apply status and notify the infrastructure team in Teams."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID."
- name: run_id
in: body
type: string
description: "The Terraform Cloud run ID."
steps:
- name: get-run-status
type: call
call: "terraform.get-run"
with:
run_id: "{{run_id}}"
- name: notify-infra-team
type: call
call: "msteams.post-channel"
with:
channel_id: "ev-infrastructure"
text: "Terraform run {{run_id}} in workspace {{workspace_id}}: Status {{get-run-status.status}}. Resources added: {{get-run-status.resource_additions}}. Changed: {{get-run-status.resource_changes}}. Destroyed: {{get-run-status.resource_destructions}}."
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs/{{run_id}}"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-infra/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Monitors tire pressure sensor data from Hyundai connected vehicles and triggers alerts when pressure falls below safe thresholds, notifying the driver and scheduling dealer service if needed.
naftiko: "0.5"
info:
label: "Tire Pressure Monitoring Alert Handler"
description: "Monitors tire pressure sensor data from Hyundai connected vehicles and triggers alerts when pressure falls below safe thresholds, notifying the driver and scheduling dealer service if needed."
tags:
- connected-car
- safety
- tire-pressure
capability:
exposes:
- type: mcp
namespace: tpms-alerts
port: 8080
tools:
- name: get-tire-pressure-status
description: "Retrieve current tire pressure readings and alert status for a Hyundai vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The vehicle identification number."
- name: owner_id
in: body
type: string
description: "The Bluelink account owner identifier."
call: "tpms-api.get-pressure-status"
with:
vin: "{{vehicle_vin}}"
owner: "{{owner_id}}"
outputParameters:
- name: front_left_psi
type: string
mapping: "$.tires.frontLeft.psi"
- name: front_right_psi
type: string
mapping: "$.tires.frontRight.psi"
- name: rear_left_psi
type: string
mapping: "$.tires.rearLeft.psi"
- name: rear_right_psi
type: string
mapping: "$.tires.rearRight.psi"
- name: alert_level
type: string
mapping: "$.tires.alertLevel"
consumes:
- type: http
namespace: tpms-api
baseUri: "https://api.hyundai.com/connected-car/v1"
authentication:
type: bearer
token: "$secrets.hyundai_connected_car_api_token"
resources:
- name: tire-pressure
path: "/vehicles/{{vin}}/tpms"
inputParameters:
- name: vin
in: path
operations:
- name: get-pressure-status
method: GET
Coordinates vehicle certification by pulling test data from the homologation system, submitting documents to the regulatory portal, and tracking in Jira.
naftiko: "0.5"
info:
label: "Vehicle Certification Compliance Coordinator"
description: "Coordinates vehicle certification by pulling test data from the homologation system, submitting documents to the regulatory portal, and tracking in Jira."
tags:
- regulatory
- certification
- jira
capability:
exposes:
- type: mcp
namespace: vehicle-certification
port: 8080
tools:
- name: coordinate-certification
description: "Coordinate vehicle certification and homologation."
inputParameters:
- name: model_code
in: body
type: string
description: "The vehicle model code."
- name: market
in: body
type: string
description: "Target market ISO code."
steps:
- name: get-test-results
type: call
call: "homologation.get-results"
with:
model: "{{model_code}}"
market: "{{market}}"
- name: submit-documents
type: call
call: "regulatory-portal.submit"
with:
model: "{{model_code}}"
market: "{{market}}"
test_report_id: "{{get-test-results.report_id}}"
- name: create-tracking
type: call
call: "jira.create-issue"
with:
project: "CERT"
issue_type: "Task"
summary: "Certification: {{model_code}} for {{market}}"
description: "Submission: {{submit-documents.submission_id}}. Test results: {{get-test-results.status}}."
consumes:
- type: http
namespace: homologation
baseUri: "https://homologation.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.homologation_token"
resources:
- name: results
path: "/models/{{model}}/markets/{{market}}/results"
inputParameters:
- name: model
in: path
- name: market
in: path
operations:
- name: get-results
method: GET
- type: http
namespace: regulatory-portal
baseUri: "https://regulatory.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.regulatory_token"
resources:
- name: submissions
path: "/submissions"
operations:
- name: submit
method: POST
- type: http
namespace: jira
baseUri: "https://hyundai.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
Powers the Hyundai online vehicle configurator, calculating real-time pricing for model, trim, color, and option package combinations including regional incentives.
naftiko: "0.5"
info:
label: "Vehicle Configurator Pricing Engine"
description: "Powers the Hyundai online vehicle configurator, calculating real-time pricing for model, trim, color, and option package combinations including regional incentives."
tags:
- e-commerce
- vehicle-configurator
- pricing
capability:
exposes:
- type: mcp
namespace: vehicle-configurator
port: 8080
tools:
- name: calculate-vehicle-price
description: "Calculate the configured price for a vehicle build."
inputParameters:
- name: model_code
in: body
type: string
description: "The vehicle model code."
- name: trim_level
in: body
type: string
description: "The trim level selection."
- name: options
in: body
type: array
description: "List of selected option package codes."
- name: zip_code
in: body
type: string
description: "Customer zip code for regional pricing and incentives."
call: "configurator-api.calculate-price"
with:
model: "{{model_code}}"
trim: "{{trim_level}}"
options: "{{options}}"
zip: "{{zip_code}}"
outputParameters:
- name: msrp
type: number
mapping: "$.pricing.msrp"
- name: destination_charge
type: number
mapping: "$.pricing.destinationCharge"
- name: available_incentives
type: array
mapping: "$.pricing.availableIncentives"
consumes:
- type: http
namespace: configurator-api
baseUri: "https://api.hyundai.com/configurator/v1"
authentication:
type: bearer
token: "$secrets.hyundai_configurator_api_token"
resources:
- name: pricing
path: "/builds/pricing"
operations:
- name: calculate-price
method: POST
Handles automatic crash notifications from connected vehicles by pulling telemetry data, notifying emergency services, and creating a case in the customer care system.
naftiko: "0.5"
info:
label: "Vehicle Crash Notification Handler"
description: "Handles automatic crash notifications from connected vehicles by pulling telemetry data, notifying emergency services, and creating a case in the customer care system."
tags:
- connected-car
- safety
- amazon-web-services
capability:
exposes:
- type: mcp
namespace: crash-notification
port: 8080
tools:
- name: handle-crash-notification
description: "Handle an automatic crash notification from a connected vehicle."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle VIN."
- name: crash_severity
in: body
type: string
description: "Crash severity level."
steps:
- name: get-vehicle-data
type: call
call: "aws-iot.get-thing-shadow"
with:
thing_name: "vehicle_{{vin}}"
- name: notify-emergency
type: call
call: "emergency-system.dispatch"
with:
vin: "{{vin}}"
location: "{{get-vehicle-data.state.reported.location}}"
severity: "{{crash_severity}}"
- name: create-care-case
type: call
call: "salesforce.create-case"
with:
vin: "{{vin}}"
type: "crash_notification"
severity: "{{crash_severity}}"
location: "{{get-vehicle-data.state.reported.location}}"
consumes:
- type: http
namespace: aws-iot
baseUri: "https://iot.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_iot_token"
resources:
- name: shadows
path: "/things/{{thing_name}}/shadow"
inputParameters:
- name: thing_name
in: path
operations:
- name: get-thing-shadow
method: GET
- type: http
namespace: emergency-system
baseUri: "https://emergency.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.emergency_system_token"
resources:
- name: dispatch
path: "/dispatch"
operations:
- name: dispatch
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Orchestrates vehicle delivery logistics by pulling production completion from SAP, booking carrier transport, and updating the dealer portal with ETA.
naftiko: "0.5"
info:
label: "Vehicle Delivery Logistics Orchestrator"
description: "Orchestrates vehicle delivery logistics by pulling production completion from SAP, booking carrier transport, and updating the dealer portal with ETA."
tags:
- logistics
- dealer
- sap
capability:
exposes:
- type: mcp
namespace: vehicle-delivery
port: 8080
tools:
- name: orchestrate-delivery
description: "Orchestrate vehicle delivery from plant to dealer."
inputParameters:
- name: vin
in: body
type: string
description: "The vehicle VIN."
- name: dealer_id
in: body
type: string
description: "The destination dealer ID."
steps:
- name: get-production-status
type: call
call: "sap.get-vehicle-status"
with:
vin: "{{vin}}"
- name: book-transport
type: call
call: "carrier.book-vehicle-transport"
with:
vin: "{{vin}}"
origin: "{{get-production-status.plant}}"
destination: "dealer_{{dealer_id}}"
- name: update-dealer-portal
type: call
call: "dealer-portal.update-vehicle-eta"
with:
vin: "{{vin}}"
dealer_id: "{{dealer_id}}"
carrier: "{{book-transport.carrier_name}}"
eta: "{{book-transport.estimated_delivery}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZPP_VEHICLE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vehicles
path: "/VehicleSet('{{vin}}')"
inputParameters:
- name: vin
in: path
operations:
- name: get-vehicle-status
method: GET
- type: http
namespace: carrier
baseUri: "https://carrier.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.carrier_token"
resources:
- name: bookings
path: "/bookings"
operations:
- name: book-vehicle-transport
method: POST
- type: http
namespace: dealer-portal
baseUri: "https://dealer-portal.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.dealer_portal_token"
resources:
- name: vehicles
path: "/vehicles/{{vin}}/eta"
inputParameters:
- name: vin
in: path
operations:
- name: update-vehicle-eta
method: PUT
Looks up a SAP S/4HANA production order by order number and returns build status, model, trim, color, and estimated completion date for a vehicle on the assembly line.
naftiko: "0.5"
info:
label: "Vehicle Production Order Status"
description: "Looks up a SAP S/4HANA production order by order number and returns build status, model, trim, color, and estimated completion date for a vehicle on the assembly line."
tags:
- manufacturing
- production
- sap
- sap-s4hana
- vehicle-build
capability:
exposes:
- type: mcp
namespace: mfg-production
port: 8080
tools:
- name: get-production-order
description: "Look up a SAP S/4HANA production order by order number. Returns build status, vehicle model, trim level, color code, and estimated completion date."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number (12-digit)."
call: "sap.get-production-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OrderStatus"
- name: model
type: string
mapping: "$.d.MaterialDescription"
- name: trim
type: string
mapping: "$.d.TrimLevel"
- name: color_code
type: string
mapping: "$.d.ColorCode"
- name: estimated_completion
type: string
mapping: "$.d.SchedFinishDate"
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: production-orders
path: "/A_ProductionOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
When a quality defect is confirmed, creates a recall campaign in Salesforce, opens a ServiceNow change request for dealer notification, and posts an alert to the Microsoft Teams quality channel.
naftiko: "0.5"
info:
label: "Vehicle Recall Campaign Orchestrator"
description: "When a quality defect is confirmed, creates a recall campaign in Salesforce, opens a ServiceNow change request for dealer notification, and posts an alert to the Microsoft Teams quality channel."
tags:
- quality
- recall
- salesforce
- servicenow
- microsoft-teams
- dealer-management
capability:
exposes:
- type: mcp
namespace: recall-management
port: 8080
tools:
- name: initiate-recall-campaign
description: "Given a defect ID, affected model, and model year range, create a recall campaign in Salesforce, open a ServiceNow change request, and notify the quality team in Microsoft Teams."
inputParameters:
- name: defect_id
in: body
type: string
description: "The internal defect tracking identifier."
- name: affected_model
in: body
type: string
description: "The vehicle model affected (e.g. Tucson, Ioniq 5)."
- name: model_year_start
in: body
type: number
description: "The starting model year of affected vehicles."
- name: model_year_end
in: body
type: number
description: "The ending model year of affected vehicles."
- name: defect_description
in: body
type: string
description: "Description of the safety defect or quality issue."
steps:
- name: create-campaign
type: call
call: "salesforce.create-recall-campaign"
with:
name: "Recall — {{affected_model}} {{model_year_start}}-{{model_year_end}} — {{defect_id}}"
description: "{{defect_description}}"
model: "{{affected_model}}"
- name: open-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "Dealer notification for recall {{defect_id}} — {{affected_model}}"
description: "Notify all dealers of recall campaign {{create-campaign.id}} for {{affected_model}} MY {{model_year_start}}-{{model_year_end}}. Defect: {{defect_description}}"
category: "recall_notification"
assigned_group: "Dealer_Operations"
- name: notify-quality-team
type: call
call: "msteams.post-channel"
with:
channel_id: "quality-alerts"
text: "RECALL INITIATED: {{affected_model}} MY {{model_year_start}}-{{model_year_end}} — Defect {{defect_id}}. Campaign: {{create-campaign.id}}. Change request: {{open-change-request.number}}. Description: {{defect_description}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyundai.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: recall-campaigns
path: "/sobjects/Recall_Campaign__c"
operations:
- name: create-recall-campaign
method: POST
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
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/hyundai-quality/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Estimates trade-in values for vehicles at Hyundai dealerships using market data, vehicle condition assessments, and regional demand factors.
naftiko: "0.5"
info:
label: "Vehicle Trade-In Valuation Estimator"
description: "Estimates trade-in values for vehicles at Hyundai dealerships using market data, vehicle condition assessments, and regional demand factors."
tags:
- trade-in
- valuation
- dealer-management
capability:
exposes:
- type: mcp
namespace: trade-in-valuation
port: 8080
tools:
- name: estimate-trade-in-value
description: "Estimate the trade-in value for a vehicle."
inputParameters:
- name: vehicle_vin
in: body
type: string
description: "The VIN of the trade-in vehicle."
- name: mileage
in: body
type: integer
description: "Current odometer reading in miles."
- name: condition
in: body
type: string
description: "Vehicle condition such as excellent, good, fair, or poor."
- name: zip_code
in: body
type: string
description: "Dealer zip code for regional market adjustment."
call: "valuation-api.estimate-value"
with:
vin: "{{vehicle_vin}}"
mileage: "{{mileage}}"
condition: "{{condition}}"
zip: "{{zip_code}}"
outputParameters:
- name: estimated_value
type: number
mapping: "$.valuation.estimatedValue"
- name: market_range_low
type: number
mapping: "$.valuation.marketRangeLow"
- name: market_range_high
type: number
mapping: "$.valuation.marketRangeHigh"
consumes:
- type: http
namespace: valuation-api
baseUri: "https://api.hyundai.com/valuation/v1"
authentication:
type: bearer
token: "$secrets.hyundai_valuation_api_token"
resources:
- name: valuations
path: "/trade-in-valuations"
operations:
- name: estimate-value
method: POST
Performs a three-way match between a vendor invoice, SAP purchase order, and goods receipt to validate pricing and quantities. Flags mismatches in ServiceNow for accounts payable review and notifies the procurement team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Performs a three-way match between a vendor invoice, SAP purchase order, and goods receipt to validate pricing and quantities. Flags mismatches in ServiceNow for accounts payable review and notifies the procurement team in Microsoft Teams."
tags:
- finance
- procurement
- sap
- sap-s4hana
- servicenow
- microsoft-teams
- accounts-payable
capability:
exposes:
- type: mcp
namespace: invoice-matching
port: 8080
tools:
- name: three-way-match-invoice
description: "Given an invoice number and PO number, retrieve the invoice, PO, and goods receipt from SAP, compare quantities and prices, and flag mismatches in ServiceNow."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number."
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: get-goods-receipt
type: call
call: "sap.get-goods-receipt"
with:
po_number: "{{po_number}}"
- name: flag-mismatch
type: call
call: "servicenow.create-task"
with:
short_description: "Invoice mismatch: INV {{invoice_number}} vs PO {{po_number}}"
description: "Invoice amount: {{get-invoice.total_amount}}. PO amount: {{get-po.total_value}}. GR quantity: {{get-goods-receipt.quantity_received}}. Review required."
assigned_group: "Accounts_Payable"
category: "invoice_mismatch"
- name: notify-procurement
type: call
call: "msteams.post-channel"
with:
channel_id: "procurement-ops"
text: "Invoice mismatch flagged: INV {{invoice_number}} / PO {{po_number}}. Invoice: {{get-invoice.total_amount}}. PO: {{get-po.total_value}}. Task: {{flag-mismatch.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- name: goods-receipts
path: "/A_GoodsReceipt?$filter=PurchaseOrder eq '{{po_number}}'"
inputParameters:
- name: po_number
in: query
operations:
- name: get-goods-receipt
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-finance/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When onboarding a new supplier, retrieves supplier data from SAP Ariba, runs a compliance check in ServiceNow GRC, stores the assessment in SharePoint, and notifies the procurement team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Pipeline"
description: "When onboarding a new supplier, retrieves supplier data from SAP Ariba, runs a compliance check in ServiceNow GRC, stores the assessment in SharePoint, and notifies the procurement team in Microsoft Teams."
tags:
- supply-chain
- compliance
- sap-ariba
- servicenow
- sharepoint
- microsoft-teams
- risk-management
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Given an Ariba supplier ID and risk category, perform a compliance check, store the assessment, and notify the procurement team."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier identifier."
- name: risk_category
in: body
type: string
description: "The risk category to assess (e.g. financial, operational, compliance, environmental)."
steps:
- name: get-supplier-profile
type: call
call: "ariba.get-supplier"
with:
supplier_id: "{{supplier_id}}"
- name: run-compliance-check
type: call
call: "servicenow.create-grc-assessment"
with:
entity_name: "{{get-supplier-profile.company_name}}"
risk_category: "{{risk_category}}"
description: "Vendor risk assessment for {{get-supplier-profile.company_name}} ({{supplier_id}}). Category: {{risk_category}}. Country: {{get-supplier-profile.country}}."
- name: store-assessment
type: call
call: "sharepoint.upload-file"
with:
site_id: "vendor_risk_site"
file_path: "Assessments/{{supplier_id}}/{{risk_category}}_assessment.json"
content: "Supplier: {{get-supplier-profile.company_name}}. Risk score: {{run-compliance-check.risk_score}}. Status: {{run-compliance-check.assessment_status}}."
- name: notify-procurement
type: call
call: "msteams.post-channel"
with:
channel_id: "procurement-risk"
text: "Vendor risk assessment complete: {{get-supplier-profile.company_name}} ({{supplier_id}}). Category: {{risk_category}}. Risk score: {{run-compliance-check.risk_score}}. Status: {{run-compliance-check.assessment_status}}. Report: {{store-assessment.url}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyundai.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: grc-assessments
path: "/table/sn_grc_assessment"
operations:
- name: create-grc-assessment
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/hyundai-procurement/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Adjudicates warranty claims submitted by Hyundai dealers, validating coverage eligibility, repair codes, and labor time against warranty policy rules.
naftiko: "0.5"
info:
label: "Warranty Claim Adjudication Pipeline"
description: "Adjudicates warranty claims submitted by Hyundai dealers, validating coverage eligibility, repair codes, and labor time against warranty policy rules."
tags:
- warranty
- claims-processing
- dealer-management
capability:
exposes:
- type: mcp
namespace: warranty-claims
port: 8080
tools:
- name: adjudicate-warranty-claim
description: "Adjudicate a dealer-submitted warranty claim."
inputParameters:
- name: claim_id
in: body
type: string
description: "The warranty claim identifier."
- name: dealer_id
in: body
type: string
description: "The submitting dealer identifier."
call: "warranty-api.adjudicate-claim"
with:
claim: "{{claim_id}}"
dealer: "{{dealer_id}}"
outputParameters:
- name: adjudication_result
type: string
mapping: "$.claim.result"
- name: approved_amount
type: number
mapping: "$.claim.approvedAmount"
- name: denial_reason
type: string
mapping: "$.claim.denialReason"
consumes:
- type: http
namespace: warranty-api
baseUri: "https://api.hyundai.com/warranty/v1"
authentication:
type: bearer
token: "$secrets.hyundai_warranty_api_token"
resources:
- name: claims
path: "/claims/{{claim}}/adjudicate"
inputParameters:
- name: claim
in: path
operations:
- name: adjudicate-claim
method: POST
Manages weld quality inspections by pulling vision system data from the MES, logging results in SAP QM, and alerting quality engineers via Slack on failures.
naftiko: "0.5"
info:
label: "Weld Quality Inspection Pipeline"
description: "Manages weld quality inspections by pulling vision system data from the MES, logging results in SAP QM, and alerting quality engineers via Slack on failures."
tags:
- quality
- manufacturing
- sap
- slack
capability:
exposes:
- type: mcp
namespace: weld-inspection
port: 8080
tools:
- name: process-weld-inspection
description: "Process weld quality inspection results."
inputParameters:
- name: body_number
in: body
type: string
description: "The vehicle body number."
- name: station_id
in: body
type: string
description: "The welding station ID."
steps:
- name: get-vision-results
type: call
call: "mes.get-weld-inspection"
with:
body: "{{body_number}}"
station: "{{station_id}}"
- name: log-in-sap
type: call
call: "sap-qm.create-inspection-lot"
with:
body: "{{body_number}}"
station: "{{station_id}}"
result: "{{get-vision-results.pass_fail}}"
defects: "{{get-vision-results.defect_count}}"
- name: alert-on-failure
type: call
call: "slack.post-message"
with:
channel: "quality-weld-alerts"
text: "Weld inspection: Body {{body_number}} at station {{station_id}} - {{get-vision-results.pass_fail}}. Defects: {{get-vision-results.defect_count}}. SAP lot: {{log-in-sap.lot_number}}."
consumes:
- type: http
namespace: mes
baseUri: "https://mes.hyundai.com/api/v1"
authentication:
type: bearer
token: "$secrets.mes_token"
resources:
- name: inspections
path: "/bodies/{{body}}/stations/{{station}}/weld-inspection"
inputParameters:
- name: body
in: path
- name: station
in: path
operations:
- name: get-weld-inspection
method: GET
- type: http
namespace: sap-qm
baseUri: "https://hyundai-s4.sap.com/sap/opu/odata/sap/ZQM_INSPECTION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: lots
path: "/InspectionLotSet"
operations:
- name: create-inspection-lot
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves an employee profile from Workday by worker ID. Returns full name, department, job title, cost center, and manager information.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by worker ID. Returns full name, department, job title, cost center, and manager information."
tags:
- hr
- employee-data
- workday
capability:
exposes:
- type: mcp
namespace: hr-employee
port: 8080
tools:
- name: get-employee
description: "Look up an employee profile in Workday by worker ID. Returns full name, department, job title, cost center, and reporting manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.fullName"
- name: department
type: string
mapping: "$.worker.department"
- name: job_title
type: string
mapping: "$.worker.jobTitle"
- name: cost_center
type: string
mapping: "$.worker.costCenter"
- name: manager_name
type: string
mapping: "$.worker.manager.fullName"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/hyundai"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Retrieves headcount data for a manufacturing plant from Workday, including total employees, department breakdown, and vacancy count.
naftiko: "0.5"
info:
label: "Workday Manufacturing Headcount Report"
description: "Retrieves headcount data for a manufacturing plant from Workday, including total employees, department breakdown, and vacancy count."
tags:
- hr
- manufacturing
- workday
capability:
exposes:
- type: mcp
namespace: plant-headcount
port: 8080
tools:
- name: get-plant-headcount
description: "Get headcount report for a manufacturing plant."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
call: "workday.get-headcount"
with:
location: "plant_{{plant_code}}"
outputParameters:
- name: total_employees
type: integer
mapping: "$.headcount.total"
- name: vacancies
type: integer
mapping: "$.headcount.vacancies"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/headcount?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-headcount
method: GET