AGCO Capabilities

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

Sort
Expand

When ADP flags a payroll exception, retrieves employee details from Workday, creates a ServiceNow HR ticket, and notifies the employee and HR in Microsoft Teams.

naftiko: "0.5"
info:
  label: "ADP Payroll Exception Handler"
  description: "When ADP flags a payroll exception, retrieves employee details from Workday, creates a ServiceNow HR ticket, and notifies the employee and HR in Microsoft Teams."
  tags:
    - hr
    - adp
    - workday
    - servicenow
    - microsoft-teams
    - payroll
capability:
  exposes:
    - type: mcp
      namespace: payroll-exceptions
      port: 8080
      tools:
        - name: handle-payroll-exception
          description: "Handle an ADP payroll exception: get exception details, fetch employee from Workday, create ServiceNow HR ticket, and notify in Teams."
          inputParameters:
            - name: exception_id
              in: body
              type: string
              description: "The ADP payroll exception ID."
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          steps:
            - name: get-exception
              type: call
              call: "adp.get-payroll-exception"
              with:
                exception_id: "{{exception_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: create-hr-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Payroll exception: {{get-employee.full_name}} - {{get-exception.type}}"
                description: "Exception: {{get-exception.description}}. Amount: ${{get-exception.amount}}. Pay period: {{get-exception.pay_period}}."
                category: "hr_payroll"
                assigned_group: "HR_Payroll"
            - name: notify-hr
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "hr-payroll-ops"
                text: "Payroll exception for {{get-employee.full_name}}: {{get-exception.type}} (${{get-exception.amount}}). ServiceNow: {{create-hr-ticket.number}}."
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: exceptions
          path: "/exceptions/{{exception_id}}"
          inputParameters:
            - name: exception_id
              in: path
          operations:
            - name: get-payroll-exception
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes parts and service revenue from SAP, identifies growth opportunities in Snowflake, updates Power BI reports, and notifies aftermarket team.

naftiko: "0.5"
info:
  label: "Aftermarket Revenue Analytics Pipeline"
  description: "Analyzes parts and service revenue from SAP, identifies growth opportunities in Snowflake, updates Power BI reports, and notifies aftermarket team."
  tags:
    - aftermarket
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: aftermarket
      port: 8080
      tools:
        - name: aftermarket_revenue_analytics_pipeline
          description: "Orchestrate aftermarket revenue analytics pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Validates equipment configurations against subsidy requirements, generates compliance certificates, and notifies dealers.

naftiko: "0.5"
info:
  label: "Agricultural Subsidy Compliance Pipeline"
  description: "Validates equipment configurations against subsidy requirements, generates compliance certificates, and notifies dealers."
  tags:
    - compliance
    - sap
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: agricultural_subsidy_compliance_pipeline
          description: "Orchestrate agricultural subsidy compliance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Retrieves metadata for the latest firmware binary artifact stored in Amazon S3, including version, upload date, and presigned download URL.

naftiko: "0.5"
info:
  label: "Amazon S3 Firmware Artifact Retrieval"
  description: "Retrieves metadata for the latest firmware binary artifact stored in Amazon S3, including version, upload date, and presigned download URL."
  tags:
    - firmware
    - amazon-s3
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: firmware-artifacts
      port: 8080
      tools:
        - name: get-firmware-artifact
          description: "Get metadata for the latest firmware artifact in S3 for a given ECU model. Returns version, upload date, and download URL."
          inputParameters:
            - name: ecu_model
              in: body
              type: string
              description: "The ECU model identifier (e.g. TC-5000)."
          call: "s3.get-object-metadata"
          with:
            ecu_model: "{{ecu_model}}"
          outputParameters:
            - name: firmware_version
              type: string
              mapping: "$.Metadata.firmware-version"
            - name: last_modified
              type: string
              mapping: "$.LastModified"
            - name: content_length
              type: string
              mapping: "$.ContentLength"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://agco-firmware-artifacts.s3.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
        region: "us-east-1"
      resources:
        - name: objects
          path: "/firmware/{{ecu_model}}/latest.bin"
          inputParameters:
            - name: ecu_model
              in: path
          operations:
            - name: get-object-metadata
              method: HEAD

# --- Orchestrated capabilities (steps) ---

Monitors Apache Airflow DAG runs, logs results to Datadog, creates a Jira ticket if a critical DAG fails, and notifies the data engineering team in Teams.

naftiko: "0.5"
info:
  label: "Apache Airflow ETL Job Monitor"
  description: "Monitors Apache Airflow DAG runs, logs results to Datadog, creates a Jira ticket if a critical DAG fails, and notifies the data engineering team in Teams."
  tags:
    - data-engineering
    - apache-airflow
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: etl-monitoring
      port: 8080
      tools:
        - name: monitor-airflow-dag
          description: "Monitor an Airflow DAG: check run status, log to Datadog, create Jira ticket on failure, and notify data engineering."
          inputParameters:
            - name: dag_id
              in: body
              type: string
              description: "The Airflow DAG identifier."
            - name: run_id
              in: body
              type: string
              description: "The DAG run identifier."
          steps:
            - name: get-dag-run
              type: call
              call: "airflow.get-dag-run"
              with:
                dag_id: "{{dag_id}}"
                run_id: "{{run_id}}"
            - name: log-to-datadog
              type: call
              call: "datadog.post-event"
              with:
                title: "Airflow DAG {{dag_id}} run {{run_id}}: {{get-dag-run.state}}"
                text: "Duration: {{get-dag-run.duration}}s. Tasks: {{get-dag-run.task_count}} total, {{get-dag-run.failed_tasks}} failed."
                alert_type: "{{get-dag-run.state}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "DATA"
                summary: "Airflow DAG failure: {{dag_id}}"
                description: "Run {{run_id}} failed. Duration: {{get-dag-run.duration}}s. Failed tasks: {{get-dag-run.failed_tasks}}."
                issuetype: "Bug"
                priority: "High"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "data-engineering"
                text: "Airflow DAG {{dag_id}} failed. Run: {{run_id}}. Failed tasks: {{get-dag-run.failed_tasks}}. Jira: {{create-ticket.key}}."
  consumes:
    - type: http
      namespace: airflow
      baseUri: "https://airflow.agcocorp.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.airflow_user"
        password: "$secrets.airflow_password"
      resources:
        - name: dag-runs
          path: "/dags/{{dag_id}}/dagRuns/{{run_id}}"
          inputParameters:
            - name: dag_id
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-dag-run
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Apache NiFi data flow health, captures metrics in Prometheus, visualizes in Grafana, and creates a ServiceNow incident if flow backs up beyond threshold.

naftiko: "0.5"
info:
  label: "Apache NiFi Data Flow Monitoring"
  description: "Monitors Apache NiFi data flow health, captures metrics in Prometheus, visualizes in Grafana, and creates a ServiceNow incident if flow backs up beyond threshold."
  tags:
    - data-integration
    - apache-nifi
    - prometheus
    - grafana
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: nifi-monitoring
      port: 8080
      tools:
        - name: check-nifi-flow-health
          description: "Monitor a NiFi flow: check queue depth, push metrics to Prometheus, annotate Grafana, and create ServiceNow incident if backed up."
          inputParameters:
            - name: process_group_id
              in: body
              type: string
              description: "The NiFi process group ID."
            - name: threshold_queued
              in: body
              type: string
              description: "The queue depth threshold for alerting."
          steps:
            - name: get-flow-status
              type: call
              call: "nifi.get-process-group"
              with:
                pg_id: "{{process_group_id}}"
            - name: push-metrics
              type: call
              call: "prometheus.push-metrics"
              with:
                job: "nifi-flow-{{process_group_id}}"
                metrics:
                  queued_count: "{{get-flow-status.queued_count}}"
                  bytes_in: "{{get-flow-status.bytes_in}}"
                  bytes_out: "{{get-flow-status.bytes_out}}"
            - name: annotate-grafana
              type: call
              call: "grafana.create-annotation"
              with:
                dashboard_id: "nifi-overview"
                text: "Flow {{process_group_id}} queued: {{get-flow-status.queued_count}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "NiFi flow backlog: {{process_group_id}}"
                description: "Queued: {{get-flow-status.queued_count}} (threshold: {{threshold_queued}}). Bytes in: {{get-flow-status.bytes_in}}, out: {{get-flow-status.bytes_out}}."
                category: "data_integration"
  consumes:
    - type: http
      namespace: nifi
      baseUri: "https://nifi.agcocorp.com/nifi-api"
      authentication:
        type: bearer
        token: "$secrets.nifi_token"
      resources:
        - name: process-groups
          path: "/process-groups/{{pg_id}}/status"
          inputParameters:
            - name: pg_id
              in: path
          operations:
            - name: get-process-group
              method: GET
    - type: http
      namespace: prometheus
      baseUri: "https://prometheus-pushgateway.agcocorp.com"
      authentication:
        type: basic
        username: "$secrets.prometheus_user"
        password: "$secrets.prometheus_password"
      resources:
        - name: metrics
          path: "/metrics/job/{{job}}"
          inputParameters:
            - name: job
              in: path
          operations:
            - name: push-metrics
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://grafana.agcocorp.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: annotations
          path: "/annotations"
          operations:
            - name: create-annotation
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://agco.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

Monitors production line throughput from SAP MES, detects bottlenecks in Snowflake, creates improvement tasks in Jira, and notifies ops.

naftiko: "0.5"
info:
  label: "Assembly Line Bottleneck Detector"
  description: "Monitors production line throughput from SAP MES, detects bottlenecks in Snowflake, creates improvement tasks in Jira, and notifies ops."
  tags:
    - manufacturing
    - sap
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: assembly_line_bottleneck_detector
          description: "Orchestrate assembly line bottleneck detector workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Retrieves the latest build status for an AGCO firmware or embedded software pipeline in Azure DevOps.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status for an AGCO firmware or embedded software pipeline in Azure DevOps."
  tags:
    - ci-cd
    - azure-devops
    - engineering
    - firmware
capability:
  exposes:
    - type: mcp
      namespace: build-pipeline
      port: 8080
      tools:
        - name: get-latest-build
          description: "Get the latest Azure DevOps build for an AGCO firmware pipeline. Returns build number, status, result, and finish time."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline definition ID."
          call: "azuredevops.get-build"
          with:
            definition_id: "{{pipeline_id}}"
          outputParameters:
            - name: build_number
              type: string
              mapping: "$.value[0].buildNumber"
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: finish_time
              type: string
              mapping: "$.value[0].finishTime"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/agco/FirmwareProject/_apis/build"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: builds
          path: "/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: definition_id
              in: query
          operations:
            - name: get-build
              method: GET

Pulls sensor data from Fuse telematics, runs a predictive maintenance model in Azure Machine Learning, schedules a SAP PM order if failure predicted, and notifies the service team in Teams.

naftiko: "0.5"
info:
  label: "Azure ML Predictive Maintenance Pipeline"
  description: "Pulls sensor data from Fuse telematics, runs a predictive maintenance model in Azure Machine Learning, schedules a SAP PM order if failure predicted, and notifies the service team in Teams."
  tags:
    - predictive-maintenance
    - azure-machine-learning
    - iot
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: predictive-maintenance
      port: 8080
      tools:
        - name: run-predictive-maintenance
          description: "Run predictive maintenance: pull sensor data from Fuse, run Azure ML model, create SAP PM order if needed, and notify service team."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: component_type
              in: body
              type: string
              description: "The component type to evaluate (engine, transmission, hydraulic)."
          steps:
            - name: get-sensor-data
              type: call
              call: "fuse-telematics.get-sensor-history"
              with:
                serial: "{{machine_serial}}"
                component: "{{component_type}}"
            - name: run-model
              type: call
              call: "azureml.score-model"
              with:
                model_name: "pm-failure-prediction"
                input_data:
                  serial: "{{machine_serial}}"
                  component: "{{component_type}}"
                  sensor_data: "{{get-sensor-data.readings}}"
            - name: create-pm-order
              type: call
              call: "sap-pm.create-maintenance-order"
              with:
                equipment_serial: "{{machine_serial}}"
                description: "Predictive maintenance: {{component_type}} - failure probability {{run-model.failure_probability}}%"
                priority: "{{run-model.recommended_priority}}"
            - name: notify-service
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "predictive-maintenance"
                text: "PM alert for {{machine_serial}} {{component_type}}: failure probability {{run-model.failure_probability}}%. SAP order: {{create-pm-order.order_number}}. Recommended action: {{run-model.recommended_action}}."
  consumes:
    - type: http
      namespace: fuse-telematics
      baseUri: "https://fuse-api.agcocorp.com/telematics/v2"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: sensor-history
          path: "/machines/{{serial}}/sensors/{{component}}/history"
          inputParameters:
            - name: serial
              in: path
            - name: component
              in: path
          operations:
            - name: get-sensor-history
              method: GET
    - type: http
      namespace: azureml
      baseUri: "https://agco-ml.westus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: models
          path: "/score"
          operations:
            - name: score-model
              method: POST
    - type: http
      namespace: sap-pm
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: maintenance-orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: create-maintenance-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors component availability in SAP, detects shortages, evaluates production impact in Snowflake, and escalates to supply chain.

naftiko: "0.5"
info:
  label: "Component Shortage Escalation Pipeline"
  description: "Monitors component availability in SAP, detects shortages, evaluates production impact in Snowflake, and escalates to supply chain."
  tags:
    - supply-chain
    - sap
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: component_shortage_escalation_pipeline
          description: "Orchestrate component shortage escalation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Searches AGCO Confluence knowledge base for technical service bulletins and returns the top matching article title, URL, and last updated date.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Article Lookup"
  description: "Searches AGCO Confluence knowledge base for technical service bulletins and returns the top matching article title, URL, and last updated date."
  tags:
    - knowledge-management
    - confluence
    - dealer-support
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-service-bulletin
          description: "Search AGCO Confluence for a technical service bulletin by keyword. Returns the top match title, URL, and last modified date."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Search keywords for the technical service bulletin."
          call: "confluence.search-content"
          with:
            query: "{{search_query}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.results[0].title"
            - name: url
              type: string
              mapping: "$.results[0]._links.webui"
            - name: last_modified
              type: string
              mapping: "$.results[0].version.when"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://agco.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search?cql=type=page+AND+space=TSB+AND+text~'{{query}}'"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-content
              method: GET

Retrieves Confluence page content for AGCO knowledge base.

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

Plans firmware rollout for connected equipment, deploys OTA updates, monitors success rates in Datadog, and notifies IoT team.

naftiko: "0.5"
info:
  label: "Connected Machine Firmware Deployment"
  description: "Plans firmware rollout for connected equipment, deploys OTA updates, monitors success rates in Datadog, and notifies IoT team."
  tags:
    - iot
    - firmware
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: iot
      port: 8080
      tools:
        - name: connected_machine_firmware_deployment
          description: "Orchestrate connected machine firmware deployment workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

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

Analyzes regional crop calendars, forecasts equipment demand in Snowflake, plans dealer inventory in SAP, and notifies sales planning.

naftiko: "0.5"
info:
  label: "Crop Season Planning Pipeline"
  description: "Analyzes regional crop calendars, forecasts equipment demand in Snowflake, plans dealer inventory in SAP, and notifies sales planning."
  tags:
    - agronomy
    - snowflake
    - sap
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: agronomy
      port: 8080
      tools:
        - name: crop_season_planning_pipeline
          description: "Orchestrate crop season planning pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-salesforce
              type: call
              call: "salesforce.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Distributes CSAT surveys to equipment owners, analyzes responses in Snowflake, updates Salesforce accounts, and notifies customer success.

naftiko: "0.5"
info:
  label: "Customer Satisfaction Survey Pipeline"
  description: "Distributes CSAT surveys to equipment owners, analyzes responses in Snowflake, updates Salesforce accounts, and notifies customer success."
  tags:
    - customer-success
    - salesforce
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-success
      port: 8080
      tools:
        - name: customer_satisfaction_survey_pipeline
          description: "Orchestrate customer satisfaction survey pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Queries Datadog for infrastructure health metrics of an AGCO manufacturing plant host group, returning CPU, memory, and alert status.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Health Check"
  description: "Queries Datadog for infrastructure health metrics of an AGCO manufacturing plant host group, returning CPU, memory, and alert status."
  tags:
    - monitoring
    - datadog
    - infrastructure
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-host-health
          description: "Check Datadog infrastructure health for a plant host group. Returns CPU usage, memory usage, and active alert count."
          inputParameters:
            - name: host_group
              in: body
              type: string
              description: "The Datadog host group tag for the plant (e.g. plant:jackson-mn)."
          call: "datadog.get-host-metrics"
          with:
            filter: "{{host_group}}"
          outputParameters:
            - name: avg_cpu
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
            - name: avg_memory
              type: string
              mapping: "$.series[1].pointlist[-1][1]"
            - name: active_alerts
              type: string
              mapping: "$.total_matching"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query?query=avg:system.cpu.user{{filter}}&from=-3600"
          inputParameters:
            - name: filter
              in: query
          operations:
            - name: get-host-metrics
              method: GET

Retrieves Datadog monitor status for AGCO infrastructure.

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

When a dealer submits a credit application via Salesforce, validates the dealer in Oracle EBS, runs a financial check, creates a Jira review ticket, and notifies finance in Teams.

naftiko: "0.5"
info:
  label: "Dealer Credit Application Processor"
  description: "When a dealer submits a credit application via Salesforce, validates the dealer in Oracle EBS, runs a financial check, creates a Jira review ticket, and notifies finance in Teams."
  tags:
    - dealer-management
    - salesforce
    - oracle-ebs
    - jira
    - microsoft-teams
    - finance
capability:
  exposes:
    - type: mcp
      namespace: dealer-credit
      port: 8080
      tools:
        - name: process-credit-application
          description: "Process a dealer credit application: get Salesforce request, validate in Oracle EBS, create Jira review, and notify finance."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Salesforce credit application record ID."
            - name: dealer_code
              in: body
              type: string
              description: "The dealer code."
          steps:
            - name: get-application
              type: call
              call: "salesforce.get-credit-app"
              with:
                record_id: "{{application_id}}"
            - name: validate-dealer
              type: call
              call: "oracle-ebs.get-supplier"
              with:
                supplier_num: "{{dealer_code}}"
            - name: create-review
              type: call
              call: "jira.create-issue"
              with:
                project: "FIN"
                summary: "Credit review: {{dealer_code}} - ${{get-application.requested_amount}}"
                description: "Dealer: {{validate-dealer.supplier_name}}. Requested: ${{get-application.requested_amount}}. Payment terms: {{validate-dealer.payment_terms}}."
                issuetype: "Task"
                priority: "Medium"
            - name: notify-finance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "dealer-finance"
                text: "Credit application from {{validate-dealer.supplier_name}} ({{dealer_code}}) for ${{get-application.requested_amount}}. Review: {{create-review.key}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: credit-apps
          path: "/sobjects/Credit_Application__c/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-credit-app
              method: GET
    - type: http
      namespace: oracle-ebs
      baseUri: "https://oracle-ebs.agcocorp.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_num}}"
          inputParameters:
            - name: supplier_num
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Evaluates dealer creditworthiness from SAP financial data, runs scoring in Snowflake, creates credit decisions, and notifies finance.

naftiko: "0.5"
info:
  label: "Dealer Credit Assessment Pipeline"
  description: "Evaluates dealer creditworthiness from SAP financial data, runs scoring in Snowflake, creates credit decisions, and notifies finance."
  tags:
    - finance
    - sap
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: dealer_credit_assessment_pipeline
          description: "Orchestrate dealer credit assessment pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Monitors dealer stock levels from Salesforce, calculates replenishment in Snowflake, creates SAP orders, and notifies dealers.

naftiko: "0.5"
info:
  label: "Dealer Inventory Replenishment Pipeline"
  description: "Monitors dealer stock levels from Salesforce, calculates replenishment in Snowflake, creates SAP orders, and notifies dealers."
  tags:
    - inventory
    - salesforce
    - snowflake
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: dealer_inventory_replenishment_pipeline
          description: "Orchestrate dealer inventory replenishment pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-sap
              type: call
              call: "sap.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a new dealer agreement is signed, creates the account in Salesforce, provisions access in Azure Active Directory, sets up a SharePoint collaboration site, and notifies the regional team in Teams.

naftiko: "0.5"
info:
  label: "Dealer Onboarding Orchestrator"
  description: "When a new dealer agreement is signed, creates the account in Salesforce, provisions access in Azure Active Directory, sets up a SharePoint collaboration site, and notifies the regional team in Teams."
  tags:
    - dealer-management
    - salesforce
    - azure-active-directory
    - sharepoint
    - microsoft-teams
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: dealer-onboarding
      port: 8080
      tools:
        - name: onboard-new-dealer
          description: "Onboard a new AGCO dealer: create Salesforce account, provision Azure AD access, set up SharePoint site, and notify regional team."
          inputParameters:
            - name: dealer_name
              in: body
              type: string
              description: "The dealer business name."
            - name: dealer_code
              in: body
              type: string
              description: "The assigned AGCO dealer code."
            - name: region
              in: body
              type: string
              description: "The dealer's region."
            - name: primary_contact_email
              in: body
              type: string
              description: "The dealer primary contact email."
          steps:
            - name: create-account
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{dealer_name}}"
                dealer_code: "{{dealer_code}}"
                region: "{{region}}"
                type: "Dealer"
            - name: provision-ad
              type: call
              call: "azuread.create-guest-user"
              with:
                email: "{{primary_contact_email}}"
                display_name: "{{dealer_name}} - {{dealer_code}}"
                group: "AGCO-Dealers-{{region}}"
            - name: create-site
              type: call
              call: "sharepoint.create-site"
              with:
                site_name: "Dealer-{{dealer_code}}"
                template: "dealer-collaboration"
            - name: notify-region
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "dealer-ops-{{region}}"
                text: "New dealer onboarded: {{dealer_name}} ({{dealer_code}}). SF Account: {{create-account.id}}. Portal: {{create-site.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/invitations"
          operations:
            - name: create-guest-user
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: sites
          path: "/sites"
          operations:
            - name: create-site
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates dealer profile in Salesforce, provisions SAP access, sets up training in LMS, creates ServiceNow tickets, and notifies channel management.

naftiko: "0.5"
info:
  label: "Dealer Onboarding Workflow"
  description: "Creates dealer profile in Salesforce, provisions SAP access, sets up training in LMS, creates ServiceNow tickets, and notifies channel management."
  tags:
    - dealer-management
    - salesforce
    - sap
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: dealer-management
      port: 8080
      tools:
        - name: dealer_onboarding_workflow
          description: "Orchestrate dealer onboarding workflow workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Collects sales and service data from Salesforce, analyzes in Snowflake, generates scorecards in Power BI, and notifies sales leadership.

naftiko: "0.5"
info:
  label: "Dealer Performance Analytics Pipeline"
  description: "Collects sales and service data from Salesforce, analyzes in Snowflake, generates scorecards in Power BI, and notifies sales leadership."
  tags:
    - sales
    - salesforce
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: dealer_performance_analytics_pipeline
          description: "Orchestrate dealer performance analytics pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Aggregates dealer sales data from Salesforce, service metrics from ServiceNow, and inventory turns from SAP, then posts a consolidated performance summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Dealer Performance Review Pipeline"
  description: "Aggregates dealer sales data from Salesforce, service metrics from ServiceNow, and inventory turns from SAP, then posts a consolidated performance summary to Microsoft Teams."
  tags:
    - dealer-management
    - salesforce
    - servicenow
    - sap
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: dealer-performance
      port: 8080
      tools:
        - name: generate-dealer-review
          description: "Generate a dealer performance review by aggregating sales from Salesforce, service metrics from ServiceNow, inventory from SAP, and posting summary to Teams."
          inputParameters:
            - name: dealer_code
              in: body
              type: string
              description: "The AGCO dealer code."
            - name: review_period
              in: body
              type: string
              description: "The review period (e.g. 2026-Q1)."
          steps:
            - name: get-sales
              type: call
              call: "salesforce.get-dealer-sales"
              with:
                dealer_code: "{{dealer_code}}"
                period: "{{review_period}}"
            - name: get-service-metrics
              type: call
              call: "servicenow.get-dealer-cases"
              with:
                dealer_code: "{{dealer_code}}"
                period: "{{review_period}}"
            - name: get-inventory
              type: call
              call: "sap.get-dealer-inventory"
              with:
                dealer_code: "{{dealer_code}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "dealer-reviews"
                text: "Dealer {{dealer_code}} - {{review_period}} Review: Sales: ${{get-sales.total_revenue}}. Cases: {{get-service-metrics.total_cases}} ({{get-service-metrics.avg_resolution_days}}d avg). Inventory turns: {{get-inventory.turns_ratio}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: dealer-sales
          path: "/query?q=SELECT+SUM(Amount)+total_revenue+FROM+Opportunity+WHERE+Dealer_Code__c='{{dealer_code}}'+AND+CloseDate>=THIS_QUARTER"
          inputParameters:
            - name: dealer_code
              in: query
          operations:
            - name: get-dealer-sales
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case?sysparm_query=dealer_code={{dealer_code}}"
          inputParameters:
            - name: dealer_code
              in: query
          operations:
            - name: get-dealer-cases
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_DATA_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: dealer-inventory
          path: "/A_DealerInventory('{{dealer_code}}')"
          inputParameters:
            - name: dealer_code
              in: path
          operations:
            - name: get-dealer-inventory
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves dealer account details from Salesforce including contact info, territory, and active contracts for a given AGCO dealer code.

naftiko: "0.5"
info:
  label: "Dealer Salesforce Account Lookup"
  description: "Retrieves dealer account details from Salesforce including contact info, territory, and active contracts for a given AGCO dealer code."
  tags:
    - dealer-management
    - salesforce
    - crm
capability:
  exposes:
    - type: mcp
      namespace: dealer-crm
      port: 8080
      tools:
        - name: get-dealer-account
          description: "Look up an AGCO dealer in Salesforce by dealer code. Returns account name, territory, primary contact, and contract status."
          inputParameters:
            - name: dealer_code
              in: body
              type: string
              description: "The AGCO dealer code."
          call: "salesforce.get-account"
          with:
            dealer_code: "{{dealer_code}}"
          outputParameters:
            - name: account_name
              type: string
              mapping: "$.records[0].Name"
            - name: territory
              type: string
              mapping: "$.records[0].Territory__c"
            - name: primary_contact
              type: string
              mapping: "$.records[0].Primary_Contact__c"
            - name: contract_status
              type: string
              mapping: "$.records[0].Contract_Status__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query?q=SELECT+Id,Name,Territory__c,Primary_Contact__c,Contract_Status__c+FROM+Account+WHERE+Dealer_Code__c='{{dealer_code}}'"
          inputParameters:
            - name: dealer_code
              in: query
          operations:
            - name: get-account
              method: GET

When a dealer submits a warranty claim, validates the machine in SAP, creates a ServiceNow case, uploads supporting documents to SharePoint, and notifies the dealer via Salesforce.

naftiko: "0.5"
info:
  label: "Dealer Warranty Claim Orchestrator"
  description: "When a dealer submits a warranty claim, validates the machine in SAP, creates a ServiceNow case, uploads supporting documents to SharePoint, and notifies the dealer via Salesforce."
  tags:
    - warranty
    - dealer-management
    - sap
    - servicenow
    - sharepoint
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: warranty-claims
      port: 8080
      tools:
        - name: process-warranty-claim
          description: "Process a dealer warranty claim end-to-end: validate machine in SAP, create ServiceNow case, store documents in SharePoint, and notify dealer in Salesforce."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: dealer_code
              in: body
              type: string
              description: "The AGCO dealer code."
            - name: claim_description
              in: body
              type: string
              description: "Description of the warranty issue."
            - name: failure_code
              in: body
              type: string
              description: "The warranty failure code."
          steps:
            - name: validate-machine
              type: call
              call: "sap.get-equipment"
              with:
                serial: "{{machine_serial}}"
            - name: create-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Warranty claim: {{machine_serial}} - {{failure_code}}"
                description: "{{claim_description}}"
                category: "warranty"
                equipment_serial: "{{machine_serial}}"
            - name: create-doc-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "warranty_claims"
                folder_path: "Claims/{{create-case.number}}_{{machine_serial}}"
            - name: notify-dealer
              type: call
              call: "salesforce.create-task"
              with:
                dealer_code: "{{dealer_code}}"
                subject: "Warranty claim {{create-case.number}} created for {{machine_serial}}"
                description: "Case {{create-case.number}} has been opened. Upload documents to {{create-doc-folder.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: equipment
          path: "/A_Equipment?$filter=SerialNumber eq '{{serial}}'"
          inputParameters:
            - name: serial
              in: query
          operations:
            - name: get-equipment
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

Processes warranty claims from dealers in Salesforce, validates against SAP warranty rules, creates service orders, and notifies claims team.

naftiko: "0.5"
info:
  label: "Dealer Warranty Claims Orchestrator"
  description: "Processes warranty claims from dealers in Salesforce, validates against SAP warranty rules, creates service orders, and notifies claims team."
  tags:
    - warranty
    - salesforce
    - sap
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: warranty
      port: 8080
      tools:
        - name: dealer_warranty_claims_orchestrator
          description: "Orchestrate dealer warranty claims orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Searches Elasticsearch indexes for AGCO.

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

On new hire creation in Workday, provisions a SharePoint document folder, assigns an ADP payroll record, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Pipeline"
  description: "On new hire creation in Workday, provisions a SharePoint document folder, assigns an ADP payroll record, creates a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - sharepoint
    - adp
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Orchestrate full onboarding for an AGCO new hire across Workday, SharePoint, ADP, ServiceNow, and Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Employee start date (YYYY-MM-DD)."
            - name: department
              in: body
              type: string
              description: "Department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding"
                folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} - {{department}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to AGCO, {{get-employee.first_name}}! IT ticket: {{open-ticket.number}}. Documents: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes remaining inventory from SAP, calculates aging and carrying costs in Snowflake, generates markdown proposals, and notifies sales.

naftiko: "0.5"
info:
  label: "End of Season Inventory Analysis"
  description: "Analyzes remaining inventory from SAP, calculates aging and carrying costs in Snowflake, generates markdown proposals, and notifies sales."
  tags:
    - inventory
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: end_of_season_inventory_analysis
          description: "Orchestrate end of season inventory analysis workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Processes ECN requests in Jira, validates BOM impact in SAP, updates documentation in Confluence, creates change orders, and notifies engineering.

naftiko: "0.5"
info:
  label: "Engineering Change Notice Pipeline"
  description: "Processes ECN requests in Jira, validates BOM impact in SAP, updates documentation in Confluence, creates change orders, and notifies engineering."
  tags:
    - engineering
    - jira
    - sap
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: engineering_change_notice_pipeline
          description: "Orchestrate engineering change notice pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-jira
              type: call
              call: "jira.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-confluence
              type: call
              call: "confluence.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://agco.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a product engineering change is proposed, creates a Jira ECN issue, updates the SAP BOM, uploads specs to SharePoint, posts to Confluence for review, and notifies stakeholders in Teams.

naftiko: "0.5"
info:
  label: "Engineering Change Notice Workflow"
  description: "When a product engineering change is proposed, creates a Jira ECN issue, updates the SAP BOM, uploads specs to SharePoint, posts to Confluence for review, and notifies stakeholders in Teams."
  tags:
    - engineering
    - jira
    - sap
    - sharepoint
    - confluence
    - microsoft-teams
    - product-development
capability:
  exposes:
    - type: mcp
      namespace: engineering-change
      port: 8080
      tools:
        - name: process-engineering-change
          description: "Process an engineering change notice: create Jira ECN, update SAP BOM, upload specs to SharePoint, post to Confluence, and notify stakeholders."
          inputParameters:
            - name: change_title
              in: body
              type: string
              description: "The title of the engineering change."
            - name: affected_material
              in: body
              type: string
              description: "The SAP material number affected."
            - name: change_reason
              in: body
              type: string
              description: "The reason for the change."
            - name: requestor_id
              in: body
              type: string
              description: "The requestor's employee ID."
          steps:
            - name: create-ecn
              type: call
              call: "jira.create-issue"
              with:
                project: "ECN"
                summary: "{{change_title}}"
                description: "Material: {{affected_material}}. Reason: {{change_reason}}."
                issuetype: "Story"
                priority: "High"
            - name: get-bom
              type: call
              call: "sap.get-bom"
              with:
                material: "{{affected_material}}"
            - name: upload-specs
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "engineering_ecn"
                folder_path: "ECN/{{create-ecn.key}}"
                file_name: "current_bom.json"
                content: "{{get-bom.payload}}"
            - name: create-review-page
              type: call
              call: "confluence.create-page"
              with:
                space: "ECN"
                title: "ECN Review: {{create-ecn.key}} - {{change_title}}"
                body: "Change request for material {{affected_material}}. Reason: {{change_reason}}. Current BOM: {{upload-specs.url}}."
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-changes"
                text: "ECN {{create-ecn.key}}: {{change_title}} for material {{affected_material}}. Review page: {{create-review-page.url}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://agco.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: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PP_BOM_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: boms
          path: "/A_BillOfMaterial('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-bom
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: confluence
      baseUri: "https://agco.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes IoT telemetry from agricultural equipment, predicts failures in Snowflake, creates maintenance orders in SAP, and notifies dealers.

naftiko: "0.5"
info:
  label: "Equipment Predictive Maintenance Pipeline"
  description: "Analyzes IoT telemetry from agricultural equipment, predicts failures in Snowflake, creates maintenance orders in SAP, and notifies dealers."
  tags:
    - iot
    - predictive-maintenance
    - sap
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: iot
      port: 8080
      tools:
        - name: equipment_predictive_maintenance_pipelin
          description: "Orchestrate equipment predictive maintenance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Retrieves real-time telematics data for a connected machine from the AGCO Fuse platform, including GPS location, engine hours, fuel level, and fault codes.

naftiko: "0.5"
info:
  label: "Equipment Telematics Dashboard Lookup"
  description: "Retrieves real-time telematics data for a connected machine from the AGCO Fuse platform, including GPS location, engine hours, fuel level, and fault codes."
  tags:
    - iot
    - telematics
    - precision-agriculture
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: telematics
      port: 8080
      tools:
        - name: get-machine-telemetry
          description: "Look up real-time telematics for an AGCO connected machine by serial number. Returns GPS coordinates, engine hours, fuel level, and active fault codes."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number registered in AGCO Fuse."
          call: "fuse-telematics.get-machine"
          with:
            serial: "{{machine_serial}}"
          outputParameters:
            - name: latitude
              type: string
              mapping: "$.data.location.lat"
            - name: longitude
              type: string
              mapping: "$.data.location.lng"
            - name: engine_hours
              type: string
              mapping: "$.data.engineHours"
            - name: fuel_level
              type: string
              mapping: "$.data.fuelLevelPercent"
            - name: fault_codes
              type: string
              mapping: "$.data.activeDTCs"
  consumes:
    - type: http
      namespace: fuse-telematics
      baseUri: "https://fuse-api.agcocorp.com/telematics/v2"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: machines
          path: "/machines/{{serial}}"
          inputParameters:
            - name: serial
              in: path
          operations:
            - name: get-machine
              method: GET

Receives service requests from Salesforce, optimizes routing, dispatches technicians, tracks in ServiceNow, and notifies customers.

naftiko: "0.5"
info:
  label: "Field Service Dispatch Optimizer"
  description: "Receives service requests from Salesforce, optimizes routing, dispatches technicians, tracks in ServiceNow, and notifies customers."
  tags:
    - field-service
    - salesforce
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: field-service
      port: 8080
      tools:
        - name: field_service_dispatch_optimizer
          description: "Orchestrate field service dispatch optimizer workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When a machine needs service, locates the nearest dealer via Google Maps, creates a ServiceNow work order, assigns a technician via Workday skills lookup, and notifies the dealer in Salesforce.

naftiko: "0.5"
info:
  label: "Field Service Dispatch Orchestrator"
  description: "When a machine needs service, locates the nearest dealer via Google Maps, creates a ServiceNow work order, assigns a technician via Workday skills lookup, and notifies the dealer in Salesforce."
  tags:
    - field-service
    - google-maps
    - servicenow
    - workday
    - salesforce
    - dealer-management
capability:
  exposes:
    - type: mcp
      namespace: field-dispatch
      port: 8080
      tools:
        - name: dispatch-field-service
          description: "Dispatch field service: locate nearest dealer, create ServiceNow work order, find qualified technician, and notify dealer."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: machine_latitude
              in: body
              type: string
              description: "Machine GPS latitude."
            - name: machine_longitude
              in: body
              type: string
              description: "Machine GPS longitude."
            - name: service_type
              in: body
              type: string
              description: "Type of service required (e.g. engine, hydraulic, electrical)."
          steps:
            - name: find-dealer
              type: call
              call: "googlemaps.find-nearest"
              with:
                lat: "{{machine_latitude}}"
                lng: "{{machine_longitude}}"
                keyword: "AGCO dealer"
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Field service: {{machine_serial}} - {{service_type}}"
                location: "{{find-dealer.name}}"
                equipment_serial: "{{machine_serial}}"
                category: "{{service_type}}"
            - name: find-technician
              type: call
              call: "workday.search-workers"
              with:
                skill: "{{service_type}}"
                location: "{{find-dealer.formatted_address}}"
            - name: notify-dealer
              type: call
              call: "salesforce.create-task"
              with:
                dealer_name: "{{find-dealer.name}}"
                subject: "Service dispatch for {{machine_serial}} - WO {{create-work-order.number}}"
                description: "Technician {{find-technician.name}} assigned. Service type: {{service_type}}."
  consumes:
    - type: http
      namespace: googlemaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
        headerName: "X-Goog-Api-Key"
      resources:
        - name: places
          path: "/place/nearbysearch/json?location={{lat}},{{lng}}&radius=80000&keyword={{keyword}}"
          inputParameters:
            - name: lat
              in: query
            - name: lng
              in: query
            - name: keyword
              in: query
          operations:
            - name: find-nearest
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers?skill={{skill}}&location={{location}}"
          inputParameters:
            - name: skill
              in: query
            - name: location
              in: query
          operations:
            - name: search-workers
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

Pulls firmware binary from S3, validates checksum in Azure DevOps, creates a deployment record in ServiceNow, and pushes OTA update via the Fuse telematics gateway.

naftiko: "0.5"
info:
  label: "Firmware OTA Deployment Pipeline"
  description: "Pulls firmware binary from S3, validates checksum in Azure DevOps, creates a deployment record in ServiceNow, and pushes OTA update via the Fuse telematics gateway."
  tags:
    - firmware
    - amazon-s3
    - azure-devops
    - servicenow
    - iot
    - telematics
capability:
  exposes:
    - type: mcp
      namespace: firmware-ota
      port: 8080
      tools:
        - name: deploy-firmware-ota
          description: "Deploy a firmware OTA update: fetch artifact from S3, validate build in Azure DevOps, create ServiceNow change record, and push via Fuse."
          inputParameters:
            - name: ecu_model
              in: body
              type: string
              description: "The ECU model identifier."
            - name: firmware_version
              in: body
              type: string
              description: "The firmware version to deploy."
            - name: target_fleet
              in: body
              type: string
              description: "The target fleet group for OTA."
          steps:
            - name: get-artifact
              type: call
              call: "s3.get-object"
              with:
                key: "firmware/{{ecu_model}}/{{firmware_version}}/binary.bin"
            - name: validate-build
              type: call
              call: "azuredevops.get-build-artifact"
              with:
                build_number: "{{firmware_version}}"
                artifact_name: "checksum"
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "OTA deployment: {{ecu_model}} v{{firmware_version}} to {{target_fleet}}"
                category: "firmware"
                risk: "moderate"
            - name: push-ota
              type: call
              call: "fuse-ota.deploy-update"
              with:
                ecu_model: "{{ecu_model}}"
                version: "{{firmware_version}}"
                fleet_group: "{{target_fleet}}"
                change_number: "{{create-change.number}}"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://agco-firmware-artifacts.s3.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
        region: "us-east-1"
      resources:
        - name: objects
          path: "/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: get-object
              method: GET
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/agco/FirmwareProject/_apis/build"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: artifacts
          path: "/builds?buildNumber={{build_number}}&api-version=7.0"
          inputParameters:
            - name: build_number
              in: query
          operations:
            - name: get-build-artifact
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.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
    - type: http
      namespace: fuse-ota
      baseUri: "https://fuse-api.agcocorp.com/ota/v1"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: deployments
          path: "/deployments"
          operations:
            - name: deploy-update
              method: POST

Aggregates fleet telematics data from Fuse, enriches with dealer info from Salesforce, generates a Databricks analytics report, and stores it in SharePoint for dealer access.

naftiko: "0.5"
info:
  label: "Fleet Utilization Report Generator"
  description: "Aggregates fleet telematics data from Fuse, enriches with dealer info from Salesforce, generates a Databricks analytics report, and stores it in SharePoint for dealer access."
  tags:
    - telematics
    - iot
    - salesforce
    - databricks
    - sharepoint
    - dealer-management
capability:
  exposes:
    - type: mcp
      namespace: fleet-utilization
      port: 8080
      tools:
        - name: generate-fleet-report
          description: "Generate a fleet utilization report: pull Fuse telematics, enrich with Salesforce dealer data, run Databricks analytics, and store in SharePoint."
          inputParameters:
            - name: dealer_code
              in: body
              type: string
              description: "The AGCO dealer code."
            - name: report_month
              in: body
              type: string
              description: "The report month (YYYY-MM)."
          steps:
            - name: get-fleet-data
              type: call
              call: "fuse-telematics.get-fleet-summary"
              with:
                dealer_code: "{{dealer_code}}"
                month: "{{report_month}}"
            - name: get-dealer-info
              type: call
              call: "salesforce.get-account"
              with:
                dealer_code: "{{dealer_code}}"
            - name: run-analytics
              type: call
              call: "databricks.run-job"
              with:
                job_id: "fleet-utilization-report"
                parameters:
                  dealer_code: "{{dealer_code}}"
                  month: "{{report_month}}"
                  fleet_data: "{{get-fleet-data.machines}}"
            - name: store-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "dealer_reports"
                folder_path: "FleetReports/{{dealer_code}}/{{report_month}}"
                file_name: "fleet_utilization_{{report_month}}.pdf"
  consumes:
    - type: http
      namespace: fuse-telematics
      baseUri: "https://fuse-api.agcocorp.com/telematics/v2"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: fleet
          path: "/dealers/{{dealer_code}}/fleet?month={{month}}"
          inputParameters:
            - name: dealer_code
              in: path
            - name: month
              in: query
          operations:
            - name: get-fleet-summary
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query?q=SELECT+Id,Name,Territory__c+FROM+Account+WHERE+Dealer_Code__c='{{dealer_code}}'"
          inputParameters:
            - name: dealer_code
              in: query
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://agco.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT

Retrieves GitHub repository metadata for AGCO.

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

Analyzes global inventory levels in SAP, identifies imbalances in Snowflake, creates transfer orders, and notifies supply chain.

naftiko: "0.5"
info:
  label: "Global Inventory Rebalancing Pipeline"
  description: "Analyzes global inventory levels in SAP, identifies imbalances in Snowflake, creates transfer orders, and notifies supply chain."
  tags:
    - supply-chain
    - sap
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: global_inventory_rebalancing_pipeline
          description: "Orchestrate global inventory rebalancing pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Geocodes an AGCO dealer address using Google Maps API and returns latitude, longitude, and formatted address for fleet routing.

naftiko: "0.5"
info:
  label: "Google Maps Dealer Geocode"
  description: "Geocodes an AGCO dealer address using Google Maps API and returns latitude, longitude, and formatted address for fleet routing."
  tags:
    - dealer-management
    - google-maps
    - geolocation
capability:
  exposes:
    - type: mcp
      namespace: dealer-geo
      port: 8080
      tools:
        - name: geocode-dealer-address
          description: "Geocode a dealer street address using Google Maps. Returns latitude, longitude, and formatted address."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "The dealer street address to geocode."
          call: "googlemaps.geocode"
          with:
            address: "{{address}}"
          outputParameters:
            - name: latitude
              type: string
              mapping: "$.results[0].geometry.location.lat"
            - name: longitude
              type: string
              mapping: "$.results[0].geometry.location.lng"
            - name: formatted_address
              type: string
              mapping: "$.results[0].formatted_address"
  consumes:
    - type: http
      namespace: googlemaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
        headerName: "X-Goog-Api-Key"
      resources:
        - name: geocode
          path: "/geocode/json?address={{address}}"
          inputParameters:
            - name: address
              in: query
          operations:
            - name: geocode
              method: GET

When Grafana fires a critical alert for a plant system, creates a ServiceNow incident, escalates via PagerDuty-style Datadog on-call, and notifies the ops channel in Teams.

naftiko: "0.5"
info:
  label: "Grafana Alert to Incident Bridge"
  description: "When Grafana fires a critical alert for a plant system, creates a ServiceNow incident, escalates via PagerDuty-style Datadog on-call, and notifies the ops channel in Teams."
  tags:
    - monitoring
    - grafana
    - servicenow
    - datadog
    - microsoft-teams
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: alert-incident
      port: 8080
      tools:
        - name: bridge-alert-to-incident
          description: "Bridge a Grafana alert to an incident: create ServiceNow incident, log to Datadog, and notify ops in Teams."
          inputParameters:
            - name: alert_name
              in: body
              type: string
              description: "The Grafana alert rule name."
            - name: severity
              in: body
              type: string
              description: "The alert severity (P1, P2, P3)."
            - name: plant_code
              in: body
              type: string
              description: "The affected plant code."
            - name: alert_message
              in: body
              type: string
              description: "The alert detail message."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "{{alert_name}} at {{plant_code}}"
                description: "{{alert_message}}"
                urgency: "{{severity}}"
                category: "infrastructure"
            - name: log-to-datadog
              type: call
              call: "datadog.post-event"
              with:
                title: "Grafana alert: {{alert_name}} at {{plant_code}}"
                text: "Severity: {{severity}}. ServiceNow: {{create-incident.number}}. {{alert_message}}"
                alert_type: "error"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-{{plant_code}}-ops"
                text: "INCIDENT {{severity}}: {{alert_name}} at {{plant_code}}. ServiceNow: {{create-incident.number}}. {{alert_message}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://agco.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: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Grafana dashboard data for AGCO monitoring.

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

Triggers an Informatica data quality job for master data cleansing, stores results in Amazon Redshift, updates the data quality dashboard in Power BI, and alerts the data governance team in Teams.

naftiko: "0.5"
info:
  label: "Informatica Data Quality Pipeline"
  description: "Triggers an Informatica data quality job for master data cleansing, stores results in Amazon Redshift, updates the data quality dashboard in Power BI, and alerts the data governance team in Teams."
  tags:
    - data-quality
    - informatica
    - amazon-redshift
    - power-bi
    - microsoft-teams
    - data-governance
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: run-data-quality-check
          description: "Run a data quality pipeline: trigger Informatica job, store results in Redshift, refresh Power BI, and notify governance team."
          inputParameters:
            - name: domain
              in: body
              type: string
              description: "The data domain (material, supplier, customer, dealer)."
            - name: source_system
              in: body
              type: string
              description: "The source system (SAP, Oracle, Salesforce)."
          steps:
            - name: run-dq-job
              type: call
              call: "informatica.run-job"
              with:
                task_name: "DQ_{{domain}}_{{source_system}}"
            - name: store-results
              type: call
              call: "redshift.execute-query"
              with:
                query: "INSERT INTO data_quality.results SELECT * FROM staging.dq_{{domain}}_latest"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "data-quality-dashboard"
            - name: notify-governance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "data-governance"
                text: "Data quality check complete for {{domain}} from {{source_system}}. Job: {{run-dq-job.task_id}}. Records processed: {{run-dq-job.records_processed}}. Errors: {{run-dq-job.error_count}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: jobs
          path: "/job"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: redshift
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
        region: "us-east-1"
      resources:
        - name: statements
          path: "/execute-statement"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg/groups"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors connected machine fleet via IoT gateway, detects anomalies in Snowflake, creates alerts in ServiceNow, and notifies fleet managers.

naftiko: "0.5"
info:
  label: "IoT Fleet Monitoring Pipeline"
  description: "Monitors connected machine fleet via IoT gateway, detects anomalies in Snowflake, creates alerts in ServiceNow, and notifies fleet managers."
  tags:
    - iot
    - snowflake
    - servicenow
    - grafana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: iot
      port: 8080
      tools:
        - name: iot_fleet_monitoring_pipeline
          description: "Orchestrate iot fleet monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When an IoT sensor on a tractor reports anomalous readings, queries Elasticsearch for historical baseline, creates a Grafana annotation, opens a Jira investigation, and alerts engineering in Teams.

naftiko: "0.5"
info:
  label: "IoT Sensor Anomaly Response"
  description: "When an IoT sensor on a tractor reports anomalous readings, queries Elasticsearch for historical baseline, creates a Grafana annotation, opens a Jira investigation, and alerts engineering in Teams."
  tags:
    - iot
    - elasticsearch
    - grafana
    - jira
    - microsoft-teams
    - anomaly-detection
capability:
  exposes:
    - type: mcp
      namespace: iot-anomaly
      port: 8080
      tools:
        - name: respond-to-anomaly
          description: "Respond to an IoT sensor anomaly: check Elasticsearch baseline, annotate Grafana, create Jira investigation, and alert engineering."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: sensor_id
              in: body
              type: string
              description: "The sensor identifier."
            - name: reading_value
              in: body
              type: string
              description: "The anomalous sensor reading value."
            - name: sensor_type
              in: body
              type: string
              description: "The type of sensor (e.g. temperature, pressure, vibration)."
          steps:
            - name: get-baseline
              type: call
              call: "elasticsearch.search"
              with:
                index: "iot-sensor-data"
                query: "machine_serial:{{machine_serial}} AND sensor_id:{{sensor_id}}"
                agg: "avg_reading"
            - name: annotate-dashboard
              type: call
              call: "grafana.create-annotation"
              with:
                dashboard_id: "iot-fleet-overview"
                text: "Anomaly on {{machine_serial}} sensor {{sensor_id}}: {{reading_value}} (baseline: {{get-baseline.avg_reading}})"
                tags: "anomaly,{{machine_serial}},{{sensor_type}}"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project: "IOT"
                summary: "Anomaly: {{machine_serial}} - {{sensor_type}} sensor {{sensor_id}}"
                description: "Reading: {{reading_value}}. Baseline avg: {{get-baseline.avg_reading}}. Grafana: {{annotate-dashboard.url}}."
                issuetype: "Task"
                priority: "High"
            - name: alert-engineering
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "iot-engineering"
                text: "ANOMALY: {{machine_serial}} {{sensor_type}} sensor {{sensor_id}} reading {{reading_value}} (baseline: {{get-baseline.avg_reading}}). Jira: {{create-investigation.key}}."
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://agco-es.us-east-1.es.amazonaws.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: search
          path: "/{{index}}/_search"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: search
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://grafana.agcocorp.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: annotations
          path: "/annotations"
          operations:
            - name: create-annotation
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Jira issue by key from the AGCO engineering project, returning summary, status, assignee, and priority for product development tracking.

naftiko: "0.5"
info:
  label: "Jira Engineering Issue Lookup"
  description: "Retrieves a Jira issue by key from the AGCO engineering project, returning summary, status, assignee, and priority for product development tracking."
  tags:
    - engineering
    - jira
    - product-development
capability:
  exposes:
    - type: mcp
      namespace: engineering-tracker
      port: 8080
      tools:
        - name: get-engineering-issue
          description: "Look up a Jira issue by key. Returns summary, status, assignee, and priority."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g. ENG-1234)."
          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"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://agco.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

Retrieves Jira issue status for AGCO engineering teams.

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

When a deployment health check fails, rolls back the Kubernetes deployment, logs the event in Datadog, creates a Jira post-mortem ticket, and alerts the platform team in Teams.

naftiko: "0.5"
info:
  label: "Kubernetes Deployment Rollback Workflow"
  description: "When a deployment health check fails, rolls back the Kubernetes deployment, logs the event in Datadog, creates a Jira post-mortem ticket, and alerts the platform team in Teams."
  tags:
    - kubernetes
    - datadog
    - jira
    - microsoft-teams
    - deployment
    - platform
capability:
  exposes:
    - type: mcp
      namespace: k8s-rollback
      port: 8080
      tools:
        - name: rollback-deployment
          description: "Roll back a failed Kubernetes deployment: revert to previous revision, log to Datadog, create Jira post-mortem, and alert platform team."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "The Kubernetes namespace."
            - name: deployment_name
              in: body
              type: string
              description: "The deployment name."
            - name: cluster
              in: body
              type: string
              description: "The AKS cluster name."
            - name: failure_reason
              in: body
              type: string
              description: "The reason for the rollback."
          steps:
            - name: rollback
              type: call
              call: "aks.rollback-deployment"
              with:
                cluster: "{{cluster}}"
                namespace: "{{namespace}}"
                deployment: "{{deployment_name}}"
            - name: log-event
              type: call
              call: "datadog.post-event"
              with:
                title: "K8s rollback: {{deployment_name}} in {{namespace}} on {{cluster}}"
                text: "Reason: {{failure_reason}}. Rolled back to revision: {{rollback.previous_revision}}."
                alert_type: "warning"
            - name: create-postmortem
              type: call
              call: "jira.create-issue"
              with:
                project: "PLAT"
                summary: "Post-mortem: {{deployment_name}} rollback on {{cluster}}"
                description: "Deployment {{deployment_name}} in {{namespace}} was rolled back. Reason: {{failure_reason}}. Previous revision: {{rollback.previous_revision}}."
                issuetype: "Task"
                priority: "High"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "platform-alerts"
                text: "ROLLBACK: {{deployment_name}} in {{namespace}} on {{cluster}}. Reason: {{failure_reason}}. Jira: {{create-postmortem.key}}."
  consumes:
    - type: http
      namespace: aks
      baseUri: "https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerService/managedClusters"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: deployments
          path: "/{{cluster}}/apis/apps/v1/namespaces/{{namespace}}/deployments/{{deployment}}"
          inputParameters:
            - name: cluster
              in: path
            - name: namespace
              in: path
            - name: deployment
              in: path
          operations:
            - name: rollback-deployment
              method: PATCH
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Tracks shipping performance from SAP, scores carriers in Snowflake, updates procurement records, and notifies logistics team.

naftiko: "0.5"
info:
  label: "Logistics Carrier Performance Pipeline"
  description: "Tracks shipping performance from SAP, scores carriers in Snowflake, updates procurement records, and notifies logistics team."
  tags:
    - logistics
    - sap
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: logistics_carrier_performance_pipeline
          description: "Orchestrate logistics carrier performance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When a critical fault code is detected via telematics, logs it to Datadog, creates a Jira issue for engineering, and notifies the regional service manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Machine Fault Alert Pipeline"
  description: "When a critical fault code is detected via telematics, logs it to Datadog, creates a Jira issue for engineering, and notifies the regional service manager in Microsoft Teams."
  tags:
    - iot
    - telematics
    - datadog
    - jira
    - microsoft-teams
    - fault-management
capability:
  exposes:
    - type: mcp
      namespace: fault-alert
      port: 8080
      tools:
        - name: escalate-machine-fault
          description: "Escalate a critical machine fault: log to Datadog, create Jira issue, and notify service manager in Teams."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: fault_code
              in: body
              type: string
              description: "The DTC fault code."
            - name: severity
              in: body
              type: string
              description: "Fault severity level (critical, warning, info)."
            - name: region
              in: body
              type: string
              description: "The dealer region for notification routing."
          steps:
            - name: log-event
              type: call
              call: "datadog.post-event"
              with:
                title: "Critical fault {{fault_code}} on {{machine_serial}}"
                text: "Severity: {{severity}}. Region: {{region}}."
                alert_type: "error"
                tags: "machine:{{machine_serial}},fault:{{fault_code}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "FAULTS"
                summary: "Machine {{machine_serial}} - Fault {{fault_code}}"
                description: "Critical fault detected. Severity: {{severity}}. Datadog event: {{log-event.id}}."
                issuetype: "Bug"
                priority: "High"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "service-alerts-{{region}}"
                text: "ALERT: Machine {{machine_serial}} has critical fault {{fault_code}}. Jira: {{create-issue.key}}. Datadog: {{log-event.url}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects machine hours from IoT, calculates utilization in Snowflake, generates customer reports, and notifies account managers.

naftiko: "0.5"
info:
  label: "Machine Utilization Reporting Pipeline"
  description: "Collects machine hours from IoT, calculates utilization in Snowflake, generates customer reports, and notifies account managers."
  tags:
    - iot
    - snowflake
    - salesforce
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: iot
      port: 8080
      tools:
        - name: machine_utilization_reporting_pipeline
          description: "Orchestrate machine utilization reporting pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Evaluates warranty extension requests from Salesforce, checks maintenance history in SAP, creates approvals, and notifies dealers.

naftiko: "0.5"
info:
  label: "Machine Warranty Extension Processor"
  description: "Evaluates warranty extension requests from Salesforce, checks maintenance history in SAP, creates approvals, and notifies dealers."
  tags:
    - warranty
    - salesforce
    - sap
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: warranty
      port: 8080
      tools:
        - name: machine_warranty_extension_processor
          description: "Orchestrate machine warranty extension processor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Collects production KPIs from SAP MES, aggregates in Snowflake, refreshes Grafana dashboards, creates alerts for targets, and notifies plant managers.

naftiko: "0.5"
info:
  label: "Manufacturing KPI Dashboard Pipeline"
  description: "Collects production KPIs from SAP MES, aggregates in Snowflake, refreshes Grafana dashboards, creates alerts for targets, and notifies plant managers."
  tags:
    - manufacturing
    - sap
    - snowflake
    - grafana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: manufacturing_kpi_dashboard_pipeline
          description: "Orchestrate manufacturing kpi dashboard pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://agco-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

At shift change, pulls production data from Power BI, open incidents from ServiceNow, pending maintenance from SAP PM, and posts a consolidated handover report to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Shift Handover Report"
  description: "At shift change, pulls production data from Power BI, open incidents from ServiceNow, pending maintenance from SAP PM, and posts a consolidated handover report to Microsoft Teams."
  tags:
    - manufacturing
    - power-bi
    - servicenow
    - sap
    - microsoft-teams
    - shift-management
capability:
  exposes:
    - type: mcp
      namespace: shift-handover
      port: 8080
      tools:
        - name: generate-shift-handover
          description: "Generate a shift handover report from Power BI production data, ServiceNow open incidents, SAP PM maintenance orders, and post to Teams."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The plant code."
            - name: shift
              in: body
              type: string
              description: "The shift identifier (e.g. day, swing, night)."
            - name: date
              in: body
              type: string
              description: "The shift date (YYYY-MM-DD)."
          steps:
            - name: get-production
              type: call
              call: "powerbi.get-shift-data"
              with:
                plant_code: "{{plant_code}}"
                shift: "{{shift}}"
                date: "{{date}}"
            - name: get-incidents
              type: call
              call: "servicenow.get-open-incidents"
              with:
                plant_code: "{{plant_code}}"
                shift: "{{shift}}"
            - name: get-maintenance
              type: call
              call: "sap-pm.get-open-orders"
              with:
                plant: "{{plant_code}}"
            - name: post-handover
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-{{plant_code}}-shifts"
                text: "SHIFT HANDOVER - {{plant_code}} {{shift}} {{date}}\nUnits produced: {{get-production.units_produced}}\nOEE: {{get-production.oee}}%\nOpen incidents: {{get-incidents.count}}\nPending maintenance orders: {{get-maintenance.count}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg/groups"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/{{group_id}}/datasets/{{dataset_id}}/executeQueries"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-shift-data
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=plant={{plant_code}}^shift={{shift}}^state!=6"
          inputParameters:
            - name: plant_code
              in: query
            - name: shift
              in: query
          operations:
            - name: get-open-incidents
              method: GET
    - type: http
      namespace: sap-pm
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/A_MaintenanceOrder?$filter=Plant eq '{{plant}}' and OrderStatus eq 'OPEN'"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-open-orders
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Posts a formatted notification message to a specified Microsoft Teams channel using an incoming webhook.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notification"
  description: "Posts a formatted notification message to a specified Microsoft Teams channel using an incoming webhook."
  tags:
    - communications
    - microsoft-teams
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: post-channel-notification
          description: "Post a notification message to a Microsoft Teams channel. Returns the message ID."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The notification message content."
          call: "msteams.post-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.id"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Checks MuleSoft Anypoint API health status, correlates with Datadog metrics, creates a ServiceNow incident if degraded, and alerts the integration team in Teams.

naftiko: "0.5"
info:
  label: "MuleSoft Integration Health Monitor"
  description: "Checks MuleSoft Anypoint API health status, correlates with Datadog metrics, creates a ServiceNow incident if degraded, and alerts the integration team in Teams."
  tags:
    - integration
    - mulesoft
    - datadog
    - servicenow
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: integration-health
      port: 8080
      tools:
        - name: check-integration-health
          description: "Check MuleSoft integration health: get API status, check Datadog metrics, create ServiceNow incident if degraded, and alert team."
          inputParameters:
            - name: api_name
              in: body
              type: string
              description: "The MuleSoft API name."
            - name: environment
              in: body
              type: string
              description: "The environment (production, staging)."
          steps:
            - name: get-api-status
              type: call
              call: "mulesoft.get-api-status"
              with:
                api_name: "{{api_name}}"
                environment: "{{environment}}"
            - name: get-metrics
              type: call
              call: "datadog.get-api-metrics"
              with:
                filter: "api:{{api_name}},env:{{environment}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "MuleSoft API degraded: {{api_name}} in {{environment}}"
                description: "Status: {{get-api-status.status}}. Error rate: {{get-metrics.error_rate}}%. Latency p99: {{get-metrics.latency_p99}}ms."
                category: "integration"
                urgency: "high"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "integration-ops"
                text: "MuleSoft {{api_name}} ({{environment}}) degraded. Status: {{get-api-status.status}}. Error rate: {{get-metrics.error_rate}}%. Incident: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: mulesoft
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: apis
          path: "/organizations/{{org_id}}/environments/{{env_id}}/apis/{{api_name}}/status"
          inputParameters:
            - name: org_id
              in: path
            - name: env_id
              in: path
            - name: api_name
              in: path
          operations:
            - name: get-api-status
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query?query=avg:mulesoft.api.error_rate{{filter}}&from=-3600"
          inputParameters:
            - name: filter
              in: query
          operations:
            - name: get-api-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Coordinates NPI milestones in Jira, validates BOM readiness in SAP, trains dealers via Salesforce, and notifies product management.

naftiko: "0.5"
info:
  label: "New Product Introduction Pipeline"
  description: "Coordinates NPI milestones in Jira, validates BOM readiness in SAP, trains dealers via Salesforce, and notifies product management."
  tags:
    - npi
    - jira
    - sap
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: npi
      port: 8080
      tools:
        - name: new_product_introduction_pipeline
          description: "Orchestrate new product introduction pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-jira
              type: call
              call: "jira.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-salesforce
              type: call
              call: "salesforce.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves Okta user profile for AGCO identity management.

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

Queries Oracle E-Business Suite for supplier master data by supplier number, returning name, payment terms, and qualification status.

naftiko: "0.5"
info:
  label: "Oracle EBS Supplier Lookup"
  description: "Queries Oracle E-Business Suite for supplier master data by supplier number, returning name, payment terms, and qualification status."
  tags:
    - supply-chain
    - oracle
    - oracle-ebs
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: supplier-master
      port: 8080
      tools:
        - name: get-supplier
          description: "Look up an AGCO supplier in Oracle E-Business Suite by supplier number. Returns name, payment terms, and qualification status."
          inputParameters:
            - name: supplier_number
              in: body
              type: string
              description: "The Oracle supplier number."
          call: "oracle-ebs.get-supplier"
          with:
            supplier_num: "{{supplier_number}}"
          outputParameters:
            - name: supplier_name
              type: string
              mapping: "$.Supplier.VendorName"
            - name: payment_terms
              type: string
              mapping: "$.Supplier.PaymentTerms"
            - name: qualification_status
              type: string
              mapping: "$.Supplier.QualificationStatus"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://oracle-ebs.agcocorp.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_num}}"
          inputParameters:
            - name: supplier_num
              in: path
          operations:
            - name: get-supplier
              method: GET

Retrieves PagerDuty incident details for AGCO on-call teams.

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

Analyzes parts consumption from SAP, runs ML forecasts in Snowflake, updates reorder points, generates reports, and notifies supply chain.

naftiko: "0.5"
info:
  label: "Parts Demand Forecasting Pipeline"
  description: "Analyzes parts consumption from SAP, runs ML forecasts in Snowflake, updates reorder points, generates reports, and notifies supply chain."
  tags:
    - supply-chain
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: parts_demand_forecasting_pipeline
          description: "Orchestrate parts demand forecasting pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When SAP inventory drops below reorder point, creates a purchase requisition in SAP, notifies procurement in Microsoft Teams, and logs the event in ServiceNow for tracking.

naftiko: "0.5"
info:
  label: "Parts Reorder Automation"
  description: "When SAP inventory drops below reorder point, creates a purchase requisition in SAP, notifies procurement in Microsoft Teams, and logs the event in ServiceNow for tracking."
  tags:
    - supply-chain
    - sap
    - procurement
    - microsoft-teams
    - servicenow
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: parts-reorder
      port: 8080
      tools:
        - name: trigger-parts-reorder
          description: "Trigger an automated parts reorder: check stock in SAP, create purchase requisition, notify procurement in Teams, and log in ServiceNow."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: plant_code
              in: body
              type: string
              description: "The SAP plant code."
            - name: reorder_quantity
              in: body
              type: string
              description: "The quantity to reorder."
          steps:
            - name: check-stock
              type: call
              call: "sap.get-material-stock"
              with:
                material: "{{material_number}}"
                plant: "{{plant_code}}"
            - name: create-requisition
              type: call
              call: "sap.create-purchase-req"
              with:
                material: "{{material_number}}"
                plant: "{{plant_code}}"
                quantity: "{{reorder_quantity}}"
                delivery_date: "{{check-stock.next_available_date}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement-alerts"
                text: "Auto-reorder triggered for material {{material_number}} at plant {{plant_code}}. PR: {{create-requisition.pr_number}}. Current stock: {{check-stock.available_qty}}."
            - name: log-event
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Parts reorder: {{material_number}} at {{plant_code}}"
                description: "Purchase requisition {{create-requisition.pr_number}} created. Reorder qty: {{reorder_quantity}}."
                category: "supply_chain"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQUISITION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "200"
      resources:
        - name: stock
          path: "/A_MaterialStock('{{material}}')?$filter=Plant eq '{{plant}}'"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: query
          operations:
            - name: get-material-stock
              method: GET
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-purchase-req
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://agco.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

Refreshes a Power BI dataset for a manufacturing plant and returns the latest OEE, throughput, and downtime KPIs.

naftiko: "0.5"
info:
  label: "Power BI Manufacturing KPI Snapshot"
  description: "Refreshes a Power BI dataset for a manufacturing plant and returns the latest OEE, throughput, and downtime KPIs."
  tags:
    - manufacturing
    - power-bi
    - analytics
    - kpi
capability:
  exposes:
    - type: mcp
      namespace: manufacturing-analytics
      port: 8080
      tools:
        - name: get-plant-kpis
          description: "Retrieve the latest manufacturing KPIs from Power BI for a given plant code. Returns OEE, throughput, and downtime hours."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The AGCO manufacturing plant code."
          call: "powerbi.get-report-data"
          with:
            plant_code: "{{plant_code}}"
          outputParameters:
            - name: oee_percent
              type: string
              mapping: "$.tables[0].rows[0].OEE"
            - name: throughput_units
              type: string
              mapping: "$.tables[0].rows[0].Throughput"
            - name: downtime_hours
              type: string
              mapping: "$.tables[0].rows[0].DowntimeHours"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg/groups"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/{{group_id}}/datasets/{{dataset_id}}/executeQueries"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-report-data
              method: POST

Triggers Power BI dataset refresh for AGCO reporting.

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

Ingests precision ag sensor data, processes in Snowflake, generates field analytics, updates dealer dashboards, and notifies agronomists.

naftiko: "0.5"
info:
  label: "Precision Agriculture Data Pipeline"
  description: "Ingests precision ag sensor data, processes in Snowflake, generates field analytics, updates dealer dashboards, and notifies agronomists."
  tags:
    - precision-ag
    - snowflake
    - powerbi
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: precision-ag
      port: 8080
      tools:
        - name: precision_agriculture_data_pipeline
          description: "Orchestrate precision agriculture data pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Pulls field boundary and yield data from the AGCO Fuse platform, stores it in Amazon S3, indexes it in Elasticsearch, and triggers a Databricks analytics job.

naftiko: "0.5"
info:
  label: "Precision Agriculture Data Sync"
  description: "Pulls field boundary and yield data from the AGCO Fuse platform, stores it in Amazon S3, indexes it in Elasticsearch, and triggers a Databricks analytics job."
  tags:
    - precision-agriculture
    - iot
    - amazon-s3
    - elasticsearch
    - databricks
capability:
  exposes:
    - type: mcp
      namespace: precision-ag-sync
      port: 8080
      tools:
        - name: sync-field-data
          description: "Sync precision agriculture data from Fuse to S3, index in Elasticsearch, and trigger Databricks analytics."
          inputParameters:
            - name: farm_id
              in: body
              type: string
              description: "The farm identifier in AGCO Fuse."
            - name: field_id
              in: body
              type: string
              description: "The field identifier."
            - name: season
              in: body
              type: string
              description: "The crop season (e.g. 2026-spring)."
          steps:
            - name: get-field-data
              type: call
              call: "fuse-ag.get-field-data"
              with:
                farm_id: "{{farm_id}}"
                field_id: "{{field_id}}"
                season: "{{season}}"
            - name: store-to-s3
              type: call
              call: "s3.put-object"
              with:
                bucket: "agco-precision-ag"
                key: "fields/{{farm_id}}/{{field_id}}/{{season}}/yield-data.json"
                body: "{{get-field-data.payload}}"
            - name: index-data
              type: call
              call: "elasticsearch.index-document"
              with:
                index: "precision-ag-fields"
                body:
                  farm_id: "{{farm_id}}"
                  field_id: "{{field_id}}"
                  season: "{{season}}"
                  yield_avg: "{{get-field-data.avg_yield}}"
                  s3_uri: "{{store-to-s3.location}}"
            - name: trigger-analytics
              type: call
              call: "databricks.run-job"
              with:
                job_id: "precision-ag-pipeline"
                parameters:
                  s3_path: "{{store-to-s3.location}}"
                  farm_id: "{{farm_id}}"
  consumes:
    - type: http
      namespace: fuse-ag
      baseUri: "https://fuse-api.agcocorp.com/precision/v2"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: fields
          path: "/farms/{{farm_id}}/fields/{{field_id}}/data?season={{season}}"
          inputParameters:
            - name: farm_id
              in: path
            - name: field_id
              in: path
            - name: season
              in: query
          operations:
            - name: get-field-data
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://agco-precision-ag.s3.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
        region: "us-east-1"
      resources:
        - name: objects
          path: "/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT
    - type: http
      namespace: elasticsearch
      baseUri: "https://agco-es.us-east-1.es.amazonaws.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: documents
          path: "/{{index}}/_doc"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: index-document
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://agco.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST

Tracks product certifications and expirations in SAP, creates renewal tasks in Jira, validates compliance, and notifies regulatory.

naftiko: "0.5"
info:
  label: "Product Certification Tracking Pipeline"
  description: "Tracks product certifications and expirations in SAP, creates renewal tasks in Jira, validates compliance, and notifies regulatory."
  tags:
    - regulatory
    - sap
    - jira
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: regulatory
      port: 8080
      tools:
        - name: product_certification_tracking_pipeline
          description: "Orchestrate product certification tracking pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Validates product configurations from Salesforce CPQ against SAP BOM rules, identifies errors, and notifies order management.

naftiko: "0.5"
info:
  label: "Product Configuration Validation Pipeline"
  description: "Validates product configurations from Salesforce CPQ against SAP BOM rules, identifies errors, and notifies order management."
  tags:
    - product-config
    - salesforce
    - sap
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: product-config
      port: 8080
      tools:
        - name: product_configuration_validation_pipelin
          description: "Orchestrate product configuration validation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a production line stops, captures OEE data from Power BI, creates a Jira incident for manufacturing engineering, logs to Datadog, and notifies the plant manager in Teams.

naftiko: "0.5"
info:
  label: "Production Line Downtime Reporter"
  description: "When a production line stops, captures OEE data from Power BI, creates a Jira incident for manufacturing engineering, logs to Datadog, and notifies the plant manager in Teams."
  tags:
    - manufacturing
    - power-bi
    - jira
    - datadog
    - microsoft-teams
    - downtime
capability:
  exposes:
    - type: mcp
      namespace: downtime-reporter
      port: 8080
      tools:
        - name: report-line-downtime
          description: "Report a production line downtime event: capture Power BI KPIs, create Jira incident, log to Datadog, and notify plant manager."
          inputParameters:
            - name: line_id
              in: body
              type: string
              description: "The production line identifier."
            - name: plant_code
              in: body
              type: string
              description: "The plant code."
            - name: reason_code
              in: body
              type: string
              description: "The downtime reason code."
          steps:
            - name: get-kpis
              type: call
              call: "powerbi.get-report-data"
              with:
                line_id: "{{line_id}}"
                plant_code: "{{plant_code}}"
            - name: create-incident
              type: call
              call: "jira.create-issue"
              with:
                project: "MFG"
                summary: "Line {{line_id}} down at {{plant_code}} - {{reason_code}}"
                description: "OEE at time of stop: {{get-kpis.oee_percent}}%. Throughput: {{get-kpis.throughput_units}} units."
                issuetype: "Bug"
                priority: "Critical"
            - name: log-downtime
              type: call
              call: "datadog.post-event"
              with:
                title: "Production line {{line_id}} down at {{plant_code}}"
                text: "Reason: {{reason_code}}. OEE: {{get-kpis.oee_percent}}%. Jira: {{create-incident.key}}."
                alert_type: "error"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-{{plant_code}}-alerts"
                text: "DOWNTIME: Line {{line_id}} stopped. Reason: {{reason_code}}. OEE: {{get-kpis.oee_percent}}%. Jira: {{create-incident.key}}."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg/groups"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/{{group_id}}/datasets/{{dataset_id}}/executeQueries"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-report-data
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.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: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: post-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects SPC data from manufacturing, runs statistical analysis in Snowflake, detects out-of-control processes, and alerts quality engineering.

naftiko: "0.5"
info:
  label: "Production Quality SPC Pipeline"
  description: "Collects SPC data from manufacturing, runs statistical analysis in Snowflake, detects out-of-control processes, and alerts quality engineering."
  tags:
    - quality
    - sap
    - snowflake
    - grafana
    - slack
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: production_quality_spc_pipeline
          description: "Orchestrate production quality spc pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://agco-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Analyzes demand from Salesforce, optimizes production schedule in SAP, validates capacity in Snowflake, and notifies manufacturing.

naftiko: "0.5"
info:
  label: "Production Scheduling Optimizer"
  description: "Analyzes demand from Salesforce, optimizes production schedule in SAP, validates capacity in Snowflake, and notifies manufacturing."
  tags:
    - manufacturing
    - salesforce
    - sap
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: production_scheduling_optimizer
          description: "Orchestrate production scheduling optimizer workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Detects quality escapes from field reports, traces root cause in SAP, creates investigation in Jira, updates CAPA log, and notifies quality.

naftiko: "0.5"
info:
  label: "Quality Escape Investigation Pipeline"
  description: "Detects quality escapes from field reports, traces root cause in SAP, creates investigation in Jira, updates CAPA log, and notifies quality."
  tags:
    - quality
    - sap
    - jira
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: quality_escape_investigation_pipeline
          description: "Orchestrate quality escape investigation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Identifies affected machines in SAP, notifies dealers via Salesforce, tracks remediation progress, and reports to regulatory.

naftiko: "0.5"
info:
  label: "Safety Recall Execution Pipeline"
  description: "Identifies affected machines in SAP, notifies dealers via Salesforce, tracks remediation progress, and reports to regulatory."
  tags:
    - safety
    - sap
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: safety
      port: 8080
      tools:
        - name: safety_recall_execution_pipeline
          description: "Orchestrate safety recall execution pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Triggers a SailPoint access review campaign, fetches user entitlements, creates a Jira governance ticket for review, and notifies security in Teams.

naftiko: "0.5"
info:
  label: "SailPoint Access Review Workflow"
  description: "Triggers a SailPoint access review campaign, fetches user entitlements, creates a Jira governance ticket for review, and notifies security in Teams."
  tags:
    - security
    - sailpoint
    - jira
    - microsoft-teams
    - identity-governance
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: trigger-access-review
          description: "Trigger a SailPoint access review: get user entitlements, create Jira governance ticket, and notify security team."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The access review campaign name."
            - name: target_application
              in: body
              type: string
              description: "The application to review access for."
          steps:
            - name: get-entitlements
              type: call
              call: "sailpoint.get-entitlements"
              with:
                application: "{{target_application}}"
            - name: create-campaign
              type: call
              call: "sailpoint.create-campaign"
              with:
                name: "{{campaign_name}}"
                application: "{{target_application}}"
                entitlement_count: "{{get-entitlements.count}}"
            - name: create-governance-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Access review: {{campaign_name}} - {{target_application}}"
                description: "Campaign ID: {{create-campaign.campaign_id}}. Entitlements to review: {{get-entitlements.count}}."
                issuetype: "Task"
                priority: "Medium"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "security-governance"
                text: "Access review campaign started: {{campaign_name}} for {{target_application}}. Entitlements: {{get-entitlements.count}}. Jira: {{create-governance-ticket.key}}."
  consumes:
    - type: http
      namespace: sailpoint
      baseUri: "https://agco.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: entitlements
          path: "/entitlements?filters=source.name eq '{{application}}'"
          inputParameters:
            - name: application
              in: query
          operations:
            - name: get-entitlements
              method: GET
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves Salesforce account details for AGCO sales teams.

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

Retrieves details of a sourcing event in SAP Ariba including event type, status, bid count, and award date.

naftiko: "0.5"
info:
  label: "SAP Ariba Sourcing Event Lookup"
  description: "Retrieves details of a sourcing event in SAP Ariba including event type, status, bid count, and award date."
  tags:
    - procurement
    - sap-ariba
    - sourcing
capability:
  exposes:
    - type: mcp
      namespace: strategic-sourcing
      port: 8080
      tools:
        - name: get-sourcing-event
          description: "Look up a SAP Ariba sourcing event by event ID. Returns event type, status, number of bids, and award date."
          inputParameters:
            - name: event_id
              in: body
              type: string
              description: "The SAP Ariba sourcing event ID."
          call: "ariba.get-event"
          with:
            event_id: "{{event_id}}"
          outputParameters:
            - name: event_type
              type: string
              mapping: "$.event.eventType"
            - name: status
              type: string
              mapping: "$.event.status"
            - name: bid_count
              type: string
              mapping: "$.event.bidCount"
            - name: award_date
              type: string
              mapping: "$.event.awardDate"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/sourcing/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: events
          path: "/events/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-event
              method: GET

When an employee submits a travel request in SAP Concur, retrieves manager approval from Workday, validates against budget in SAP, and notifies the employee in Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Request Pipeline"
  description: "When an employee submits a travel request in SAP Concur, retrieves manager approval from Workday, validates against budget in SAP, and notifies the employee in Teams."
  tags:
    - travel
    - sap-concur
    - workday
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: travel-management
      port: 8080
      tools:
        - name: process-travel-request
          description: "Process a travel request from SAP Concur: get request details, check budget in SAP, find approver in Workday, and notify in Teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The SAP Concur travel request ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          steps:
            - name: get-request
              type: call
              call: "concur.get-travel-request"
              with:
                request_id: "{{request_id}}"
            - name: check-budget
              type: call
              call: "sap.check-cost-center-budget"
              with:
                cost_center: "{{get-request.cost_center}}"
                amount: "{{get-request.total_amount}}"
            - name: get-approver
              type: call
              call: "workday.get-manager"
              with:
                worker_id: "{{employee_id}}"
            - name: notify-employee
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-request.requestor_email}}"
                text: "Travel request {{request_id}} (${{get-request.total_amount}}) routed to {{get-approver.full_name}} for approval. Budget status: {{check-budget.status}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: travel-requests
          path: "/travelrequest/requests/{{request_id}}"
          inputParameters:
            - name: request_id
              in: path
          operations:
            - name: get-travel-request
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/FI_COST_CENTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: budgets
          path: "/A_CostCenterBudget('{{cost_center}}')"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: check-cost-center-budget
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: managers
          path: "/workers/{{worker_id}}/manager"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-manager
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When goods are received in SAP, creates a quality inspection lot, assigns an inspector via Workday skills lookup, and notifies the receiving team in Teams.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt to Quality Inspection"
  description: "When goods are received in SAP, creates a quality inspection lot, assigns an inspector via Workday skills lookup, and notifies the receiving team in Teams."
  tags:
    - quality
    - sap
    - workday
    - microsoft-teams
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: goods-receipt-qc
      port: 8080
      tools:
        - name: trigger-quality-inspection
          description: "Trigger a quality inspection on goods receipt: create SAP inspection lot, find inspector in Workday, and notify receiving team."
          inputParameters:
            - name: purchase_order
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: material_number
              in: body
              type: string
              description: "The material number received."
            - name: plant_code
              in: body
              type: string
              description: "The receiving plant code."
          steps:
            - name: create-inspection-lot
              type: call
              call: "sap-qm.create-inspection-lot"
              with:
                purchase_order: "{{purchase_order}}"
                material: "{{material_number}}"
                plant: "{{plant_code}}"
            - name: find-inspector
              type: call
              call: "workday.search-workers"
              with:
                skill: "quality_inspection"
                location: "{{plant_code}}"
            - name: notify-receiving
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-{{plant_code}}-receiving"
                text: "Goods received for PO {{purchase_order}}, material {{material_number}}. Inspection lot: {{create-inspection-lot.lot_number}}. Inspector: {{find-inspector.name}}."
  consumes:
    - type: http
      namespace: sap-qm
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_LOT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inspection-lots
          path: "/A_InspectionLot"
          operations:
            - name: create-inspection-lot
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers?skill={{skill}}&location={{location}}"
          inputParameters:
            - name: skill
              in: query
            - name: location
              in: query
          operations:
            - name: search-workers
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries SAP S/4HANA material master to return current stock levels, reorder point, and warehouse location for a given AGCO part number.

naftiko: "0.5"
info:
  label: "SAP Parts Inventory Check"
  description: "Queries SAP S/4HANA material master to return current stock levels, reorder point, and warehouse location for a given AGCO part number."
  tags:
    - inventory
    - erp
    - sap
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: parts-inventory
      port: 8080
      tools:
        - name: get-part-stock
          description: "Look up current inventory for an AGCO part number in SAP. Returns available stock, reorder point, and storage bin."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "The AGCO material/part number (10-digit)."
          call: "sap.get-material-stock"
          with:
            material: "{{part_number}}"
          outputParameters:
            - name: available_qty
              type: string
              mapping: "$.d.AvailableStock"
            - name: reorder_point
              type: string
              mapping: "$.d.ReorderPoint"
            - name: storage_location
              type: string
              mapping: "$.d.StorageLocation"
            - name: plant
              type: string
              mapping: "$.d.Plant"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_DATA_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "200"
      resources:
        - name: material-stocks
          path: "/A_MaterialStock('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-stock
              method: GET

Reads machine engine hours from Fuse telematics, checks the SAP PM maintenance plan, creates a maintenance order if due, and notifies the service team in Teams.

naftiko: "0.5"
info:
  label: "SAP Preventive Maintenance Scheduler"
  description: "Reads machine engine hours from Fuse telematics, checks the SAP PM maintenance plan, creates a maintenance order if due, and notifies the service team in Teams."
  tags:
    - maintenance
    - sap
    - telematics
    - iot
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: preventive-maintenance
      port: 8080
      tools:
        - name: check-and-schedule-maintenance
          description: "Check machine hours from Fuse telematics, evaluate SAP PM plan, create maintenance order if due, and notify service team."
          inputParameters:
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
            - name: maintenance_plan_id
              in: body
              type: string
              description: "The SAP PM maintenance plan ID."
          steps:
            - name: get-hours
              type: call
              call: "fuse-telematics.get-machine"
              with:
                serial: "{{machine_serial}}"
            - name: check-plan
              type: call
              call: "sap-pm.get-maintenance-plan"
              with:
                plan_id: "{{maintenance_plan_id}}"
                current_hours: "{{get-hours.engine_hours}}"
            - name: create-order
              type: call
              call: "sap-pm.create-maintenance-order"
              with:
                equipment_serial: "{{machine_serial}}"
                plan_id: "{{maintenance_plan_id}}"
                description: "Preventive maintenance at {{get-hours.engine_hours}} hours"
            - name: notify-service
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "service-scheduling"
                text: "PM scheduled for {{machine_serial}} at {{get-hours.engine_hours}} hrs. Order: {{create-order.order_number}}. Next due: {{check-plan.next_interval}} hrs."
  consumes:
    - type: http
      namespace: fuse-telematics
      baseUri: "https://fuse-api.agcocorp.com/telematics/v2"
      authentication:
        type: bearer
        token: "$secrets.agco_fuse_token"
      resources:
        - name: machines
          path: "/machines/{{serial}}"
          inputParameters:
            - name: serial
              in: path
          operations:
            - name: get-machine
              method: GET
    - type: http
      namespace: sap-pm
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: maintenance-plans
          path: "/A_MaintenancePlan('{{plan_id}}')"
          inputParameters:
            - name: plan_id
              in: path
          operations:
            - name: get-maintenance-plan
              method: GET
        - name: maintenance-orders
          path: "/A_MaintenanceOrder"
          operations:
            - name: create-maintenance-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a SAP production order is released, retrieves the BOM, pushes work instructions to the MES via Apache Kafka, logs the handoff in Elasticsearch, and notifies the plant floor supervisor in Teams.

naftiko: "0.5"
info:
  label: "SAP Production Order to MES Bridge"
  description: "When a SAP production order is released, retrieves the BOM, pushes work instructions to the MES via Apache Kafka, logs the handoff in Elasticsearch, and notifies the plant floor supervisor in Teams."
  tags:
    - manufacturing
    - sap
    - apache-kafka
    - elasticsearch
    - microsoft-teams
    - mes
capability:
  exposes:
    - type: mcp
      namespace: production-mes
      port: 8080
      tools:
        - name: bridge-order-to-mes
          description: "Bridge a SAP production order to MES: get BOM, publish to Kafka, index in Elasticsearch, and notify supervisor."
          inputParameters:
            - name: production_order
              in: body
              type: string
              description: "The SAP production order number."
            - name: plant_code
              in: body
              type: string
              description: "The plant code."
          steps:
            - name: get-order
              type: call
              call: "sap.get-production-order"
              with:
                order_number: "{{production_order}}"
            - name: get-bom
              type: call
              call: "sap.get-bom"
              with:
                material: "{{get-order.material}}"
            - name: publish-to-kafka
              type: call
              call: "kafka.produce-message"
              with:
                topic: "mes-work-instructions-{{plant_code}}"
                key: "{{production_order}}"
                value:
                  order: "{{production_order}}"
                  material: "{{get-order.material}}"
                  quantity: "{{get-order.planned_quantity}}"
                  bom: "{{get-bom.components}}"
            - name: log-handoff
              type: call
              call: "elasticsearch.index-document"
              with:
                index: "production-mes-handoffs"
                body:
                  order: "{{production_order}}"
                  plant: "{{plant_code}}"
                  material: "{{get-order.material}}"
                  timestamp: "now"
            - name: notify-supervisor
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-{{plant_code}}-production"
                text: "Production order {{production_order}} released to MES. Material: {{get-order.material}}. Qty: {{get-order.planned_quantity}}. BOM components: {{get-bom.component_count}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-production-order
              method: GET
        - name: boms
          path: "/A_BillOfMaterial('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-bom
              method: GET
    - type: http
      namespace: kafka
      baseUri: "https://kafka-rest.agcocorp.com/v2"
      authentication:
        type: basic
        username: "$secrets.kafka_user"
        password: "$secrets.kafka_password"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: produce-message
              method: POST
    - type: http
      namespace: elasticsearch
      baseUri: "https://agco-es.us-east-1.es.amazonaws.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: documents
          path: "/{{index}}/_doc"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: index-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a SAP purchase order is created above a spend threshold, retrieves the approver from Workday, sends an approval request in Teams, and updates the PO status in SAP upon approval.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Approval Router"
  description: "When a SAP purchase order is created above a spend threshold, retrieves the approver from Workday, sends an approval request in Teams, and updates the PO status in SAP upon approval."
  tags:
    - procurement
    - sap
    - workday
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: po-approval
      port: 8080
      tools:
        - name: route-po-approval
          description: "Route a SAP purchase order for approval: fetch PO details, find approver in Workday, request approval in Teams."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: requestor_employee_id
              in: body
              type: string
              description: "The Workday employee ID of the requestor."
          steps:
            - name: get-po
              type: call
              call: "sap.get-purchase-order"
              with:
                po_number: "{{po_number}}"
            - name: get-approver
              type: call
              call: "workday.get-manager"
              with:
                worker_id: "{{requestor_employee_id}}"
            - name: request-approval
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-approver.work_email}}"
                text: "PO {{po_number}} requires your approval. Amount: {{get-po.total_value}} {{get-po.currency}}. Supplier: {{get-po.vendor}}. Please approve or reject."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://agco-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-purchase-order
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: managers
          path: "/workers/{{worker_id}}/manager"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-manager
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a SAP sales order is created for a dealer, retrieves dealer contact from Salesforce, generates a confirmation document in SharePoint, and emails notification via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "SAP Sales Order to Dealer Notification"
  description: "When a SAP sales order is created for a dealer, retrieves dealer contact from Salesforce, generates a confirmation document in SharePoint, and emails notification via Microsoft Outlook."
  tags:
    - sales
    - sap
    - salesforce
    - sharepoint
    - microsoft-outlook
    - dealer-management
capability:
  exposes:
    - type: mcp
      namespace: sales-order-notify
      port: 8080
      tools:
        - name: notify-dealer-sales-order
          description: "Notify a dealer about a new SAP sales order: get order details, find dealer contact in Salesforce, create confirmation doc in SharePoint, and email notification."
          inputParameters:
            - name: sales_order_number
              in: body
              type: string
              description: "The SAP sales order number."
            - name: dealer_code
              in: body
              type: string
              description: "The dealer code."
          steps:
            - name: get-order
              type: call
              call: "sap-sd.get-sales-order"
              with:
                order_number: "{{sales_order_number}}"
            - name: get-dealer-contact
              type: call
              call: "salesforce.get-dealer-contact"
              with:
                dealer_code: "{{dealer_code}}"
            - name: create-confirmation
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "dealer_orders"
                folder_path: "Confirmations/{{dealer_code}}"
                file_name: "SO_{{sales_order_number}}.pdf"
            - name: send-email
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{get-dealer-contact.email}}"
                subject: "AGCO Sales Order {{sales_order_number}} Confirmation"
                body: "Dear {{get-dealer-contact.name}}, your order {{sales_order_number}} for ${{get-order.total_value}} has been confirmed. Estimated delivery: {{get-order.delivery_date}}. Confirmation: {{create-confirmation.url}}."
  consumes:
    - type: http
      namespace: sap-sd
      baseUri: "https://agco-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('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-sales-order
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query?q=SELECT+Name,Email+FROM+Contact+WHERE+Account.Dealer_Code__c='{{dealer_code}}'+AND+Primary__c=true"
          inputParameters:
            - name: dealer_code
              in: query
          operations:
            - name: get-dealer-contact
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{sender_upn}}/sendMail"
          inputParameters:
            - name: sender_upn
              in: path
          operations:
            - name: send-mail
              method: POST

Pulls historical sales data from Salesforce, runs a demand forecast in Databricks, updates safety stock levels in SAP, and distributes the forecast report via SharePoint and Teams.

naftiko: "0.5"
info:
  label: "Seasonal Demand Forecast Pipeline"
  description: "Pulls historical sales data from Salesforce, runs a demand forecast in Databricks, updates safety stock levels in SAP, and distributes the forecast report via SharePoint and Teams."
  tags:
    - forecasting
    - salesforce
    - databricks
    - sap
    - sharepoint
    - microsoft-teams
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: demand-forecast
      port: 8080
      tools:
        - name: run-seasonal-forecast
          description: "Run a seasonal demand forecast: pull Salesforce sales history, run Databricks ML model, update SAP safety stock, and distribute report."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line code (e.g. TRACTORS, COMBINES)."
            - name: forecast_horizon
              in: body
              type: string
              description: "Forecast horizon in months."
            - name: region
              in: body
              type: string
              description: "The sales region."
          steps:
            - name: get-sales-history
              type: call
              call: "salesforce.get-sales-data"
              with:
                product_line: "{{product_line}}"
                region: "{{region}}"
            - name: run-forecast
              type: call
              call: "databricks.run-job"
              with:
                job_id: "demand-forecast-pipeline"
                parameters:
                  product_line: "{{product_line}}"
                  region: "{{region}}"
                  horizon: "{{forecast_horizon}}"
                  history_data: "{{get-sales-history.records}}"
            - name: update-safety-stock
              type: call
              call: "sap.update-safety-stock"
              with:
                product_line: "{{product_line}}"
                region: "{{region}}"
                forecast_qty: "{{run-forecast.recommended_stock}}"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "supply_chain_planning"
                folder_path: "Forecasts/{{product_line}}/{{region}}"
                file_name: "forecast_{{forecast_horizon}}m.pdf"
            - name: notify-planners
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply-planning"
                text: "Forecast complete for {{product_line}} in {{region}}. Horizon: {{forecast_horizon}} months. Recommended stock: {{run-forecast.recommended_stock}} units. Report: {{upload-report.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: sales-data
          path: "/query?q=SELECT+Product_Line__c,Region__c,Amount,CloseDate+FROM+Opportunity+WHERE+Product_Line__c='{{product_line}}'+AND+Region__c='{{region}}'"
          inputParameters:
            - name: product_line
              in: query
            - name: region
              in: query
          operations:
            - name: get-sales-data
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://agco.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_DATA_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: safety-stock
          path: "/A_MaterialSafetyStock"
          operations:
            - name: update-safety-stock
              method: PATCH
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Plans seasonal ramp-up using Snowflake forecasts, adjusts SAP capacity, coordinates staffing via Workday, and notifies operations.

naftiko: "0.5"
info:
  label: "Seasonal Production Ramp Orchestrator"
  description: "Plans seasonal ramp-up using Snowflake forecasts, adjusts SAP capacity, coordinates staffing via Workday, and notifies operations."
  tags:
    - manufacturing
    - snowflake
    - sap
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: seasonal_production_ramp_orchestrator
          description: "Orchestrate seasonal production ramp orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-workday
              type: call
              call: "workday.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://agco.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://agco-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/agco"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Checks ServiceNow incident status for AGCO IT operations.

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

Looks up a field service work order in ServiceNow by work order number and returns status, assigned technician, and scheduled date.

naftiko: "0.5"
info:
  label: "ServiceNow Work Order Status"
  description: "Looks up a field service work order in ServiceNow by work order number and returns status, assigned technician, and scheduled date."
  tags:
    - field-service
    - servicenow
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: field-service
      port: 8080
      tools:
        - name: get-work-order
          description: "Look up a ServiceNow field service work order by number. Returns status, assigned technician, and scheduled completion date."
          inputParameters:
            - name: work_order_number
              in: body
              type: string
              description: "The ServiceNow work order number."
          call: "servicenow.get-work-order"
          with:
            number: "{{work_order_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: scheduled_date
              type: string
              mapping: "$.result.scheduled_date"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://agco.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order?sysparm_query=number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-work-order
              method: GET

Sends a message to a Slack channel for AGCO notifications.

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

Executes SQL queries against AGCO Snowflake warehouse.

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

Searches Splunk indexes for log entries at AGCO.

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

Tracks supplier deliveries from SAP, monitors on-time performance in Snowflake, creates escalations for delays, and notifies procurement.

naftiko: "0.5"
info:
  label: "Supplier Delivery Tracking Pipeline"
  description: "Tracks supplier deliveries from SAP, monitors on-time performance in Snowflake, creates escalations for delays, and notifies procurement."
  tags:
    - procurement
    - sap
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: supplier_delivery_tracking_pipeline
          description: "Orchestrate supplier delivery tracking pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When a quality inspection fails, records the nonconformance in SAP QM, creates a Jira corrective action ticket, notifies the supplier via Salesforce, and alerts quality engineering in Teams.

naftiko: "0.5"
info:
  label: "Supplier Quality Nonconformance Workflow"
  description: "When a quality inspection fails, records the nonconformance in SAP QM, creates a Jira corrective action ticket, notifies the supplier via Salesforce, and alerts quality engineering in Teams."
  tags:
    - quality
    - sap
    - jira
    - salesforce
    - microsoft-teams
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: quality-management
      port: 8080
      tools:
        - name: raise-nonconformance
          description: "Raise a supplier nonconformance: record in SAP QM, create Jira corrective action, notify supplier via Salesforce, and alert quality team in Teams."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: supplier_number
              in: body
              type: string
              description: "The SAP supplier number."
            - name: defect_description
              in: body
              type: string
              description: "Description of the quality defect."
            - name: lot_number
              in: body
              type: string
              description: "The inspection lot number."
          steps:
            - name: record-ncr
              type: call
              call: "sap-qm.create-notification"
              with:
                material: "{{material_number}}"
                supplier: "{{supplier_number}}"
                defect_text: "{{defect_description}}"
                lot: "{{lot_number}}"
            - name: create-capa
              type: call
              call: "jira.create-issue"
              with:
                project: "CAPA"
                summary: "NCR {{record-ncr.notification_id}}: {{material_number}} from supplier {{supplier_number}}"
                description: "{{defect_description}}. Lot: {{lot_number}}."
                issuetype: "Task"
                priority: "High"
            - name: notify-supplier
              type: call
              call: "salesforce.create-task"
              with:
                supplier_number: "{{supplier_number}}"
                subject: "Quality Nonconformance NCR-{{record-ncr.notification_id}}"
                description: "A nonconformance has been raised for material {{material_number}}. Please review and respond with corrective action plan."
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-alerts"
                text: "NCR raised: {{record-ncr.notification_id}} for material {{material_number}} from supplier {{supplier_number}}. CAPA: {{create-capa.key}}."
  consumes:
    - type: http
      namespace: sap-qm
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/QM_NOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-notification
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://agco.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: salesforce
      baseUri: "https://agco.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors supplier risk scores in Oracle EBS, cross-references with SAP Ariba supplier performance, creates a Jira risk ticket, and notifies supply chain leadership in Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Risk Alert Pipeline"
  description: "Monitors supplier risk scores in Oracle EBS, cross-references with SAP Ariba supplier performance, creates a Jira risk ticket, and notifies supply chain leadership in Teams."
  tags:
    - supply-chain
    - oracle-ebs
    - sap-ariba
    - jira
    - microsoft-teams
    - risk-management
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-risk
      port: 8080
      tools:
        - name: escalate-supplier-risk
          description: "Escalate a supplier risk event: fetch risk data from Oracle EBS, check Ariba performance, create Jira risk ticket, and alert leadership."
          inputParameters:
            - name: supplier_number
              in: body
              type: string
              description: "The supplier number."
            - name: risk_category
              in: body
              type: string
              description: "The risk category (delivery, quality, financial)."
          steps:
            - name: get-risk-score
              type: call
              call: "oracle-ebs.get-supplier-risk"
              with:
                supplier_num: "{{supplier_number}}"
            - name: get-ariba-score
              type: call
              call: "ariba.get-supplier-performance"
              with:
                supplier_id: "{{supplier_number}}"
            - name: create-risk-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SCR"
                summary: "Supplier {{supplier_number}} risk alert - {{risk_category}}"
                description: "Oracle risk score: {{get-risk-score.score}}. Ariba performance: {{get-ariba-score.rating}}. Category: {{risk_category}}."
                issuetype: "Task"
                priority: "High"
            - name: alert-leadership
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply-chain-leadership"
                text: "RISK ALERT: Supplier {{supplier_number}} flagged for {{risk_category}}. Oracle score: {{get-risk-score.score}}. Ariba rating: {{get-ariba-score.rating}}. Jira: {{create-risk-ticket.key}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://oracle-ebs.agcocorp.com/webservices/rest"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: supplier-risk
          path: "/suppliers/{{supplier_num}}/risk"
          inputParameters:
            - name: supplier_num
              in: path
          operations:
            - name: get-supplier-risk
              method: GET
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/sourcing/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: performance
          path: "/suppliers/{{supplier_id}}/performance"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier-performance
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Calculates Scope 1-3 emissions from SAP operations data, aggregates in Snowflake, generates ESG reports, and notifies sustainability.

naftiko: "0.5"
info:
  label: "Sustainability Emissions Calculator"
  description: "Calculates Scope 1-3 emissions from SAP operations data, aggregates in Snowflake, generates ESG reports, and notifies sustainability."
  tags:
    - sustainability
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: sustainability_emissions_calculator
          description: "Orchestrate sustainability emissions calculator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

When a Terraform apply completes in Azure DevOps, captures the output state, stores it in Amazon S3, updates the CMDB in ServiceNow, and posts a summary to Teams.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Provisioning Tracker"
  description: "When a Terraform apply completes in Azure DevOps, captures the output state, stores it in Amazon S3, updates the CMDB in ServiceNow, and posts a summary to Teams."
  tags:
    - infrastructure
    - terraform
    - azure-devops
    - amazon-s3
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-provisioning
      port: 8080
      tools:
        - name: track-terraform-apply
          description: "Track a Terraform apply: get pipeline output from Azure DevOps, store state in S3, update ServiceNow CMDB, and notify in Teams."
          inputParameters:
            - name: pipeline_run_id
              in: body
              type: string
              description: "The Azure DevOps pipeline run ID."
            - name: environment
              in: body
              type: string
              description: "The target environment (dev, staging, prod)."
          steps:
            - name: get-run
              type: call
              call: "azuredevops.get-pipeline-run"
              with:
                run_id: "{{pipeline_run_id}}"
            - name: store-state
              type: call
              call: "s3.put-object"
              with:
                bucket: "agco-terraform-state"
                key: "{{environment}}/{{pipeline_run_id}}/tfstate.json"
                body: "{{get-run.state_output}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                environment: "{{environment}}"
                resources_created: "{{get-run.resources_created}}"
                pipeline_run: "{{pipeline_run_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "infra-deployments"
                text: "Terraform apply complete for {{environment}}. Pipeline: {{pipeline_run_id}}. Resources created: {{get-run.resources_created}}. State stored at {{store-state.location}}."
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/agco/Infrastructure/_apis/pipelines"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: runs
          path: "/{{pipeline_id}}/runs/{{run_id}}?api-version=7.0"
          inputParameters:
            - name: pipeline_id
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-pipeline-run
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://agco-terraform-state.s3.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
        region: "us-east-1"
      resources:
        - name: objects
          path: "/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://agco.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: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Captures leads from trade shows, enriches in Salesforce, assigns to dealers, creates follow-up tasks in Jira, and notifies marketing.

naftiko: "0.5"
info:
  label: "Trade Show Lead Processing Pipeline"
  description: "Captures leads from trade shows, enriches in Salesforce, assigns to dealers, creates follow-up tasks in Jira, and notifies marketing."
  tags:
    - marketing
    - salesforce
    - jira
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: trade_show_lead_processing_pipeline
          description: "Orchestrate trade show lead processing pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

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

Retrieves employee profile from Workday at AGCO.

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

Retrieves an employee profile from Workday by worker ID including job title, department, manager, and cost center for AGCO workforce planning.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by worker ID including job title, department, manager, and cost center for AGCO workforce planning."
  tags:
    - hr
    - workday
    - workforce
capability:
  exposes:
    - type: mcp
      namespace: hr-workforce
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up an AGCO employee in Workday by worker ID. Returns name, job title, department, manager, and cost center."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.fullName"
            - name: job_title
              type: string
              mapping: "$.worker.jobTitle"
            - name: department
              type: string
              mapping: "$.worker.department"
            - name: manager
              type: string
              mapping: "$.worker.manager.fullName"
            - name: cost_center
              type: string
              mapping: "$.worker.costCenter"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/agco"
      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

When a Zendesk dealer support ticket is escalated, fetches machine history from SAP, attaches service bulletins from Confluence, creates a Jira engineering issue, and notifies tier-2 support in Teams.

naftiko: "0.5"
info:
  label: "Zendesk Dealer Support Escalation"
  description: "When a Zendesk dealer support ticket is escalated, fetches machine history from SAP, attaches service bulletins from Confluence, creates a Jira engineering issue, and notifies tier-2 support in Teams."
  tags:
    - dealer-support
    - zendesk
    - sap
    - confluence
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: support-escalation
      port: 8080
      tools:
        - name: escalate-support-ticket
          description: "Escalate a Zendesk dealer support ticket: get machine history from SAP, find service bulletins in Confluence, create Jira issue, and notify tier-2."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: machine_serial
              in: body
              type: string
              description: "The machine serial number."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: get-machine-history
              type: call
              call: "sap.get-service-history"
              with:
                serial: "{{machine_serial}}"
            - name: find-bulletins
              type: call
              call: "confluence.search-content"
              with:
                query: "{{get-ticket.subject}}"
            - name: create-eng-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "SUPPORT"
                summary: "Escalation: {{get-ticket.subject}} - {{machine_serial}}"
                description: "Zendesk #{{ticket_id}}. Machine: {{machine_serial}}. Service history: {{get-machine-history.last_service_date}}. Related bulletin: {{find-bulletins.title}}."
                issuetype: "Bug"
                priority: "High"
            - name: notify-tier2
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "tier2-support"
                text: "Escalated: Zendesk #{{ticket_id}} for {{machine_serial}}. {{get-ticket.subject}}. Jira: {{create-eng-issue.key}}. Bulletin: {{find-bulletins.title}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://agco.zendesk.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.zendesk_user"
        password: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://agco-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: service-history
          path: "/A_MaintenanceOrder?$filter=Equipment/SerialNumber eq '{{serial}}'"
          inputParameters:
            - name: serial
              in: query
          operations:
            - name: get-service-history
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://agco.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search?cql=type=page+AND+space=TSB+AND+text~'{{query}}'"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-content
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://agco.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST