Dow Capabilities

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

Sort
Expand

Reviews access at Dow via Okta, IAM, and Jira.

naftiko: "0.5"
info:
  label: "Access Review Pipeline"
  description: "Reviews access at Dow via Okta, IAM, and Jira."
  tags:
    - security
    - access-management
    - okta
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: access-rev
      port: 8080
      tools:
        - name: review
          description: "Review access at Dow."
          inputParameters:
            - name: dept
              in: body
              type: string
              description: "Department."
          steps:
            - name: ent
              type: call
              call: "okta.get-users"
              with:
                dept: "{{dept}}"
            - name: compare
              type: call
              call: "iam.compare"
              with:
                data: "{{ent.data}}"
            - name: flag
              type: call
              call: "iam.flag"
              with:
                violations: "{{compare.violations}}"
            - name: fix
              type: call
              call: "jira.create-issue"
              with:
                project: "IAM"
                summary: "Violations in {{dept}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://dow.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: iam
      baseUri: "https://iam.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iam_token"
      resources:
        - name: reviews
          path: "/compare"
          operations:
            - name: compare
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Manages API deprecation at Dow via consumer identification, notices, and tracking.

naftiko: "0.5"
info:
  label: "API Deprecation Pipeline"
  description: "Manages API deprecation at Dow via consumer identification, notices, and tracking."
  tags:
    - api-management
    - communications
    - governance
capability:
  exposes:
    - type: mcp
      namespace: api-sunset
      port: 8080
      tools:
        - name: notify-sunset
          description: "Manage API sunset at Dow."
          inputParameters:
            - name: api
              in: body
              type: string
              description: "API name."
            - name: date
              in: body
              type: string
              description: "Sunset date."
          steps:
            - name: consumers
              type: call
              call: "api-gw.consumers"
              with:
                api: "{{api}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{consumers.emails}}"
                subject: "{{api}} sunset: {{date}}"
            - name: track
              type: call
              call: "analytics.usage"
              with:
                api: "{{api}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "API"
                summary: "Sunset {{api}} by {{date}}"
  consumes:
    - type: http
      namespace: api-gw
      baseUri: "https://api-gw.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.api_gw_token"
      resources:
        - name: consumers
          path: "/apis/{{api}}/consumers"
          inputParameters:
            - name: api
              in: path
          operations:
            - name: consumers
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: usage
          path: "/api-usage"
          operations:
            - name: usage
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Checks build at Dow.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Check"
  description: "Checks build at Dow."
  tags:
    - devops
    - azure-devops
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: azdo-build
      port: 8080
      tools:
        - name: check-build
          description: "Check build at Dow."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Project."
            - name: build_id
              in: body
              type: string
              description: "Build ID."
          call: "azdo.get-build"
          with:
            project: "{{project}}"
            build_id: "{{build_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/dow.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds/{{build_id}}"
          inputParameters:
            - name: project
              in: path
            - name: build_id
              in: path
          operations:
            - name: get-build
              method: GET

Queries Azure DevOps for release pipeline status for plant automation software, returning stage approvals and deployment status.

naftiko: "0.5"
info:
  label: "Azure DevOps Release Gate for Plant Software"
  description: "Queries Azure DevOps for release pipeline status for plant automation software, returning stage approvals and deployment status."
  tags:
    - devops
    - azure-devops
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: release-gate
      port: 8080
      tools:
        - name: get-release-status
          description: "Retrieve Azure DevOps release pipeline status by release ID."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Azure DevOps project name."
            - name: release_id
              in: body
              type: string
              description: "The release pipeline ID."
          call: "azure-devops.get-release"
          with:
            project: "{{project}}"
            release_id: "{{release_id}}"
  consumes:
    - type: http
      namespace: azure-devops
      baseUri: "https://vsrm.dev.azure.com/dow"
      authentication:
        type: bearer
        token: "$secrets.azure_devops_token"
      resources:
        - name: releases
          path: "/{{project}}/_apis/release/releases/{{release_id}}?api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: release_id
              in: path
          operations:
            - name: get-release
              method: GET

Verifies backups at Dow.

naftiko: "0.5"
info:
  label: "Backup Verification Pipeline"
  description: "Verifies backups at Dow."
  tags:
    - database
    - backup
    - operations
capability:
  exposes:
    - type: mcp
      namespace: backup-verify
      port: 8080
      tools:
        - name: verify-backups
          description: "Verify backups at Dow."
          inputParameters:
            - name: db
              in: body
              type: string
              description: "Database."
            - name: date
              in: body
              type: string
              description: "Backup date."
          steps:
            - name: status
              type: call
              call: "backup.get-status"
              with:
                db: "{{db}}"
                date: "{{date}}"
            - name: verify
              type: call
              call: "backup.verify"
              with:
                id: "{{status.backup_id}}"
            - name: log
              type: call
              call: "snowflake.query"
              with:
                query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#dba"
                text: "Backup {{db}}: {{verify.status}}"
  consumes:
    - type: http
      namespace: backup
      baseUri: "https://backup.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.backup_token"
      resources:
        - name: backups
          path: "/databases/{{db}}/status"
          inputParameters:
            - name: db
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://dow.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves lab results from PostgreSQL, validates against SAP batch specifications, generates a Crystal Reports quality certificate, and updates the Salesforce order with release status.

naftiko: "0.5"
info:
  label: "Batch Quality Release Pipeline"
  description: "Retrieves lab results from PostgreSQL, validates against SAP batch specifications, generates a Crystal Reports quality certificate, and updates the Salesforce order with release status."
  tags:
    - quality
    - postgresql
    - sap
    - crystal-reports
    - salesforce
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: batch-release
      port: 8080
      tools:
        - name: release-batch
          description: "Given a batch number and customer order ID, validate lab results, generate a quality certificate, and update the sales order."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "The production batch number."
            - name: order_id
              in: body
              type: string
              description: "The Salesforce customer order ID."
          steps:
            - name: get-lab-results
              type: call
              call: "postgresql.get-batch-results"
              with:
                batch_number: "{{batch_number}}"
            - name: get-sap-spec
              type: call
              call: "sap.get-batch-spec"
              with:
                batch_number: "{{batch_number}}"
            - name: generate-cert
              type: call
              call: "crystal-reports.run-quality-cert"
              with:
                batch_id: "{{batch_number}}"
                spec_id: "{{get-sap-spec.spec_id}}"
            - name: update-order
              type: call
              call: "salesforce.update-order"
              with:
                order_id: "{{order_id}}"
                batch_number: "{{batch_number}}"
                quality_status: "released"
                certificate_url: "{{generate-cert.report_url}}"
  consumes:
    - type: http
      namespace: postgresql
      baseUri: "https://dow-lab-api.internal.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lab_db_token"
      resources:
        - name: results
          path: "/results?batch={{batch_number}}"
          inputParameters:
            - name: batch_number
              in: query
          operations:
            - name: get-batch-results
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/QM_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batch-specs
          path: "/A_BatchSpec('{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-batch-spec
              method: GET
    - type: http
      namespace: crystal-reports
      baseUri: "https://dow-bi.internal.dow.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.crystal_user"
        password: "$secrets.crystal_password"
      resources:
        - name: quality-certs
          path: "/reports/quality_certificate"
          operations:
            - name: run-quality-cert
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-order
              method: PATCH

Generates a Crystal Reports batch quality summary, archives the report to SharePoint, and emails the quality certificate to the customer via HubSpot.

naftiko: "0.5"
info:
  label: "Batch Quality Report and Distribution"
  description: "Generates a Crystal Reports batch quality summary, archives the report to SharePoint, and emails the quality certificate to the customer via HubSpot."
  tags:
    - quality
    - crystal-reports
    - sharepoint
    - hubspot
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: quality-reports
      port: 8080
      tools:
        - name: generate-and-distribute-report
          description: "Generate a batch quality report, archive it, and distribute to the customer."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The chemical production batch identifier."
            - name: customer_email
              in: body
              type: string
              description: "Customer email for report distribution."
          steps:
            - name: generate-report
              type: call
              call: "crystal-reports.run-report"
              with:
                batch_id: "{{batch_id}}"
            - name: archive-report
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "quality_site"
                file_path: "QualityReports/{{batch_id}}_quality.pdf"
            - name: email-customer
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{customer_email}}"
                subject: "Quality Certificate: Batch {{batch_id}}"
                body: "Attached is the quality certificate for batch {{batch_id}}. Report: {{archive-report.url}}."
  consumes:
    - type: http
      namespace: crystal-reports
      baseUri: "https://dow-bi.internal.dow.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.crystal_user"
        password: "$secrets.crystal_password"
      resources:
        - name: reports
          path: "/reports/batch_quality?batch_id={{batch_id}}"
          inputParameters:
            - name: batch_id
              in: query
          operations:
            - name: run-report
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Retrieves the latest commodity price for a chemical feedstock from Bloomberg Enterprise Data, returning price, currency, and timestamp for procurement cost analysis.

naftiko: "0.5"
info:
  label: "Bloomberg Chemical Commodity Price Check"
  description: "Retrieves the latest commodity price for a chemical feedstock from Bloomberg Enterprise Data, returning price, currency, and timestamp for procurement cost analysis."
  tags:
    - finance
    - bloomberg
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: commodity-pricing
      port: 8080
      tools:
        - name: get-commodity-price
          description: "Fetch the latest price for a chemical commodity ticker from Bloomberg Enterprise Data."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "The Bloomberg ticker symbol for the chemical commodity."
          call: "bloomberg.get-price"
          with:
            ticker: "{{ticker}}"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: prices
          path: "/prices?ticker={{ticker}}"
          inputParameters:
            - name: ticker
              in: query
          operations:
            - name: get-price
              method: GET

Analyzes budget variance at Dow via Oracle, Workday, and Slack.

naftiko: "0.5"
info:
  label: "Budget Variance Pipeline"
  description: "Analyzes budget variance at Dow via Oracle, Workday, and Slack."
  tags:
    - finance
    - budget
    - oracle
    - workday
capability:
  exposes:
    - type: mcp
      namespace: budget-var
      port: 8080
      tools:
        - name: analyze-variance
          description: "Check budget variance at Dow."
          inputParameters:
            - name: cc
              in: body
              type: string
              description: "Cost center."
            - name: period
              in: body
              type: string
              description: "Period."
          steps:
            - name: actuals
              type: call
              call: "oracle.get-actuals"
              with:
                cc: "{{cc}}"
                period: "{{period}}"
            - name: budget
              type: call
              call: "workday.get-budget"
              with:
                cc: "{{cc}}"
            - name: compute
              type: call
              call: "analytics.variance"
              with:
                a: "{{actuals.total}}"
                b: "{{budget.total}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Variance {{cc}}: ${{compute.variance}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/actuals"
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/budgets"
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: var
          path: "/compute"
          operations:
            - name: variance
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves Adobe Analytics campaign metrics, enriches top-performing leads with ZoomInfo company data, and updates Salesforce opportunities with attribution data.

naftiko: "0.5"
info:
  label: "Campaign Performance and Lead Enrichment Pipeline"
  description: "Retrieves Adobe Analytics campaign metrics, enriches top-performing leads with ZoomInfo company data, and updates Salesforce opportunities with attribution data."
  tags:
    - marketing
    - adobe-analytics
    - zoominfo
    - salesforce
    - products
capability:
  exposes:
    - type: mcp
      namespace: campaign-analytics
      port: 8080
      tools:
        - name: analyze-and-enrich-campaign
          description: "Get campaign metrics, enrich leads with ZoomInfo, and update Salesforce opportunities."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Adobe Analytics campaign identifier."
            - name: lead_company
              in: body
              type: string
              description: "Top lead company name for enrichment."
          steps:
            - name: get-campaign
              type: call
              call: "adobe-analytics.get-campaign-report"
              with:
                campaign_id: "{{campaign_id}}"
            - name: enrich-lead
              type: call
              call: "zoominfo.search-company"
              with:
                company_name: "{{lead_company}}"
            - name: update-opportunity
              type: call
              call: "salesforce.update-opportunity"
              with:
                campaign_id: "{{campaign_id}}"
                company: "{{lead_company}}"
                revenue: "{{enrich-lead.revenue}}"
                employees: "{{enrich-lead.employee_count}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/dow"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/reports"
          operations:
            - name: get-campaign-report
              method: POST
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: update-opportunity
              method: POST

Plans capacity at Dow by collecting utilization and forecasting.

naftiko: "0.5"
info:
  label: "Capacity Planning Pipeline"
  description: "Plans capacity at Dow by collecting utilization and forecasting."
  tags:
    - infrastructure
    - capacity-planning
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: capacity
      port: 8080
      tools:
        - name: plan-capacity
          description: "Plan capacity at Dow."
          inputParameters:
            - name: resource
              in: body
              type: string
              description: "Resource type."
            - name: months
              in: body
              type: number
              description: "Forecast months."
          steps:
            - name: util
              type: call
              call: "monitoring.get-util"
              with:
                resource: "{{resource}}"
            - name: forecast
              type: call
              call: "analytics.forecast"
              with:
                current: "{{util.pct}}"
                months: "{{months}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "capacity"
                resource: "{{resource}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "capacity"
  consumes:
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: util
          path: "/resources/{{resource}}/util"
          inputParameters:
            - name: resource
              in: path
          operations:
            - name: get-util
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: forecast
          path: "/demand"
          operations:
            - name: forecast
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Monitors cert expiry at Dow.

naftiko: "0.5"
info:
  label: "Certificate Expiry Pipeline"
  description: "Monitors cert expiry at Dow."
  tags:
    - security
    - certificates
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: cert-monitor
      port: 8080
      tools:
        - name: check-certs
          description: "Monitor certs at Dow."
          inputParameters:
            - name: domains
              in: body
              type: string
              description: "Domains to check."
          steps:
            - name: scan
              type: call
              call: "cert-scanner.scan"
              with:
                domains: "{{domains}}"
            - name: filter
              type: call
              call: "analytics.filter-expiring"
              with:
                certs: "{{scan.results}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "{{filter.count}} certs expiring"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Cert alert: {{filter.count}} expiring"
  consumes:
    - type: http
      namespace: cert-scanner
      baseUri: "https://certs.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cert_token"
      resources:
        - name: scans
          path: "/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Routes changes at Dow through ServiceNow and CAB approval.

naftiko: "0.5"
info:
  label: "Change Management Pipeline"
  description: "Routes changes at Dow through ServiceNow and CAB approval."
  tags:
    - change-management
    - servicenow
    - itil
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: process-change
          description: "Process changes at Dow."
          inputParameters:
            - name: change_id
              in: body
              type: string
              description: "Change ID."
            - name: date
              in: body
              type: string
              description: "Date."
          steps:
            - name: get
              type: call
              call: "servicenow.get-change"
              with:
                id: "{{change_id}}"
            - name: conflicts
              type: call
              call: "servicenow.check-conflicts"
              with:
                date: "{{date}}"
            - name: submit
              type: call
              call: "servicenow.update"
              with:
                id: "{{change_id}}"
                state: "approval"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "cab@co.com"
                subject: "CAB: {{change_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: changes
          path: "/table/change_request/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Fetches product specification from SAP material master, retrieves associated SDS from Elasticsearch, gathers pricing from Salesforce CPQ, and compiles the data into a SharePoint product dossier.

naftiko: "0.5"
info:
  label: "Chemical Product Specification Retrieval Pipeline"
  description: "Fetches product specification from SAP material master, retrieves associated SDS from Elasticsearch, gathers pricing from Salesforce CPQ, and compiles the data into a SharePoint product dossier."
  tags:
    - products
    - sap
    - elasticsearch
    - salesforce
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: product-spec
      port: 8080
      tools:
        - name: compile-product-dossier
          description: "Given a material number, compile full product specification dossier from SAP, Elasticsearch SDS, Salesforce pricing, and archive to SharePoint."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material master number."
            - name: customer_id
              in: body
              type: string
              description: "Salesforce customer account ID for pricing."
          steps:
            - name: get-material-spec
              type: call
              call: "sap.get-material"
              with:
                material_number: "{{material_number}}"
            - name: get-sds
              type: call
              call: "elasticsearch.search-sds"
              with:
                query_text: "{{material_number}}"
            - name: get-pricing
              type: call
              call: "salesforce.get-pricing"
              with:
                material: "{{material_number}}"
                account_id: "{{customer_id}}"
            - name: archive-dossier
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "product_library_site"
                file_path: "ProductDossiers/{{material_number}}/dossier_{{customer_id}}.json"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Material('{{material_number}}')"
          inputParameters:
            - name: material_number
              in: path
          operations:
            - name: get-material
              method: GET
    - type: http
      namespace: elasticsearch
      baseUri: "https://dow-es.internal.dow.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: sds-index
          path: "/sds/_search"
          operations:
            - name: search-sds
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: pricing
          path: "/sobjects/PricebookEntry?material={{material}}&account={{account_id}}"
          inputParameters:
            - name: material
              in: query
            - name: account_id
              in: query
          operations:
            - name: get-pricing
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Retrieves Circana market data for a chemical product segment, returning market share, growth rate, and competitive positioning used by Dow commercial teams.

naftiko: "0.5"
info:
  label: "Circana Market Intelligence Lookup"
  description: "Retrieves Circana market data for a chemical product segment, returning market share, growth rate, and competitive positioning used by Dow commercial teams."
  tags:
    - marketing
    - circana
    - market-intelligence
capability:
  exposes:
    - type: mcp
      namespace: market-intel
      port: 8080
      tools:
        - name: get-market-data
          description: "Fetch Circana market intelligence for a chemical product segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The Circana product segment identifier."
          call: "circana.get-segment-data"
          with:
            segment_id: "{{segment_id}}"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: segments
          path: "/segments/{{segment_id}}/summary"
          inputParameters:
            - name: segment_id
              in: path
          operations:
            - name: get-segment-data
              method: GET

Queries the ClickHouse process historian database for time-series data from chemical plant sensors, returning temperature, pressure, and flow readings for a specified time range.

naftiko: "0.5"
info:
  label: "ClickHouse Process Historian Query"
  description: "Queries the ClickHouse process historian database for time-series data from chemical plant sensors, returning temperature, pressure, and flow readings for a specified time range."
  tags:
    - manufacturing
    - clickhouse
    - process-data
capability:
  exposes:
    - type: mcp
      namespace: process-historian
      port: 8080
      tools:
        - name: query-process-data
          description: "Query ClickHouse process historian for sensor readings by reactor and time range."
          inputParameters:
            - name: reactor_id
              in: body
              type: string
              description: "The reactor unit identifier."
            - name: from_ts
              in: body
              type: string
              description: "Start timestamp in ISO-8601 format."
            - name: to_ts
              in: body
              type: string
              description: "End timestamp in ISO-8601 format."
          call: "clickhouse.query-sensor-data"
          with:
            reactor_id: "{{reactor_id}}"
            from_ts: "{{from_ts}}"
            to_ts: "{{to_ts}}"
  consumes:
    - type: http
      namespace: clickhouse
      baseUri: "https://dow-ch.internal.dow.com:8443"
      authentication:
        type: basic
        username: "$secrets.clickhouse_user"
        password: "$secrets.clickhouse_password"
      resources:
        - name: sensor-data
          path: "/?query=SELECT * FROM process_data WHERE reactor_id='{{reactor_id}}' AND timestamp BETWEEN '{{from_ts}}' AND '{{to_ts}}'"
          inputParameters:
            - name: reactor_id
              in: query
            - name: from_ts
              in: query
            - name: to_ts
              in: query
          operations:
            - name: query-sensor-data
              method: GET

Optimizes cloud costs at Dow via Azure, FinOps, Jira, and Power BI.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Pipeline"
  description: "Optimizes cloud costs at Dow via Azure, FinOps, Jira, and Power BI."
  tags:
    - cloud
    - cost-management
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-opt
      port: 8080
      tools:
        - name: optimize
          description: "Optimize cloud costs at Dow."
          inputParameters:
            - name: provider
              in: body
              type: string
              description: "Provider."
            - name: range
              in: body
              type: string
              description: "Range."
          steps:
            - name: spend
              type: call
              call: "cloud.get-costs"
              with:
                provider: "{{provider}}"
                range: "{{range}}"
            - name: savings
              type: call
              call: "finops.analyze"
              with:
                data: "{{spend.data}}"
            - name: action
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Save ${{savings.potential}}"
            - name: report
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cloud"
  consumes:
    - type: http
      namespace: cloud
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: costs
          path: "/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-costs
              method: POST
    - type: http
      namespace: finops
      baseUri: "https://finops.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.finops_token"
      resources:
        - name: analysis
          path: "/savings"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Searches Confluence at Dow.

naftiko: "0.5"
info:
  label: "Confluence Article Search"
  description: "Searches Confluence at Dow."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: confluence-search
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence at Dow."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Query."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.results[0].title"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://dow.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search
              method: GET

Tracks contract renewals at Dow via contracts system, email, Jira, and Salesforce.

naftiko: "0.5"
info:
  label: "Contract Renewal Pipeline"
  description: "Tracks contract renewals at Dow via contracts system, email, Jira, and Salesforce."
  tags:
    - procurement
    - contracts
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: contract-renew
      port: 8080
      tools:
        - name: track
          description: "Track renewals at Dow."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "Contract ID."
            - name: owner
              in: body
              type: string
              description: "Owner email."
          steps:
            - name: get
              type: call
              call: "contracts.get"
              with:
                id: "{{contract_id}}"
            - name: remind
              type: call
              call: "email.send"
              with:
                to: "{{owner}}"
                subject: "Renewal: {{contract_id}}"
            - name: task
              type: call
              call: "jira.create-issue"
              with:
                project: "PROC"
                summary: "Renew {{contract_id}}"
            - name: crm
              type: call
              call: "salesforce.update"
              with:
                id: "{{contract_id}}"
                stage: "Renewal"
  consumes:
    - type: http
      namespace: contracts
      baseUri: "https://contracts.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.contracts_token"
      resources:
        - name: contracts
          path: "/contracts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://dow.com.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opps
          path: "/sobjects/Opportunity"
          operations:
            - name: update
              method: PATCH

Reallocates costs at Dow.

naftiko: "0.5"
info:
  label: "Cost Reallocation Pipeline"
  description: "Reallocates costs at Dow."
  tags:
    - finance
    - cost-allocation
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: cost-realloc
      port: 8080
      tools:
        - name: reallocate
          description: "Reallocate costs at Dow."
          inputParameters:
            - name: source
              in: body
              type: string
              description: "Source CC."
            - name: target
              in: body
              type: string
              description: "Target CC."
            - name: amount
              in: body
              type: number
              description: "Amount."
          steps:
            - name: current
              type: call
              call: "oracle.get-alloc"
              with:
                cc: "{{source}}"
            - name: compute
              type: call
              call: "analytics.realloc"
              with:
                source: "{{source}}"
                target: "{{target}}"
                amount: "{{amount}}"
            - name: post
              type: call
              call: "oracle.post-journal"
              with:
                entries: "{{compute.entries}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Reallocated ${{amount}} from {{source}} to {{target}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: allocations
          path: "/cost-centers/{{cc}}/allocations"
          inputParameters:
            - name: cc
              in: path
          operations:
            - name: get-alloc
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: realloc
          path: "/compute"
          operations:
            - name: realloc
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a customer complaint arrives in Salesforce, creates a ServiceNow quality investigation, links to SAP batch records, and tracks corrective action in Microsoft Planner.

naftiko: "0.5"
info:
  label: "Customer Complaint to CAPA Pipeline"
  description: "When a customer complaint arrives in Salesforce, creates a ServiceNow quality investigation, links to SAP batch records, and tracks corrective action in Microsoft Planner."
  tags:
    - quality
    - salesforce
    - servicenow
    - sap
    - microsoft-planner
capability:
  exposes:
    - type: mcp
      namespace: capa-pipeline
      port: 8080
      tools:
        - name: initiate-capa
          description: "Given a Salesforce case ID, create a corrective action workflow across ServiceNow, SAP, and Microsoft Planner."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce case record ID."
            - name: batch_number
              in: body
              type: string
              description: "The production batch number linked to the complaint."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: get-batch-record
              type: call
              call: "sap.get-batch-record"
              with:
                batch_number: "{{batch_number}}"
            - name: create-investigation
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "CAPA Investigation: {{get-case.subject}}"
                description: "Customer: {{get-case.account_name}}. Complaint: {{get-case.description}}. Batch: {{batch_number}}. Material: {{get-batch-record.material}}. Production date: {{get-batch-record.production_date}}."
                assigned_group: "Quality_Assurance"
                category: "capa_investigation"
            - name: create-planner-task
              type: call
              call: "planner.create-task"
              with:
                plan_id: "quality_capa_plan"
                title: "CAPA: {{get-case.subject}} — Batch {{batch_number}}"
                notes: "ServiceNow task: {{create-investigation.number}}. Salesforce case: {{case_id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/QM_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batch-records
          path: "/A_Batch('{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-batch-record
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Tracks a customer order end-to-end: retrieves the Salesforce order, checks SAP production status, queries Oracle EBS shipping, and updates the customer via HubSpot email with fulfillment status.

naftiko: "0.5"
info:
  label: "Customer Order Fulfillment Tracker"
  description: "Tracks a customer order end-to-end: retrieves the Salesforce order, checks SAP production status, queries Oracle EBS shipping, and updates the customer via HubSpot email with fulfillment status."
  tags:
    - customer-service
    - salesforce
    - sap
    - oracle-ebs
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: track-order-fulfillment
          description: "Given a customer order ID, gather production and shipping status and notify the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Salesforce order record ID."
            - name: customer_email
              in: body
              type: string
              description: "Customer contact email for status update."
          steps:
            - name: get-order
              type: call
              call: "salesforce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-production-status
              type: call
              call: "sap.get-production-order"
              with:
                order_number: "{{get-order.sap_production_order}}"
            - name: get-shipping-status
              type: call
              call: "oracle-ebs.get-shipment"
              with:
                order_ref: "{{order_id}}"
            - name: notify-customer
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{customer_email}}"
                subject: "Order Update: {{order_id}}"
                body: "Your order {{order_id}} status: Production — {{get-production-status.status}}. Shipping — {{get-shipping-status.status}}. Expected delivery: {{get-shipping-status.estimated_arrival}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROD_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
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/shipping/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: shipments
          path: "/shipments?order_ref={{order_ref}}"
          inputParameters:
            - name: order_ref
              in: query
          operations:
            - name: get-shipment
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Retrieves a customer order from Salesforce, checks SAP production order progress, and enriches the customer record in HubSpot with the latest fulfillment status.

naftiko: "0.5"
info:
  label: "Customer Order with Production Visibility"
  description: "Retrieves a customer order from Salesforce, checks SAP production order progress, and enriches the customer record in HubSpot with the latest fulfillment status."
  tags:
    - sales
    - salesforce
    - sap
    - hubspot
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: sales-orders
      port: 8080
      tools:
        - name: get-order-with-production
          description: "Look up a Salesforce order, check SAP production progress, and update HubSpot CRM contact."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Salesforce order record ID."
          steps:
            - name: get-order
              type: call
              call: "salesforce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-production
              type: call
              call: "sap.get-production-order"
              with:
                order_number: "{{get-order.sap_production_order}}"
            - name: update-crm
              type: call
              call: "hubspot.update-contact"
              with:
                email: "{{get-order.customer_email}}"
                order_status: "{{get-production.status}}"
                estimated_ship: "{{get-production.planned_finish}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROD_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
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: update-contact
              method: PATCH

Monitors data pipelines at Dow via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: "0.5"
info:
  label: "Data Pipeline Monitor Pipeline"
  description: "Monitors data pipelines at Dow via Databricks, Snowflake, Slack, and ServiceNow."
  tags:
    - data-engineering
    - databricks
    - monitoring
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pipeline-mon
      port: 8080
      tools:
        - name: monitor
          description: "Monitor pipelines at Dow."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline ID."
          steps:
            - name: status
              type: call
              call: "databricks.get-run"
              with:
                id: "{{pipeline_id}}"
            - name: quality
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#data"
                text: "Pipeline {{pipeline_id}}: {{status.state}}"
            - name: incident
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "Pipeline {{pipeline_id}} issue"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://dow.com.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/get"
          operations:
            - name: get-run
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://dow.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks Datadog monitor at Dow.

naftiko: "0.5"
info:
  label: "Datadog Monitor Check"
  description: "Checks Datadog monitor at Dow."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: dd-monitor
      port: 8080
      tools:
        - name: check-monitor
          description: "Check monitor at Dow."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Monitor ID."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_state"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

Tests disaster recovery at Dow via failover, health checks, and reporting.

naftiko: "0.5"
info:
  label: "DR Test Pipeline"
  description: "Tests disaster recovery at Dow via failover, health checks, and reporting."
  tags:
    - disaster-recovery
    - business-continuity
    - testing
capability:
  exposes:
    - type: mcp
      namespace: dr-test
      port: 8080
      tools:
        - name: test-dr
          description: "Test DR at Dow."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "Plan ID."
            - name: type
              in: body
              type: string
              description: "Test type."
          steps:
            - name: failover
              type: call
              call: "dr.failover"
              with:
                plan: "{{plan_id}}"
                type: "{{type}}"
            - name: validate
              type: call
              call: "monitoring.check"
              with:
                scope: "critical"
            - name: measure
              type: call
              call: "dr.metrics"
              with:
                id: "{{failover.id}}"
            - name: report
              type: call
              call: "confluence.create-page"
              with:
                title: "DR - {{plan_id}}"
                body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
  consumes:
    - type: http
      namespace: dr
      baseUri: "https://dr.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dr_token"
      resources:
        - name: failovers
          path: "/failovers"
          operations:
            - name: failover
              method: POST
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: health
          path: "/checks"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://dow.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Detects infrastructure drift at Dow via Terraform, Slack, and Jira.

naftiko: "0.5"
info:
  label: "Drift Detection Pipeline"
  description: "Detects infrastructure drift at Dow via Terraform, Slack, and Jira."
  tags:
    - infrastructure
    - terraform
    - drift-detection
    - devops
capability:
  exposes:
    - type: mcp
      namespace: drift-det
      port: 8080
      tools:
        - name: detect
          description: "Detect drift at Dow."
          inputParameters:
            - name: ws_id
              in: body
              type: string
              description: "Workspace ID."
            - name: env
              in: body
              type: string
              description: "Environment."
          steps:
            - name: plan
              type: call
              call: "terraform.run"
              with:
                ws: "{{ws_id}}"
            - name: check
              type: call
              call: "terraform.get-plan"
              with:
                run: "{{plan.id}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#infra"
                text: "Drift {{env}}: {{check.changes}} changes"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Drift in {{env}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: run
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Processes an inbound EDI 850 purchase order: parses the order in Oracle EBS, validates customer credit in Salesforce, creates a SAP production order, and sends order confirmation via HubSpot.

naftiko: "0.5"
info:
  label: "EDI Order Processing Pipeline"
  description: "Processes an inbound EDI 850 purchase order: parses the order in Oracle EBS, validates customer credit in Salesforce, creates a SAP production order, and sends order confirmation via HubSpot."
  tags:
    - supply-chain
    - oracle-ebs
    - salesforce
    - sap
    - hubspot
    - edi
capability:
  exposes:
    - type: mcp
      namespace: edi-processing
      port: 8080
      tools:
        - name: process-edi-order
          description: "Given an EDI transaction ID, parse the order, validate credit, create production order, and confirm."
          inputParameters:
            - name: edi_transaction_id
              in: body
              type: string
              description: "The EDI 850 transaction identifier."
            - name: customer_email
              in: body
              type: string
              description: "Customer contact email for confirmation."
          steps:
            - name: parse-edi
              type: call
              call: "oracle-ebs.get-edi-transaction"
              with:
                transaction_id: "{{edi_transaction_id}}"
            - name: check-credit
              type: call
              call: "salesforce.get-account-credit"
              with:
                account_id: "{{parse-edi.customer_account_id}}"
            - name: create-production-order
              type: call
              call: "sap.create-production-order"
              with:
                material: "{{parse-edi.material_number}}"
                quantity: "{{parse-edi.quantity}}"
                plant: "{{parse-edi.ship_to_plant}}"
                customer_po: "{{parse-edi.po_number}}"
            - name: send-confirmation
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{customer_email}}"
                subject: "Order Confirmation: PO {{parse-edi.po_number}}"
                body: "Your order for {{parse-edi.quantity}} units of {{parse-edi.material_description}} has been received. Production order: {{create-production-order.order_number}}. Estimated ship date: {{create-production-order.planned_finish}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/edi/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: edi-transactions
          path: "/transactions/{{transaction_id}}"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: get-edi-transaction
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account-credit
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/A_ProductionOrder"
          operations:
            - name: create-production-order
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Checks ES index at Dow.

naftiko: "0.5"
info:
  label: "ES Index Health"
  description: "Checks ES index at Dow."
  tags:
    - search
    - elasticsearch
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: es-health
      port: 8080
      tools:
        - name: check-index
          description: "Check ES index at Dow."
          inputParameters:
            - name: index
              in: body
              type: string
              description: "Index name."
          call: "es.get-health"
          with:
            index: "{{index}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: docs
              type: number
              mapping: "$.docs.count"
  consumes:
    - type: http
      namespace: es
      baseUri: "https://es.dow.com:9200"
      authentication:
        type: bearer
        token: "$secrets.es_token"
      resources:
        - name: indices
          path: "/{{index}}/_stats"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: get-health
              method: GET

Offboards employees at Dow via Okta, Slack, ServiceNow, and storage.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Offboards employees at Dow via Okta, Slack, ServiceNow, and storage."
  tags:
    - hr
    - offboarding
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: offboarding
      port: 8080
      tools:
        - name: offboard
          description: "Offboard employees at Dow."
          inputParameters:
            - name: emp_id
              in: body
              type: string
              description: "Employee ID."
            - name: last_day
              in: body
              type: string
              description: "Last day."
          steps:
            - name: disable
              type: call
              call: "okta.deactivate"
              with:
                user: "{{emp_id}}"
            - name: revoke
              type: call
              call: "slack.remove"
              with:
                user: "{{emp_id}}"
            - name: return
              type: call
              call: "servicenow.create-request"
              with:
                type: "return"
                emp: "{{emp_id}}"
            - name: archive
              type: call
              call: "storage.archive"
              with:
                user: "{{emp_id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://dow.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{user}}/lifecycle/deactivate"
          inputParameters:
            - name: user
              in: path
          operations:
            - name: deactivate
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.remove"
          operations:
            - name: remove
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: storage
      baseUri: "https://storage.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.storage_token"
      resources:
        - name: archives
          path: "/archive"
          operations:
            - name: archive
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for safety training documents, and sends a welcome message via HubSpot email.

naftiko: "0.5"
info:
  label: "Employee Onboarding for Plant Operations"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for safety training documents, and sends a welcome message via HubSpot email."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: plant-onboarding
      port: 8080
      tools:
        - name: trigger-plant-onboarding
          description: "Given a Workday employee ID and plant assignment, orchestrate onboarding across ServiceNow, SharePoint, and HubSpot."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID for the new hire."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant code the employee is assigned to."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Plant onboarding: {{get-employee.full_name}} at {{plant_code}}"
                category: "plant_onboarding"
                assigned_group: "Plant_HR_{{plant_code}}"
                description: "New hire {{get-employee.full_name}} starting {{start_date}} at plant {{plant_code}}. Safety orientation required."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "plant_onboarding_site"
                folder_path: "SafetyTraining/{{plant_code}}/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{get-employee.work_email}}"
                subject: "Welcome to Dow Plant {{plant_code}}"
                body: "Welcome {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Safety training documents: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Collects emissions data from Datadog plant sensors, cross-references with SAP EHS permit thresholds, archives the report to SharePoint, and creates a ServiceNow compliance task if limits are exceeded.

naftiko: "0.5"
info:
  label: "Environmental Emissions Reporting Pipeline"
  description: "Collects emissions data from Datadog plant sensors, cross-references with SAP EHS permit thresholds, archives the report to SharePoint, and creates a ServiceNow compliance task if limits are exceeded."
  tags:
    - environmental
    - compliance
    - datadog
    - sap
    - sharepoint
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: emissions-reporting
      port: 8080
      tools:
        - name: run-emissions-report
          description: "Given a plant code and reporting period, collect sensor data, validate against EHS thresholds, archive report, and flag exceedances."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: period_start
              in: body
              type: string
              description: "Reporting period start date in YYYY-MM-DD format."
            - name: period_end
              in: body
              type: string
              description: "Reporting period end date in YYYY-MM-DD format."
          steps:
            - name: get-sensor-data
              type: call
              call: "datadog.get-emissions-metrics"
              with:
                plant_tag: "{{plant_code}}"
                from: "{{period_start}}"
                to: "{{period_end}}"
            - name: get-permit-limits
              type: call
              call: "sap.get-ehs-permits"
              with:
                plant: "{{plant_code}}"
            - name: archive-report
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "ehs_compliance_site"
                file_path: "EmissionsReports/{{plant_code}}/{{period_start}}_{{period_end}}.json"
            - name: flag-exceedance
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Emissions review: {{plant_code}} for {{period_start}} to {{period_end}}"
                description: "Sensor data collected from Datadog. Permit thresholds from SAP EHS. Report archived at {{archive-report.url}}."
                assigned_group: "EHS_Compliance"
                category: "emissions_review"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query?query=avg:emissions.*{plant:{{plant_tag}}}&from={{from}}&to={{to}}"
          inputParameters:
            - name: plant_tag
              in: query
            - name: from
              in: query
            - name: to
              in: query
          operations:
            - name: get-emissions-metrics
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_PERMIT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: permits
          path: "/A_EHSPermit?$filter=Plant eq '{{plant}}'"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-ehs-permits
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Audits expenses at Dow via Concur, compliance checks, and email.

naftiko: "0.5"
info:
  label: "Expense Audit Pipeline"
  description: "Audits expenses at Dow via Concur, compliance checks, and email."
  tags:
    - finance
    - travel
    - sap-concur
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-audit
      port: 8080
      tools:
        - name: audit
          description: "Audit expenses at Dow."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "Report ID."
          steps:
            - name: get
              type: call
              call: "concur.get-report"
              with:
                id: "{{report_id}}"
            - name: check
              type: call
              call: "compliance.check"
              with:
                expenses: "{{get.entries}}"
            - name: flag
              type: call
              call: "workflow.flag"
              with:
                id: "{{report_id}}"
                violations: "{{check.violations}}"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "{{get.approver}}"
                subject: "Expense {{report_id}} violations"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: policies
          path: "/check"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: reviews
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks F5 Networks load balancer pool health for operational technology services at a Dow plant, returning pool member status, active connections, and availability.

naftiko: "0.5"
info:
  label: "F5 Networks Load Balancer Health for Plant OT"
  description: "Checks F5 Networks load balancer pool health for operational technology services at a Dow plant, returning pool member status, active connections, and availability."
  tags:
    - security
    - f5-networks
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: lb-health
      port: 8080
      tools:
        - name: get-lb-pool-health
          description: "Retrieve F5 load balancer pool health status for a plant OT service pool."
          inputParameters:
            - name: pool_name
              in: body
              type: string
              description: "The F5 pool name for the OT service."
          call: "f5.get-pool-status"
          with:
            pool_name: "{{pool_name}}"
  consumes:
    - type: http
      namespace: f5
      baseUri: "https://dow-f5.internal.dow.com/mgmt/tm"
      authentication:
        type: basic
        username: "$secrets.f5_user"
        password: "$secrets.f5_password"
      resources:
        - name: pools
          path: "/ltm/pool/~Common~{{pool_name}}/members"
          inputParameters:
            - name: pool_name
              in: path
          operations:
            - name: get-pool-status
              method: GET

Analyzes feedback at Dow via surveys, AI sentiment, and Power BI.

naftiko: "0.5"
info:
  label: "Customer Feedback Pipeline"
  description: "Analyzes feedback at Dow via surveys, AI sentiment, and Power BI."
  tags:
    - customer-experience
    - analytics
    - sentiment-analysis
capability:
  exposes:
    - type: mcp
      namespace: feedback
      port: 8080
      tools:
        - name: analyze
          description: "Analyze feedback at Dow."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "Survey ID."
          steps:
            - name: collect
              type: call
              call: "survey.get"
              with:
                id: "{{survey_id}}"
            - name: sentiment
              type: call
              call: "ai.analyze"
              with:
                text: "{{collect.responses}}"
            - name: themes
              type: call
              call: "ai.themes"
              with:
                data: "{{collect.responses}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cx"
  consumes:
    - type: http
      namespace: survey
      baseUri: "https://surveys.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.survey_token"
      resources:
        - name: responses
          path: "/surveys/{{id}}/responses"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: ai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Checks GitHub repo at Dow.

naftiko: "0.5"
info:
  label: "GitHub Repo Check"
  description: "Checks GitHub repo at Dow."
  tags:
    - devops
    - github
    - version-control
capability:
  exposes:
    - type: mcp
      namespace: gh-repo
      port: 8080
      tools:
        - name: get-branch
          description: "Check branch at Dow."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repo."
            - name: branch
              in: body
              type: string
              description: "Branch."
          call: "github.get-branch"
          with:
            repo: "{{repo}}"
            branch: "{{branch}}"
          outputParameters:
            - name: sha
              type: string
              mapping: "$.commit.sha"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branches
          path: "/repos/org/{{repo}}/branches/{{branch}}"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch
              method: GET

Checks the GitLab CI pipeline status for process control software, validates the SonarQube quality gate, and creates a ServiceNow change request if both pass.

naftiko: "0.5"
info:
  label: "GitLab Pipeline with Quality Gate Validation"
  description: "Checks the GitLab CI pipeline status for process control software, validates the SonarQube quality gate, and creates a ServiceNow change request if both pass."
  tags:
    - devops
    - gitlab
    - sonarqube
    - servicenow
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: ci-pipeline
      port: 8080
      tools:
        - name: validate-pipeline-quality
          description: "Check GitLab pipeline and SonarQube quality, then create change request if approved."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The GitLab project ID."
            - name: sonarqube_key
              in: body
              type: string
              description: "The SonarQube project key."
          steps:
            - name: get-pipeline
              type: call
              call: "gitlab.get-latest-pipeline"
              with:
                project_id: "{{project_id}}"
            - name: get-quality
              type: call
              call: "sonarqube.get-quality-gate"
              with:
                project_key: "{{sonarqube_key}}"
            - name: create-cr
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Release candidate: project {{project_id}}"
                description: "Pipeline: {{get-pipeline.status}}. Quality gate: {{get-quality.status}}. Ready for deployment review."
                category: "software_release"
                assigned_group: "Plant_IT"
  consumes:
    - type: http
      namespace: gitlab
      baseUri: "https://gitlab.dow.com/api/v4"
      authentication:
        type: bearer
        token: "$secrets.gitlab_token"
      resources:
        - name: pipelines
          path: "/projects/{{project_id}}/pipelines/latest"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-latest-pipeline
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.dow.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality-gates
          path: "/qualitygates/project_status?projectKey={{project_key}}"
          inputParameters:
            - name: project_key
              in: query
          operations:
            - name: get-quality-gate
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST

Checks Grafana dashboard at Dow.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Status"
  description: "Checks Grafana dashboard at Dow."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: check-dash
          description: "Check dashboard at Dow."
          inputParameters:
            - name: uid
              in: body
              type: string
              description: "Dashboard UID."
          call: "grafana.get-dash"
          with:
            uid: "{{uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.dow.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dash
              method: GET

Checks Terraform state drift for Dow Oracle Cloud infrastructure, validates resource costs, and creates a ServiceNow change request for remediation if drift is detected.

naftiko: "0.5"
info:
  label: "Infrastructure Drift Detection and Remediation"
  description: "Checks Terraform state drift for Dow Oracle Cloud infrastructure, validates resource costs, and creates a ServiceNow change request for remediation if drift is detected."
  tags:
    - devops
    - terraform
    - oracle-cloud
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: infra-drift
      port: 8080
      tools:
        - name: detect-and-remediate-drift
          description: "Check Terraform drift, assess cost impact, and create remediation change request."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID."
            - name: compartment_id
              in: body
              type: string
              description: "Oracle Cloud compartment OCID for cost check."
          steps:
            - name: check-drift
              type: call
              call: "terraform.get-workspace-state"
              with:
                workspace_id: "{{workspace_id}}"
            - name: get-costs
              type: call
              call: "oracle-cloud.get-cost-summary"
              with:
                compartment_id: "{{compartment_id}}"
            - name: create-remediation
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Infra drift detected: workspace {{workspace_id}}"
                description: "Terraform state: {{check-drift.resource_count}} resources. Drift detected. Current monthly cost: {{get-costs.total_cost}}. Remediation required."
                category: "infrastructure"
                assigned_group: "Cloud_Ops"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces/{{workspace_id}}/current-state-version"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-workspace-state
              method: GET
    - type: http
      namespace: oracle-cloud
      baseUri: "https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: usage
          path: "/usage?compartmentId={{compartment_id}}"
          inputParameters:
            - name: compartment_id
              in: query
          operations:
            - name: get-cost-summary
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST

Queries Oracle EBS for raw material inventory, compares against SAP reorder points, and creates a ServiceNow procurement alert if stock is below threshold.

naftiko: "0.5"
info:
  label: "Inventory Check with Reorder Alert"
  description: "Queries Oracle EBS for raw material inventory, compares against SAP reorder points, and creates a ServiceNow procurement alert if stock is below threshold."
  tags:
    - supply-chain
    - oracle-ebs
    - sap
    - servicenow
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: check-inventory-threshold
          description: "Check inventory levels against reorder thresholds and alert procurement if low."
          inputParameters:
            - name: item_number
              in: body
              type: string
              description: "The Oracle item number for the raw material."
            - name: site_code
              in: body
              type: string
              description: "The Dow plant site code."
          steps:
            - name: get-inventory
              type: call
              call: "oracle-ebs.get-inventory"
              with:
                item_number: "{{item_number}}"
                site_code: "{{site_code}}"
            - name: get-reorder-point
              type: call
              call: "sap.get-material-mrp"
              with:
                material: "{{item_number}}"
                plant: "{{site_code}}"
            - name: alert-procurement
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Low inventory alert: {{item_number}} at {{site_code}}"
                description: "On-hand: {{get-inventory.on_hand_qty}} {{get-inventory.uom}}. Reorder point: {{get-reorder-point.reorder_point}}. Safety stock: {{get-reorder-point.safety_stock}}."
                assigned_group: "Procurement_Team"
                category: "inventory_alert"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: on-hand
          path: "/onhand?item={{item_number}}&org={{site_code}}"
          inputParameters:
            - name: item_number
              in: query
            - name: site_code
              in: query
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-mrp
          path: "/A_MaterialMRP('{{material}}','{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-material-mrp
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Escalates IT incidents at Dow via ServiceNow, PagerDuty, and Slack.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Pipeline"
  description: "Escalates IT incidents at Dow via ServiceNow, PagerDuty, and Slack."
  tags:
    - incident-management
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Escalate incidents at Dow."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
            - name: severity
              in: body
              type: string
              description: "Severity."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: page
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-incident.description}}"
                urgency: "{{severity}}"
            - name: channel
              type: call
              call: "slack.create-channel"
              with:
                name: "inc-{{incident_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#inc-{{incident_id}}"
                text: "P{{severity}}: {{get-incident.description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST

Retrieves sprint progress at Dow.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Lookup"
  description: "Retrieves sprint progress at Dow."
  tags:
    - project-management
    - jira
    - agile
capability:
  exposes:
    - type: mcp
      namespace: jira-sprint
      port: 8080
      tools:
        - name: get-sprint
          description: "Look up sprint at Dow."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Project key."
          call: "jira.get-sprints"
          with:
            project: "{{project_key}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.values[0].name"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/agile/1.0"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/board/1/sprint"
          operations:
            - name: get-sprints
              method: GET

Maintains KB at Dow by finding stale articles and notifying owners.

naftiko: "0.5"
info:
  label: "Knowledge Base Maintenance Pipeline"
  description: "Maintains KB at Dow by finding stale articles and notifying owners."
  tags:
    - knowledge-management
    - confluence
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: kb-maint
      port: 8080
      tools:
        - name: maintain-kb
          description: "Maintain KB at Dow."
          inputParameters:
            - name: space
              in: body
              type: string
              description: "Confluence space."
            - name: stale_days
              in: body
              type: number
              description: "Days threshold."
          steps:
            - name: find
              type: call
              call: "confluence.search-stale"
              with:
                space: "{{space}}"
                days: "{{stale_days}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{find.owners}}"
                subject: "KB review needed"
            - name: flag
              type: call
              call: "confluence.add-label"
              with:
                pages: "{{find.ids}}"
                label: "needs-review"
            - name: report
              type: call
              call: "slack.post-message"
              with:
                channel: "#kb"
                text: "KB: {{find.count}} stale articles"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://dow.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search-stale
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates KPI digest at Dow from Snowflake, Oracle, Power BI, and email.

naftiko: "0.5"
info:
  label: "Weekly KPI Digest Pipeline"
  description: "Generates KPI digest at Dow from Snowflake, Oracle, Power BI, and email."
  tags:
    - reporting
    - kpi
    - snowflake
    - executive
capability:
  exposes:
    - type: mcp
      namespace: kpi-digest
      port: 8080
      tools:
        - name: gen-digest
          description: "Generate KPI digest at Dow."
          inputParameters:
            - name: week
              in: body
              type: string
              description: "Week ending."
            - name: dist
              in: body
              type: string
              description: "Distribution list."
          steps:
            - name: ops
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM kpis WHERE w='{{week}}'"
            - name: fin
              type: call
              call: "oracle.get-summary"
              with:
                period: "{{week}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "exec_kpis"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "{{dist}}"
                subject: "KPIs - {{week}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://dow.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/summary"
          operations:
            - name: get-summary
              method: GET
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks K8s pod health at Dow.

naftiko: "0.5"
info:
  label: "K8s Pod Health"
  description: "Checks K8s pod health at Dow."
  tags:
    - containers
    - kubernetes
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: k8s-pod
      port: 8080
      tools:
        - name: check-pod
          description: "Check pod at Dow."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "Namespace."
            - name: pod
              in: body
              type: string
              description: "Pod name."
          call: "k8s.get-pod"
          with:
            namespace: "{{namespace}}"
            pod: "{{pod}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.status.phase"
  consumes:
    - type: http
      namespace: k8s
      baseUri: "https://k8s.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.k8s_token"
      resources:
        - name: pods
          path: "/namespaces/{{namespace}}/pods/{{pod}}"
          inputParameters:
            - name: namespace
              in: path
            - name: pod
              in: path
          operations:
            - name: get-pod
              method: GET

Queries PostgreSQL for lab test results, compares against SAP batch specifications, and creates a ServiceNow quality task if any out-of-spec results are detected.

naftiko: "0.5"
info:
  label: "Lab Results with Spec Validation Pipeline"
  description: "Queries PostgreSQL for lab test results, compares against SAP batch specifications, and creates a ServiceNow quality task if any out-of-spec results are detected."
  tags:
    - rnd
    - postgresql
    - sap
    - servicenow
    - quality
capability:
  exposes:
    - type: mcp
      namespace: lab-results
      port: 8080
      tools:
        - name: validate-batch-results
          description: "Retrieve lab results, compare to SAP specs, and flag out-of-spec batches."
          inputParameters:
            - name: batch_number
              in: body
              type: string
              description: "The production batch number."
          steps:
            - name: get-results
              type: call
              call: "postgresql.get-batch-results"
              with:
                batch_number: "{{batch_number}}"
            - name: get-spec
              type: call
              call: "sap.get-batch-spec"
              with:
                batch_number: "{{batch_number}}"
            - name: flag-oos
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Batch {{batch_number}} lab results review"
                description: "Tests completed: {{get-results.test_count}}. Spec: {{get-spec.spec_id}}. Results require quality review against specification limits."
                assigned_group: "Quality_Lab"
                category: "lab_review"
  consumes:
    - type: http
      namespace: postgresql
      baseUri: "https://dow-lab-api.internal.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lab_db_token"
      resources:
        - name: results
          path: "/results?batch={{batch_number}}"
          inputParameters:
            - name: batch_number
              in: query
          operations:
            - name: get-batch-results
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/QM_BATCH_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batch-specs
          path: "/A_BatchSpec('{{batch_number}}')"
          inputParameters:
            - name: batch_number
              in: path
          operations:
            - name: get-batch-spec
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Checks license compliance at Dow via scanning, entitlements, and procurement.

naftiko: "0.5"
info:
  label: "License Compliance Pipeline"
  description: "Checks license compliance at Dow via scanning, entitlements, and procurement."
  tags:
    - compliance
    - licensing
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: license-comp
      port: 8080
      tools:
        - name: check-licenses
          description: "Check license compliance at Dow."
          inputParameters:
            - name: software
              in: body
              type: string
              description: "Software."
            - name: vendor
              in: body
              type: string
              description: "Vendor."
          steps:
            - name: scan
              type: call
              call: "assets.installations"
              with:
                sw: "{{software}}"
            - name: entitlements
              type: call
              call: "licenses.get"
              with:
                sw: "{{software}}"
            - name: flag
              type: call
              call: "compliance.flag"
              with:
                installed: "{{scan.count}}"
                entitled: "{{entitlements.count}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "license"
                sw: "{{software}}"
  consumes:
    - type: http
      namespace: assets
      baseUri: "https://assets.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.asset_token"
      resources:
        - name: installations
          path: "/installations"
          operations:
            - name: installations
              method: GET
    - type: http
      namespace: licenses
      baseUri: "https://licenses.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.license_token"
      resources:
        - name: ent
          path: "/entitlements"
          operations:
            - name: get
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: overages
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Orchestrates a Management of Change process for plant modifications: creates a ServiceNow change request, retrieves affected equipment from SAP PM, checks environmental permits in SAP EHS, and notifies stakeholders via HubSpot.

naftiko: "0.5"
info:
  label: "Management of Change Pipeline"
  description: "Orchestrates a Management of Change process for plant modifications: creates a ServiceNow change request, retrieves affected equipment from SAP PM, checks environmental permits in SAP EHS, and notifies stakeholders via HubSpot."
  tags:
    - safety
    - compliance
    - servicenow
    - sap
    - hubspot
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: moc-process
      port: 8080
      tools:
        - name: initiate-moc
          description: "Given change details and plant info, orchestrate the Management of Change approval workflow."
          inputParameters:
            - name: change_title
              in: body
              type: string
              description: "Title of the proposed change."
            - name: change_description
              in: body
              type: string
              description: "Detailed description of the plant modification."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: equipment_ids
              in: body
              type: string
              description: "Comma-separated SAP equipment IDs affected."
            - name: requestor_email
              in: body
              type: string
              description: "Email of the change requestor."
          steps:
            - name: create-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "MOC: {{change_title}}"
                description: "{{change_description}}. Plant: {{plant_code}}. Equipment: {{equipment_ids}}."
                category: "management_of_change"
                risk: "high"
                assigned_group: "MOC_Review_Board"
            - name: get-equipment-details
              type: call
              call: "sap.get-equipment-list"
              with:
                equipment_ids: "{{equipment_ids}}"
                plant: "{{plant_code}}"
            - name: check-permits
              type: call
              call: "sap.get-ehs-permits"
              with:
                plant: "{{plant_code}}"
            - name: notify-requestor
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{requestor_email}}"
                subject: "MOC Initiated: {{change_title}}"
                body: "Your Management of Change request has been submitted. Change request: {{create-change-request.number}}. Affected equipment: {{get-equipment-details.count}} items. Active permits on file: {{check-permits.permit_count}}. The MOC Review Board will assess the request."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: equipment-list
          path: "/A_Equipment?$filter=Plant eq '{{plant}}' and EquipmentId in ({{equipment_ids}})"
          inputParameters:
            - name: plant
              in: query
            - name: equipment_ids
              in: query
          operations:
            - name: get-equipment-list
              method: GET
        - name: permits
          path: "/A_EHSPermit?$filter=Plant eq '{{plant}}'"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-ehs-permits
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Checks Dynatrace process health for MES, correlates with Datadog infrastructure metrics, and creates a ServiceNow incident if degradation is detected.

naftiko: "0.5"
info:
  label: "MES Health Check with Escalation"
  description: "Checks Dynatrace process health for MES, correlates with Datadog infrastructure metrics, and creates a ServiceNow incident if degradation is detected."
  tags:
    - monitoring
    - dynatrace
    - datadog
    - servicenow
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: mes-health
      port: 8080
      tools:
        - name: check-mes-health
          description: "Check MES health across Dynatrace and Datadog, and escalate if degraded."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The Dynatrace process group entity ID."
            - name: host_tag
              in: body
              type: string
              description: "The Datadog host tag for the MES server."
          steps:
            - name: get-dynatrace-health
              type: call
              call: "dynatrace.get-process-health"
              with:
                entity_id: "{{entity_id}}"
            - name: get-infra-metrics
              type: call
              call: "datadog.get-host-metrics"
              with:
                host_tag: "{{host_tag}}"
            - name: escalate
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "MES health check: {{entity_id}}"
                description: "Dynatrace status: {{get-dynatrace-health.status}}. CPU: {{get-infra-metrics.cpu_pct}}%. Memory: {{get-infra-metrics.mem_pct}}%."
                severity: "3"
                assigned_group: "MES_Support"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://dow.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: process-groups
          path: "/entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-process-health
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: host-metrics
          path: "/hosts?filter=tag:{{host_tag}}"
          inputParameters:
            - name: host_tag
              in: query
          operations:
            - name: get-host-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.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

Generates monthly security reports at Dow from Splunk and Qualys.

naftiko: "0.5"
info:
  label: "Monthly Security Report Pipeline"
  description: "Generates monthly security reports at Dow from Splunk and Qualys."
  tags:
    - security
    - reporting
    - splunk
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sec-report
      port: 8080
      tools:
        - name: gen-sec-report
          description: "Generate security report at Dow."
          inputParameters:
            - name: month
              in: body
              type: string
              description: "Month."
          steps:
            - name: splunk
              type: call
              call: "splunk.search"
              with:
                query: "index=security earliest=-30d"
            - name: scans
              type: call
              call: "qualys.results"
              with:
                month: "{{month}}"
            - name: compile
              type: call
              call: "analytics.compile-security"
              with:
                events: "{{splunk.count}}"
                vulns: "{{scans.critical}}"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "ciso@co.com"
                subject: "Security - {{month}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.dow.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: results
          path: "/fo/scan/results"
          operations:
            - name: results
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: security
          path: "/compile"
          operations:
            - name: compile-security
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Onboards employees at Dow with Okta, ServiceNow, Slack, and calendar.

naftiko: "0.5"
info:
  label: "New Employee IT Onboarding Pipeline"
  description: "Onboards employees at Dow with Okta, ServiceNow, Slack, and calendar."
  tags:
    - hr
    - onboarding
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-onboarding
      port: 8080
      tools:
        - name: onboard-employee
          description: "Onboard employees at Dow."
          inputParameters:
            - name: name
              in: body
              type: string
              description: "Name."
            - name: dept
              in: body
              type: string
              description: "Department."
            - name: start
              in: body
              type: string
              description: "Start date."
          steps:
            - name: okta
              type: call
              call: "okta.create-user"
              with:
                name: "{{name}}"
                department: "{{dept}}"
            - name: equip
              type: call
              call: "servicenow.create-request"
              with:
                type: "new_hire"
                for: "{{name}}"
            - name: slack
              type: call
              call: "slack.invite"
              with:
                email: "{{okta.email}}"
            - name: orient
              type: call
              call: "calendar.create-event"
              with:
                title: "Orientation - {{name}}"
                date: "{{start}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://dow.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.invite"
          operations:
            - name: invite
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/hr/events"
          operations:
            - name: create-event
              method: POST

Checks New Relic APM at Dow.

naftiko: "0.5"
info:
  label: "New Relic APM Check"
  description: "Checks New Relic APM at Dow."
  tags:
    - monitoring
    - new-relic
    - apm
capability:
  exposes:
    - type: mcp
      namespace: nr-apm
      port: 8080
      tools:
        - name: check-apm
          description: "Check APM at Dow."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "App ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: health
              type: string
              mapping: "$.application.health_status"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.new_relic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Checks Okta user at Dow.

naftiko: "0.5"
info:
  label: "Okta User Check"
  description: "Checks Okta user at Dow."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: okta-user
      port: 8080
      tools:
        - name: check-user
          description: "Check user at Dow."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: "okta.get-user"
          with:
            email: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://dow.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user
              method: GET

Before assigning a plant operator to a chemical process shift, validates Workday certifications, checks Pluralsight training completion, and creates the shift assignment in SAP with a ServiceNow notification.

naftiko: "0.5"
info:
  label: "Operator Certification and Shift Assignment Pipeline"
  description: "Before assigning a plant operator to a chemical process shift, validates Workday certifications, checks Pluralsight training completion, and creates the shift assignment in SAP with a ServiceNow notification."
  tags:
    - manufacturing
    - safety
    - workday
    - pluralsight
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: shift-assignment
      port: 8080
      tools:
        - name: assign-operator-shift
          description: "Given an operator ID and shift details, validate certifications and training before creating the shift assignment."
          inputParameters:
            - name: operator_id
              in: body
              type: string
              description: "Workday employee ID of the operator."
            - name: shift_date
              in: body
              type: string
              description: "Shift date in YYYY-MM-DD format."
            - name: process_area
              in: body
              type: string
              description: "The chemical process area for the shift."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
          steps:
            - name: get-operator
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{operator_id}}"
            - name: check-certs
              type: call
              call: "workday.get-certifications"
              with:
                employee_id: "{{operator_id}}"
            - name: check-training
              type: call
              call: "pluralsight.get-completions"
              with:
                employee_email: "{{get-operator.work_email}}"
            - name: create-shift
              type: call
              call: "sap.create-shift-assignment"
              with:
                operator_id: "{{operator_id}}"
                plant: "{{plant_code}}"
                process_area: "{{process_area}}"
                shift_date: "{{shift_date}}"
            - name: notify-supervisor
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Shift assigned: {{get-operator.full_name}} — {{process_area}} on {{shift_date}}"
                description: "Operator {{get-operator.full_name}} assigned to {{process_area}} at {{plant_code}}. Certifications: {{check-certs.active_count}}. Training modules completed: {{check-training.completed_count}}."
                assigned_group: "Plant_Supervisors_{{plant_code}}"
                category: "shift_management"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
        - name: certifications
          path: "/workers/{{employee_id}}/certifications"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-certifications
              method: GET
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: completions
          path: "/users/{{employee_email}}/course-completions"
          inputParameters:
            - name: employee_email
              in: path
          operations:
            - name: get-completions
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_SHIFT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: shifts
          path: "/A_ShiftAssignment"
          operations:
            - name: create-shift-assignment
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Retrieves Oracle Cloud resource utilization and cost data for Dow manufacturing IT workloads, used to identify underutilized resources and cost savings opportunities.

naftiko: "0.5"
info:
  label: "Oracle Cloud Cost Optimization Report"
  description: "Retrieves Oracle Cloud resource utilization and cost data for Dow manufacturing IT workloads, used to identify underutilized resources and cost savings opportunities."
  tags:
    - cost-management
    - oracle-cloud
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-cloud-costs
          description: "Retrieve Oracle Cloud cost and utilization summary for a compartment."
          inputParameters:
            - name: compartment_id
              in: body
              type: string
              description: "The Oracle Cloud compartment OCID."
            - name: period
              in: body
              type: string
              description: "Cost reporting period in YYYY-MM format."
          call: "oracle-cloud.get-cost-summary"
          with:
            compartment_id: "{{compartment_id}}"
            period: "{{period}}"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: usage
          path: "/usage?compartmentId={{compartment_id}}&granularity=MONTHLY&timeUsageStarted={{period}}-01"
          inputParameters:
            - name: compartment_id
              in: query
            - name: period
              in: query
          operations:
            - name: get-cost-summary
              method: GET

Checks on-call at Dow.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Check"
  description: "Checks on-call at Dow."
  tags:
    - incident-management
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: pd-oncall
      port: 8080
      tools:
        - name: get-oncall
          description: "Check on-call at Dow."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "Schedule ID."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: user
              type: string
              mapping: "$.oncalls[0].user.summary"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall
              method: GET

Retrieves firewall rules from Palo Alto Networks for a specified plant network zone, used for OT security audits of chemical manufacturing control system networks.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Firewall Rule Audit"
  description: "Retrieves firewall rules from Palo Alto Networks for a specified plant network zone, used for OT security audits of chemical manufacturing control system networks."
  tags:
    - security
    - palo-alto-networks
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: firewall-audit
      port: 8080
      tools:
        - name: get-firewall-rules
          description: "Retrieve Palo Alto Networks firewall rules for a plant OT network zone."
          inputParameters:
            - name: zone_name
              in: body
              type: string
              description: "The network security zone name for the plant."
          call: "palo-alto.get-rules"
          with:
            zone_name: "{{zone_name}}"
  consumes:
    - type: http
      namespace: palo-alto
      baseUri: "https://dow-pan.internal.dow.com/restapi/v10.1"
      authentication:
        type: bearer
        token: "$secrets.palo_alto_token"
      resources:
        - name: security-rules
          path: "/Policies/SecurityRules?location=vsys&vsys=vsys1&name={{zone_name}}"
          inputParameters:
            - name: zone_name
              in: query
          operations:
            - name: get-rules
              method: GET

Retrieves employee benefits enrollment status from PeopleSoft HR, including health plan, retirement contributions, and life insurance details for benefits administration.

naftiko: "0.5"
info:
  label: "PeopleSoft Benefits Enrollment Query"
  description: "Retrieves employee benefits enrollment status from PeopleSoft HR, including health plan, retirement contributions, and life insurance details for benefits administration."
  tags:
    - hr
    - peoplesoft
    - benefits
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: get-benefits-enrollment
          description: "Retrieve PeopleSoft benefits enrollment for an employee by ID."
          inputParameters:
            - name: emplid
              in: body
              type: string
              description: "The PeopleSoft employee ID."
          call: "peoplesoft.get-benefits"
          with:
            emplid: "{{emplid}}"
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://dow-ps.internal.dow.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: benefits
          path: "/benefits/enrollment/{{emplid}}"
          inputParameters:
            - name: emplid
              in: path
          operations:
            - name: get-benefits
              method: GET

Queries Pluralsight for an employee's completed safety and chemical handling training courses, validating compliance with Dow mandatory training requirements.

naftiko: "0.5"
info:
  label: "Pluralsight Training Compliance Check"
  description: "Queries Pluralsight for an employee's completed safety and chemical handling training courses, validating compliance with Dow mandatory training requirements."
  tags:
    - hr
    - pluralsight
    - safety
    - training
capability:
  exposes:
    - type: mcp
      namespace: training-compliance
      port: 8080
      tools:
        - name: check-training-status
          description: "Retrieve Pluralsight course completions for an employee email."
          inputParameters:
            - name: employee_email
              in: body
              type: string
              description: "The employee's email address registered in Pluralsight."
          call: "pluralsight.get-completions"
          with:
            employee_email: "{{employee_email}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: completions
          path: "/users/{{employee_email}}/course-completions"
          inputParameters:
            - name: employee_email
              in: path
          operations:
            - name: get-completions
              method: GET

Creates postmortems at Dow.

naftiko: "0.5"
info:
  label: "Incident Postmortem Pipeline"
  description: "Creates postmortems at Dow."
  tags:
    - incident-management
    - postmortem
    - pagerduty
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: postmortem
      port: 8080
      tools:
        - name: create-postmortem
          description: "Create postmortem at Dow."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
          steps:
            - name: timeline
              type: call
              call: "pagerduty.get-log"
              with:
                id: "{{incident_id}}"
            - name: metrics
              type: call
              call: "datadog.get-metrics"
              with:
                incident: "{{incident_id}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Postmortem: {{timeline.title}}"
                body: "Impact: {{metrics.impact}}"
            - name: review
              type: call
              call: "calendar.create-event"
              with:
                title: "Review: {{timeline.title}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{id}}/log_entries"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-log
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://dow.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/sre/events"
          operations:
            - name: create-event
              method: POST

Checks Power BI refresh at Dow.

naftiko: "0.5"
info:
  label: "Power BI Refresh Check"
  description: "Checks Power BI refresh at Dow."
  tags:
    - analytics
    - power-bi
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: pbi-refresh
      port: 8080
      tools:
        - name: check-refresh
          description: "Check refresh at Dow."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Dataset ID."
          call: "power-bi.get-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

When a TensorFlow model detects impending equipment failure via Kubeflow, retrieves asset details from SAP PM, schedules a maintenance window in ServiceNow, and notifies the plant engineer via HubSpot.

naftiko: "0.5"
info:
  label: "Predictive Maintenance Alert Pipeline"
  description: "When a TensorFlow model detects impending equipment failure via Kubeflow, retrieves asset details from SAP PM, schedules a maintenance window in ServiceNow, and notifies the plant engineer via HubSpot."
  tags:
    - maintenance
    - manufacturing
    - kubeflow
    - tensorflow
    - sap
    - servicenow
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: predictive-maintenance
      port: 8080
      tools:
        - name: handle-prediction-alert
          description: "Given a model prediction and equipment ID, create a proactive maintenance workflow."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "SAP equipment ID flagged by the prediction model."
            - name: prediction_score
              in: body
              type: number
              description: "Failure probability score from the model (0-1)."
            - name: model_name
              in: body
              type: string
              description: "Name of the TensorFlow model that triggered the alert."
          steps:
            - name: get-model-details
              type: call
              call: "kubeflow.get-model-metrics"
              with:
                model_name: "{{model_name}}"
            - name: get-equipment
              type: call
              call: "sap.get-equipment"
              with:
                equipment_id: "{{equipment_id}}"
            - name: schedule-maintenance
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Predictive maintenance: {{get-equipment.description}}"
                description: "Model {{model_name}} predicted failure probability {{prediction_score}}. Equipment: {{get-equipment.description}} at plant {{get-equipment.plant}}. Model accuracy: {{get-model-details.accuracy}}."
                priority: "2"
                assigned_group: "Plant_Maintenance_{{get-equipment.plant}}"
            - name: notify-engineer
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{get-equipment.responsible_engineer_email}}"
                subject: "Predictive Maintenance Alert: {{get-equipment.description}}"
                body: "Failure probability: {{prediction_score}}. Work order: {{schedule-maintenance.number}}. Please review and confirm maintenance window."
  consumes:
    - type: http
      namespace: kubeflow
      baseUri: "https://kubeflow.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kubeflow_token"
      resources:
        - name: model-metrics
          path: "/models/{{model_name}}/metrics"
          inputParameters:
            - name: model_name
              in: path
          operations:
            - name: get-model-metrics
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-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('{{equipment_id}}')"
          inputParameters:
            - name: equipment_id
              in: path
          operations:
            - name: get-equipment
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.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: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Retrieves equipment maintenance schedules from SAP Plant Maintenance, checks Workday for technician availability, creates a ServiceNow work order, and updates the Microsoft Planner task board.

naftiko: "0.5"
info:
  label: "Preventive Maintenance Scheduler"
  description: "Retrieves equipment maintenance schedules from SAP Plant Maintenance, checks Workday for technician availability, creates a ServiceNow work order, and updates the Microsoft Planner task board."
  tags:
    - maintenance
    - sap
    - workday
    - servicenow
    - microsoft-planner
capability:
  exposes:
    - type: mcp
      namespace: maintenance-scheduling
      port: 8080
      tools:
        - name: schedule-maintenance
          description: "Given equipment ID and maintenance type, find available technician, create work order, and update planner."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "SAP equipment ID for the asset requiring maintenance."
            - name: maintenance_type
              in: body
              type: string
              description: "Type of maintenance (preventive, corrective, inspection)."
            - name: target_date
              in: body
              type: string
              description: "Target completion date in YYYY-MM-DD format."
          steps:
            - name: get-equipment
              type: call
              call: "sap.get-equipment"
              with:
                equipment_id: "{{equipment_id}}"
            - name: find-technician
              type: call
              call: "workday.search-available-worker"
              with:
                skill_tag: "{{get-equipment.equipment_category}}"
                plant: "{{get-equipment.plant}}"
                date: "{{target_date}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "{{maintenance_type}} maintenance: {{get-equipment.description}}"
                equipment_id: "{{equipment_id}}"
                assigned_to: "{{find-technician.worker_id}}"
                scheduled_date: "{{target_date}}"
            - name: update-planner
              type: call
              call: "planner.create-task"
              with:
                plan_id: "plant_maintenance_plan"
                title: "{{maintenance_type}}: {{get-equipment.description}} — {{target_date}}"
                assigned_to: "{{find-technician.work_email}}"
                due_date: "{{target_date}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://dow-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('{{equipment_id}}')"
          inputParameters:
            - name: equipment_id
              in: path
          operations:
            - name: get-equipment
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers?skill={{skill_tag}}&location={{plant}}&available={{date}}"
          inputParameters:
            - name: skill_tag
              in: query
            - name: plant
              in: query
            - name: date
              in: query
          operations:
            - name: search-available-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.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: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Validates a GitLab pipeline passed, checks SonarQube quality gate, gets Azure DevOps release approval, and creates a ServiceNow change request for plant DCS software deployment.

naftiko: "0.5"
info:
  label: "Process Control Software Deployment Pipeline"
  description: "Validates a GitLab pipeline passed, checks SonarQube quality gate, gets Azure DevOps release approval, and creates a ServiceNow change request for plant DCS software deployment."
  tags:
    - devops
    - gitlab
    - sonarqube
    - azure-devops
    - servicenow
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: dcs-deployment
      port: 8080
      tools:
        - name: deploy-dcs-software
          description: "Given a GitLab project and release, validate quality gates and create a change request for deployment to plant control systems."
          inputParameters:
            - name: gitlab_project_id
              in: body
              type: string
              description: "GitLab project ID for the process control software."
            - name: sonarqube_key
              in: body
              type: string
              description: "SonarQube project key."
            - name: azdo_project
              in: body
              type: string
              description: "Azure DevOps project name."
            - name: release_id
              in: body
              type: string
              description: "Azure DevOps release ID."
            - name: plant_code
              in: body
              type: string
              description: "Target plant code for deployment."
          steps:
            - name: check-pipeline
              type: call
              call: "gitlab.get-latest-pipeline"
              with:
                project_id: "{{gitlab_project_id}}"
            - name: check-quality
              type: call
              call: "sonarqube.get-quality-gate"
              with:
                project_key: "{{sonarqube_key}}"
            - name: check-release
              type: call
              call: "azure-devops.get-release"
              with:
                project: "{{azdo_project}}"
                release_id: "{{release_id}}"
            - name: create-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "DCS deployment to {{plant_code}}: release {{release_id}}"
                description: "Pipeline: {{check-pipeline.status}}. Quality gate: {{check-quality.status}}. Release: {{check-release.status}}. Deploying to plant {{plant_code}} DCS systems."
                category: "software_deployment"
                risk: "high"
                assigned_group: "Plant_IT_{{plant_code}}"
  consumes:
    - type: http
      namespace: gitlab
      baseUri: "https://gitlab.dow.com/api/v4"
      authentication:
        type: bearer
        token: "$secrets.gitlab_token"
      resources:
        - name: pipelines
          path: "/projects/{{project_id}}/pipelines/latest"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-latest-pipeline
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.dow.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality-gates
          path: "/qualitygates/project_status?projectKey={{project_key}}"
          inputParameters:
            - name: project_key
              in: query
          operations:
            - name: get-quality-gate
              method: GET
    - type: http
      namespace: azure-devops
      baseUri: "https://vsrm.dev.azure.com/dow"
      authentication:
        type: bearer
        token: "$secrets.azure_devops_token"
      resources:
        - name: releases
          path: "/{{project}}/_apis/release/releases/{{release_id}}?api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: release_id
              in: path
          operations:
            - name: get-release
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST

Retrieves SAP BW production KPIs, correlates with Datadog real-time plant metrics, and archives the combined dashboard snapshot in SharePoint for management review.

naftiko: "0.5"
info:
  label: "Production KPI Dashboard Pipeline"
  description: "Retrieves SAP BW production KPIs, correlates with Datadog real-time plant metrics, and archives the combined dashboard snapshot in SharePoint for management review."
  tags:
    - manufacturing
    - sap-bw
    - datadog
    - sharepoint
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: production-kpi
      port: 8080
      tools:
        - name: compile-kpi-dashboard
          description: "Retrieve SAP BW KPIs, correlate with live metrics, and archive dashboard snapshot."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: period
              in: body
              type: string
              description: "Reporting period in YYYY-MM format."
          steps:
            - name: get-kpis
              type: call
              call: "sap-bw.get-production-kpis"
              with:
                plant_code: "{{plant_code}}"
                period: "{{period}}"
            - name: get-live-metrics
              type: call
              call: "datadog.get-plant-metrics"
              with:
                plant_tag: "{{plant_code}}"
            - name: archive-dashboard
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "plant_ops_site"
                file_path: "KPIDashboards/{{plant_code}}/{{period}}_dashboard.json"
  consumes:
    - type: http
      namespace: sap-bw
      baseUri: "https://dow-bw.sap.com/sap/opu/odata/sap/BW_PROD_KPI_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: kpis
          path: "/ProductionKPIs?$filter=Plant eq '{{plant_code}}' and Period eq '{{period}}'"
          inputParameters:
            - name: plant_code
              in: query
            - name: period
              in: query
          operations:
            - name: get-production-kpis
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: plant-metrics
          path: "/query?query=avg:plant.*{plant:{{plant_tag}}}"
          inputParameters:
            - name: plant_tag
              in: query
          operations:
            - name: get-plant-metrics
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Generates compliance reports at Dow from Snowflake, Power BI, and email.

naftiko: "0.5"
info:
  label: "Quarterly Compliance Report Pipeline"
  description: "Generates compliance reports at Dow from Snowflake, Power BI, and email."
  tags:
    - compliance
    - reporting
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: compliance-rpt
      port: 8080
      tools:
        - name: gen-report
          description: "Generate compliance reports at Dow."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter."
            - name: type
              in: body
              type: string
              description: "Type."
          steps:
            - name: data
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
            - name: metrics
              type: call
              call: "analytics.compute"
              with:
                data: "{{data.results}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "compliance"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "compliance@co.com"
                subject: "{{type}} - {{quarter}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://dow.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: metrics
          path: "/compute"
          operations:
            - name: compute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

When Oracle EBS inventory drops below reorder point, checks Bloomberg commodity pricing, creates a SAP purchase requisition, and notifies procurement via ServiceNow.

naftiko: "0.5"
info:
  label: "Raw Material Reorder Orchestrator"
  description: "When Oracle EBS inventory drops below reorder point, checks Bloomberg commodity pricing, creates a SAP purchase requisition, and notifies procurement via ServiceNow."
  tags:
    - supply-chain
    - oracle-ebs
    - sap
    - bloomberg
    - servicenow
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: reorder-automation
      port: 8080
      tools:
        - name: trigger-material-reorder
          description: "Given a material item and site, check inventory, get current commodity price, create a purchase requisition in SAP, and notify procurement."
          inputParameters:
            - name: item_number
              in: body
              type: string
              description: "The Oracle item number for the raw material."
            - name: site_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: reorder_quantity
              in: body
              type: number
              description: "The quantity to reorder."
            - name: commodity_ticker
              in: body
              type: string
              description: "Bloomberg ticker for the commodity."
          steps:
            - name: check-inventory
              type: call
              call: "oracle-ebs.get-inventory"
              with:
                item_number: "{{item_number}}"
                site_code: "{{site_code}}"
            - name: get-price
              type: call
              call: "bloomberg.get-price"
              with:
                ticker: "{{commodity_ticker}}"
            - name: create-pr
              type: call
              call: "sap.create-purchase-requisition"
              with:
                material: "{{item_number}}"
                plant: "{{site_code}}"
                quantity: "{{reorder_quantity}}"
                estimated_price: "{{get-price.price}}"
            - name: notify-procurement
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Reorder: {{item_number}} at {{site_code}} — PR {{create-pr.pr_number}}"
                description: "Inventory at {{check-inventory.on_hand_qty}} {{check-inventory.uom}}. Market price: {{get-price.price}} {{get-price.currency}}/unit. PR created for {{reorder_quantity}} units."
                assigned_group: "Procurement_Team"
                category: "material_reorder"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: on-hand
          path: "/onhand?item={{item_number}}&org={{site_code}}"
          inputParameters:
            - name: item_number
              in: query
            - name: site_code
              in: query
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: prices
          path: "/prices?ticker={{ticker}}"
          inputParameters:
            - name: ticker
              in: query
          operations:
            - name: get-price
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-purchase-requisition
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Creates a new experiment record in PostgreSQL, provisions a SharePoint folder for lab notebooks, logs the experiment in SAP R&D project, and notifies the research team via HubSpot.

naftiko: "0.5"
info:
  label: "R&D Experiment Tracking Pipeline"
  description: "Creates a new experiment record in PostgreSQL, provisions a SharePoint folder for lab notebooks, logs the experiment in SAP R&D project, and notifies the research team via HubSpot."
  tags:
    - rnd
    - postgresql
    - sharepoint
    - sap
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: experiment-tracking
      port: 8080
      tools:
        - name: create-experiment
          description: "Given experiment details, create records across lab database, SharePoint, SAP, and notify the team."
          inputParameters:
            - name: experiment_name
              in: body
              type: string
              description: "Name of the new experiment."
            - name: project_id
              in: body
              type: string
              description: "SAP R&D project ID."
            - name: lead_researcher_email
              in: body
              type: string
              description: "Email of the lead researcher."
            - name: material_class
              in: body
              type: string
              description: "Chemical material class being researched."
          steps:
            - name: create-lab-record
              type: call
              call: "postgresql.create-experiment"
              with:
                name: "{{experiment_name}}"
                project_id: "{{project_id}}"
                material_class: "{{material_class}}"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "rnd_lab_site"
                folder_path: "Experiments/{{project_id}}/{{create-lab-record.experiment_id}}"
            - name: log-in-sap
              type: call
              call: "sap.create-rnd-activity"
              with:
                project_id: "{{project_id}}"
                activity_name: "{{experiment_name}}"
                experiment_id: "{{create-lab-record.experiment_id}}"
            - name: notify-team
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{lead_researcher_email}}"
                subject: "New Experiment: {{experiment_name}}"
                body: "Experiment {{create-lab-record.experiment_id}} created for project {{project_id}}. Lab notebook folder: {{provision-folder.url}}. SAP activity: {{log-in-sap.activity_id}}."
  consumes:
    - type: http
      namespace: postgresql
      baseUri: "https://dow-lab-api.internal.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lab_db_token"
      resources:
        - name: experiments
          path: "/experiments"
          operations:
            - name: create-experiment
              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: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: activities
          path: "/A_ProjectActivity"
          operations:
            - name: create-rnd-activity
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Fetches active Datadog alerts for a reactor, retrieves the current process order from SAP, and creates a prioritized ServiceNow incident for plant operations triage.

naftiko: "0.5"
info:
  label: "Reactor Alert Triage Pipeline"
  description: "Fetches active Datadog alerts for a reactor, retrieves the current process order from SAP, and creates a prioritized ServiceNow incident for plant operations triage."
  tags:
    - monitoring
    - datadog
    - sap
    - servicenow
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: reactor-monitoring
      port: 8080
      tools:
        - name: triage-reactor-alerts
          description: "Retrieve Datadog alerts for a reactor, gather SAP context, and create a triage incident."
          inputParameters:
            - name: reactor_id
              in: body
              type: string
              description: "The reactor unit identifier tag in Datadog."
          steps:
            - name: get-alerts
              type: call
              call: "datadog.get-alerts"
              with:
                reactor_id: "{{reactor_id}}"
            - name: get-process-order
              type: call
              call: "sap.get-process-order"
              with:
                reactor_id: "{{reactor_id}}"
            - name: create-triage-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Reactor {{reactor_id}} alert triage — {{get-alerts.count}} active alerts"
                description: "Active alerts: {{get-alerts.count}}. Current process order: {{get-process-order.order_number}}. Material: {{get-process-order.material}}."
                severity: "2"
                assigned_group: "Plant_Operations"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor?monitor_tags=reactor:{{reactor_id}}"
          inputParameters:
            - name: reactor_id
              in: query
          operations:
            - name: get-alerts
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROCESS_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: process-orders
          path: "/A_ProcessOrder?$filter=Reactor eq '{{reactor_id}}'"
          inputParameters:
            - name: reactor_id
              in: query
          operations:
            - name: get-process-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.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

When Datadog detects a reactor temperature anomaly, retrieves process parameters from SAP, checks operator certifications in Workday, and creates a prioritized ServiceNow incident.

naftiko: "0.5"
info:
  label: "Reactor Anomaly Detection and Escalation"
  description: "When Datadog detects a reactor temperature anomaly, retrieves process parameters from SAP, checks operator certifications in Workday, and creates a prioritized ServiceNow incident."
  tags:
    - manufacturing
    - safety
    - datadog
    - sap
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: reactor-anomaly
      port: 8080
      tools:
        - name: escalate-reactor-anomaly
          description: "Given a reactor ID and anomaly type, gather process context and escalate via ServiceNow."
          inputParameters:
            - name: reactor_id
              in: body
              type: string
              description: "The reactor unit identifier."
            - name: anomaly_type
              in: body
              type: string
              description: "Type of anomaly detected (temperature, pressure, flow)."
            - name: operator_id
              in: body
              type: string
              description: "Workday ID of the current shift operator."
          steps:
            - name: get-reactor-data
              type: call
              call: "datadog.get-reactor-metrics"
              with:
                reactor_id: "{{reactor_id}}"
            - name: get-process-params
              type: call
              call: "sap.get-process-order"
              with:
                reactor_id: "{{reactor_id}}"
            - name: get-operator
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{operator_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Reactor {{reactor_id}} anomaly: {{anomaly_type}}"
                severity: "2"
                description: "Anomaly detected on reactor {{reactor_id}}. Current process order: {{get-process-params.order_number}}. Operator: {{get-operator.full_name}}. Metrics: temp={{get-reactor-data.temperature}}, pressure={{get-reactor-data.pressure}}."
                assigned_group: "Plant_Operations"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: reactor-metrics
          path: "/query?query=avg:reactor.*{reactor:{{reactor_id}}}"
          inputParameters:
            - name: reactor_id
              in: query
          operations:
            - name: get-reactor-metrics
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROCESS_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: process-orders
          path: "/A_ProcessOrder?$filter=Reactor eq '{{reactor_id}}'"
          inputParameters:
            - name: reactor_id
              in: query
          operations:
            - name: get-process-order
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks Redis at Dow.

naftiko: "0.5"
info:
  label: "Redis Cache Status"
  description: "Checks Redis at Dow."
  tags:
    - caching
    - redis
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: redis
      port: 8080
      tools:
        - name: check-cache
          description: "Check Redis at Dow."
          inputParameters:
            - name: instance
              in: body
              type: string
              description: "Instance ID."
          call: "redis.get-info"
          with:
            instance: "{{instance}}"
          outputParameters:
            - name: memory
              type: string
              mapping: "$.used_memory_human"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://redis.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: instances
          path: "/instances/{{instance}}/info"
          inputParameters:
            - name: instance
              in: path
          operations:
            - name: get-info
              method: GET

Prepares for a regulatory audit by collecting SAP EHS compliance records, retrieving training completion from Pluralsight, gathering open ServiceNow safety incidents, and compiling an audit package in SharePoint.

naftiko: "0.5"
info:
  label: "Regulatory Audit Preparation Pipeline"
  description: "Prepares for a regulatory audit by collecting SAP EHS compliance records, retrieving training completion from Pluralsight, gathering open ServiceNow safety incidents, and compiling an audit package in SharePoint."
  tags:
    - compliance
    - sap
    - pluralsight
    - servicenow
    - sharepoint
    - environmental
capability:
  exposes:
    - type: mcp
      namespace: audit-prep
      port: 8080
      tools:
        - name: prepare-audit-package
          description: "Given a plant code and audit type, compile compliance records into an audit-ready package."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: audit_type
              in: body
              type: string
              description: "Type of audit (EPA, OSHA, ISO)."
            - name: audit_date
              in: body
              type: string
              description: "Scheduled audit date in YYYY-MM-DD format."
          steps:
            - name: get-ehs-records
              type: call
              call: "sap.get-ehs-compliance-records"
              with:
                plant: "{{plant_code}}"
                audit_type: "{{audit_type}}"
            - name: get-training-records
              type: call
              call: "pluralsight.get-team-completions"
              with:
                team_tag: "plant_{{plant_code}}"
            - name: get-open-incidents
              type: call
              call: "servicenow.get-open-incidents"
              with:
                plant_code: "{{plant_code}}"
            - name: compile-package
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "regulatory_audit_site"
                file_path: "AuditPackages/{{plant_code}}/{{audit_type}}_{{audit_date}}.json"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_COMPLIANCE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: compliance-records
          path: "/A_ComplianceRecord?$filter=Plant eq '{{plant}}' and AuditType eq '{{audit_type}}'"
          inputParameters:
            - name: plant
              in: query
            - name: audit_type
              in: query
          operations:
            - name: get-ehs-compliance-records
              method: GET
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: team-completions
          path: "/teams/{{team_tag}}/course-completions"
          inputParameters:
            - name: team_tag
              in: path
          operations:
            - name: get-team-completions
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=u_plant_code={{plant_code}}^active=true"
          inputParameters:
            - name: plant_code
              in: query
          operations:
            - name: get-open-incidents
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Fetches a regulatory document from SharePoint, validates the permit status against SAP EHS records, and creates a ServiceNow review task if the permit is nearing expiration.

naftiko: "0.5"
info:
  label: "Regulatory Document Review Pipeline"
  description: "Fetches a regulatory document from SharePoint, validates the permit status against SAP EHS records, and creates a ServiceNow review task if the permit is nearing expiration."
  tags:
    - compliance
    - sharepoint
    - sap
    - servicenow
    - environmental
capability:
  exposes:
    - type: mcp
      namespace: regulatory-docs
      port: 8080
      tools:
        - name: review-regulatory-document
          description: "Fetch a regulatory document, check permit expiry in SAP EHS, and create review task if needed."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site identifier."
            - name: document_path
              in: body
              type: string
              description: "Path to the document within the site drive."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code for permit lookup."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document"
              with:
                site_id: "{{site_id}}"
                document_path: "{{document_path}}"
            - name: check-permit
              type: call
              call: "sap.get-ehs-permits"
              with:
                plant: "{{plant_code}}"
            - name: create-review-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Permit review: {{document_path}} at {{plant_code}}"
                description: "Document retrieved from SharePoint. Active permits: {{check-permit.permit_count}}. Next expiry: {{check-permit.nearest_expiry}}."
                assigned_group: "EHS_Compliance"
                category: "permit_review"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{document_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: document_path
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_PERMIT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: permits
          path: "/A_EHSPermit?$filter=Plant eq '{{plant}}'"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-ehs-permits
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Checks release readiness at Dow.

naftiko: "0.5"
info:
  label: "Release Readiness Pipeline"
  description: "Checks release readiness at Dow."
  tags:
    - release-management
    - devops
    - quality
capability:
  exposes:
    - type: mcp
      namespace: release-ready
      port: 8080
      tools:
        - name: check-release
          description: "Check release at Dow."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Release ID."
            - name: project
              in: body
              type: string
              description: "Project."
          steps:
            - name: tests
              type: call
              call: "azdo.get-tests"
              with:
                project: "{{project}}"
                release: "{{release_id}}"
            - name: quality
              type: call
              call: "sonarqube.get-gate"
              with:
                project: "{{project}}"
            - name: security
              type: call
              call: "security.get-scan"
              with:
                project: "{{project}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Release - {{release_id}}"
                body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/dow.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: tests
          path: "/{{project}}/_apis/test/runs"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: get-tests
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.dow.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality
          path: "/qualitygates/project_status"
          operations:
            - name: get-gate
              method: GET
    - type: http
      namespace: security
      baseUri: "https://security.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: scans
          path: "/results"
          operations:
            - name: get-scan
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://dow.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

On a safety incident report, creates a ServiceNow incident, notifies the plant safety manager via SharePoint site, logs the event in SAP EHS, and sends alerts to the responsible team in LinkedIn (Workplace).

naftiko: "0.5"
info:
  label: "Safety Incident Response Orchestrator"
  description: "On a safety incident report, creates a ServiceNow incident, notifies the plant safety manager via SharePoint site, logs the event in SAP EHS, and sends alerts to the responsible team in LinkedIn (Workplace)."
  tags:
    - safety
    - servicenow
    - sap
    - sharepoint
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: safety-response
      port: 8080
      tools:
        - name: trigger-safety-response
          description: "Given incident details, orchestrate safety incident response across ServiceNow, SAP EHS, SharePoint, and team notifications."
          inputParameters:
            - name: incident_type
              in: body
              type: string
              description: "Type of safety incident (e.g., spill, exposure, equipment_failure)."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code where the incident occurred."
            - name: description
              in: body
              type: string
              description: "Detailed description of the incident."
            - name: severity
              in: body
              type: string
              description: "Severity level: low, medium, high, critical."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-safety-incident"
              with:
                short_description: "Safety Incident at {{plant_code}}: {{incident_type}}"
                severity: "{{severity}}"
                description: "{{description}}"
                category: "ehs_incident"
            - name: log-sap-ehs
              type: call
              call: "sap.create-ehs-event"
              with:
                plant: "{{plant_code}}"
                event_type: "{{incident_type}}"
                severity: "{{severity}}"
                description: "{{description}}"
            - name: upload-report
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "ehs_incidents_site"
                folder_path: "Incidents/{{plant_code}}/{{create-incident.number}}"
            - name: notify-safety-team
              type: call
              call: "servicenow.update-incident"
              with:
                incident_id: "{{create-incident.sys_id}}"
                work_notes: "SAP EHS event {{log-sap-ehs.event_id}} created. SharePoint folder: {{upload-report.url}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: safety-incidents
          path: "/table/u_safety_incident"
          operations:
            - name: create-safety-incident
              method: POST
        - name: incidents
          path: "/table/u_safety_incident/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: update-incident
              method: PATCH
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_INCIDENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: ehs-events
          path: "/A_IncidentHeader"
          operations:
            - name: create-ehs-event
              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

Retrieves a safety incident from ServiceNow, pulls the assigned investigator details from Workday, and archives the incident summary to the EHS SharePoint compliance library.

naftiko: "0.5"
info:
  label: "Safety Incident Review Pipeline"
  description: "Retrieves a safety incident from ServiceNow, pulls the assigned investigator details from Workday, and archives the incident summary to the EHS SharePoint compliance library."
  tags:
    - safety
    - servicenow
    - workday
    - sharepoint
    - ehs
capability:
  exposes:
    - type: mcp
      namespace: safety-incidents
      port: 8080
      tools:
        - name: review-safety-incident
          description: "Look up a safety incident, enrich with investigator details, and archive to SharePoint."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow safety incident number."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-safety-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: get-investigator
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-incident.assigned_to}}"
            - name: archive-summary
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "ehs_compliance_site"
                file_path: "IncidentReviews/{{incident_number}}_review.json"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: safety-incidents
          path: "/table/u_safety_incident/{{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-safety-incident
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Checks SAP PO at Dow.

naftiko: "0.5"
info:
  label: "SAP PO Check"
  description: "Checks SAP PO at Dow."
  tags:
    - procurement
    - sap
    - purchase-orders
capability:
  exposes:
    - type: mcp
      namespace: sap-po
      port: 8080
      tools:
        - name: get-po
          description: "Check PO at Dow."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.order.vendor"
            - name: status
              type: string
              mapping: "$.order.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://sap.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Looks up a SAP S/4HANA production order by number, retrieves current reactor metrics from Datadog, and logs the combined status snapshot in SharePoint for shift supervisors.

naftiko: "0.5"
info:
  label: "SAP Production Order Status with Monitoring"
  description: "Looks up a SAP S/4HANA production order by number, retrieves current reactor metrics from Datadog, and logs the combined status snapshot in SharePoint for shift supervisors."
  tags:
    - manufacturing
    - erp
    - sap
    - datadog
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: mfg-orders
      port: 8080
      tools:
        - name: get-production-order-status
          description: "Look up a SAP production order, gather live reactor metrics, and archive a status snapshot."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The SAP production order number."
            - name: reactor_id
              in: body
              type: string
              description: "The reactor unit running this order."
          steps:
            - name: get-order
              type: call
              call: "sap.get-production-order"
              with:
                order_number: "{{order_number}}"
            - name: get-reactor-metrics
              type: call
              call: "datadog.get-reactor-metrics"
              with:
                reactor_id: "{{reactor_id}}"
            - name: archive-snapshot
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "plant_ops_site"
                file_path: "OrderSnapshots/{{order_number}}_snapshot.json"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROD_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
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: reactor-metrics
          path: "/query?query=avg:reactor.*{reactor:{{reactor_id}}}"
          inputParameters:
            - name: reactor_id
              in: query
          operations:
            - name: get-reactor-metrics
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Searches Elasticsearch for a safety data sheet, retrieves the SAP material hazard classification, and logs the compliance check in ServiceNow for regulatory audit trail.

naftiko: "0.5"
info:
  label: "SDS Lookup and Compliance Validation"
  description: "Searches Elasticsearch for a safety data sheet, retrieves the SAP material hazard classification, and logs the compliance check in ServiceNow for regulatory audit trail."
  tags:
    - safety
    - elasticsearch
    - sap
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sds-compliance
      port: 8080
      tools:
        - name: validate-sds-compliance
          description: "Search for an SDS, validate hazard classification against SAP, and log the check."
          inputParameters:
            - name: query_text
              in: body
              type: string
              description: "Product name or CAS number to search for."
            - name: material_number
              in: body
              type: string
              description: "SAP material number for hazard classification."
          steps:
            - name: search-sds
              type: call
              call: "elasticsearch.search-sds"
              with:
                query_text: "{{query_text}}"
            - name: get-hazard-class
              type: call
              call: "sap.get-material-hazard"
              with:
                material_number: "{{material_number}}"
            - name: log-check
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "SDS compliance check: {{query_text}}"
                description: "SDS found: {{search-sds.hit_count}} results. Material {{material_number}} hazard class: {{get-hazard-class.ghs_class}}. Signal words: {{get-hazard-class.signal_words}}."
                assigned_group: "EHS_Compliance"
                category: "sds_validation"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://dow-es.internal.dow.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: sds-index
          path: "/sds/_search"
          operations:
            - name: search-sds
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-hazard
          path: "/A_MaterialHazard('{{material_number}}')"
          inputParameters:
            - name: material_number
              in: path
          operations:
            - name: get-material-hazard
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST

Remediates vulnerabilities at Dow via scanning, Jira, and Slack.

naftiko: "0.5"
info:
  label: "Security Vulnerability Remediation Pipeline"
  description: "Remediates vulnerabilities at Dow via scanning, Jira, and Slack."
  tags:
    - security
    - vulnerability-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: vuln-fix
      port: 8080
      tools:
        - name: remediate
          description: "Fix vulnerabilities at Dow."
          inputParameters:
            - name: target
              in: body
              type: string
              description: "Target."
            - name: policy
              in: body
              type: string
              description: "Policy."
          steps:
            - name: scan
              type: call
              call: "qualys.scan"
              with:
                target: "{{target}}"
                policy: "{{policy}}"
            - name: prioritize
              type: call
              call: "security.prioritize"
              with:
                scan: "{{scan.id}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Vulns: {{prioritize.critical}} critical"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Scan: {{prioritize.critical}} critical"
  consumes:
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: scans
          path: "/fo/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: security
      baseUri: "https://security.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: vulns
          path: "/prioritize"
          operations:
            - name: prioritize
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://dow.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks IT incident in ServiceNow for Dow.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Detail Check"
  description: "Checks IT incident in ServiceNow for Dow."
  tags:
    - it-service
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: snow-incident
      port: 8080
      tools:
        - name: check-incident
          description: "Check incident at Dow."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Retrieves SharePoint metadata at Dow.

naftiko: "0.5"
info:
  label: "SharePoint File Metadata"
  description: "Retrieves SharePoint metadata at Dow."
  tags:
    - document-management
    - sharepoint
    - collaboration
capability:
  exposes:
    - type: mcp
      namespace: sp-docs
      port: 8080
      tools:
        - name: get-file
          description: "Look up file at Dow."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "Site ID."
            - name: file_path
              in: body
              type: string
              description: "Path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            path: "{{file_path}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: size
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: files
          path: "/sites/{{site_id}}/drive/root:/{{path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET

At shift change, collects Datadog plant status, SAP production order progress, open ServiceNow incidents, and compiles a handover report in SharePoint for the incoming shift.

naftiko: "0.5"
info:
  label: "Shift Handover Documentation Pipeline"
  description: "At shift change, collects Datadog plant status, SAP production order progress, open ServiceNow incidents, and compiles a handover report in SharePoint for the incoming shift."
  tags:
    - manufacturing
    - datadog
    - sap
    - servicenow
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: shift-handover
      port: 8080
      tools:
        - name: generate-shift-handover
          description: "Given a plant code and shift ID, compile handover report from monitoring, production, and incident systems."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: shift_id
              in: body
              type: string
              description: "The outgoing shift identifier."
            - name: shift_date
              in: body
              type: string
              description: "Shift date in YYYY-MM-DD format."
          steps:
            - name: get-plant-status
              type: call
              call: "datadog.get-plant-dashboard"
              with:
                plant_tag: "{{plant_code}}"
            - name: get-production-progress
              type: call
              call: "sap.get-active-orders"
              with:
                plant: "{{plant_code}}"
            - name: get-open-incidents
              type: call
              call: "servicenow.get-open-incidents"
              with:
                plant_code: "{{plant_code}}"
            - name: archive-handover
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "plant_ops_site"
                file_path: "ShiftHandovers/{{plant_code}}/{{shift_date}}_{{shift_id}}.json"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: dashboards
          path: "/dashboard?filter[tags]=plant:{{plant_tag}}"
          inputParameters:
            - name: plant_tag
              in: query
          operations:
            - name: get-plant-dashboard
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: active-orders
          path: "/A_ProductionOrder?$filter=Plant eq '{{plant}}' and Status eq 'REL'"
          inputParameters:
            - name: plant
              in: query
          operations:
            - name: get-active-orders
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=u_plant_code={{plant_code}}^active=true"
          inputParameters:
            - name: plant_code
              in: query
          operations:
            - name: get-open-incidents
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Monitors SLAs at Dow via Datadog and Slack.

naftiko: "0.5"
info:
  label: "SLA Monitoring Pipeline"
  description: "Monitors SLAs at Dow via Datadog and Slack."
  tags:
    - operations
    - sla
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sla-monitor
      port: 8080
      tools:
        - name: check-sla
          description: "Monitor SLAs at Dow."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Service."
            - name: target
              in: body
              type: number
              description: "SLA target %."
          steps:
            - name: metrics
              type: call
              call: "datadog.get-sla"
              with:
                service: "{{service}}"
            - name: check
              type: call
              call: "analytics.check-sla"
              with:
                uptime: "{{metrics.uptime}}"
                target: "{{target}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
            - name: log
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "SLA breach: {{service}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: get-sla
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Fetches SonarQube quality gate status for process control software, returning quality gate result, coverage percentage, and code smells count.

naftiko: "0.5"
info:
  label: "SonarQube Code Quality Gate for DCS Software"
  description: "Fetches SonarQube quality gate status for process control software, returning quality gate result, coverage percentage, and code smells count."
  tags:
    - devops
    - sonarqube
    - quality
capability:
  exposes:
    - type: mcp
      namespace: code-quality
      port: 8080
      tools:
        - name: get-quality-gate
          description: "Retrieve SonarQube quality gate status for a project key."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The SonarQube project key."
          call: "sonarqube.get-quality-gate"
          with:
            project_key: "{{project_key}}"
  consumes:
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.dow.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality-gates
          path: "/qualitygates/project_status?projectKey={{project_key}}"
          inputParameters:
            - name: project_key
              in: query
          operations:
            - name: get-quality-gate
              method: GET

Exports a process flow model from Sparx Enterprise Architect for a chemical manufacturing process, returning the model diagram and element list for documentation.

naftiko: "0.5"
info:
  label: "Sparx Enterprise Architect Model Export"
  description: "Exports a process flow model from Sparx Enterprise Architect for a chemical manufacturing process, returning the model diagram and element list for documentation."
  tags:
    - engineering
    - sparx-enterprise-architect
    - design
capability:
  exposes:
    - type: mcp
      namespace: ea-models
      port: 8080
      tools:
        - name: export-process-model
          description: "Export a Sparx Enterprise Architect process model by package GUID."
          inputParameters:
            - name: package_guid
              in: body
              type: string
              description: "The EA package GUID for the process model."
          call: "sparx-ea.export-package"
          with:
            package_guid: "{{package_guid}}"
  consumes:
    - type: http
      namespace: sparx-ea
      baseUri: "https://dow-ea.internal.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sparx_ea_token"
      resources:
        - name: packages
          path: "/packages/{{package_guid}}/export"
          inputParameters:
            - name: package_guid
              in: path
          operations:
            - name: export-package
              method: GET

Searches Splunk at Dow.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk at Dow."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: splunk-search
      port: 8080
      tools:
        - name: search-logs
          description: "Search logs at Dow."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "SPL query."
          call: "splunk.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.results.count"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.dow.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

When a supplier delivery delay is detected in Oracle EBS, checks SAP for alternative material sources, notifies the supply chain team via ServiceNow, and updates the Salesforce customer order with revised ETA.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Pipeline"
  description: "When a supplier delivery delay is detected in Oracle EBS, checks SAP for alternative material sources, notifies the supply chain team via ServiceNow, and updates the Salesforce customer order with revised ETA."
  tags:
    - supply-chain
    - oracle-ebs
    - sap
    - servicenow
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: supply-disruption
      port: 8080
      tools:
        - name: handle-supply-disruption
          description: "Given a delayed PO and affected customer order, find alternatives and notify stakeholders."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The delayed purchase order number in Oracle EBS."
            - name: customer_order_id
              in: body
              type: string
              description: "The affected Salesforce customer order ID."
            - name: new_eta
              in: body
              type: string
              description: "Revised estimated delivery date."
          steps:
            - name: get-po-details
              type: call
              call: "oracle-ebs.get-po"
              with:
                po_number: "{{po_number}}"
            - name: find-alternatives
              type: call
              call: "sap.search-material-sources"
              with:
                material: "{{get-po-details.item_number}}"
                plant: "{{get-po-details.ship_to_site}}"
            - name: notify-supply-chain
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Supply disruption: PO {{po_number}} delayed"
                description: "Material: {{get-po-details.item_number}}. Original ETA: {{get-po-details.delivery_date}}. New ETA: {{new_eta}}. Alternative sources: {{find-alternatives.source_count}} found."
                assigned_group: "Supply_Chain_Ops"
                category: "supply_disruption"
            - name: update-customer-order
              type: call
              call: "salesforce.update-order"
              with:
                order_id: "{{customer_order_id}}"
                delivery_date: "{{new_eta}}"
                status_note: "Supplier delay on PO {{po_number}}. Revised ETA: {{new_eta}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/purchasing/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: purchase-orders
          path: "/purchaseOrders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/MM_SOURCE_LIST_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: source-list
          path: "/A_SourceList?$filter=Material eq '{{material}}' and Plant eq '{{plant}}'"
          inputParameters:
            - name: material
              in: query
            - name: plant
              in: query
          operations:
            - name: search-material-sources
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://dow.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://dow.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Order/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-order
              method: PATCH

Aggregates sustainability KPIs from Datadog (energy usage), SAP EHS (waste volumes), Oracle EBS (water consumption), and compiles a quarterly ESG report in SharePoint.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Pipeline"
  description: "Aggregates sustainability KPIs from Datadog (energy usage), SAP EHS (waste volumes), Oracle EBS (water consumption), and compiles a quarterly ESG report in SharePoint."
  tags:
    - sustainability
    - environmental
    - datadog
    - sap
    - oracle-ebs
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: esg-reporting
      port: 8080
      tools:
        - name: compile-esg-report
          description: "Given a plant and quarter, aggregate sustainability metrics and archive the ESG report."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: quarter
              in: body
              type: string
              description: "Reporting quarter (e.g., 2026-Q1)."
          steps:
            - name: get-energy-data
              type: call
              call: "datadog.get-energy-metrics"
              with:
                plant_tag: "{{plant_code}}"
                quarter: "{{quarter}}"
            - name: get-waste-data
              type: call
              call: "sap.get-ehs-waste"
              with:
                plant: "{{plant_code}}"
                quarter: "{{quarter}}"
            - name: get-water-data
              type: call
              call: "oracle-ebs.get-water-consumption"
              with:
                site_code: "{{plant_code}}"
                quarter: "{{quarter}}"
            - name: archive-report
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "sustainability_site"
                file_path: "ESGReports/{{plant_code}}/{{quarter}}_esg_report.json"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: energy-metrics
          path: "/query?query=avg:energy.*{plant:{{plant_tag}}}&period={{quarter}}"
          inputParameters:
            - name: plant_tag
              in: query
            - name: quarter
              in: query
          operations:
            - name: get-energy-metrics
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_WASTE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: waste
          path: "/A_WasteVolume?$filter=Plant eq '{{plant}}' and Quarter eq '{{quarter}}'"
          inputParameters:
            - name: plant
              in: query
            - name: quarter
              in: query
          operations:
            - name: get-ehs-waste
              method: GET
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/utilities/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: water
          path: "/waterConsumption?site={{site_code}}&quarter={{quarter}}"
          inputParameters:
            - name: site_code
              in: query
            - name: quarter
              in: query
          operations:
            - name: get-water-consumption
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Retrieves Teams activity at Dow.

naftiko: "0.5"
info:
  label: "Teams Channel Activity"
  description: "Retrieves Teams activity at Dow."
  tags:
    - communications
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: teams-activity
      port: 8080
      tools:
        - name: get-activity
          description: "Check Teams activity at Dow."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Team ID."
            - name: channel_id
              in: body
              type: string
              description: "Channel ID."
          call: "teams.get-messages"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.value.length"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_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: get-messages
              method: GET

Retrieves inference metrics for a TensorFlow-based predictive maintenance model deployed via Kubeflow, returning accuracy, latency, and prediction drift indicators.

naftiko: "0.5"
info:
  label: "TensorFlow Model Performance Check"
  description: "Retrieves inference metrics for a TensorFlow-based predictive maintenance model deployed via Kubeflow, returning accuracy, latency, and prediction drift indicators."
  tags:
    - rnd
    - tensorflow
    - kubeflow
    - machine-learning
capability:
  exposes:
    - type: mcp
      namespace: ml-model-health
      port: 8080
      tools:
        - name: get-model-metrics
          description: "Retrieve Kubeflow serving metrics for a TensorFlow predictive maintenance model."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "The deployed model name in Kubeflow."
          call: "kubeflow.get-model-metrics"
          with:
            model_name: "{{model_name}}"
  consumes:
    - type: http
      namespace: kubeflow
      baseUri: "https://kubeflow.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kubeflow_token"
      resources:
        - name: model-metrics
          path: "/models/{{model_name}}/metrics"
          inputParameters:
            - name: model_name
              in: path
          operations:
            - name: get-model-metrics
              method: GET

Checks Terraform workspace at Dow.

naftiko: "0.5"
info:
  label: "Terraform Workspace Check"
  description: "Checks Terraform workspace at Dow."
  tags:
    - infrastructure
    - terraform
    - iac
capability:
  exposes:
    - type: mcp
      namespace: tf-ws
      port: 8080
      tools:
        - name: check-ws
          description: "Check workspace at Dow."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Workspace ID."
          call: "terraform.get-ws"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.data.attributes.name"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces/{{workspace_id}}"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-ws
              method: GET

Checks Vault secret at Dow.

naftiko: "0.5"
info:
  label: "Vault Secret Metadata"
  description: "Checks Vault secret at Dow."
  tags:
    - security
    - vault
    - secrets-management
capability:
  exposes:
    - type: mcp
      namespace: vault
      port: 8080
      tools:
        - name: check-secret
          description: "Check secret at Dow."
          inputParameters:
            - name: path
              in: body
              type: string
              description: "Secret path."
          call: "vault.get-metadata"
          with:
            path: "{{path}}"
          outputParameters:
            - name: version
              type: number
              mapping: "$.data.current_version"
  consumes:
    - type: http
      namespace: vault
      baseUri: "https://vault.dow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.vault_token"
      resources:
        - name: secrets
          path: "/secret/metadata/{{path}}"
          inputParameters:
            - name: path
              in: path
          operations:
            - name: get-metadata
              method: GET

Processes invoices at Dow via OCR, SAP matching, approval, and Oracle recording.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "Processes invoices at Dow via OCR, SAP matching, approval, and Oracle recording."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: invoice-proc
      port: 8080
      tools:
        - name: process-invoice
          description: "Process invoices at Dow."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "Invoice ID."
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
          steps:
            - name: extract
              type: call
              call: "ocr.extract"
              with:
                doc: "{{invoice_id}}"
            - name: match
              type: call
              call: "sap.match-po"
              with:
                vendor: "{{vendor_id}}"
                amount: "{{extract.total}}"
            - name: approve
              type: call
              call: "workflow.submit"
              with:
                invoice: "{{invoice_id}}"
            - name: record
              type: call
              call: "oracle.create-payment"
              with:
                invoice: "{{invoice_id}}"
  consumes:
    - type: http
      namespace: ocr
      baseUri: "https://ocr.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ocr_token"
      resources:
        - name: invoices
          path: "/extract"
          operations:
            - name: extract
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://sap.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pos
          path: "/match"
          operations:
            - name: match-po
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: approvals
          path: "/submit"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: create-payment
              method: POST

Pulls vendor delivery data from Oracle EBS, quality metrics from SAP QM, and financial data from SAP BW, then creates a vendor scorecard report in SharePoint.

naftiko: "0.5"
info:
  label: "Vendor Performance Scorecard Generator"
  description: "Pulls vendor delivery data from Oracle EBS, quality metrics from SAP QM, and financial data from SAP BW, then creates a vendor scorecard report in SharePoint."
  tags:
    - procurement
    - oracle-ebs
    - sap
    - sap-bw
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: vendor-scorecard
      port: 8080
      tools:
        - name: generate-vendor-scorecard
          description: "Given a vendor ID and review period, compile performance data and archive scorecard to SharePoint."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor identifier in Oracle EBS."
            - name: period
              in: body
              type: string
              description: "Review period in YYYY-MM format."
          steps:
            - name: get-delivery-metrics
              type: call
              call: "oracle-ebs.get-vendor-deliveries"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: get-quality-metrics
              type: call
              call: "sap.get-vendor-quality"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: get-spend-data
              type: call
              call: "sap-bw.get-vendor-spend"
              with:
                vendor_id: "{{vendor_id}}"
                period: "{{period}}"
            - name: archive-scorecard
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "procurement_site"
                file_path: "VendorScorecards/{{vendor_id}}/{{period}}_scorecard.json"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://dow-ebs.oracle.com/webservices/rest/purchasing/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: vendor-deliveries
          path: "/vendorDeliveries?vendor={{vendor_id}}&period={{period}}"
          inputParameters:
            - name: vendor_id
              in: query
            - name: period
              in: query
          operations:
            - name: get-vendor-deliveries
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/QM_VENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendor-quality
          path: "/A_VendorQuality?$filter=Vendor eq '{{vendor_id}}' and Period eq '{{period}}'"
          inputParameters:
            - name: vendor_id
              in: query
            - name: period
              in: query
          operations:
            - name: get-vendor-quality
              method: GET
    - type: http
      namespace: sap-bw
      baseUri: "https://dow-bw.sap.com/sap/opu/odata/sap/BW_SPEND_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: vendor-spend
          path: "/VendorSpend?$filter=Vendor eq '{{vendor_id}}' and Period eq '{{period}}'"
          inputParameters:
            - name: vendor_id
              in: query
            - name: period
              in: query
          operations:
            - name: get-vendor-spend
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT

Reviews vendors at Dow.

naftiko: "0.5"
info:
  label: "Quarterly Vendor Review Pipeline"
  description: "Reviews vendors at Dow."
  tags:
    - procurement
    - vendor-management
    - review
capability:
  exposes:
    - type: mcp
      namespace: vendor-review
      port: 8080
      tools:
        - name: review-vendor
          description: "Review vendors at Dow."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
            - name: quarter
              in: body
              type: string
              description: "Quarter."
          steps:
            - name: perf
              type: call
              call: "procurement.get-metrics"
              with:
                vendor: "{{vendor_id}}"
                q: "{{quarter}}"
            - name: scorecard
              type: call
              call: "analytics.scorecard"
              with:
                data: "{{perf.data}}"
            - name: invite
              type: call
              call: "email.send"
              with:
                to: "{{perf.contact}}"
                subject: "QBR - {{quarter}}"
            - name: schedule
              type: call
              call: "calendar.create-event"
              with:
                title: "QBR - {{perf.name}}"
  consumes:
    - type: http
      namespace: procurement
      baseUri: "https://procurement.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_token"
      resources:
        - name: vendors
          path: "/vendors/{{vendor}}/metrics"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: scorecards
          path: "/compute"
          operations:
            - name: scorecard
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/proc/events"
          operations:
            - name: create-event
              method: POST

Creates a hazardous waste manifest in SAP EHS, schedules disposal pickup via ServiceNow, updates the environmental compliance tracker in SharePoint, and notifies the EHS coordinator via HubSpot.

naftiko: "0.5"
info:
  label: "Waste Manifest and Disposal Tracking Pipeline"
  description: "Creates a hazardous waste manifest in SAP EHS, schedules disposal pickup via ServiceNow, updates the environmental compliance tracker in SharePoint, and notifies the EHS coordinator via HubSpot."
  tags:
    - environmental
    - safety
    - sap
    - servicenow
    - sharepoint
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: waste-disposal
      port: 8080
      tools:
        - name: process-waste-manifest
          description: "Given waste details and plant info, create manifest, schedule disposal, and update compliance records."
          inputParameters:
            - name: waste_type
              in: body
              type: string
              description: "Hazardous waste classification code."
            - name: quantity_kg
              in: body
              type: number
              description: "Waste quantity in kilograms."
            - name: plant_code
              in: body
              type: string
              description: "The Dow plant site code."
            - name: ehs_coordinator_email
              in: body
              type: string
              description: "Email of the EHS coordinator."
          steps:
            - name: create-manifest
              type: call
              call: "sap.create-waste-manifest"
              with:
                waste_type: "{{waste_type}}"
                quantity: "{{quantity_kg}}"
                plant: "{{plant_code}}"
            - name: schedule-pickup
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Hazardous waste pickup: {{waste_type}} at {{plant_code}}"
                description: "Manifest: {{create-manifest.manifest_number}}. Quantity: {{quantity_kg}} kg. Classification: {{waste_type}}."
                assigned_group: "Waste_Management"
            - name: update-tracker
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "ehs_compliance_site"
                file_path: "WasteManifests/{{plant_code}}/{{create-manifest.manifest_number}}.json"
            - name: notify-coordinator
              type: call
              call: "hubspot.send-email"
              with:
                to_email: "{{ehs_coordinator_email}}"
                subject: "Waste Manifest Created: {{create-manifest.manifest_number}}"
                body: "Manifest {{create-manifest.manifest_number}} for {{quantity_kg}} kg of {{waste_type}} at plant {{plant_code}}. Pickup work order: {{schedule-pickup.number}}. Compliance record: {{update-tracker.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://dow-s4.sap.com/sap/opu/odata/sap/EHS_WASTE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: manifests
          path: "/A_WasteManifest"
          operations:
            - name: create-waste-manifest
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://dow.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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: emails
          path: "/marketing/v3/transactional/single-email/send"
          operations:
            - name: send-email
              method: POST

Queries Workday for an employee's active safety and compliance certifications, used to validate operator eligibility before assigning chemical plant shifts.

naftiko: "0.5"
info:
  label: "Workday Employee Certification Check"
  description: "Queries Workday for an employee's active safety and compliance certifications, used to validate operator eligibility before assigning chemical plant shifts."
  tags:
    - safety
    - workday
    - hr
capability:
  exposes:
    - type: mcp
      namespace: hr-certifications
      port: 8080
      tools:
        - name: get-employee-certifications
          description: "Retrieve active safety and compliance certifications for a Workday employee."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-certifications"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certifications
          path: "/workers/{{employee_id}}/certifications"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-certifications
              method: GET

Retrieves employee profile from Workday for Dow.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves employee profile from Workday for Dow."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: workday-profile
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up Dow employee in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Employee ID."
          call: "workday.get-worker"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.worker.name"
            - name: title
              type: string
              mapping: "$.worker.title"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5.dow.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET

Enriches a sales prospect record with ZoomInfo company data, returning industry classification, revenue, employee count, and key contacts for targeted chemical sales outreach.

naftiko: "0.5"
info:
  label: "ZoomInfo Prospect Enrichment for Chemical Sales"
  description: "Enriches a sales prospect record with ZoomInfo company data, returning industry classification, revenue, employee count, and key contacts for targeted chemical sales outreach."
  tags:
    - sales
    - zoominfo
    - crm
capability:
  exposes:
    - type: mcp
      namespace: prospect-enrichment
      port: 8080
      tools:
        - name: enrich-prospect
          description: "Enrich a prospect with ZoomInfo company and contact data."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "The prospect company name."
          call: "zoominfo.search-company"
          with:
            company_name: "{{company_name}}"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/company"
          operations:
            - name: search-company
              method: POST