Ford Capabilities
Naftiko 0.5 capability definitions for Ford - 100 capabilities showing integration workflows and service orchestrations.
Uses Anthropic Claude to summarize incoming technical service bulletins, extracts affected models and required actions, and stores summaries in Salesforce for dealer communications.
naftiko: "0.5"
info:
label: "AI-Assisted Vehicle Service Bulletin Summarization"
description: "Uses Anthropic Claude to summarize incoming technical service bulletins, extracts affected models and required actions, and stores summaries in Salesforce for dealer communications."
tags:
- ai
- automotive
- anthropic
- salesforce
- msteams
- content
capability:
exposes:
- type: mcp
namespace: tsb-ai
port: 8080
tools:
- name: summarize-service-bulletin
description: "Given a technical service bulletin (TSB) text and a Salesforce knowledge article ID, call Anthropic Claude to extract affected models, symptoms, and corrective procedures, then update the Salesforce article."
inputParameters:
- name: tsb_text
in: body
type: string
description: "Full text of the technical service bulletin."
- name: salesforce_article_id
in: body
type: string
description: "Salesforce knowledge article ID to update with the summary."
steps:
- name: generate-summary
type: call
call: anthropic.create-message
with:
model: "claude-opus-4-5"
max_tokens: "600"
system: "You are a Ford automotive technical writer. Summarize the following technical service bulletin, extracting: 1) Affected models and model years, 2) Symptom description, 3) Corrective procedure summary, 4) Required parts."
user_content: "{{tsb_text}}"
- name: update-article
type: call
call: salesforce.update-knowledge-article
with:
article_id: "{{salesforce_article_id}}"
TSB_Summary__c: "{{generate-summary.content}}"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: salesforce
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: knowledge-articles
path: "/sobjects/Knowledge__kav/{{article_id}}"
inputParameters:
- name: article_id
in: path
operations:
- name: update-knowledge-article
method: PATCH
Generates a Production Part Approval Process report by pulling dimensional data from SAP QM, compiling into a Confluence page, and notifying quality engineering via Teams.
naftiko: "0.5"
info:
label: "Automated PPAP Report Generation"
description: "Generates a Production Part Approval Process report by pulling dimensional data from SAP QM, compiling into a Confluence page, and notifying quality engineering via Teams."
tags:
- quality
- sap
- confluence
- microsoft-teams
- manufacturing
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: generate-ppap-report
description: "Given a part number and inspection lot, pull PPAP data from SAP QM, create a Confluence report, and notify quality engineering via Teams."
inputParameters:
- name: part_number
in: body
type: string
description: "Part number for the PPAP."
- name: inspection_lot
in: body
type: string
description: "SAP inspection lot number."
steps:
- name: get-inspection-data
type: call
call: "sap-qm.get-inspection-results"
with:
InspectionLot: "{{inspection_lot}}"
- name: create-ppap-page
type: call
call: "confluence.create-page"
with:
space_key: "QA"
title: "PPAP Report: {{part_number}}"
body: "Part: {{part_number}} | Lot: {{inspection_lot}} | Results: {{get-inspection-data.results}}"
- name: notify-quality
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "PPAP REPORT: {{part_number}} | Lot: {{inspection_lot}} | Report: {{create-ppap-page.url}}"
consumes:
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{InspectionLot}')"
inputParameters:
- name: InspectionLot
in: path
operations:
- name: get-inspection-results
method: GET
- namespace: confluence
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When statistical process control charts in Datadog detect an out-of-control condition, creates a SAP QM notification and alerts the process engineer via Teams.
naftiko: "0.5"
info:
label: "Automated SPC Chart Alert"
description: "When statistical process control charts in Datadog detect an out-of-control condition, creates a SAP QM notification and alerts the process engineer via Teams."
tags:
- quality
- manufacturing
- datadog
- sap
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: handle-spc-alert
description: "Given a Datadog alert ID, process name, and parameter, create a SAP QM notification and alert the process engineer via Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert identifier."
- name: process_name
in: body
type: string
description: "Manufacturing process name."
- name: parameter
in: body
type: string
description: "Out-of-control parameter."
steps:
- name: create-qm-notification
type: call
call: "sap-qm.create-notification"
with:
notification_type: "Q2"
description: "SPC Alert: {{process_name}} - {{parameter}} out of control"
- name: alert-engineer
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "SPC ALERT: {{process_name}} | {{parameter}} | Alert: {{alert_id}} | QN: {{create-qm-notification.number}}"
consumes:
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: notifications
path: "/A_QualityNotification"
operations:
- name: create-notification
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Reconciles timecards by comparing Workday time entries against SAP project hours, flagging discrepancies in Jira, and notifying managers via Teams.
naftiko: "0.5"
info:
label: "Automated Timecard Reconciliation"
description: "Reconciles timecards by comparing Workday time entries against SAP project hours, flagging discrepancies in Jira, and notifying managers via Teams."
tags:
- hr
- workday
- sap
- jira
- microsoft-teams
- finance
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: reconcile-timecards
description: "Given a cost center and pay period, compare Workday entries against SAP hours, flag discrepancies in Jira, and notify managers via Teams."
inputParameters:
- name: cost_center
in: body
type: string
description: "Cost center code."
- name: pay_period
in: body
type: string
description: "Pay period identifier."
steps:
- name: get-workday-hours
type: call
call: "workday.get-time-entries"
with:
cost_center: "{{cost_center}}"
period: "{{pay_period}}"
- name: get-sap-hours
type: call
call: "sap-s4.get-project-hours"
with:
CostCenter: "{{cost_center}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "HR"
issuetype: "Task"
summary: "Timecard Recon: {{cost_center}} - {{pay_period}}"
- name: notify-managers
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "TIMECARD RECON: {{cost_center}} | {{pay_period}} | Jira: {{create-ticket.key}}"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: time-entries
path: "/workers/timeEntries"
operations:
- name: get-time-entries
method: GET
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: hours
path: "/A_CostCenterActivityType"
operations:
- name: get-project-hours
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Ingests autonomous vehicle test data by triggering a Snowflake data load, running validation queries, and notifying the AV engineering team via Teams.
naftiko: "0.5"
info:
label: "Autonomous Vehicle Test Data Ingestion"
description: "Ingests autonomous vehicle test data by triggering a Snowflake data load, running validation queries, and notifying the AV engineering team via Teams."
tags:
- engineering
- snowflake
- microsoft-teams
- autonomous-vehicle
- automotive
- analytics
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: ingest-av-test-data
description: "Given a test session ID and data source, load AV test data to Snowflake, validate, and notify the AV team via Teams."
inputParameters:
- name: session_id
in: body
type: string
description: "AV test session identifier."
- name: data_source
in: body
type: string
description: "S3 path to test data."
steps:
- name: load-data
type: call
call: "snowflake.execute-query"
with:
warehouse: "AV_WH"
query: "CALL sp_ingest_av_test('{{session_id}}', '{{data_source}}');"
- name: validate-data
type: call
call: "snowflake.execute-query"
with:
warehouse: "AV_WH"
query: "CALL sp_validate_av_test('{{session_id}}');"
- name: notify-av-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_av_channel_id"
text: "AV TEST DATA: Session {{session_id}} | Load: {{load-data.status}} | Validation: {{validate-data.status}}"
consumes:
- namespace: snowflake
type: http
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: execute-query
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors Azure subscription spend for connected vehicle and IT workloads, records anomalies to Snowflake, and raises ServiceNow incidents when daily thresholds are exceeded.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Detection"
description: "Monitors Azure subscription spend for connected vehicle and IT workloads, records anomalies to Snowflake, and raises ServiceNow incidents when daily thresholds are exceeded."
tags:
- cloud
- finops
- azure
- snowflake
- servicenow
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: detect-cost-anomaly
description: "Given an Azure subscription ID and daily budget threshold, query current daily spend, log to Snowflake, and raise a ServiceNow incident if the threshold is breached. Use daily for FinOps monitoring across Ford Azure subscriptions."
inputParameters:
- name: subscription_id
in: body
type: string
description: "Azure subscription ID to monitor."
- name: threshold_usd
in: body
type: number
description: "Daily spend threshold in USD."
steps:
- name: get-daily-cost
type: call
call: azure.query-cost
with:
subscription_id: "{{subscription_id}}"
- name: log-cost
type: call
call: snowflake.insert-cost-record
with:
subscription_id: "{{subscription_id}}"
daily_cost: "{{get-daily-cost.total_cost}}"
- name: raise-incident
type: call
call: servicenow.create-incident
with:
short_description: "Azure cost anomaly: ${{get-daily-cost.total_cost}} on {{subscription_id}}"
urgency: "2"
category: "cloud_cost"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: cost-query
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: query-cost
method: POST
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: cost-records
path: "/statements"
operations:
- name: insert-cost-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://ford.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
Analyzes Azure spending anomalies, logs optimization recommendations in ServiceNow, and notifies the cloud governance team via Teams.
naftiko: "0.5"
info:
label: "Azure Cost Optimization Recommendation"
description: "Analyzes Azure spending anomalies, logs optimization recommendations in ServiceNow, and notifies the cloud governance team via Teams."
tags:
- cloud
- microsoft-azure
- servicenow
- microsoft-teams
- cost-optimization
- devops
capability:
exposes:
- type: mcp
namespace: cloud-ops
port: 8080
tools:
- name: analyze-azure-costs
description: "Given a subscription ID and reporting month, analyze Azure spending, log recommendations in ServiceNow, and notify governance via Teams."
inputParameters:
- name: subscription_id
in: body
type: string
description: "Azure subscription ID."
- name: reporting_month
in: body
type: string
description: "Reporting month."
steps:
- name: get-cost-analysis
type: call
call: "azure.get-cost-management"
with:
subscriptionId: "{{subscription_id}}"
- name: log-recommendations
type: call
call: "servicenow.create-record"
with:
table: "u_cloud_cost_recommendations"
subscription: "{{subscription_id}}"
- name: notify-governance
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_cloud_governance_channel_id"
text: "AZURE COST: {{subscription_id}} | {{reporting_month}} | SNOW: {{log-recommendations.sys_id}}"
consumes:
- namespace: azure
type: http
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: cost-management
path: "/subscriptions/{{subscriptionId}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscriptionId
in: path
operations:
- name: get-cost-management
method: POST
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves the current build status for a pipeline in Azure DevOps by build ID.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Lookup"
description: "Retrieves the current build status for a pipeline in Azure DevOps by build ID."
tags:
- devops
- azure-devops
- ci-cd
- lookup
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-build-status
description: "Given an Azure DevOps build ID, retrieve the build status including result, start time, and source branch."
inputParameters:
- name: build_id
in: body
type: string
description: "Azure DevOps build ID, e.g. '48231'."
call: "azure-devops.get-build"
with:
buildId: "{{build_id}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
- name: status
type: string
mapping: "$.status"
consumes:
- namespace: azure-devops
type: http
baseUri: "https://dev.azure.com/ford"
authentication:
type: basic
username: "$secrets.azure_devops_user"
password: "$secrets.azure_devops_pat"
resources:
- name: builds
path: "/_apis/build/builds/{{buildId}}"
inputParameters:
- name: buildId
in: path
operations:
- name: get-build
method: GET
Monitors robotic weld quality metrics via Datadog, logs deviations in SAP QM, and alerts the body shop supervisor via Teams when parameters drift.
naftiko: "0.5"
info:
label: "Body Shop Weld Quality Monitoring"
description: "Monitors robotic weld quality metrics via Datadog, logs deviations in SAP QM, and alerts the body shop supervisor via Teams when parameters drift."
tags:
- quality
- manufacturing
- datadog
- sap
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: monitor-weld-quality
description: "Given a body shop line ID and weld station, retrieve weld quality metrics from Datadog, log deviations in SAP QM, and alert the supervisor via Teams."
inputParameters:
- name: line_id
in: body
type: string
description: "Body shop line identifier."
- name: weld_station
in: body
type: string
description: "Weld station identifier."
steps:
- name: get-weld-metrics
type: call
call: "datadog.query-metrics"
with:
query: "avg:weld.quality{line:{{line_id}},station:{{weld_station}}}"
- name: log-deviation
type: call
call: "sap-qm.create-quality-record"
with:
work_center: "{{line_id}}"
operation: "{{weld_station}}"
- name: alert-supervisor
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_body_shop_channel_id"
text: "WELD QUALITY: {{line_id}} | Station: {{weld_station}} | QM: {{log-deviation.number}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-records
path: "/A_InspectionLot"
operations:
- name: create-quality-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates a compliance document review by pulling the document from SharePoint, creating a Jira review task, and notifying reviewers via Teams.
naftiko: "0.5"
info:
label: "Compliance Document Review Cycle"
description: "Initiates a compliance document review by pulling the document from SharePoint, creating a Jira review task, and notifying reviewers via Teams."
tags:
- compliance
- sharepoint
- jira
- microsoft-teams
- quality
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: initiate-document-review
description: "Given a SharePoint document ID and review deadline, retrieve the document, create a Jira review task, and notify reviewers via Teams."
inputParameters:
- name: document_id
in: body
type: string
description: "SharePoint document ID."
- name: review_deadline
in: body
type: string
description: "Review deadline."
steps:
- name: get-document
type: call
call: "sharepoint.get-document"
with:
item_id: "{{document_id}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "COMP"
issuetype: "Task"
summary: "Review: {{get-document.Title}}"
duedate: "{{review_deadline}}"
- name: notify-reviewers
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_compliance_channel_id"
text: "REVIEW: {{get-document.Title}} | Deadline: {{review_deadline}} | Jira: {{create-review-task.key}}"
consumes:
- namespace: sharepoint
type: http
baseUri: "https://ford.sharepoint.com/_api"
authentication:
type: bearer
token: "$secrets.sharepoint_access_token"
resources:
- name: documents
path: "/web/lists/getbytitle('ComplianceDocs')/items({{item_id}})"
inputParameters:
- name: item_id
in: path
operations:
- name: get-document
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Searches Confluence for vehicle engineering specifications by keyword, returning matching page titles and links.
naftiko: "0.5"
info:
label: "Confluence Engineering Spec Search"
description: "Searches Confluence for vehicle engineering specifications by keyword, returning matching page titles and links."
tags:
- engineering
- confluence
- documentation
- search
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: search-engineering-specs
description: "Given a search keyword, query Confluence for vehicle engineering specification documents and return matching page titles and links. Use when engineers need to find design or spec documents."
inputParameters:
- name: keyword
in: body
type: string
description: "Search keyword, e.g. 'F-150 suspension geometry'."
call: "confluence.search-content"
with:
cql: "type=page AND space=ENG AND text~\"{{keyword}}\""
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- namespace: confluence
type: http
baseUri: "https://ford.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/content/search"
operations:
- name: search-content
method: GET
After a ServiceNow production incident is closed, creates a Confluence post-incident review page with resolution details and lessons learned for the IT knowledge base.
naftiko: "0.5"
info:
label: "Confluence Post-Incident Knowledge Capture"
description: "After a ServiceNow production incident is closed, creates a Confluence post-incident review page with resolution details and lessons learned for the IT knowledge base."
tags:
- itsm
- knowledge-management
- servicenow
- confluence
- incident-response
capability:
exposes:
- type: mcp
namespace: incident-knowledge
port: 8080
tools:
- name: capture-post-incident-review
description: "Given a resolved ServiceNow incident number and Confluence space key, fetch incident close notes and create a post-incident review (PIR) page in Confluence for the IT knowledge base."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number (e.g., INC0078901)."
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for the IT knowledge base (e.g., ITOPS)."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
number: "{{incident_number}}"
- name: create-pir-page
type: call
call: confluence.create-page
with:
space_key: "{{confluence_space_key}}"
title: "PIR: {{incident_number}} — {{get-incident.short_description}}"
body: "Incident: {{incident_number}}\nSummary: {{get-incident.short_description}}\nImpact: {{get-incident.impact}}\nRoot Cause: {{get-incident.close_notes}}\nResolution: {{get-incident.resolution_notes}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: confluence
baseUri: "https://ford.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
Orchestrates an over-the-air software update by querying eligible vehicles, scheduling the rollout via ServiceNow, and notifying the connected vehicle team via Teams.
naftiko: "0.5"
info:
label: "Connected Vehicle OTA Update Rollout"
description: "Orchestrates an over-the-air software update by querying eligible vehicles, scheduling the rollout via ServiceNow, and notifying the connected vehicle team via Teams."
tags:
- automotive
- servicenow
- microsoft-teams
- connected-vehicle
- software-update
capability:
exposes:
- type: mcp
namespace: connected-vehicle-ops
port: 8080
tools:
- name: rollout-ota-update
description: "Given an OTA package version, target vehicle models, and rollout percentage, schedule the deployment via ServiceNow, and notify the connected vehicle team via Teams."
inputParameters:
- name: package_version
in: body
type: string
description: "OTA software package version."
- name: target_models
in: body
type: string
description: "Target vehicle models, e.g. 'Mustang Mach-E, F-150 Lightning'."
- name: rollout_percentage
in: body
type: string
description: "Rollout percentage, e.g. '10'."
steps:
- name: create-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "OTA Update {{package_version}} to {{target_models}}"
description: "Rollout: {{rollout_percentage}}% | Models: {{target_models}}"
- name: schedule-deployment
type: call
call: "servicenow.create-task"
with:
short_description: "Deploy OTA {{package_version}}"
parent: "{{create-change-request.number}}"
- name: notify-cv-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_cv_channel_id"
text: "OTA ROLLOUT: {{package_version}} | Models: {{target_models}} | {{rollout_percentage}}% | CR: {{create-change-request.number}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves the latest telemetry data for a connected vehicle from the Ford connected vehicle platform by VIN.
naftiko: "0.5"
info:
label: "Connected Vehicle Telemetry Lookup"
description: "Retrieves the latest telemetry data for a connected vehicle from the Ford connected vehicle platform by VIN."
tags:
- automotive
- connected-vehicle
- telemetry
- lookup
capability:
exposes:
- type: mcp
namespace: connected-vehicle
port: 8080
tools:
- name: get-vehicle-telemetry
description: "Given a vehicle VIN, retrieve the latest telemetry data including location, fuel level, and diagnostic codes."
inputParameters:
- name: vin
in: body
type: string
description: "Vehicle VIN, e.g. '1FTFW1E57NFA00001'."
call: "ford-cv.get-vehicle-status"
with:
vin: "{{vin}}"
outputParameters:
- name: fuel_level
type: string
mapping: "$.vehicleStatus.fuelLevel"
- name: odometer
type: string
mapping: "$.vehicleStatus.odometer"
consumes:
- namespace: ford-cv
type: http
baseUri: "https://api.ford.com/connected-vehicle/v2"
authentication:
type: bearer
token: "$secrets.ford_cv_api_token"
resources:
- name: vehicles
path: "/vehicles/{{vin}}/status"
inputParameters:
- name: vin
in: path
operations:
- name: get-vehicle-status
method: GET
When a program milestone is completed in Jira, creates a SAP billing document, updates the Salesforce contract, and notifies finance via Teams.
naftiko: "0.5"
info:
label: "Contract Milestone Billing Trigger"
description: "When a program milestone is completed in Jira, creates a SAP billing document, updates the Salesforce contract, and notifies finance via Teams."
tags:
- finance
- jira
- sap
- salesforce
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: trigger-milestone-billing
description: "Given a Jira milestone key and contract number, create a SAP billing document, update Salesforce, and notify finance via Teams."
inputParameters:
- name: milestone_key
in: body
type: string
description: "Jira milestone issue key."
- name: contract_number
in: body
type: string
description: "Contract number."
- name: billing_amount
in: body
type: string
description: "Billing amount."
steps:
- name: get-milestone
type: call
call: "jira.get-issue"
with:
issue_key: "{{milestone_key}}"
- name: create-billing-doc
type: call
call: "sap-s4.create-billing-document"
with:
contract: "{{contract_number}}"
amount: "{{billing_amount}}"
- name: notify-finance
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "BILLED: {{get-milestone.fields.summary}} | Contract: {{contract_number}} | Amount: {{billing_amount}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: billing
path: "/A_BillingDocument"
operations:
- name: create-billing-document
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When spare parts inventory drops below threshold in SAP, creates a purchase requisition, logs in ServiceNow, and notifies procurement via Teams.
naftiko: "0.5"
info:
label: "Critical Spare Parts Reorder Workflow"
description: "When spare parts inventory drops below threshold in SAP, creates a purchase requisition, logs in ServiceNow, and notifies procurement via Teams."
tags:
- supply-chain
- sap
- servicenow
- microsoft-teams
- procurement
- manufacturing
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: reorder-critical-spare
description: "Given a material number, plant code, and current stock, create a SAP purchase requisition, log in ServiceNow, and notify procurement via Teams."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number."
- name: plant_code
in: body
type: string
description: "SAP plant code."
- name: current_stock
in: body
type: string
description: "Current stock quantity."
steps:
- name: create-purchase-req
type: call
call: "sap-s4.create-purchase-requisition"
with:
Material: "{{material_number}}"
Plant: "{{plant_code}}"
- name: log-reorder
type: call
call: "servicenow.create-record"
with:
table: "u_reorder_log"
material: "{{material_number}}"
pr_number: "{{create-purchase-req.PurchaseRequisition}}"
- name: notify-procurement
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "REORDER: {{material_number}} at {{plant_code}} | Stock: {{current_stock}} | PR: {{create-purchase-req.PurchaseRequisition}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: purchase-requisitions
path: "/A_PurchaseRequisitionHeader"
operations:
- name: create-purchase-requisition
method: POST
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Syncs vehicle program status across Jira, SAP, and Salesforce, publishes a consolidated report to Confluence, and notifies leadership via Teams.
naftiko: "0.5"
info:
label: "Cross-Functional Program Status Sync"
description: "Syncs vehicle program status across Jira, SAP, and Salesforce, publishes a consolidated report to Confluence, and notifies leadership via Teams."
tags:
- project-management
- jira
- sap
- salesforce
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: program-ops
port: 8080
tools:
- name: sync-program-status
description: "Given a vehicle program name, pull status from Jira, SAP, and Salesforce, publish to Confluence, and notify leadership via Teams."
inputParameters:
- name: program_name
in: body
type: string
description: "Vehicle program name."
- name: reporting_period
in: body
type: string
description: "Reporting period."
steps:
- name: get-jira-status
type: call
call: "jira.search-issues"
with:
jql: "project = '{{program_name}}' AND status != Done"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "{{program_name}}"
title: "Status: {{reporting_period}}"
body: "Open Issues: {{get-jira-status.total}}"
- name: notify-leadership
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_leadership_channel_id"
text: "PROGRAM STATUS: {{program_name}} | {{reporting_period}} | Open: {{get-jira-status.total}} | Report: {{publish-report.url}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
method: POST
- namespace: confluence
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation, and alerting customer support via Teams.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Workflow"
description: "Processes a customer complaint from Salesforce by creating a SAP quality notification, opening a Jira investigation, and alerting customer support via Teams."
tags:
- quality
- salesforce
- sap
- jira
- microsoft-teams
- customer-support
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: process-customer-complaint
description: "Given a Salesforce case number and complaint, create a SAP QN, open a Jira investigation, and notify support via Teams."
inputParameters:
- name: case_number
in: body
type: string
description: "Salesforce case number."
- name: complaint_description
in: body
type: string
description: "Complaint description."
steps:
- name: create-qn
type: call
call: "sap-s4.create-qn"
with:
notification_type: "Q3"
description: "{{complaint_description}}"
reference: "{{case_number}}"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "QA"
issuetype: "Bug"
summary: "Complaint: {{case_number}}"
description: "QN: {{create-qn.number}} | {{complaint_description}}"
- name: alert-support
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_support_channel_id"
text: "COMPLAINT: Case {{case_number}} | QN: {{create-qn.number}} | Jira: {{create-investigation.key}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-notifications
path: "/A_QualityNotification"
operations:
- name: create-qn
method: POST
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Responds to a cybersecurity alert from Splunk by creating a ServiceNow security incident, suspending the affected Okta account, and alerting security via Teams.
naftiko: "0.5"
info:
label: "Cybersecurity Incident Response Chain"
description: "Responds to a cybersecurity alert from Splunk by creating a ServiceNow security incident, suspending the affected Okta account, and alerting security via Teams."
tags:
- security
- splunk
- servicenow
- okta
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: handle-cyber-incident
description: "Given a Splunk alert ID and affected user email, create a ServiceNow security incident, suspend the Okta account, and alert the security team via Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "Splunk alert identifier."
- name: affected_user
in: body
type: string
description: "Email of the affected user."
- name: threat_description
in: body
type: string
description: "Description of the detected threat."
steps:
- name: create-security-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "SECURITY: {{threat_description}}"
urgency: "1"
impact: "1"
category: "security"
- name: suspend-okta-account
type: call
call: "okta.suspend-user"
with:
login: "{{affected_user}}"
- name: alert-security
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "CYBER INCIDENT: {{threat_description}} | User: {{affected_user}} | INC: {{create-security-incident.number}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.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
- namespace: okta
type: http
baseUri: "https://ford.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "SSWS $secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/suspend"
inputParameters:
- name: login
in: path
operations:
- name: suspend-user
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors Snowflake data ingestion quality, creates a Jira data quality ticket when issues are found, and alerts the data engineering team via Teams.
naftiko: "0.5"
info:
label: "Data Lake Ingestion Quality Monitor"
description: "Monitors Snowflake data ingestion quality, creates a Jira data quality ticket when issues are found, and alerts the data engineering team via Teams."
tags:
- data-engineering
- snowflake
- jira
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-ingestion-quality
description: "Given a database and table, check data quality in Snowflake, create a Jira ticket if issues found, and notify data engineering via Teams."
inputParameters:
- name: database_name
in: body
type: string
description: "Snowflake database name."
- name: table_name
in: body
type: string
description: "Snowflake table name."
steps:
- name: check-quality
type: call
call: "snowflake.execute-query"
with:
warehouse: "DATA_QUALITY_WH"
query: "CALL sp_check_data_quality('{{database_name}}', '{{table_name}}');"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "DQ: {{database_name}}.{{table_name}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_data_eng_channel_id"
text: "DATA QUALITY: {{database_name}}.{{table_name}} | Jira: {{create-ticket.key}}"
consumes:
- namespace: snowflake
type: http
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: execute-query
method: POST
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Queries Datadog for SLO compliance across connected vehicle and FordPass API services, writes results to Snowflake, and posts a weekly digest to engineering leadership via Teams.
naftiko: "0.5"
info:
label: "Datadog Connected Vehicle Service SLO Report"
description: "Queries Datadog for SLO compliance across connected vehicle and FordPass API services, writes results to Snowflake, and posts a weekly digest to engineering leadership via Teams."
tags:
- observability
- slo
- datadog
- snowflake
- msteams
- automotive
- reporting
capability:
exposes:
- type: mcp
namespace: cv-slo-reporting
port: 8080
tools:
- name: report-cv-slo-compliance
description: "Given a service tag and SLO evaluation window, fetch SLO status from Datadog, write compliance data to Snowflake, and post a Teams digest if SLOs are at risk. Use weekly for connected vehicle platform reviews."
inputParameters:
- name: service_tag
in: body
type: string
description: "Datadog service tag for connected vehicle services (e.g., service:fordpass-api)."
- name: time_window
in: body
type: string
description: "Evaluation window: 7d, 30d, or 90d."
steps:
- name: get-slo-status
type: call
call: datadog.list-slos
with:
tags: "{{service_tag}}"
time_window: "{{time_window}}"
- name: write-compliance
type: call
call: snowflake.insert-slo-row
with:
service_tag: "{{service_tag}}"
time_window: "{{time_window}}"
at_risk_count: "{{get-slo-status.at_risk_count}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel: "connected-vehicle-leadership"
text: "SLO Report ({{time_window}}) | {{service_tag}}: {{get-slo-status.at_risk_count}} SLOs at risk."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
inputParameters:
- name: tags
in: query
- name: time_window
in: query
operations:
- name: list-slos
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: slo-table
path: "/statements"
operations:
- name: insert-slo-row
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/engineering/channels/cv-leadership/messages"
operations:
- name: send-message
method: POST
Retrieves current health status of a monitored service from Datadog by service name.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Retrieves current health status of a monitored service from Datadog by service name."
tags:
- monitoring
- datadog
- health-check
- operations
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-service-health
description: "Given a Datadog service name, retrieve the current health status including uptime, error rate, and active alerts. Use for quick service health verification."
inputParameters:
- name: service_name
in: body
type: string
description: "Datadog service name, e.g. 'ford-pass-api'."
call: "datadog.get-service-summary"
with:
service: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
- name: error_rate
type: string
mapping: "$.data.attributes.error_rate"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/services/definitions/{{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-service-summary
method: GET
Syncs dealer incentive program data from SAP to Salesforce, refreshes the Power BI dashboard, and notifies the sales team via Teams.
naftiko: "0.5"
info:
label: "Dealer Incentive Program Sync"
description: "Syncs dealer incentive program data from SAP to Salesforce, refreshes the Power BI dashboard, and notifies the sales team via Teams."
tags:
- sales
- sap
- salesforce
- microsoft-teams
- automotive
- analytics
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: sync-dealer-incentives
description: "Given an incentive program ID and effective date, sync incentive data from SAP to Salesforce and notify the sales team via Teams."
inputParameters:
- name: program_id
in: body
type: string
description: "Incentive program identifier."
- name: effective_date
in: body
type: string
description: "Effective date."
steps:
- name: get-sap-incentives
type: call
call: "sap-s4.get-incentive-data"
with:
program: "{{program_id}}"
date: "{{effective_date}}"
- name: update-salesforce
type: call
call: "salesforce.update-incentive-records"
with:
program_id: "{{program_id}}"
data: "{{get-sap-incentives.results}}"
- name: notify-sales
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "INCENTIVE SYNC: {{program_id}} | Effective: {{effective_date}} | Records: {{get-sap-incentives.count}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: incentives
path: "/A_SalesIncentive"
operations:
- name: get-incentive-data
method: GET
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: incentives
path: "/sobjects/Incentive_Program__c"
operations:
- name: update-incentive-records
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Processes a dealer warranty claim from Salesforce by creating a SAP service order, opening a Jira investigation ticket, and notifying the warranty team via Teams.
naftiko: "0.5"
info:
label: "Dealer Warranty Claim Processing"
description: "Processes a dealer warranty claim from Salesforce by creating a SAP service order, opening a Jira investigation ticket, and notifying the warranty team via Teams."
tags:
- quality
- salesforce
- sap
- jira
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: warranty-ops
port: 8080
tools:
- name: process-warranty-claim
description: "Given a Salesforce case number, VIN, and claim description, create a SAP service order, open a Jira investigation, and notify the warranty team via Teams."
inputParameters:
- name: case_number
in: body
type: string
description: "Salesforce case number."
- name: vin
in: body
type: string
description: "Vehicle VIN."
- name: claim_description
in: body
type: string
description: "Description of the warranty claim."
steps:
- name: create-service-order
type: call
call: "sap-s4.create-service-order"
with:
reference: "{{case_number}}"
equipment: "{{vin}}"
description: "{{claim_description}}"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "WAR"
issuetype: "Bug"
summary: "Warranty: {{vin}} - {{claim_description}}"
description: "Case: {{case_number}} | SAP SO: {{create-service-order.ServiceOrder}}"
- name: notify-warranty
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_warranty_channel_id"
text: "WARRANTY CLAIM: {{vin}} | Case: {{case_number}} | SO: {{create-service-order.ServiceOrder}} | Jira: {{create-investigation.key}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_SERVICE_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: service-orders
path: "/A_ServiceOrder"
operations:
- name: create-service-order
method: POST
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Provisions building badge access by syncing employee data from Workday, creating an access request in ServiceNow, and confirming via Teams.
naftiko: "0.5"
info:
label: "Employee Badge Access Provisioning"
description: "Provisions building badge access by syncing employee data from Workday, creating an access request in ServiceNow, and confirming via Teams."
tags:
- security
- workday
- servicenow
- microsoft-teams
- access-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: provision-badge-access
description: "Given an employee ID and facility, retrieve employee data from Workday, create a ServiceNow access request, and notify security via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: facility_code
in: body
type: string
description: "Facility code."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-access-request
type: call
call: "servicenow.create-request"
with:
short_description: "Badge Access: {{get-employee.Name}} to {{facility_code}}"
- name: notify-security
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "BADGE REQUEST: {{get-employee.Name}} | Facility: {{facility_code}} | SNOW: {{create-access-request.number}}"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
On confirmed Workday termination, disables the Microsoft 365 account, removes GitHub organization access, and opens a ServiceNow offboarding checklist ticket.
naftiko: "0.5"
info:
label: "Employee Offboarding"
description: "On confirmed Workday termination, disables the Microsoft 365 account, removes GitHub organization access, and opens a ServiceNow offboarding checklist ticket."
tags:
- hr
- offboarding
- workday
- microsoft-365
- github
- servicenow
- identity
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, disable Microsoft 365 account, remove GitHub org membership, and open a ServiceNow IT offboarding ticket. Use on Workday termination confirmation events."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "Effective termination date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: disable-m365
type: call
call: msgraph.disable-user
with:
user_id: "{{get-worker.email}}"
- name: remove-github-access
type: call
call: github.remove-org-member
with:
org: "ford-motor-company"
username: "{{get-worker.github_username}}"
- name: open-offboarding-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Offboarding: {{get-worker.full_name}} — {{termination_date}}"
category: "offboarding"
assignment_group: "IT_Security"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-members
path: "/orgs/{{org}}/members/{{username}}"
inputParameters:
- name: org
in: path
- name: username
in: path
operations:
- name: remove-org-member
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://ford.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
Checks safety training compliance by pulling training records from Workday, comparing against requirements, and alerting managers via Teams for gaps.
naftiko: "0.5"
info:
label: "Employee Safety Training Compliance Check"
description: "Checks safety training compliance by pulling training records from Workday, comparing against requirements, and alerting managers via Teams for gaps."
tags:
- safety
- workday
- sap
- microsoft-teams
- training
- compliance
capability:
exposes:
- type: mcp
namespace: safety-ops
port: 8080
tools:
- name: check-safety-training
description: "Given a department code and training requirement, pull records from Workday, compare against requirements, and alert managers via Teams."
inputParameters:
- name: department_code
in: body
type: string
description: "Department code."
- name: training_requirement_id
in: body
type: string
description: "Training requirement identifier."
steps:
- name: get-training-records
type: call
call: "workday.get-training-completions"
with:
department: "{{department_code}}"
- name: get-requirements
type: call
call: "sap-ehs.get-training-requirements"
with:
requirement_id: "{{training_requirement_id}}"
- name: notify-managers
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_channel_id"
text: "SAFETY TRAINING: {{department_code}} | Completed: {{get-training-records.completed}} | Gaps: {{get-requirements.gaps}}"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: training
path: "/workers/training"
operations:
- name: get-training-completions
method: GET
- namespace: sap-ehs
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_EHS_TRAINING_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: requirements
path: "/A_TrainingRequirement"
operations:
- name: get-training-requirements
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Processes a vehicle engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying affected teams via Teams.
naftiko: "0.5"
info:
label: "Engineering Change Order Process"
description: "Processes a vehicle engineering change order by creating a Jira ECO ticket, updating the BOM in SAP, and notifying affected teams via Teams."
tags:
- engineering
- jira
- sap
- microsoft-teams
- automotive
- manufacturing
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: process-engineering-change
description: "Given a change description, affected part, and vehicle program, create a Jira ECO ticket, update the SAP BOM, and notify affected teams via Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the engineering change."
- name: affected_part
in: body
type: string
description: "Part number affected by the change."
- name: vehicle_program
in: body
type: string
description: "Vehicle program, e.g. 'F-150 Lightning'."
steps:
- name: create-eco-ticket
type: call
call: "jira.create-issue"
with:
project_key: "ECO"
issuetype: "Story"
summary: "ECO: {{affected_part}} - {{vehicle_program}}"
description: "{{change_description}}"
- name: update-sap-bom
type: call
call: "sap-s4.update-bom"
with:
material: "{{affected_part}}"
change_number: "{{create-eco-ticket.key}}"
- name: notify-teams
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "ECO: {{create-eco-ticket.key}} | Part: {{affected_part}} | Program: {{vehicle_program}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: bom
path: "/A_BillOfMaterial"
operations:
- name: update-bom
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Orchestrates a vehicle engineering design review by collecting documents from Confluence, creating a Jira review task, and notifying reviewers via Teams.
naftiko: "0.5"
info:
label: "Engineering Design Review Orchestration"
description: "Orchestrates a vehicle engineering design review by collecting documents from Confluence, creating a Jira review task, and notifying reviewers via Teams."
tags:
- engineering
- confluence
- jira
- microsoft-teams
- automotive
- design-review
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: orchestrate-design-review
description: "Given a Confluence page ID, review date, and reviewers, gather docs, create a Jira task, and notify reviewers via Teams."
inputParameters:
- name: confluence_page_id
in: body
type: string
description: "Confluence page ID."
- name: review_date
in: body
type: string
description: "Review date."
- name: reviewers
in: body
type: string
description: "Comma-separated reviewer emails."
steps:
- name: get-design-doc
type: call
call: "confluence.get-page"
with:
page_id: "{{confluence_page_id}}"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Task"
summary: "Design Review: {{get-design-doc.title}}"
duedate: "{{review_date}}"
- name: notify-reviewers
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "DESIGN REVIEW: {{get-design-doc.title}} | Date: {{review_date}} | Jira: {{create-review-task.key}}"
consumes:
- namespace: confluence
type: http
baseUri: "https://ford.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Collects environmental sensor data via Datadog, logs readings in ServiceNow, and alerts the EHS team via Teams when thresholds are exceeded.
naftiko: "0.5"
info:
label: "Environmental Compliance Monitoring"
description: "Collects environmental sensor data via Datadog, logs readings in ServiceNow, and alerts the EHS team via Teams when thresholds are exceeded."
tags:
- safety
- ehs
- datadog
- servicenow
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: ehs-ops
port: 8080
tools:
- name: monitor-environmental-compliance
description: "Given a plant code and sensor type, retrieve environmental readings from Datadog, log them in ServiceNow, and alert EHS if thresholds are exceeded."
inputParameters:
- name: plant_code
in: body
type: string
description: "Plant code, e.g. 'DEARBORN-TRUCK'."
- name: sensor_type
in: body
type: string
description: "Sensor type, e.g. 'VOC', 'particulate'."
steps:
- name: get-sensor-data
type: call
call: "datadog.query-metrics"
with:
query: "avg:env.{{sensor_type}}.level{plant:{{plant_code}}}"
- name: log-reading
type: call
call: "servicenow.create-record"
with:
table: "u_environmental_readings"
plant: "{{plant_code}}"
sensor_type: "{{sensor_type}}"
- name: alert-ehs
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_ehs_channel_id"
text: "ENV READING: {{plant_code}} | {{sensor_type}} | Record: {{log-reading.sys_id}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves battery health diagnostics for a Ford electric vehicle from the connected vehicle platform by VIN.
naftiko: "0.5"
info:
label: "EV Battery Diagnostic Check"
description: "Retrieves battery health diagnostics for a Ford electric vehicle from the connected vehicle platform by VIN."
tags:
- automotive
- ev
- diagnostics
- connected-vehicle
- lookup
capability:
exposes:
- type: mcp
namespace: ev-ops
port: 8080
tools:
- name: check-battery-health
description: "Given an EV VIN, retrieve battery state of health, charge cycles, and thermal management status."
inputParameters:
- name: vin
in: body
type: string
description: "Electric vehicle VIN."
call: "ford-cv.get-battery-diagnostics"
with:
vin: "{{vin}}"
outputParameters:
- name: state_of_health
type: string
mapping: "$.battery.state_of_health"
- name: charge_cycles
type: string
mapping: "$.battery.charge_cycles"
consumes:
- namespace: ford-cv
type: http
baseUri: "https://api.ford.com/connected-vehicle/v2"
authentication:
type: bearer
token: "$secrets.ford_cv_api_token"
resources:
- name: battery
path: "/vehicles/{{vin}}/battery"
inputParameters:
- name: vin
in: path
operations:
- name: get-battery-diagnostics
method: GET
Manages an EV battery recall by identifying affected VINs in Salesforce, creating a SAP quality notification, and notifying the recall team via Teams.
naftiko: "0.5"
info:
label: "EV Battery Recall Management"
description: "Manages an EV battery recall by identifying affected VINs in Salesforce, creating a SAP quality notification, and notifying the recall team via Teams."
tags:
- quality
- salesforce
- sap
- microsoft-teams
- ev
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: manage-ev-recall
description: "Given a recall campaign ID and defect description, identify affected VINs in Salesforce, create a SAP quality notification, and notify the recall team via Teams."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Recall campaign identifier."
- name: defect_description
in: body
type: string
description: "Description of the battery defect."
steps:
- name: get-affected-vins
type: call
call: "salesforce.query-vehicles"
with:
campaign_id: "{{campaign_id}}"
- name: create-sap-notification
type: call
call: "sap-s4.create-qn"
with:
notification_type: "Q2"
description: "EV Battery Recall {{campaign_id}}: {{defect_description}}"
- name: notify-recall-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_recall_channel_id"
text: "EV RECALL: {{campaign_id}} | Affected VINs: {{get-affected-vins.count}} | QN: {{create-sap-notification.number}}"
consumes:
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: vehicles
path: "/query"
operations:
- name: query-vehicles
method: GET
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-notifications
path: "/A_QualityNotification"
operations:
- name: create-qn
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When an EV charging station reports a fault via Datadog, creates a ServiceNow incident, schedules a SAP PM work order, and alerts the facilities team via Teams.
naftiko: "0.5"
info:
label: "EV Charging Station Maintenance Workflow"
description: "When an EV charging station reports a fault via Datadog, creates a ServiceNow incident, schedules a SAP PM work order, and alerts the facilities team via Teams."
tags:
- ev
- datadog
- servicenow
- sap
- microsoft-teams
- maintenance
capability:
exposes:
- type: mcp
namespace: facilities-ops
port: 8080
tools:
- name: handle-charger-fault
description: "Given a charger station ID and fault code, create a ServiceNow incident, a SAP PM work order, and alert facilities via Teams."
inputParameters:
- name: station_id
in: body
type: string
description: "EV charging station identifier."
- name: fault_code
in: body
type: string
description: "Fault code reported."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "EV Charger Fault: {{station_id}} - {{fault_code}}"
urgency: "2"
- name: create-work-order
type: call
call: "sap-pm.create-work-order"
with:
equipment: "{{station_id}}"
description: "Fault: {{fault_code}}"
- name: alert-facilities
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_facilities_channel_id"
text: "EV CHARGER FAULT: {{station_id}} | Code: {{fault_code}} | INC: {{create-incident.number}} | WO: {{create-work-order.MaintenanceOrder}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.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
- namespace: sap-pm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: work-orders
path: "/MaintenanceOrder"
operations:
- name: create-work-order
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When Datadog detects an IoT sensor anomaly on the factory floor, creates a ServiceNow incident, triggers a SAP PM work order, and alerts maintenance via Teams.
naftiko: "0.5"
info:
label: "Factory Floor IoT Anomaly Response"
description: "When Datadog detects an IoT sensor anomaly on the factory floor, creates a ServiceNow incident, triggers a SAP PM work order, and alerts maintenance via Teams."
tags:
- manufacturing
- datadog
- servicenow
- sap
- microsoft-teams
- iot
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: handle-iot-anomaly
description: "Given a Datadog alert ID, sensor ID, and anomaly type, create a ServiceNow incident, a SAP PM work order, and alert maintenance via Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert identifier."
- name: sensor_id
in: body
type: string
description: "IoT sensor identifier."
- name: anomaly_type
in: body
type: string
description: "Anomaly type."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "IoT Anomaly: {{anomaly_type}} on {{sensor_id}}"
urgency: "2"
- name: create-work-order
type: call
call: "sap-pm.create-work-order"
with:
equipment: "{{sensor_id}}"
description: "IoT anomaly: {{anomaly_type}}"
- name: alert-maintenance
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_maintenance_channel_id"
text: "IoT ANOMALY: {{anomaly_type}} | Sensor: {{sensor_id}} | INC: {{create-incident.number}} | WO: {{create-work-order.MaintenanceOrder}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.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
- namespace: sap-pm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: work-orders
path: "/MaintenanceOrder"
operations:
- name: create-work-order
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Validates final assembly quality gate criteria by pulling inspection results from SAP QM, checking Jira acceptance criteria, and posting gate status to Teams.
naftiko: "0.5"
info:
label: "Final Assembly Quality Gate Check"
description: "Validates final assembly quality gate criteria by pulling inspection results from SAP QM, checking Jira acceptance criteria, and posting gate status to Teams."
tags:
- quality
- manufacturing
- sap
- jira
- microsoft-teams
- production
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: check-quality-gate
description: "Given a production order and quality gate ID, pull inspection results from SAP QM, verify against Jira criteria, and post status to Teams."
inputParameters:
- name: production_order
in: body
type: string
description: "SAP production order number."
- name: quality_gate_id
in: body
type: string
description: "Quality gate identifier."
steps:
- name: get-inspection-results
type: call
call: "sap-qm.get-results"
with:
production_order: "{{production_order}}"
- name: check-acceptance
type: call
call: "jira.get-issue"
with:
issue_key: "{{quality_gate_id}}"
- name: post-gate-status
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "QUALITY GATE: {{quality_gate_id}} | Order: {{production_order}} | Result: {{get-inspection-results.disposition}}"
consumes:
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: inspection-results
path: "/A_InspectionLot"
operations:
- name: get-results
method: GET
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When Datadog detects a FordPass app service degradation, creates a ServiceNow P1 incident, and alerts the app team via Teams.
naftiko: "0.5"
info:
label: "FordPass App Incident Response"
description: "When Datadog detects a FordPass app service degradation, creates a ServiceNow P1 incident, and alerts the app team via Teams."
tags:
- connected-vehicle
- datadog
- servicenow
- microsoft-teams
- incident-response
- automotive
capability:
exposes:
- type: mcp
namespace: connected-vehicle-ops
port: 8080
tools:
- name: handle-fordpass-incident
description: "Given a Datadog alert ID and service name, create a ServiceNow P1 incident and alert the FordPass team via Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert identifier."
- name: service_name
in: body
type: string
description: "Affected FordPass service."
steps:
- name: get-alert-details
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[P1] FordPass: {{service_name}} degradation"
urgency: "1"
impact: "1"
description: "Alert: {{alert_id}} | {{get-alert-details.message}}"
- name: alert-app-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_fordpass_channel_id"
text: "P1 FORDPASS: {{service_name}} | Alert: {{alert_id}} | INC: {{create-incident.number}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-monitor
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
On a GitHub Actions pipeline failure on a main branch, creates a Jira engineering bug, posts a Datadog deployment marker, and alerts the software engineering team via Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Response"
description: "On a GitHub Actions pipeline failure on a main branch, creates a Jira engineering bug, posts a Datadog deployment marker, and alerts the software engineering team via Teams."
tags:
- devops
- ci-cd
- github
- jira
- datadog
- msteams
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub repository, run ID, branch, and commit SHA, create a Jira bug for the failure, post a Datadog event, and alert the engineering Teams channel."
inputParameters:
- name: repo_full_name
in: body
type: string
description: "GitHub repository full name (e.g., ford-motor-company/connected-vehicle-api)."
- name: run_id
in: body
type: string
description: "GitHub Actions workflow run ID."
- name: branch
in: body
type: string
description: "Branch name where the failure occurred."
- name: commit_sha
in: body
type: string
description: "Commit SHA of the failing run."
steps:
- name: get-run
type: call
call: github.get-workflow-run
with:
repo: "{{repo_full_name}}"
run_id: "{{run_id}}"
- name: create-bug
type: call
call: jira.create-issue
with:
project_key: "SWE"
issuetype: "Bug"
summary: "[CI Failure] {{repo_full_name}} / {{branch}}"
description: "Run: {{run_id}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nConclusion: {{get-run.conclusion}}"
- name: post-dd-event
type: call
call: datadog.create-event
with:
title: "CI Failure: {{repo_full_name}}"
text: "Branch {{branch}} run {{run_id}} failed. Commit: {{commit_sha}}"
alert_type: "error"
tags: "repo:{{repo_full_name}},branch:{{branch}}"
- name: alert-engineering
type: call
call: msteams.send-message
with:
channel: "software-engineering"
text: "Pipeline failure: {{repo_full_name}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{run_id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira
baseUri: "https://ford.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/engineering/channels/swe-alerts/messages"
operations:
- name: send-message
method: POST
Scans Ford GitHub organization repositories for critical Dependabot alerts, creates Jira security issues for each finding, and notifies the cybersecurity team via Teams.
naftiko: "0.5"
info:
label: "GitHub Dependabot Security Alert Triage"
description: "Scans Ford GitHub organization repositories for critical Dependabot alerts, creates Jira security issues for each finding, and notifies the cybersecurity team via Teams."
tags:
- security
- devops
- github
- jira
- msteams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-hygiene
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given a GitHub org and severity level, list open Dependabot vulnerability alerts, create a Jira security tracking issue, and notify the cybersecurity Teams channel."
inputParameters:
- name: github_org
in: body
type: string
description: "GitHub organization name (e.g., ford-motor-company)."
- name: severity
in: body
type: string
description: "Minimum severity: critical, high, medium, or low."
steps:
- name: list-alerts
type: call
call: github.list-dependabot-alerts
with:
org: "{{github_org}}"
severity: "{{severity}}"
- name: create-jira-issue
type: call
call: jira.create-issue
with:
project_key: "CYBER"
issuetype: "Security Vulnerability"
summary: "Dependabot {{severity}} alerts in {{github_org}}: {{list-alerts.alert_count}} findings"
description: "Repos: {{list-alerts.repo_names}}. Packages: {{list-alerts.package_names}}"
- name: notify-security
type: call
call: msteams.send-message
with:
channel: "cybersecurity"
text: "Dependabot: {{list-alerts.alert_count}} {{severity}} alerts | {{github_org}} | Jira: {{create-jira-issue.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/orgs/{{org}}/dependabot/alerts"
inputParameters:
- name: org
in: path
- name: severity
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://ford.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.msteams_token"
resources:
- name: channel-messages
path: "/teams/security/channels/cybersecurity/messages"
operations:
- name: send-message
method: POST
Checks the branch protection rules for a GitHub repository main branch.
naftiko: "0.5"
info:
label: "GitHub Repository Branch Protection Check"
description: "Checks the branch protection rules for a GitHub repository main branch."
tags:
- devops
- github
- security
- compliance
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: check-branch-protection
description: "Given a GitHub repository name, retrieve the branch protection rules for the main branch."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name, e.g. 'ford/fordpass-app'."
call: "github.get-branch-protection"
with:
repo: "{{repo_name}}"
outputParameters:
- name: required_reviews
type: string
mapping: "$.required_pull_request_reviews.required_approving_review_count"
consumes:
- namespace: github
type: http
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branch-protection
path: "/repos/{{repo}}/branches/main/protection"
inputParameters:
- name: repo
in: path
operations:
- name: get-branch-protection
method: GET
When hazardous material is received at a plant, validates the SDS in SharePoint, creates a SAP EHS notification, and alerts the safety team via Teams.
naftiko: "0.5"
info:
label: "Hazardous Material Handling Alert"
description: "When hazardous material is received at a plant, validates the SDS in SharePoint, creates a SAP EHS notification, and alerts the safety team via Teams."
tags:
- safety
- ehs
- sharepoint
- sap
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: ehs-ops
port: 8080
tools:
- name: process-hazmat-receipt
description: "Given a material number, SDS document ID, and receiving dock, validate the SDS, create a SAP EHS notification, and alert safety via Teams."
inputParameters:
- name: material_number
in: body
type: string
description: "Material number."
- name: sds_document_id
in: body
type: string
description: "SharePoint SDS document ID."
- name: receiving_dock
in: body
type: string
description: "Receiving dock location."
steps:
- name: validate-sds
type: call
call: "sharepoint.get-document"
with:
item_id: "{{sds_document_id}}"
- name: create-ehs-notification
type: call
call: "sap-ehs.create-notification"
with:
material: "{{material_number}}"
description: "Hazmat at {{receiving_dock}} | SDS: {{validate-sds.Title}}"
- name: alert-safety
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_ehs_channel_id"
text: "HAZMAT: {{material_number}} at {{receiving_dock}} | SDS: {{validate-sds.Title}} | EHS: {{create-ehs-notification.number}}"
consumes:
- namespace: sharepoint
type: http
baseUri: "https://ford.sharepoint.com/_api"
authentication:
type: bearer
token: "$secrets.sharepoint_access_token"
resources:
- name: documents
path: "/web/lists/getbytitle('SafetyDataSheets')/items({{item_id}})"
inputParameters:
- name: item_id
in: path
operations:
- name: get-document
method: GET
- namespace: sap-ehs
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_EHS_NOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: notifications
path: "/A_EHSNotification"
operations:
- name: create-notification
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Fetches HubSpot email campaign performance metrics for EV product campaigns, writes metrics to Snowflake, and triggers a Power BI marketing dashboard refresh.
naftiko: "0.5"
info:
label: "HubSpot EV Campaign Performance Report"
description: "Fetches HubSpot email campaign performance metrics for EV product campaigns, writes metrics to Snowflake, and triggers a Power BI marketing dashboard refresh."
tags:
- marketing
- reporting
- hubspot
- snowflake
- power-bi
- automotive
capability:
exposes:
- type: mcp
namespace: ev-marketing
port: 8080
tools:
- name: report-ev-campaign-performance
description: "Given a HubSpot campaign ID for an EV product campaign, fetch email open and click rates, write metrics to Snowflake, and trigger a Power BI marketing dashboard refresh."
inputParameters:
- name: hubspot_campaign_id
in: body
type: string
description: "HubSpot email campaign ID to report on."
steps:
- name: get-campaign-stats
type: call
call: hubspot.get-campaign-stats
with:
campaign_id: "{{hubspot_campaign_id}}"
- name: write-metrics
type: call
call: snowflake.insert-campaign-row
with:
campaign_id: "{{hubspot_campaign_id}}"
open_rate: "{{get-campaign-stats.open_rate}}"
click_rate: "{{get-campaign-stats.click_rate}}"
unsubscribe_rate: "{{get-campaign-stats.unsubscribe_rate}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_marketing_dataset_id"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaign-stats
path: "/emails/statistics/list"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: campaign-metrics
path: "/statements"
operations:
- name: insert-campaign-row
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Processes an IT infrastructure change by creating a ServiceNow change request, running a Terraform plan, and posting results for CAB review via Teams.
naftiko: "0.5"
info:
label: "IT Infrastructure Change Approval Workflow"
description: "Processes an IT infrastructure change by creating a ServiceNow change request, running a Terraform plan, and posting results for CAB review via Teams."
tags:
- devops
- servicenow
- microsoft-teams
- infrastructure
- change-management
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: submit-infra-change
description: "Given a change description and Terraform workspace, create a ServiceNow change request, trigger a Terraform plan, and post for CAB review via Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the infrastructure change."
- name: terraform_workspace
in: body
type: string
description: "Terraform Cloud workspace name."
steps:
- name: create-change-request
type: call
call: "servicenow.create-change"
with:
short_description: "{{change_description}}"
type: "standard"
- name: trigger-terraform-plan
type: call
call: "terraform.create-run"
with:
workspace: "{{terraform_workspace}}"
is_plan_only: "true"
- name: post-for-review
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_cab_channel_id"
text: "CHANGE REQUEST: {{create-change-request.number}} | {{change_description}} | TF Plan: {{trigger-terraform-plan.id}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- namespace: terraform
type: http
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, updates the ServiceNow CMDB, and alerts the security team via Teams.
naftiko: "0.5"
info:
label: "IT Security Vulnerability Remediation"
description: "When GitHub Dependabot finds a critical vulnerability, creates a Jira security ticket, updates the ServiceNow CMDB, and alerts the security team via Teams."
tags:
- security
- github
- jira
- servicenow
- microsoft-teams
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: remediate-vulnerability
description: "Given a repository, CVE, and severity, create a Jira ticket, update ServiceNow CMDB, and alert security via Teams."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository name."
- name: cve_id
in: body
type: string
description: "CVE identifier."
- name: severity
in: body
type: string
description: "Severity level."
steps:
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "[{{severity}}] {{cve_id}} in {{repository}}"
- name: update-cmdb
type: call
call: "servicenow.update-ci"
with:
ci_name: "{{repository}}"
vulnerability: "{{cve_id}}"
- name: alert-security
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_security_channel_id"
text: "VULNERABILITY: [{{severity}}] {{cve_id}} in {{repository}} | Jira: {{create-ticket.key}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: update-ci
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves a Jira engineering issue by key, returning summary, status, assignee, and priority.
naftiko: "0.5"
info:
label: "Jira Engineering Issue Lookup"
description: "Retrieves a Jira engineering issue by key, returning summary, status, assignee, and priority."
tags:
- engineering
- jira
- lookup
- project-management
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-engineering-issue
description: "Given a Jira issue key, retrieve the issue details including summary, status, assignee, priority, and component. Use for vehicle engineering task status checks."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key, e.g. 'VEH-4521'."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Fetches Jira sprint completion data for Ford software engineering teams, writes velocity metrics to Snowflake, and triggers a Power BI engineering performance dashboard refresh.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report"
description: "Fetches Jira sprint completion data for Ford software engineering teams, writes velocity metrics to Snowflake, and triggers a Power BI engineering performance dashboard refresh."
tags:
- devops
- agile
- jira
- snowflake
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: engineering-velocity
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira project key and sprint ID, fetch completed story points, write velocity to Snowflake, and trigger a Power BI engineering dashboard refresh. Use after each sprint to track delivery performance."
inputParameters:
- name: jira_project_key
in: body
type: string
description: "Jira project key for the engineering team (e.g., CV, FNV)."
- name: sprint_id
in: body
type: integer
description: "Jira sprint ID to analyze."
steps:
- name: get-sprint
type: call
call: jira.get-sprint
with:
sprint_id: "{{sprint_id}}"
- name: write-velocity
type: call
call: snowflake.insert-velocity-row
with:
project_key: "{{jira_project_key}}"
sprint_id: "{{sprint_id}}"
completed_points: "{{get-sprint.completedPoints}}"
- name: refresh-powerbi
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_engineering_dataset_id"
consumes:
- type: http
namespace: jira
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/sprint/{{sprint_id}}"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: velocity-table
path: "/statements"
operations:
- name: insert-velocity-row
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Fetches Ford Motor Company LinkedIn page engagement and follower metrics, aggregates in Snowflake, and sends a weekly digest to the corporate communications team via Teams.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Performance Digest"
description: "Fetches Ford Motor Company LinkedIn page engagement and follower metrics, aggregates in Snowflake, and sends a weekly digest to the corporate communications team via Teams."
tags:
- marketing
- social
- linkedin
- snowflake
- msteams
- reporting
capability:
exposes:
- type: mcp
namespace: brand-analytics
port: 8080
tools:
- name: digest-linkedin-performance
description: "Given a LinkedIn organization ID and date range, fetch post engagement and follower stats, write to Snowflake, and post a Teams digest to the corporate-comms channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "LinkedIn organization ID (URN) for the Ford Motor Company page."
- name: start_date
in: body
type: string
description: "Report start date in ISO 8601 format (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "Report end date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-engagement-stats
type: call
call: linkedin.get-share-statistics
with:
organization_id: "{{organization_id}}"
start: "{{start_date}}"
end: "{{end_date}}"
- name: write-stats
type: call
call: snowflake.insert-social-row
with:
platform: "linkedin"
impressions: "{{get-engagement-stats.totalImpressions}}"
engagements: "{{get-engagement-stats.totalEngagements}}"
start_date: "{{start_date}}"
- name: send-digest
type: call
call: msteams.send-message
with:
channel: "corporate-comms"
text: "LinkedIn Brand ({{start_date}} to {{end_date}}): {{get-engagement-stats.totalImpressions}} impressions, {{get-engagement-stats.totalEngagements}} engagements."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: share-statistics
path: "/organizationalEntityShareStatistics"
inputParameters:
- name: organization_id
in: query
- name: start
in: query
- name: end
in: query
operations:
- name: get-share-statistics
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: social-stats
path: "/statements"
operations:
- name: insert-social-row
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/comms/channels/corporate/messages"
operations:
- name: send-message
method: POST
Compiles daily manufacturing KPIs from SAP production data, refreshes the Tableau dashboard, and posts a summary to the plant leadership Teams channel.
naftiko: "0.5"
info:
label: "Manufacturing KPI Daily Digest"
description: "Compiles daily manufacturing KPIs from SAP production data, refreshes the Tableau dashboard, and posts a summary to the plant leadership Teams channel."
tags:
- production
- sap
- tableau
- microsoft-teams
- manufacturing
- analytics
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: generate-daily-kpi-digest
description: "Given a plant code and date, pull production KPIs from SAP, refresh the Tableau dashboard, and post a daily summary to Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "SAP plant code."
- name: report_date
in: body
type: string
description: "Reporting date in ISO 8601 format."
steps:
- name: get-kpis
type: call
call: "sap-s4.get-production-summary"
with:
Plant: "{{plant_code}}"
Date: "{{report_date}}"
- name: refresh-dashboard
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "$secrets.tableau_mfg_kpi_workbook_id"
- name: post-digest
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_plant_leadership_channel_id"
text: "DAILY KPIs: {{plant_code}} | {{report_date}} | Output: {{get-kpis.total_output}} | Yield: {{get-kpis.yield_rate}}%"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: production-summary
path: "/A_ProductionOrder_2"
operations:
- name: get-production-summary
method: GET
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When Datadog detects a production line anomaly or equipment failure, creates a P1 ServiceNow incident, opens a Jira tracking issue, and alerts the manufacturing operations team via Teams.
naftiko: "0.5"
info:
label: "Manufacturing Production Line Incident Response"
description: "When Datadog detects a production line anomaly or equipment failure, creates a P1 ServiceNow incident, opens a Jira tracking issue, and alerts the manufacturing operations team via Teams."
tags:
- manufacturing
- incident-response
- datadog
- servicenow
- jira
- msteams
- automotive
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: handle-production-line-incident
description: "Given a Datadog alert ID and affected production line, create a ServiceNow incident, open a Jira tracking issue, and alert the manufacturing operations Teams channel. Use on automated alerts from line monitoring systems."
inputParameters:
- name: datadog_alert_id
in: body
type: string
description: "Datadog monitor alert ID from the production line monitoring system."
- name: production_line
in: body
type: string
description: "Production line identifier (e.g., DEARBORN-TRUCK-LINE-2)."
- name: severity
in: body
type: string
description: "Incident severity: P1, P2, or P3."
steps:
- name: get-alert-details
type: call
call: datadog.get-monitor
with:
alert_id: "{{datadog_alert_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "[{{severity}}] Production line anomaly: {{production_line}}"
urgency: "1"
impact: "1"
description: "Datadog alert {{datadog_alert_id}}: {{get-alert-details.message}}. Line: {{production_line}}"
- name: create-tracking-issue
type: call
call: jira.create-issue
with:
project_key: "MFG"
issuetype: "Bug"
summary: "[{{severity}}] Line anomaly: {{production_line}}"
description: "Incident: {{create-incident.number}} | Alert: {{datadog_alert_id}} | Details: {{get-alert-details.message}}"
- name: alert-mfg-ops
type: call
call: msteams.send-message
with:
channel: "manufacturing-ops"
text: "INCIDENT {{create-incident.number}} | {{severity}} | Line: {{production_line}} | Jira: {{create-tracking-issue.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://ford.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: jira
baseUri: "https://ford.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.msteams_token"
resources:
- name: channel-messages
path: "/teams/manufacturing/channels/ops/messages"
operations:
- name: send-message
method: POST
Compiles a shift handoff report by pulling production data from SAP, open incidents from ServiceNow, and posting the summary to the manufacturing Teams channel.
naftiko: "0.5"
info:
label: "Manufacturing Shift Handoff Report"
description: "Compiles a shift handoff report by pulling production data from SAP, open incidents from ServiceNow, and posting the summary to the manufacturing Teams channel."
tags:
- production
- sap
- servicenow
- microsoft-teams
- manufacturing
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: generate-shift-handoff
description: "Given a plant code, line, and shift, pull production output from SAP, open incidents from ServiceNow, and post a handoff summary to Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "SAP plant code."
- name: production_line
in: body
type: string
description: "Production line identifier."
- name: shift_id
in: body
type: string
description: "Shift identifier."
steps:
- name: get-production-output
type: call
call: "sap-s4.get-shift-output"
with:
Plant: "{{plant_code}}"
Line: "{{production_line}}"
- name: get-open-incidents
type: call
call: "servicenow.get-incidents"
with:
query: "assignment_group={{production_line}}^state!=6"
- name: post-handoff
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_mfg_channel_id"
text: "SHIFT HANDOFF: {{production_line}} | {{shift_id}} | Output: {{get-production-output.total_units}} | Open: {{get-open-incidents.count}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: production
path: "/A_ProductionOrder_2"
operations:
- name: get-shift-output
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incidents
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a new hire record is created in Workday, provisions a Microsoft 365 account, opens a ServiceNow IT onboarding ticket, and sends a Teams welcome message to the new hire and their manager.
naftiko: "0.5"
info:
label: "New Employee Onboarding"
description: "When a new hire record is created in Workday, provisions a Microsoft 365 account, opens a ServiceNow IT onboarding ticket, and sends a Teams welcome message to the new hire and their manager."
tags:
- hr
- onboarding
- workday
- microsoft-365
- servicenow
- msteams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-employee-onboarding
description: "Given a Workday employee ID and start date, provision a Microsoft 365 account, create a ServiceNow IT onboarding incident, and send a Teams welcome message. Use when HR creates a new hire record."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "Employee start date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: provision-m365
type: call
call: msgraph.create-user
with:
displayName: "{{get-worker.full_name}}"
userPrincipalName: "{{get-worker.email}}"
department: "{{get-worker.department}}"
- name: open-ticket
type: call
call: servicenow.create-incident
with:
short_description: "IT Onboarding: {{get-worker.full_name}} — start {{start_date}}"
category: "onboarding"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: msteams.send-message
with:
channel: "hr-announcements"
text: "Welcome {{get-worker.full_name}} to Ford! Start date: {{start_date}}. IT ticket: {{open-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://ford.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.msteams_token"
resources:
- name: channel-messages
path: "/teams/hr/channels/announcements/messages"
operations:
- name: send-message
method: POST
Provisions a new vehicle program workspace by creating a Jira project, a Confluence space, and a Microsoft Teams channel.
naftiko: "0.5"
info:
label: "New Vehicle Program Workspace Setup"
description: "Provisions a new vehicle program workspace by creating a Jira project, a Confluence space, and a Microsoft Teams channel."
tags:
- engineering
- jira
- confluence
- microsoft-teams
- automotive
- project-management
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: setup-program-workspace
description: "Given a vehicle program name and program lead, create a Jira project, a Confluence space, and a Teams channel."
inputParameters:
- name: program_name
in: body
type: string
description: "Vehicle program name, e.g. 'Next-Gen Explorer'."
- name: program_lead
in: body
type: string
description: "Email of the program lead."
steps:
- name: create-jira-project
type: call
call: "jira.create-project"
with:
name: "{{program_name}}"
key: "{{program_name}}"
lead: "{{program_lead}}"
- name: create-confluence-space
type: call
call: "confluence.create-space"
with:
key: "{{program_name}}"
name: "{{program_name}} Program"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "NEW PROGRAM: {{program_name}} | Jira: {{create-jira-project.key}} | Confluence: {{create-confluence-space.key}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project"
operations:
- name: create-project
method: POST
- namespace: confluence
type: http
baseUri: "https://ford.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: spaces
path: "/space"
operations:
- name: create-space
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Retrieves the current account status of a user in Okta by email address.
naftiko: "0.5"
info:
label: "Okta User Status Check"
description: "Retrieves the current account status of a user in Okta by email address."
tags:
- identity
- okta
- security
- lookup
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-status
description: "Given a user email address, retrieve the Okta account status including activation state, last login, and MFA enrollment. Use for access verification and security checks."
inputParameters:
- name: email
in: body
type: string
description: "User email address, e.g. 'jane.doe@ford.com'."
call: "okta.get-user"
with:
login: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
consumes:
- namespace: okta
type: http
baseUri: "https://ford.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "SSWS $secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
Manages paint shop color changeovers by updating SAP production schedule, notifying the paint shop team via Teams, and logging the changeover in ServiceNow.
naftiko: "0.5"
info:
label: "Paint Shop Color Changeover Workflow"
description: "Manages paint shop color changeovers by updating SAP production schedule, notifying the paint shop team via Teams, and logging the changeover in ServiceNow."
tags:
- manufacturing
- sap
- microsoft-teams
- servicenow
- automotive
- production
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: manage-color-changeover
description: "Given a paint line, current color, and next color, update SAP schedule, log in ServiceNow, and notify the paint team via Teams."
inputParameters:
- name: paint_line_id
in: body
type: string
description: "Paint line identifier."
- name: next_color
in: body
type: string
description: "Next color code."
steps:
- name: update-sap-schedule
type: call
call: "sap-s4.update-production-schedule"
with:
line: "{{paint_line_id}}"
color: "{{next_color}}"
- name: log-changeover
type: call
call: "servicenow.create-record"
with:
table: "u_color_changeover_log"
line: "{{paint_line_id}}"
color: "{{next_color}}"
- name: notify-paint-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_paint_shop_channel_id"
text: "COLOR CHANGEOVER: {{paint_line_id}} | Next: {{next_color}} | SNOW: {{log-changeover.sys_id}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: schedule
path: "/A_ProductionOrder_2"
operations:
- name: update-production-schedule
method: PATCH
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors paint shop quality metrics via Datadog, logs deviations in SAP QM, and alerts the paint shop supervisor via Teams when defect rates exceed thresholds.
naftiko: "0.5"
info:
label: "Paint Shop Quality Monitoring"
description: "Monitors paint shop quality metrics via Datadog, logs deviations in SAP QM, and alerts the paint shop supervisor via Teams when defect rates exceed thresholds."
tags:
- quality
- manufacturing
- datadog
- sap
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: monitor-paint-quality
description: "Given a paint line ID and shift, retrieve quality metrics from Datadog, log deviations in SAP QM, and alert the paint shop supervisor via Teams."
inputParameters:
- name: paint_line_id
in: body
type: string
description: "Paint line identifier, e.g. 'DEARBORN-PAINT-LINE-1'."
- name: shift
in: body
type: string
description: "Shift identifier, e.g. 'DAY-2026-03-27'."
steps:
- name: get-quality-metrics
type: call
call: "datadog.query-metrics"
with:
query: "avg:paint.defect_rate{line:{{paint_line_id}}}"
from: "-8h"
- name: log-sap-deviation
type: call
call: "sap-qm.create-quality-record"
with:
work_center: "{{paint_line_id}}"
shift: "{{shift}}"
defect_rate: "{{get-quality-metrics.series[0].pointlist[-1][1]}}"
- name: alert-supervisor
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_paint_shop_channel_id"
text: "PAINT QUALITY: {{paint_line_id}} | Shift: {{shift}} | Defect Rate: {{get-quality-metrics.series[0].pointlist[-1][1]}} | QM: {{log-sap-deviation.number}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-records
path: "/A_InspectionLot"
operations:
- name: create-quality-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Monitors plant energy consumption via Datadog, logs readings in ServiceNow for sustainability reporting, and alerts the facilities team via Teams when usage exceeds budget.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitoring"
description: "Monitors plant energy consumption via Datadog, logs readings in ServiceNow for sustainability reporting, and alerts the facilities team via Teams when usage exceeds budget."
tags:
- sustainability
- datadog
- servicenow
- microsoft-teams
- manufacturing
- ehs
capability:
exposes:
- type: mcp
namespace: sustainability-ops
port: 8080
tools:
- name: monitor-energy-consumption
description: "Given a plant code and reporting period, retrieve energy metrics from Datadog, log in ServiceNow, and alert facilities via Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "Plant code."
- name: reporting_period
in: body
type: string
description: "Reporting period."
steps:
- name: get-energy-data
type: call
call: "datadog.query-metrics"
with:
query: "sum:energy.consumption{plant:{{plant_code}}}"
- name: log-reading
type: call
call: "servicenow.create-record"
with:
table: "u_energy_consumption_log"
plant: "{{plant_code}}"
period: "{{reporting_period}}"
- name: alert-facilities
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_facilities_channel_id"
text: "ENERGY: {{plant_code}} | {{reporting_period}} | SNOW: {{log-reading.sys_id}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Aggregates daily vehicle retail sales data from Snowflake and triggers a Power BI sales performance dashboard refresh for regional sales leadership.
naftiko: "0.5"
info:
label: "Power BI Vehicle Sales Dashboard Refresh"
description: "Aggregates daily vehicle retail sales data from Snowflake and triggers a Power BI sales performance dashboard refresh for regional sales leadership."
tags:
- sales
- analytics
- reporting
- snowflake
- power-bi
- automotive
capability:
exposes:
- type: mcp
namespace: sales-analytics
port: 8080
tools:
- name: refresh-sales-dashboard
description: "Given a reporting date and region, write a daily sales summary to Snowflake and trigger a Power BI vehicle sales dashboard refresh for regional sales leadership."
inputParameters:
- name: report_date
in: body
type: string
description: "Reporting date in ISO 8601 format (YYYY-MM-DD)."
- name: region
in: body
type: string
description: "Sales region (e.g., NORTH_AMERICA, EUROPE, ASIA_PACIFIC)."
steps:
- name: write-sales-summary
type: call
call: snowflake.insert-sales-summary
with:
report_date: "{{report_date}}"
region: "{{region}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_sales_dataset_id"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sales-table
path: "/statements"
operations:
- name: insert-sales-summary
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Prepares for a regulatory audit by collecting documents from SharePoint, creating a Jira checklist, and scheduling prep meetings via Teams.
naftiko: "0.5"
info:
label: "Regulatory Audit Preparation Workflow"
description: "Prepares for a regulatory audit by collecting documents from SharePoint, creating a Jira checklist, and scheduling prep meetings via Teams."
tags:
- compliance
- sharepoint
- jira
- microsoft-teams
- audit
- automotive
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: prepare-regulatory-audit
description: "Given an audit type, date, and regulatory body, collect documents from SharePoint, create a Jira checklist, and notify compliance via Teams."
inputParameters:
- name: audit_type
in: body
type: string
description: "Audit type."
- name: audit_date
in: body
type: string
description: "Audit date."
- name: regulatory_body
in: body
type: string
description: "Regulatory body, e.g. 'NHTSA', 'EPA'."
steps:
- name: collect-documents
type: call
call: "sharepoint.search-documents"
with:
query: "audit {{audit_type}} {{regulatory_body}}"
- name: create-checklist
type: call
call: "jira.create-issue"
with:
project_key: "COMP"
issuetype: "Epic"
summary: "{{regulatory_body}} Audit: {{audit_type}} - {{audit_date}}"
duedate: "{{audit_date}}"
- name: notify-compliance
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_compliance_channel_id"
text: "AUDIT PREP: {{regulatory_body}} {{audit_type}} | Date: {{audit_date}} | Jira: {{create-checklist.key}}"
consumes:
- namespace: sharepoint
type: http
baseUri: "https://ford.sharepoint.com/_api"
authentication:
type: bearer
token: "$secrets.sharepoint_access_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search-documents
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Synchronizes a closed-won Salesforce dealer opportunity to SAP as a fleet sales order, and notifies the regional sales manager via Teams.
naftiko: "0.5"
info:
label: "Salesforce Dealer Account Opportunity Sync"
description: "Synchronizes a closed-won Salesforce dealer opportunity to SAP as a fleet sales order, and notifies the regional sales manager via Teams."
tags:
- sales
- crm
- erp
- salesforce
- sap
- msteams
- automotive
capability:
exposes:
- type: mcp
namespace: dealer-sales
port: 8080
tools:
- name: sync-dealer-opportunity
description: "Given a closed-won Salesforce opportunity ID for a dealer fleet order, fetch the opportunity details, create a corresponding SAP sales order, and notify the regional sales manager via Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID for the dealer fleet order."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sales-order
type: call
call: sap.create-sales-order
with:
sold_to_party: "{{get-opportunity.account_sap_id}}"
net_value: "{{get-opportunity.amount}}"
currency: "USD"
reference: "{{opportunity_id}}"
- name: notify-sales-manager
type: call
call: msteams.send-message
with:
channel: "regional-sales"
text: "Dealer opportunity {{get-opportunity.name}} closed! SAP order: {{create-sales-order.order_number}}. Value: ${{get-opportunity.amount}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-sales-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/sales/channels/regional/messages"
operations:
- name: send-message
method: POST
Retrieves dealer account details from Salesforce by dealer code, returning name, region, and sales volume.
naftiko: "0.5"
info:
label: "Salesforce Dealer Account Lookup"
description: "Retrieves dealer account details from Salesforce by dealer code, returning name, region, and sales volume."
tags:
- sales
- salesforce
- dealer
- lookup
- automotive
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: get-dealer-account
description: "Given a Salesforce dealer code, retrieve the dealer account record including name, region, sales volume, and tier."
inputParameters:
- name: dealer_code
in: body
type: string
description: "Dealer code, e.g. 'DLR-MI-00412'."
call: "salesforce.get-dealer"
with:
dealer_code: "{{dealer_code}}"
outputParameters:
- name: dealer_name
type: string
mapping: "$.records[0].Name"
- name: region
type: string
mapping: "$.records[0].Region__c"
consumes:
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: dealers
path: "/query"
operations:
- name: get-dealer
method: GET
Exports open and committed Salesforce fleet and dealer opportunities for the current fiscal quarter, writes forecast data to Snowflake, and triggers a Power BI revenue forecast dashboard refresh.
naftiko: "0.5"
info:
label: "Salesforce Quarterly Sales Forecast Sync"
description: "Exports open and committed Salesforce fleet and dealer opportunities for the current fiscal quarter, writes forecast data to Snowflake, and triggers a Power BI revenue forecast dashboard refresh."
tags:
- sales
- finance
- forecasting
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: sales-forecast
port: 8080
tools:
- name: sync-quarterly-forecast
description: "Given a fiscal quarter label, export dealer and fleet pipeline opportunities from Salesforce, write to Snowflake, and trigger a Power BI forecast refresh for quarterly business reviews."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Salesforce fiscal quarter label (e.g., Q2-2026)."
steps:
- name: export-opportunities
type: call
call: salesforce.query-opportunities
with:
fiscal_quarter: "{{fiscal_quarter}}"
- name: write-forecast
type: call
call: snowflake.insert-forecast-rows
with:
fiscal_quarter: "{{fiscal_quarter}}"
records: "{{export-opportunities.records}}"
- name: refresh-powerbi
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_forecast_dataset_id"
consumes:
- type: http
namespace: salesforce
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
inputParameters:
- name: fiscal_quarter
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: forecast-table
path: "/statements"
operations:
- name: insert-forecast-rows
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Retrieves contract status and key terms from SAP Ariba by contract ID.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Status Lookup"
description: "Retrieves contract status and key terms from SAP Ariba by contract ID."
tags:
- procurement
- sap-ariba
- contracts
- lookup
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-ariba-contract
description: "Given a SAP Ariba contract ID, retrieve the contract status, effective dates, and total value."
inputParameters:
- name: contract_id
in: body
type: string
description: "SAP Ariba contract ID, e.g. 'CW12345'."
call: "ariba.get-contract"
with:
contractId: "{{contract_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: effective_date
type: string
mapping: "$.EffectiveDate"
consumes:
- namespace: ariba
type: http
baseUri: "https://openapi.ariba.com/api/contract-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_access_token"
resources:
- name: contracts
path: "/contracts/{{contractId}}"
inputParameters:
- name: contractId
in: path
operations:
- name: get-contract
method: GET
Matches incoming supplier invoices in SAP Ariba against open SAP S/4HANA purchase orders, flags discrepancies, and routes exceptions to the AP team via ServiceNow.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Invoice Matching"
description: "Matches incoming supplier invoices in SAP Ariba against open SAP S/4HANA purchase orders, flags discrepancies, and routes exceptions to the AP team via ServiceNow."
tags:
- procurement
- finance
- sap-ariba
- sap
- servicenow
- ap
- invoice-matching
capability:
exposes:
- type: mcp
namespace: ap-operations
port: 8080
tools:
- name: match-supplier-invoice
description: "Given an SAP Ariba invoice ID and corresponding SAP PO number, compare invoice totals to PO values, and create a ServiceNow AP exception task if there is a discrepancy. Use to automate three-way match in Accounts Payable."
inputParameters:
- name: ariba_invoice_id
in: body
type: string
description: "SAP Ariba invoice document ID."
- name: po_number
in: body
type: string
description: "SAP purchase order number to match against."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{ariba_invoice_id}}"
- name: get-po
type: call
call: sap.get-po-header
with:
po_number: "{{po_number}}"
- name: create-exception
type: call
call: servicenow.create-task
with:
short_description: "Invoice exception: Ariba {{ariba_invoice_id}} vs PO {{po_number}}"
assignment_group: "AP_Team"
description: "Invoice amount: {{get-invoice.net_amount}}. PO amount: {{get-po.total_amount}}. Requires AP review."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: invoices
path: "/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po-header
method: GET
- type: http
namespace: servicenow
baseUri: "https://ford.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
Queries SAP Concur for expense reports pending approval beyond the policy threshold, and sends Teams reminders to the overdue approvers.
naftiko: "0.5"
info:
label: "SAP Concur Expense Approval Reminder"
description: "Queries SAP Concur for expense reports pending approval beyond the policy threshold, and sends Teams reminders to the overdue approvers."
tags:
- finance
- expense-management
- sap-concur
- msteams
- approval
capability:
exposes:
- type: mcp
namespace: expense-ops
port: 8080
tools:
- name: remind-expense-approvers
description: "Query SAP Concur for expense reports with pending approval status, identify those overdue past the threshold, and send Teams reminders to each approver. Use daily as part of Ford AP operations."
inputParameters:
- name: pending_days_threshold
in: body
type: integer
description: "Number of business days a report can be pending before triggering a reminder (e.g., 5)."
steps:
- name: get-pending-reports
type: call
call: concur.get-pending-reports
with:
approval_status: "A_PEND"
- name: send-reminders
type: call
call: msteams.send-message
with:
channel: "finance-approvals"
text: "Expense approval reminder: {{get-pending-reports.report_count}} reports pending over {{pending_days_threshold}} days. Approvers: {{get-pending-reports.approver_list}}"
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"
inputParameters:
- name: approval_status
in: query
operations:
- name: get-pending-reports
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/finance/channels/approvals/messages"
operations:
- name: send-message
method: POST
Checks current inventory stock levels for a given material at a specified plant in SAP S/4HANA.
naftiko: "0.5"
info:
label: "SAP Inventory Stock Level Check"
description: "Checks current inventory stock levels for a given material at a specified plant in SAP S/4HANA."
tags:
- supply-chain
- sap
- sap-s4hana
- inventory
- automotive
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: check-stock-level
description: "Given a material number and plant code, retrieve current unrestricted, in-quality, and blocked stock quantities from SAP S/4HANA. Use when planners need to verify parts availability for vehicle production."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number, e.g. 'MAT-F150-BRK-001'."
- name: plant_code
in: body
type: string
description: "SAP plant code, e.g. 'DEARBORN-1000'."
call: "sap-s4.get-stock"
with:
Material: "{{material_number}}"
Plant: "{{plant_code}}"
outputParameters:
- name: unrestricted_stock
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
- name: quality_stock
type: string
mapping: "$.d.QualityInspectionStockQty"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: stock
path: "/A_MatlStkInAcctMod"
inputParameters:
- name: Material
in: query
- name: Plant
in: query
operations:
- name: get-stock
method: GET
Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and vehicle program assignment.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves material master data from SAP S/4HANA by material number, returning description, unit of measure, and vehicle program assignment."
tags:
- procurement
- sap
- sap-s4hana
- lookup
- automotive
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-material-master
description: "Given a SAP material number, retrieve material master data including description, base unit of measure, material group, and vehicle program assignment. Use when engineers or planners need part specifications."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number, e.g. 'MAT-F150-BRK-001'."
call: "sap-s4.get-material"
with:
MaterialNumber: "{{material_number}}"
outputParameters:
- name: material_description
type: string
mapping: "$.d.MaterialDescription"
- name: base_unit
type: string
mapping: "$.d.BaseUnit"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_MASTER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: materials
path: "/A_Material('{MaterialNumber}')"
inputParameters:
- name: MaterialNumber
in: path
operations:
- name: get-material
method: GET
Runs MRP exception analysis in SAP, identifies critical shortages, creates Jira procurement tasks, and alerts the supply chain team via Teams.
naftiko: "0.5"
info:
label: "SAP Material Requirements Planning Alert"
description: "Runs MRP exception analysis in SAP, identifies critical shortages, creates Jira procurement tasks, and alerts the supply chain team via Teams."
tags:
- supply-chain
- sap
- jira
- microsoft-teams
- manufacturing
- procurement
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: analyze-mrp-exceptions
description: "Given a plant code and MRP controller, run exception analysis, create Jira tasks for shortages, and alert supply chain via Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "SAP plant code."
- name: mrp_controller
in: body
type: string
description: "MRP controller code."
steps:
- name: get-exceptions
type: call
call: "sap-s4.get-mrp-exceptions"
with:
Plant: "{{plant_code}}"
MRPController: "{{mrp_controller}}"
- name: create-tasks
type: call
call: "jira.create-issue"
with:
project_key: "SCM"
issuetype: "Task"
summary: "MRP Shortages: {{plant_code}}"
- name: alert-supply-chain
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_supply_chain_channel_id"
text: "MRP ALERT: {{plant_code}} | Critical: {{get-exceptions.critical_count}} | Jira: {{create-tasks.key}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV_01"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: mrp
path: "/A_MRPMaterial"
operations:
- name: get-mrp-exceptions
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Checks SAP MRP for auto parts and components below reorder point at a given assembly plant, creates purchase requisitions, and notifies the procurement team via Teams.
naftiko: "0.5"
info:
label: "SAP Parts Inventory Reorder Alert"
description: "Checks SAP MRP for auto parts and components below reorder point at a given assembly plant, creates purchase requisitions, and notifies the procurement team via Teams."
tags:
- supply-chain
- procurement
- sap
- msteams
- inventory
- automotive
capability:
exposes:
- type: mcp
namespace: parts-replenishment
port: 8080
tools:
- name: trigger-parts-reorder
description: "Given a SAP plant code, scan for components below reorder point, create purchase requisitions for each, and notify the procurement channel in Teams. Use daily to maintain just-in-time parts availability."
inputParameters:
- name: plant_code
in: body
type: string
description: "SAP plant code for the assembly plant (e.g., 3001)."
steps:
- name: get-low-stock
type: call
call: sap.list-below-reorder-point
with:
plant: "{{plant_code}}"
- name: create-pr
type: call
call: sap-pr.create-purchase-requisition
with:
plant: "{{plant_code}}"
materials: "{{get-low-stock.material_list}}"
- name: notify-procurement
type: call
call: msteams.send-message
with:
channel: "procurement"
text: "Parts reorder at plant {{plant_code}}: {{get-low-stock.count}} items below minimum. PRs created: {{create-pr.requisition_numbers}}"
consumes:
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV_01"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: mrp-materials
path: "/A_MRPMaterial"
inputParameters:
- name: plant
in: query
operations:
- name: list-below-reorder-point
method: GET
- type: http
namespace: sap-pr
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-requisitions
path: "/A_PurchaseRequisitionHeader"
operations:
- name: create-purchase-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/procurement/channels/general/messages"
operations:
- name: send-message
method: POST
At month-end, checks SAP for open financial posting documents, creates a ServiceNow change request for the period close checklist, and notifies the controller team via Teams.
naftiko: "0.5"
info:
label: "SAP Period Close Verification"
description: "At month-end, checks SAP for open financial posting documents, creates a ServiceNow change request for the period close checklist, and notifies the controller team via Teams."
tags:
- finance
- erp
- sap
- servicenow
- msteams
- period-close
capability:
exposes:
- type: mcp
namespace: finance-period-close
port: 8080
tools:
- name: verify-period-close
description: "Given a SAP fiscal period and company code, query open FI documents, create a ServiceNow change request for the close workflow, and notify the controller team in Teams."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "SAP fiscal period in YYYYMM format (e.g., 202503)."
- name: company_code
in: body
type: string
description: "SAP company code (e.g., F001)."
steps:
- name: get-open-docs
type: call
call: sap.get-open-fi-documents
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: create-change
type: call
call: servicenow.create-change-request
with:
short_description: "Period close {{fiscal_period}} — {{company_code}}"
category: "financial_close"
description: "Open FI documents: {{get-open-docs.count}}"
- name: notify-controllers
type: call
call: msteams.send-message
with:
channel: "finance-controllers"
text: "Period close {{fiscal_period}} / {{company_code}}. Open docs: {{get-open-docs.count}}. Change: {{create-change.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: fi-documents
path: "/A_JournalEntryItem"
inputParameters:
- name: fiscal_period
in: query
- name: company_code
in: query
operations:
- name: get-open-fi-documents
method: GET
- type: http
namespace: servicenow
baseUri: "https://ford.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-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/finance/channels/controllers/messages"
operations:
- name: send-message
method: POST
Retrieves an SAP plant maintenance work order with its status, assigned technician, and estimated completion.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order Lookup"
description: "Retrieves an SAP plant maintenance work order with its status, assigned technician, and estimated completion."
tags:
- manufacturing
- plant-maintenance
- sap
- sap-s4hana
- lookup
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: get-work-order
description: "Given an SAP plant maintenance work order number, retrieve the order status, assigned technician, priority, and planned completion date."
inputParameters:
- name: order_number
in: body
type: string
description: "SAP maintenance work order number, e.g. '10000123'."
call: "sap-pm.get-work-order"
with:
MaintenanceOrder: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.SystemStatus"
- name: assigned_technician
type: string
mapping: "$.d.PersonResponsible"
- name: priority
type: string
mapping: "$.d.OrderPriority"
consumes:
- namespace: sap-pm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: maintenance-orders
path: "/MaintenanceOrder('{MaintenanceOrder}')"
inputParameters:
- name: MaintenanceOrder
in: path
operations:
- name: get-work-order
method: GET
Retrieves the status and progress of a vehicle production order from SAP S/4HANA by order number.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Retrieves the status and progress of a vehicle production order from SAP S/4HANA by order number."
tags:
- production
- sap
- sap-s4hana
- automotive
- lookup
capability:
exposes:
- type: mcp
namespace: production
port: 8080
tools:
- name: get-production-order
description: "Given a SAP production order number, retrieve the order status, planned vs actual quantities, and scheduled dates. Use when production managers need to check vehicle manufacturing order progress."
inputParameters:
- name: order_number
in: body
type: string
description: "SAP production order number, e.g. 'PRD-2000234'."
call: "sap-s4.get-prod-order"
with:
ManufacturingOrder: "{{order_number}}"
outputParameters:
- name: planned_qty
type: string
mapping: "$.d.MfgOrderPlannedTotalQty"
- name: actual_qty
type: string
mapping: "$.d.MfgOrderConfirmedYieldQty"
- name: status
type: string
mapping: "$.d.ManufacturingOrderStatus"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: production-orders
path: "/A_ProductionOrder_2('{ManufacturingOrder}')"
inputParameters:
- name: ManufacturingOrder
in: path
operations:
- name: get-prod-order
method: GET
Looks up a SAP purchase order by number and returns structured header status, vendor name, total value, and delivery status for procurement and supply chain queries.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status Lookup"
description: "Looks up a SAP purchase order by number and returns structured header status, vendor name, total value, and delivery status for procurement and supply chain queries."
tags:
- procurement
- erp
- sap
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order by PO number. Returns overall status, vendor name, total value, currency, and delivery line items. Use when verifying parts procurement status or resolving supplier discrepancies."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number (10-digit, e.g., 4500076543)."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
outputRawFormat: xml
Retrieves vendor master data from SAP by vendor number, returning name, address, and payment terms.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number, returning name, address, and payment terms."
tags:
- procurement
- sap
- sap-s4hana
- vendor
- lookup
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-vendor
description: "Given a SAP vendor number, retrieve vendor master data including company name, address, payment terms, and status. Use for supplier verification and procurement inquiries."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor number, e.g. '0001000234'."
call: "sap-s4.get-vendor"
with:
Supplier: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: country
type: string
mapping: "$.d.Country"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: suppliers
path: "/A_Supplier('{Supplier}')"
inputParameters:
- name: Supplier
in: path
operations:
- name: get-vendor
method: GET
Retrieves IT asset details from ServiceNow CMDB by asset tag, returning owner, location, and lifecycle status.
naftiko: "0.5"
info:
label: "ServiceNow IT Asset Lookup"
description: "Retrieves IT asset details from ServiceNow CMDB by asset tag, returning owner, location, and lifecycle status."
tags:
- it-operations
- servicenow
- cmdb
- lookup
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-asset
description: "Given an IT asset tag, retrieve the asset record from ServiceNow CMDB including owner, location, model, and lifecycle status. Use when support staff need to verify asset details."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The IT asset tag, e.g. 'FORD-LAP-00412'."
call: "servicenow.get-asset"
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: owner
type: string
mapping: "$.result.assigned_to.display_value"
- name: location
type: string
mapping: "$.result.location.display_value"
- name: status
type: string
mapping: "$.result.install_status"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: assets
path: "/table/alm_hardware"
inputParameters:
- name: asset_tag
in: query
operations:
- name: get-asset
method: GET
Retrieves a quality document from SharePoint by document ID, returning content, version, and approval status.
naftiko: "0.5"
info:
label: "SharePoint Quality Document Retrieval"
description: "Retrieves a quality document from SharePoint by document ID, returning content, version, and approval status."
tags:
- quality
- sharepoint
- document-management
- automotive
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: get-quality-document
description: "Given a SharePoint document ID, retrieve the quality assurance document including title, version, approval status, and download link. Use for quality audits and vehicle inspections."
inputParameters:
- name: document_id
in: body
type: string
description: "SharePoint document ID, e.g. 'QA-DOC-2026-0412'."
call: "sharepoint.get-document"
with:
item_id: "{{document_id}}"
outputParameters:
- name: title
type: string
mapping: "$.d.Title"
- name: version
type: string
mapping: "$.d.UIVersionLabel"
- name: approval_status
type: string
mapping: "$.d.OData__ModerationStatus"
consumes:
- namespace: sharepoint
type: http
baseUri: "https://ford.sharepoint.com/_api"
authentication:
type: bearer
token: "$secrets.sharepoint_access_token"
resources:
- name: documents
path: "/web/lists/getbytitle('QualityDocs')/items({{item_id}})"
inputParameters:
- name: item_id
in: path
operations:
- name: get-document
method: GET
Runs automated data quality checks on Snowflake vehicle sales tables, logs results to Datadog, and opens Jira remediation tasks when quality thresholds are breached.
naftiko: "0.5"
info:
label: "Snowflake Vehicle Sales Data Quality Check"
description: "Runs automated data quality checks on Snowflake vehicle sales tables, logs results to Datadog, and opens Jira remediation tasks when quality thresholds are breached."
tags:
- data-engineering
- data-quality
- snowflake
- datadog
- jira
- automotive
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: check-sales-data-quality
description: "Given a Snowflake vehicle sales table name and null rate threshold, run a data quality check, submit a Datadog metric, and open a Jira task if the threshold is breached. Use daily for sales data integrity validation."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table name (e.g., SALES.PUBLIC.VEHICLE_ORDERS)."
- name: null_threshold
in: body
type: number
description: "Maximum acceptable null rate (0.0–1.0) before opening a Jira task."
steps:
- name: run-dq-check
type: call
call: snowflake.execute-dq-statement
with:
table_name: "{{table_name}}"
- name: post-metric
type: call
call: datadog.submit-metric
with:
metric: "ford.snowflake.null_rate"
points: "{{run-dq-check.null_rate}}"
tags: "table:{{table_name}}"
- name: open-jira-task
type: call
call: jira.create-issue
with:
project_key: "DATA"
issuetype: "Task"
summary: "Data quality breach: {{table_name}} null_rate={{run-dq-check.null_rate}}"
description: "Table {{table_name}} exceeded threshold {{null_threshold}}. Actual: {{run-dq-check.null_rate}}. Row count: {{run-dq-check.row_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-dq-statement
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/series"
operations:
- name: submit-metric
method: POST
- type: http
namespace: jira
baseUri: "https://ford.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
Searches Splunk for security events matching a given query within a specified time range.
naftiko: "0.5"
info:
label: "Splunk Security Event Search"
description: "Searches Splunk for security events matching a given query within a specified time range."
tags:
- security
- splunk
- search
- monitoring
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: search-security-events
description: "Given a Splunk search query and time range, execute the search and return matching security events."
inputParameters:
- name: search_query
in: body
type: string
description: "Splunk SPL search query."
- name: time_range
in: body
type: string
description: "Time range, e.g. '-24h'."
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{time_range}}"
outputParameters:
- name: sid
type: string
mapping: "$.sid"
consumes:
- namespace: splunk
type: http
baseUri: "https://splunk.ford.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: searches
path: "/search/jobs"
operations:
- name: create-search
method: POST
When Datadog detects abnormal vibration patterns on a stamping press, creates a SAP PM work order and alerts the maintenance team via Teams.
naftiko: "0.5"
info:
label: "Stamping Press Predictive Maintenance"
description: "When Datadog detects abnormal vibration patterns on a stamping press, creates a SAP PM work order and alerts the maintenance team via Teams."
tags:
- manufacturing
- datadog
- sap
- microsoft-teams
- maintenance
- automotive
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: handle-stamping-press-alert
description: "Given a Datadog alert ID and press ID, create a SAP PM work order, and alert the maintenance team via Teams."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert identifier."
- name: press_id
in: body
type: string
description: "Stamping press identifier."
steps:
- name: get-alert-details
type: call
call: "datadog.get-monitor"
with:
alert_id: "{{alert_id}}"
- name: create-work-order
type: call
call: "sap-pm.create-work-order"
with:
equipment: "{{press_id}}"
description: "Predictive maintenance: {{get-alert-details.message}}"
priority: "high"
- name: alert-maintenance
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_maintenance_channel_id"
text: "PREDICTIVE MAINT: Press {{press_id}} | Alert: {{alert_id}} | WO: {{create-work-order.MaintenanceOrder}}"
consumes:
- namespace: datadog
type: http
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-monitor
method: GET
- namespace: sap-pm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MAINTORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: work-orders
path: "/MaintenanceOrder"
operations:
- name: create-work-order
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Onboards a new supplier by creating a SAP vendor master record, a Salesforce account, and a ServiceNow onboarding task, then notifying procurement via Teams.
naftiko: "0.5"
info:
label: "Supplier Onboarding Orchestration"
description: "Onboards a new supplier by creating a SAP vendor master record, a Salesforce account, and a ServiceNow onboarding task, then notifying procurement via Teams."
tags:
- procurement
- sap
- salesforce
- servicenow
- microsoft-teams
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: onboard-supplier
description: "Given a supplier name, DUNS number, and primary contact, create a SAP vendor record, a Salesforce account, a ServiceNow task, and notify procurement via Teams."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Name of the new supplier."
- name: duns_number
in: body
type: string
description: "DUNS number."
- name: primary_contact
in: body
type: string
description: "Primary contact email."
steps:
- name: create-sap-vendor
type: call
call: "sap-s4.create-vendor"
with:
SupplierName: "{{supplier_name}}"
DUNSNumber: "{{duns_number}}"
- name: create-sf-account
type: call
call: "salesforce.create-account"
with:
Name: "{{supplier_name}}"
Type: "Vendor"
- name: create-onboarding-task
type: call
call: "servicenow.create-task"
with:
short_description: "Supplier Onboarding: {{supplier_name}}"
description: "SAP: {{create-sap-vendor.Supplier}} | SF: {{create-sf-account.id}}"
- name: notify-procurement
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "NEW SUPPLIER: {{supplier_name}} | SAP: {{create-sap-vendor.Supplier}} | SNOW: {{create-onboarding-task.number}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: suppliers
path: "/A_Supplier"
operations:
- name: create-vendor
method: POST
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira audit task, and notifying the quality team via Teams.
naftiko: "0.5"
info:
label: "Supplier Quality Audit Workflow"
description: "Initiates a supplier quality audit by pulling vendor data from SAP, creating a Jira audit task, and notifying the quality team via Teams."
tags:
- quality
- supply-chain
- sap
- jira
- microsoft-teams
- procurement
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: initiate-supplier-audit
description: "Given a vendor number and audit scope, pull vendor data from SAP, create a Jira audit task, and notify the quality team via Teams. Use when a supplier quality audit is required."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor number."
- name: audit_scope
in: body
type: string
description: "Scope of the audit."
steps:
- name: get-vendor-data
type: call
call: "sap-s4.get-vendor"
with:
Supplier: "{{vendor_number}}"
- name: create-audit-task
type: call
call: "jira.create-issue"
with:
project_key: "QA"
issuetype: "Task"
summary: "Supplier Audit: {{get-vendor-data.SupplierName}}"
description: "Scope: {{audit_scope}} | Vendor: {{get-vendor-data.SupplierName}}"
- name: notify-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "SUPPLIER AUDIT: {{get-vendor-data.SupplierName}} | {{audit_scope}} | Jira: {{create-audit-task.key}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: suppliers
path: "/A_Supplier('{Supplier}')"
inputParameters:
- name: Supplier
in: path
operations:
- name: get-vendor
method: GET
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a supply chain disruption is detected, creates a Jira incident, flags affected SAP purchase orders, and notifies procurement via Teams.
naftiko: "0.5"
info:
label: "Supply Chain Disruption Alert"
description: "When a supply chain disruption is detected, creates a Jira incident, flags affected SAP purchase orders, and notifies procurement via Teams."
tags:
- supply-chain
- jira
- sap
- microsoft-teams
- procurement
- automotive
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: handle-supply-disruption
description: "Given a supplier ID, disruption description, and affected POs, create a Jira incident, flag SAP POs, and notify procurement via Teams."
inputParameters:
- name: supplier_id
in: body
type: string
description: "Supplier identifier."
- name: disruption_desc
in: body
type: string
description: "Description of the disruption."
- name: affected_pos
in: body
type: string
description: "Comma-separated affected PO numbers."
steps:
- name: create-disruption-ticket
type: call
call: "jira.create-issue"
with:
project_key: "SCM"
issuetype: "Bug"
summary: "Supply Disruption: {{supplier_id}}"
description: "{{disruption_desc}} | POs: {{affected_pos}}"
- name: flag-purchase-orders
type: call
call: "sap-s4.update-po-status"
with:
po_numbers: "{{affected_pos}}"
status_note: "Disruption: {{create-disruption-ticket.key}}"
- name: notify-procurement
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "SUPPLY DISRUPTION: {{supplier_id}} | {{disruption_desc}} | Jira: {{create-disruption-ticket.key}}"
consumes:
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder"
operations:
- name: update-po-status
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Triggers a refresh of a Tableau vehicle production analytics dashboard by workbook ID.
naftiko: "0.5"
info:
label: "Tableau Vehicle Production Dashboard Refresh"
description: "Triggers a refresh of a Tableau vehicle production analytics dashboard by workbook ID."
tags:
- analytics
- tableau
- automotive
- dashboard
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: refresh-dashboard
description: "Given a Tableau workbook ID, trigger an extract refresh for the vehicle production analytics dashboard."
inputParameters:
- name: workbook_id
in: body
type: string
description: "Tableau workbook ID, e.g. 'wb-vehicle-prod-2026'."
call: "tableau.refresh-workbook"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: job_id
type: string
mapping: "$.job.id"
- name: status
type: string
mapping: "$.job.status"
consumes:
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
Triggers a Terraform Cloud workspace run to provision or update connected vehicle or cloud infrastructure, and notifies the platform engineering team via Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Provisioning Run"
description: "Triggers a Terraform Cloud workspace run to provision or update connected vehicle or cloud infrastructure, and notifies the platform engineering team via Teams."
tags:
- cloud
- infrastructure
- terraform
- msteams
- devops
- automotive
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and change description, queue a plan-and-apply run and notify the platform-engineering Teams channel with the run ID and outcome."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Terraform Cloud workspace ID (e.g., ws-XXXXXXXXX)."
- name: change_description
in: body
type: string
description: "Human-readable reason for this Terraform run (e.g., 'Add FordPass API gateway subnet')."
steps:
- name: queue-run
type: call
call: terraform.create-run
with:
workspace_id: "{{workspace_id}}"
message: "{{change_description}}"
- name: notify-platform
type: call
call: msteams.send-message
with:
channel: "platform-engineering"
text: "Terraform run queued: {{queue-run.run_id}} | Workspace: {{workspace_id}} | Change: {{change_description}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/engineering/channels/platform/messages"
operations:
- name: send-message
method: POST
Tracks tier-1 supplier deliveries by pulling ASN data from SAP, comparing against production schedule, and alerting the materials team via Teams for late deliveries.
naftiko: "0.5"
info:
label: "Tier-1 Supplier Delivery Tracking"
description: "Tracks tier-1 supplier deliveries by pulling ASN data from SAP, comparing against production schedule, and alerting the materials team via Teams for late deliveries."
tags:
- supply-chain
- sap
- microsoft-teams
- procurement
- automotive
- logistics
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: track-supplier-delivery
description: "Given a supplier ID and plant code, pull ASN data from SAP, compare against schedule, and alert the materials team via Teams for late deliveries."
inputParameters:
- name: supplier_id
in: body
type: string
description: "Supplier identifier."
- name: plant_code
in: body
type: string
description: "Plant code."
steps:
- name: get-asn-data
type: call
call: "sap-s4.get-inbound-deliveries"
with:
Supplier: "{{supplier_id}}"
Plant: "{{plant_code}}"
- name: check-schedule
type: call
call: "sap-s4.get-production-schedule"
with:
Plant: "{{plant_code}}"
- name: alert-materials
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_materials_channel_id"
text: "DELIVERY TRACKING: Supplier {{supplier_id}} | Plant: {{plant_code}} | Pending: {{get-asn-data.pending_count}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: deliveries
path: "/A_InboundDelivery"
operations:
- name: get-inbound-deliveries
method: GET
- name: schedule
path: "/A_ProductionSchedule"
operations:
- name: get-production-schedule
method: GET
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Compiles a fleet performance report by pulling telemetry data, aggregating in Snowflake, and publishing to Tableau.
naftiko: "0.5"
info:
label: "Truck Fleet Performance Report"
description: "Compiles a fleet performance report by pulling telemetry data, aggregating in Snowflake, and publishing to Tableau."
tags:
- automotive
- snowflake
- tableau
- analytics
- connected-vehicle
- fleet
capability:
exposes:
- type: mcp
namespace: fleet-ops
port: 8080
tools:
- name: generate-fleet-report
description: "Given a fleet ID and reporting period, aggregate telemetry data in Snowflake and refresh the Tableau fleet dashboard."
inputParameters:
- name: fleet_id
in: body
type: string
description: "Fleet identifier."
- name: reporting_period
in: body
type: string
description: "Reporting period."
steps:
- name: aggregate-data
type: call
call: "snowflake.execute-query"
with:
warehouse: "FLEET_WH"
query: "CALL sp_fleet_report('{{fleet_id}}', '{{reporting_period}}');"
- name: refresh-dashboard
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "$secrets.tableau_fleet_workbook_id"
- name: notify-fleet-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_fleet_channel_id"
text: "FLEET REPORT: {{fleet_id}} | {{reporting_period}} | Dashboard refreshed"
consumes:
- namespace: snowflake
type: http
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: execute-query
method: POST
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a vehicle assembly line goes down, creates a ServiceNow incident, logs downtime in SAP PM, and alerts plant management via Teams.
naftiko: "0.5"
info:
label: "Vehicle Assembly Line Downtime Escalation"
description: "When a vehicle assembly line goes down, creates a ServiceNow incident, logs downtime in SAP PM, and alerts plant management via Teams."
tags:
- production
- servicenow
- sap
- microsoft-teams
- automotive
- manufacturing
capability:
exposes:
- type: mcp
namespace: production-ops
port: 8080
tools:
- name: escalate-line-downtime
description: "Given a production line ID, downtime reason, and severity, create a ServiceNow incident, log a SAP PM notification, and alert plant management via Teams. Use when a vehicle assembly line stops unexpectedly."
inputParameters:
- name: line_id
in: body
type: string
description: "Production line identifier, e.g. 'DEARBORN-TRUCK-LINE-2'."
- name: downtime_reason
in: body
type: string
description: "Reason for the production line downtime."
- name: severity
in: body
type: string
description: "Severity level: P1, P2, or P3."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "[{{severity}}] Line down: {{line_id}}"
urgency: "1"
impact: "1"
description: "Assembly line {{line_id}} is down. Reason: {{downtime_reason}}"
- name: log-sap-notification
type: call
call: "sap-pm.create-notification"
with:
notification_type: "M2"
equipment: "{{line_id}}"
description: "Line downtime: {{downtime_reason}}"
- name: alert-management
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_plant_mgmt_channel_id"
text: "LINE DOWN: {{line_id}} | {{severity}} | INC: {{create-incident.number}} | SAP: {{log-sap-notification.number}}"
consumes:
- namespace: servicenow
type: http
baseUri: "https://ford.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
- namespace: sap-pm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: notifications
path: "/A_MaintenanceNotification"
operations:
- name: create-notification
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Ingests crash test results by loading data to Snowflake, refreshing the Tableau safety dashboard, and notifying the safety engineering team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Crash Test Data Pipeline"
description: "Ingests crash test results by loading data to Snowflake, refreshing the Tableau safety dashboard, and notifying the safety engineering team via Teams."
tags:
- engineering
- snowflake
- tableau
- microsoft-teams
- safety
- automotive
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: ingest-crash-test-data
description: "Given a test ID and data source path, load crash test results to Snowflake, refresh the safety dashboard, and notify the safety engineering team via Teams."
inputParameters:
- name: test_id
in: body
type: string
description: "Crash test identifier."
- name: data_source
in: body
type: string
description: "S3 path to crash test data."
steps:
- name: load-to-snowflake
type: call
call: "snowflake.execute-query"
with:
warehouse: "SAFETY_WH"
query: "CALL sp_ingest_crash_test('{{test_id}}', '{{data_source}}');"
- name: refresh-dashboard
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "$secrets.tableau_safety_workbook_id"
- name: notify-safety-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_safety_eng_channel_id"
text: "CRASH TEST DATA: {{test_id}} loaded | Dashboard refreshed"
consumes:
- namespace: snowflake
type: http
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: execute-query
method: POST
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Orchestrates vehicle delivery logistics by syncing SAP shipping data to Salesforce dealer records, updating the tracking system, and notifying the logistics team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Delivery Logistics Orchestration"
description: "Orchestrates vehicle delivery logistics by syncing SAP shipping data to Salesforce dealer records, updating the tracking system, and notifying the logistics team via Teams."
tags:
- logistics
- sap
- salesforce
- microsoft-teams
- automotive
- delivery
capability:
exposes:
- type: mcp
namespace: logistics-ops
port: 8080
tools:
- name: orchestrate-delivery
description: "Given a shipment ID and dealer code, sync SAP shipping data to Salesforce and notify the logistics team via Teams."
inputParameters:
- name: shipment_id
in: body
type: string
description: "SAP shipment ID."
- name: dealer_code
in: body
type: string
description: "Dealer code."
steps:
- name: get-shipping-data
type: call
call: "sap-s4.get-shipment"
with:
ShipmentId: "{{shipment_id}}"
- name: update-salesforce
type: call
call: "salesforce.update-delivery"
with:
dealer_code: "{{dealer_code}}"
shipment: "{{shipment_id}}"
status: "{{get-shipping-data.Status}}"
- name: notify-logistics
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_logistics_channel_id"
text: "DELIVERY: Shipment {{shipment_id}} | Dealer: {{dealer_code}} | Status: {{get-shipping-data.Status}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: shipments
path: "/A_Shipment('{ShipmentId}')"
inputParameters:
- name: ShipmentId
in: path
operations:
- name: get-shipment
method: GET
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: deliveries
path: "/sobjects/Vehicle_Delivery__c"
operations:
- name: update-delivery
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Verifies vehicle emissions compliance by pulling test data from SAP QM, checking against regulatory limits in SharePoint, and logging the result in ServiceNow.
naftiko: "0.5"
info:
label: "Vehicle Emissions Compliance Check"
description: "Verifies vehicle emissions compliance by pulling test data from SAP QM, checking against regulatory limits in SharePoint, and logging the result in ServiceNow."
tags:
- compliance
- sap
- sharepoint
- servicenow
- automotive
- emissions
capability:
exposes:
- type: mcp
namespace: compliance-ops
port: 8080
tools:
- name: check-emissions-compliance
description: "Given a vehicle model and test batch ID, pull emissions test data from SAP QM, verify against regulatory limits, and log verification in ServiceNow."
inputParameters:
- name: vehicle_model
in: body
type: string
description: "Vehicle model."
- name: test_batch_id
in: body
type: string
description: "Emissions test batch identifier."
steps:
- name: get-test-data
type: call
call: "sap-qm.get-inspection-results"
with:
InspectionLot: "{{test_batch_id}}"
- name: get-regulatory-limits
type: call
call: "sharepoint.get-document"
with:
item_id: "$secrets.emissions_limits_doc_id"
- name: log-verification
type: call
call: "servicenow.create-record"
with:
table: "u_emissions_compliance_log"
vehicle_model: "{{vehicle_model}}"
test_batch: "{{test_batch_id}}"
result: "{{get-test-data.disposition}}"
consumes:
- namespace: sap-qm
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{InspectionLot}')"
inputParameters:
- name: InspectionLot
in: path
operations:
- name: get-inspection-results
method: GET
- namespace: sharepoint
type: http
baseUri: "https://ford.sharepoint.com/_api"
authentication:
type: bearer
token: "$secrets.sharepoint_access_token"
resources:
- name: documents
path: "/web/lists/getbytitle('RegulatoryDocs')/items({{item_id}})"
inputParameters:
- name: item_id
in: path
operations:
- name: get-document
method: GET
- namespace: servicenow
type: http
baseUri: "https://ford.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Assesses vehicle launch readiness by pulling quality metrics from SAP, open issues from Jira, and publishing a readiness report to Confluence and Teams.
naftiko: "0.5"
info:
label: "Vehicle Launch Readiness Review"
description: "Assesses vehicle launch readiness by pulling quality metrics from SAP, open issues from Jira, and publishing a readiness report to Confluence and Teams."
tags:
- engineering
- sap
- jira
- confluence
- microsoft-teams
- automotive
capability:
exposes:
- type: mcp
namespace: engineering-ops
port: 8080
tools:
- name: assess-launch-readiness
description: "Given a vehicle program and target launch date, pull quality metrics from SAP, open issues from Jira, and publish a readiness report to Confluence."
inputParameters:
- name: vehicle_program
in: body
type: string
description: "Vehicle program name."
- name: launch_date
in: body
type: string
description: "Target launch date."
steps:
- name: get-quality-metrics
type: call
call: "sap-s4.get-quality-summary"
with:
program: "{{vehicle_program}}"
- name: get-open-issues
type: call
call: "jira.search-issues"
with:
jql: "project = '{{vehicle_program}}' AND status != Done"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "LAUNCH"
title: "Launch Readiness: {{vehicle_program}}"
body: "Quality: {{get-quality-metrics.summary}} | Open Issues: {{get-open-issues.total}}"
- name: notify-leadership
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_leadership_channel_id"
text: "LAUNCH READINESS: {{vehicle_program}} | Open Issues: {{get-open-issues.total}} | Report: {{publish-report.url}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-summary
path: "/A_InspectionLot"
operations:
- name: get-quality-summary
method: GET
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
method: POST
- namespace: confluence
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Tracks a vehicle order from placement to delivery by syncing Salesforce order, SAP production status, and posting updates to the dealer Teams channel.
naftiko: "0.5"
info:
label: "Vehicle Order to Delivery Tracking"
description: "Tracks a vehicle order from placement to delivery by syncing Salesforce order, SAP production status, and posting updates to the dealer Teams channel."
tags:
- sales
- salesforce
- sap
- microsoft-teams
- automotive
- production
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: track-vehicle-order
description: "Given an order number, sync SAP production status to Salesforce and notify the dealer channel via Teams."
inputParameters:
- name: order_number
in: body
type: string
description: "Vehicle order number."
- name: dealer_code
in: body
type: string
description: "Dealer code."
steps:
- name: get-production-status
type: call
call: "sap-s4.get-prod-order"
with:
ManufacturingOrder: "{{order_number}}"
- name: update-salesforce
type: call
call: "salesforce.update-order"
with:
order_number: "{{order_number}}"
status: "{{get-production-status.ManufacturingOrderStatus}}"
- name: notify-dealer
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_dealer_channel_id"
text: "ORDER UPDATE: {{order_number}} | Dealer: {{dealer_code}} | Status: {{get-production-status.ManufacturingOrderStatus}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: production-orders
path: "/A_ProductionOrder_2('{ManufacturingOrder}')"
inputParameters:
- name: ManufacturingOrder
in: path
operations:
- name: get-prod-order
method: GET
- namespace: salesforce
type: http
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_access_token"
resources:
- name: orders
path: "/sobjects/Vehicle_Order__c"
operations:
- name: update-order
method: PATCH
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
Initiates a vehicle quality defect investigation by creating a SAP quality notification, opening a Jira engineering ticket, and alerting the quality team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Quality Defect Investigation"
description: "Initiates a vehicle quality defect investigation by creating a SAP quality notification, opening a Jira engineering ticket, and alerting the quality team via Teams."
tags:
- quality
- sap
- jira
- microsoft-teams
- automotive
- manufacturing
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: investigate-vehicle-defect
description: "Given a defect description, affected vehicle model, and VIN range, create a SAP quality notification, open a Jira engineering investigation, and alert the quality team via Teams."
inputParameters:
- name: defect_description
in: body
type: string
description: "Description of the quality defect found."
- name: vehicle_model
in: body
type: string
description: "Vehicle model, e.g. 'F-150 Lightning'."
- name: vin_range
in: body
type: string
description: "Affected VIN range."
steps:
- name: create-quality-notification
type: call
call: "sap-s4.create-qn"
with:
notification_type: "Q2"
description: "{{defect_description}}"
material: "{{vehicle_model}}"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project_key: "QA"
issuetype: "Bug"
summary: "Defect: {{vehicle_model}} - {{defect_description}}"
description: "QN: {{create-quality-notification.number}} | VINs: {{vin_range}} | {{defect_description}}"
- name: alert-quality-team
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.teams_quality_channel_id"
text: "DEFECT: {{vehicle_model}} | {{defect_description}} | QN: {{create-quality-notification.number}} | Jira: {{create-investigation.key}}"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: quality-notifications
path: "/A_QualityNotification"
operations:
- name: create-qn
method: POST
- namespace: jira
type: http
baseUri: "https://ford.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
- namespace: msteams
type: http
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_bearer_token"
resources:
- name: channel-messages
path: "/teams/messages"
operations:
- name: post-message
method: POST
When a quality control system flags a vehicle assembly defect, creates a SAP PM corrective maintenance work order, assigns the quality engineer from Workday, and alerts the plant operations team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Quality Defect Work Order"
description: "When a quality control system flags a vehicle assembly defect, creates a SAP PM corrective maintenance work order, assigns the quality engineer from Workday, and alerts the plant operations team via Teams."
tags:
- manufacturing
- quality
- sap
- workday
- msteams
- automotive
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: create-defect-work-order
description: "Given a vehicle identification number (VIN), defect code, and assembly line location, create a SAP PM work order, look up the responsible quality engineer in Workday, and notify the plant-operations Teams channel."
inputParameters:
- name: vin
in: body
type: string
description: "17-character Vehicle Identification Number (VIN) of the affected vehicle."
- name: defect_code
in: body
type: string
description: "Quality defect code from the inspection system (e.g., BODY-WELD-003)."
- name: assembly_line
in: body
type: string
description: "Assembly line location code (e.g., DEARBORN-LINE-4)."
- name: priority
in: body
type: string
description: "Work order priority: VH (very high), HI (high), ME (medium), LO (low)."
steps:
- name: get-quality-engineer
type: call
call: workday.get-engineer-by-line
with:
assembly_line: "{{assembly_line}}"
- name: create-work-order
type: call
call: sap.create-pm-work-order
with:
functional_location: "{{assembly_line}}"
short_text: "Defect {{defect_code}} on VIN {{vin}}"
priority: "{{priority}}"
person_responsible: "{{get-quality-engineer.personnel_number}}"
- name: notify-plant
type: call
call: msteams.send-message
with:
channel: "plant-operations"
text: "Quality defect WO {{create-work-order.order_number}} | VIN: {{vin}} | Defect: {{defect_code}} | Line: {{assembly_line}} | Engineer: {{get-quality-engineer.full_name}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: assembly_line
in: query
operations:
- name: get-engineer-by-line
method: GET
- type: http
namespace: sap
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/PM_ORDER_CREATE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: pm-work-orders
path: "/A_MaintenanceOrder"
operations:
- name: create-pm-work-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/manufacturing/channels/plant-ops/messages"
operations:
- name: send-message
method: POST
When a safety recall decision is made, creates a Salesforce Service Cloud case for each affected VIN, opens a ServiceNow change request for the recall campaign, and notifies the customer service leadership team via Teams.
naftiko: "0.5"
info:
label: "Vehicle Recall Campaign Management"
description: "When a safety recall decision is made, creates a Salesforce Service Cloud case for each affected VIN, opens a ServiceNow change request for the recall campaign, and notifies the customer service leadership team via Teams."
tags:
- automotive
- customer-support
- salesforce
- servicenow
- msteams
- recall
capability:
exposes:
- type: mcp
namespace: recall-management
port: 8080
tools:
- name: launch-recall-campaign
description: "Given a recall number, affected model year, and defect description, create a Salesforce case for each affected vehicle, open a ServiceNow change request for the campaign, and notify the customer service team via Teams."
inputParameters:
- name: recall_number
in: body
type: string
description: "NHTSA recall campaign number (e.g., 24V-001)."
- name: affected_model
in: body
type: string
description: "Affected vehicle model name (e.g., F-150, Mustang)."
- name: model_years
in: body
type: string
description: "Comma-separated model years affected (e.g., 2022,2023,2024)."
- name: defect_description
in: body
type: string
description: "Short description of the safety defect."
steps:
- name: create-recall-case
type: call
call: salesforce.create-case
with:
Subject: "Recall {{recall_number}}: {{affected_model}} {{model_years}} — {{defect_description}}"
Status: "New"
Origin: "Recall Campaign"
Type: "Safety Recall"
- name: create-change-request
type: call
call: servicenow.create-change-request
with:
short_description: "Recall campaign {{recall_number}}: {{affected_model}} {{model_years}}"
category: "recall_campaign"
description: "Defect: {{defect_description}}. Affected models: {{affected_model}} {{model_years}}"
- name: notify-customer-service
type: call
call: msteams.send-message
with:
channel: "customer-service-leadership"
text: "Recall {{recall_number}} launched: {{affected_model}} {{model_years}}. SF case: {{create-recall-case.case_number}}. Change: {{create-change-request.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://ford.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
- type: http
namespace: servicenow
baseUri: "https://ford.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-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: channel-messages
path: "/teams/customer-service/channels/leadership/messages"
operations:
- name: send-message
method: POST
Compiles a vendor performance scorecard by pulling delivery and quality data from SAP, aggregating in Snowflake, and publishing to Tableau.
naftiko: "0.5"
info:
label: "Vendor Performance Scorecard Generation"
description: "Compiles a vendor performance scorecard by pulling delivery and quality data from SAP, aggregating in Snowflake, and publishing to Tableau."
tags:
- supply-chain
- sap
- snowflake
- tableau
- procurement
- analytics
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: generate-vendor-scorecard
description: "Given a vendor number and period, pull metrics from SAP, aggregate in Snowflake, and refresh the Tableau scorecard."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor number."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: extract-sap-data
type: call
call: "sap-s4.get-vendor-metrics"
with:
Supplier: "{{vendor_number}}"
- name: aggregate-snowflake
type: call
call: "snowflake.execute-query"
with:
warehouse: "PROCUREMENT_WH"
query: "CALL sp_vendor_scorecard('{{vendor_number}}', '{{period}}');"
- name: refresh-scorecard
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "$secrets.tableau_vendor_scorecard_id"
consumes:
- namespace: sap-s4
type: http
baseUri: "https://ford-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_s4_username"
password: "$secrets.sap_s4_password"
resources:
- name: vendor-metrics
path: "/A_Supplier('{Supplier}')"
inputParameters:
- name: Supplier
in: path
operations:
- name: get-vendor-metrics
method: GET
- namespace: snowflake
type: http
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: execute-query
method: POST
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
Retrieves an employee profile from Workday by employee ID, returning name, title, department, and manager.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by employee ID, returning name, title, department, and manager."
tags:
- hr
- workday
- lookup
- employee
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday employee ID, retrieve the employee profile including full name, job title, department, cost center, and direct manager. Use for HR inquiries or onboarding verification."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID, e.g. 'EMP-104817'."
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.Worker.Name"
- name: job_title
type: string
mapping: "$.Worker.Position.Title"
- name: department
type: string
mapping: "$.Worker.Organization.Name"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Exports active Ford employee headcount by department and cost center from Workday, writes a snapshot to Snowflake, and triggers a Power BI workforce planning dashboard refresh.
naftiko: "0.5"
info:
label: "Workday Payroll Headcount Snapshot"
description: "Exports active Ford employee headcount by department and cost center from Workday, writes a snapshot to Snowflake, and triggers a Power BI workforce planning dashboard refresh."
tags:
- hr
- finance
- workday
- snowflake
- power-bi
- headcount
- reporting
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: snapshot-headcount
description: "Fetch active headcount by department and cost center from Workday, write a dated snapshot to Snowflake, and trigger a Power BI workforce dashboard refresh. Use monthly for headcount and labor cost planning."
inputParameters:
- name: snapshot_date
in: body
type: string
description: "Snapshot date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: export-workers
type: call
call: workday.export-workers
with:
status: "active"
- name: write-snapshot
type: call
call: snowflake.insert-headcount-snapshot
with:
snapshot_date: "{{snapshot_date}}"
records: "{{export-workers.rows}}"
- name: refresh-report
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "$secrets.powerbi_workforce_dataset_id"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers-export
path: "/workers"
inputParameters:
- name: status
in: query
operations:
- name: export-workers
method: GET
- type: http
namespace: snowflake
baseUri: "https://ford.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: headcount-table
path: "/statements"
operations:
- name: insert-headcount-snapshot
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
When a hiring manager opens a position requisition in Workday, creates a ServiceNow approval task for the HRBP, and notifies the Talent Acquisition team via Teams.
naftiko: "0.5"
info:
label: "Workday Position Requisition Approval Routing"
description: "When a hiring manager opens a position requisition in Workday, creates a ServiceNow approval task for the HRBP, and notifies the Talent Acquisition team via Teams."
tags:
- hr
- recruiting
- workday
- servicenow
- msteams
- approval
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: route-position-requisition
description: "Given a Workday position requisition ID, fetch its details, create a ServiceNow HRBP approval task, and notify the Talent Acquisition Teams channel."
inputParameters:
- name: requisition_id
in: body
type: string
description: "Workday position requisition ID (e.g., REQ-007890)."
steps:
- name: get-requisition
type: call
call: workday.get-position-requisition
with:
requisition_id: "{{requisition_id}}"
- name: create-approval-task
type: call
call: servicenow.create-task
with:
short_description: "Position requisition: {{requisition_id}} — {{get-requisition.job_title}}"
assignment_group: "HRBP_Team"
description: "Department: {{get-requisition.department}}. Manager: {{get-requisition.manager_name}}"
- name: notify-ta-team
type: call
call: msteams.send-message
with:
channel: "talent-acquisition"
text: "New requisition: {{get-requisition.job_title}} in {{get-requisition.department}}. Task: {{create-approval-task.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: position-requisitions
path: "/positionRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-position-requisition
method: GET
- type: http
namespace: servicenow
baseUri: "https://ford.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.msteams_token"
resources:
- name: channel-messages
path: "/teams/hr/channels/talent-acquisition/messages"
operations:
- name: send-message
method: POST
When an employee's position changes in Workday, updates their Salesforce user profile, revises Microsoft 365 group memberships, and notifies the new manager via Teams.
naftiko: "0.5"
info:
label: "Workday Role Change Access Propagation"
description: "When an employee's position changes in Workday, updates their Salesforce user profile, revises Microsoft 365 group memberships, and notifies the new manager via Teams."
tags:
- hr
- identity
- workday
- salesforce
- microsoft-365
- msteams
- role-change
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: propagate-role-change
description: "Given a Workday employee ID and new job profile, update the Salesforce user record and notify the new manager via Teams. Use on confirmed Workday position change events."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "Workday worker ID of the employee with the role change."
- name: new_job_profile
in: body
type: string
description: "New Workday job profile code or title."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: update-sf-user
type: call
call: salesforce.patch-user
with:
email: "{{get-worker.email}}"
Title: "{{new_job_profile}}"
Department: "{{get-worker.department}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "Role change completed for {{get-worker.full_name}}: now {{new_job_profile}}. Salesforce updated."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: salesforce
baseUri: "https://ford.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User"
operations:
- name: patch-user
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves the current time-off balance for an employee from Workday by employee ID.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Check"
description: "Retrieves the current time-off balance for an employee from Workday by employee ID."
tags:
- hr
- workday
- time-off
- lookup
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday employee ID, retrieve current time-off balances including vacation, sick, and personal days."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID, e.g. 'EMP-104817'."
call: "workday.get-time-off"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation_balance
type: string
mapping: "$.TimeOffBalance.Vacation"
- name: sick_balance
type: string
mapping: "$.TimeOffBalance.Sick"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: time-off
path: "/workers/{{worker_id}}/timeOffBalances"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-time-off
method: GET
Generates a workforce capacity report by pulling headcount from Workday, comparing against project demand in Jira, and publishing insights to Tableau.
naftiko: "0.5"
info:
label: "Workforce Capacity Planning Report"
description: "Generates a workforce capacity report by pulling headcount from Workday, comparing against project demand in Jira, and publishing insights to Tableau."
tags:
- hr
- workday
- jira
- tableau
- analytics
- manufacturing
capability:
exposes:
- type: mcp
namespace: hr-ops
port: 8080
tools:
- name: generate-capacity-report
description: "Given a department and planning horizon, pull headcount from Workday, assess demand from Jira, and refresh the Tableau capacity dashboard."
inputParameters:
- name: department_code
in: body
type: string
description: "Department code."
- name: planning_horizon
in: body
type: string
description: "Planning horizon."
steps:
- name: get-headcount
type: call
call: "workday.get-headcount"
with:
department: "{{department_code}}"
- name: get-demand
type: call
call: "jira.search-issues"
with:
jql: "department = '{{department_code}}'"
- name: refresh-dashboard
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "$secrets.tableau_capacity_workbook_id"
consumes:
- namespace: workday
type: http
baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/ford"
authentication:
type: bearer
token: "$secrets.workday_bearer_token"
resources:
- name: headcount
path: "/workers/headcount"
operations:
- name: get-headcount
method: GET
- namespace: jira
type: http
baseUri: "https://ford.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
method: POST
- namespace: tableau
type: http
baseUri: "https://tableau.ford.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_access_token"
resources:
- name: workbooks
path: "/sites/ford/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST