Ford Capabilities

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

Sort
Expand

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