Kellanova Capabilities

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

Sort
Expand

Retrieves a payroll summary from ADP for a given employee and pay period.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary Lookup"
  description: "Retrieves a payroll summary from ADP for a given employee and pay period."
  tags:
    - hr
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Look up payroll summary from ADP."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The ADP employee ID."
            - name: pay_period
              in: body
              type: string
              description: "The pay period identifier."
          call: "adp.get-payroll"
          with:
            employee_id: "{{employee_id}}"
            pay_period: "{{pay_period}}"
          outputParameters:
            - name: gross_pay
              type: string
              mapping: "$.payStatement.grossPayAmount"
            - name: net_pay
              type: string
              mapping: "$.payStatement.netPayAmount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: pay-statements
          path: "/workers/{{employee_id}}/pay-statements?payPeriod={{pay_period}}"
          inputParameters:
            - name: employee_id
              in: path
            - name: pay_period
              in: query
          operations:
            - name: get-payroll
              method: GET

Retrieves product innovation pipeline entries from Airtable.

naftiko: "0.5"
info:
  label: "Airtable Innovation Pipeline Lookup"
  description: "Retrieves product innovation pipeline entries from Airtable."
  tags:
    - product
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: airtable-innovation
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves product innovation pipeline entries from Airtable."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "airtable-innovation.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: airtable-innovation
      baseUri: "https://api.airtable.com/v0/appKellanova"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box.

naftiko: "0.5"
info:
  label: "Allergen Compliance Pipeline"
  description: "Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box."
  tags:
    - compliance
    - sap
    - google-sheets
    - box
capability:
  exposes:
    - type: mcp
      namespace: allergen-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Validates ingredients in SAP, checks allergen database, generates compliance report in Google Sheets, and archives in Box."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-sheets.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "box.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Annual Budget Planning Pipeline"
  description: "Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: annual-budget-planning-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Retrieves spend from SAP, builds forecasts in Snowflake, creates templates in Google Sheets, and submits via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves product launch project status from Asana.

naftiko: "0.5"
info:
  label: "Asana Product Launch Lookup"
  description: "Retrieves product launch project status from Asana."
  tags:
    - project-management
    - asana
capability:
  exposes:
    - type: mcp
      namespace: asana-launches
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves product launch project status from Asana."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "asana-launches.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: asana-launches
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves the latest build status from Azure DevOps for a given pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status from Azure DevOps for a given pipeline."
  tags:
    - devops
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: ci-cd
      port: 8080
      tools:
        - name: get-build-status
          description: "Get the latest build status from Azure DevOps."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline ID."
          call: "azuredevops.get-latest-build"
          with:
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/kellanova"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: builds
          path: "/_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: pipeline_id
              in: query
          operations:
            - name: get-latest-build
              method: GET

Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Batch Quality Hold Pipeline"
  description: "Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake."
  tags:
    - quality
    - sap
    - servicenow
    - slack
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: batch-quality-hold-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Places quality hold in SAP, creates ServiceNow incident, notifies quality team via Slack, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves an e-commerce order from BigCommerce by order ID, returning status, total, and shipping details.

naftiko: "0.5"
info:
  label: "BigCommerce Order Status Lookup"
  description: "Retrieves an e-commerce order from BigCommerce by order ID, returning status, total, and shipping details."
  tags:
    - e-commerce
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: ecommerce
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up a BigCommerce order by order ID."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
          call: "bigcommerce.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: total
              type: string
              mapping: "$.total_inc_tax"
            - name: shipping_method
              type: string
              mapping: "$.shipping_addresses[0].shipping_method"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

Archives a regulatory compliance document to Box in the appropriate folder.

naftiko: "0.5"
info:
  label: "Box Regulatory Document Archive"
  description: "Archives a regulatory compliance document to Box in the appropriate folder."
  tags:
    - compliance
    - box
capability:
  exposes:
    - type: mcp
      namespace: regulatory-docs
      port: 8080
      tools:
        - name: archive-document
          description: "Upload a regulatory document to the Box compliance archive."
          inputParameters:
            - name: file_name
              in: body
              type: string
              description: "The document file name."
            - name: folder_id
              in: body
              type: string
              description: "The Box target folder ID."
          call: "box.upload-file"
          with:
            folder_id: "{{folder_id}}"
            file_name: "{{file_name}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Pulls market data from Circana, analyzes in Snowflake, generates insights in Confluence, and shares via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Competitive Intelligence Pipeline"
  description: "Pulls market data from Circana, analyzes in Snowflake, generates insights in Confluence, and shares via Microsoft Teams."
  tags:
    - intelligence
    - circana
    - snowflake
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: competitive-intelligence-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls market data from Circana, analyzes in Snowflake, generates insights in Confluence, and shares via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "circana.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "confluence.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Searches Confluence for SOPs and knowledge base articles by keyword.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches Confluence for SOPs and knowledge base articles by keyword."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search Confluence for SOPs and knowledge base articles."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "confluence.search"
          with:
            cql: "type=page AND text~'{{keyword}}'"
          outputParameters:
            - name: results
              type: string
              mapping: "$.results"
            - name: total_size
              type: string
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://kellanova.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql={{cql}}"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search
              method: GET

Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Consumer Complaint Resolution Orchestrator"
  description: "Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake."
  tags:
    - quality
    - zendesk
    - jira
    - slack
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: consumer-complaint-resolution-orchestrator
      port: 8080
      tools:
        - name: execute
          description: "Escalates Zendesk ticket, creates Jira follow-up, notifies quality team via Slack, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "zendesk.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://api.zendesk.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a consumer complaint arrives in Zendesk, identifies the affected product batch in SAP, creates a quality investigation in ServiceNow, and notifies the quality team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Consumer Complaint Resolution Pipeline"
  description: "When a consumer complaint arrives in Zendesk, identifies the affected product batch in SAP, creates a quality investigation in ServiceNow, and notifies the quality team via Microsoft Teams."
  tags:
    - quality-control
    - customer-service
    - zendesk
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: complaint-resolution
      port: 8080
      tools:
        - name: investigate-complaint
          description: "Given a Zendesk ticket ID and product details, trace the batch, create an investigation, and notify QA."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: product_upc
              in: body
              type: string
              description: "The product UPC code."
            - name: batch_code
              in: body
              type: string
              description: "The batch code from the package."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: trace-batch
              type: call
              call: "sap.get-batch-details"
              with:
                batch_code: "{{batch_code}}"
                upc: "{{product_upc}}"
            - name: create-investigation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Consumer complaint investigation: {{get-ticket.subject}}"
                category: "quality"
                description: "Zendesk ticket: {{ticket_id}}. Product UPC: {{product_upc}}. Batch: {{batch_code}}. Plant: {{trace-batch.plant}}. Production date: {{trace-batch.production_date}}."
            - name: notify-qa
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-assurance"
                text: "Consumer complaint investigation: {{get-ticket.subject}}. Batch: {{batch_code}} from {{trace-batch.plant}}. ServiceNow: {{create-investigation.number}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://kellanova.zendesk.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.zendesk_user"
        password: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/Batches(BatchCode='{{batch_code}}',UPC='{{upc}}')"
          inputParameters:
            - name: batch_code
              in: path
            - name: upc
              in: path
          operations:
            - name: get-batch-details
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kellanova.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves content from SharePoint, translates via Azure, uploads to Google Drive, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Content Localization Pipeline"
  description: "Retrieves content from SharePoint, translates via Azure, uploads to Google Drive, and notifies via Microsoft Teams."
  tags:
    - localization
    - sharepoint
    - microsoft-azure
    - google-drive
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: content-localization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Retrieves content from SharePoint, translates via Azure, uploads to Google Drive, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sharepoint.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "microsoft-azure.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-drive.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-azure
      baseUri: "https://api.microsoftazure.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_azure_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-drive
      baseUri: "https://api.googledrive.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Contract Renewal Pipeline"
  description: "Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets."
  tags:
    - legal
    - salesforce
    - jira
    - microsoft-outlook
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: contract-renewal-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Queries expiring contracts from Salesforce, creates Jira tasks, sends reminders via Microsoft Outlook, and logs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-outlook.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Analyzes purchase data in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp.

naftiko: "0.5"
info:
  label: "Cross-Sell Recommendation Pipeline"
  description: "Analyzes purchase data in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp."
  tags:
    - e-commerce
    - snowflake
    - azure-machine-learning
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: cross-sell-recommendation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes purchase data in Snowflake, generates recommendations via Azure ML, syncs to Salesforce, and emails via MailChimp."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-machine-learning.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "mailchimp.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-machine-learning
      baseUri: "https://api.azuremachinelearning.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_machine_learning_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Customer Feedback Analysis Pipeline"
  description: "Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence."
  tags:
    - feedback
    - zendesk
    - azure-machine-learning
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: customer-feedback-analysis-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Collects feedback from Zendesk, analyzes via Azure ML, stores in Snowflake, and publishes to Confluence."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "zendesk.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-machine-learning.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "snowflake.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "confluence.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://api.zendesk.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-machine-learning
      baseUri: "https://api.azuremachinelearning.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_machine_learning_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake.

naftiko: "0.5"
info:
  label: "Customer Loyalty Pipeline"
  description: "Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake."
  tags:
    - loyalty
    - salesforce
    - stripe
    - mailchimp
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-loyalty-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Enrolls customer in Salesforce, provisions Stripe account, triggers MailChimp welcome, and logs in Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "stripe.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack.

naftiko: "0.5"
info:
  label: "Data Privacy Compliance Pipeline"
  description: "Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack."
  tags:
    - compliance
    - snowflake
    - google-sheets
    - sharepoint
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-privacy-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Audits data in Snowflake, generates compliance reports in Google Sheets, archives in SharePoint, and notifies legal via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-sheets.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "sharepoint.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls sales data from SAP BW, runs demand forecasting in Azure Databricks, updates inventory plans in SAP, and notifies the supply chain team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Demand Forecast Pipeline"
  description: "Pulls sales data from SAP BW, runs demand forecasting in Azure Databricks, updates inventory plans in SAP, and notifies the supply chain team via Microsoft Teams."
  tags:
    - supply-chain
    - forecasting
    - sap-bw
    - azure-databricks
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: demand-planning
      port: 8080
      tools:
        - name: run-demand-forecast
          description: "Given a product category and time horizon, generate demand forecasts and update inventory plans."
          inputParameters:
            - name: product_category
              in: body
              type: string
              description: "The product category (e.g., snacks, cereals, frozen)."
            - name: forecast_horizon_weeks
              in: body
              type: string
              description: "The forecast horizon in weeks."
            - name: region
              in: body
              type: string
              description: "The geographic region for the forecast."
          steps:
            - name: extract-sales
              type: call
              call: "sapbw.get-sales-data"
              with:
                category: "{{product_category}}"
                region: "{{region}}"
                weeks: "{{forecast_horizon_weeks}}"
            - name: run-forecast
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM demand_forecast('{{product_category}}', '{{region}}', {{forecast_horizon_weeks}})"
            - name: update-inventory
              type: call
              call: "sap.update-inventory-plan"
              with:
                category: "{{product_category}}"
                region: "{{region}}"
                forecast: "{{run-forecast.results}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply-chain-planning"
                text: "Demand forecast updated for {{product_category}} in {{region}} ({{forecast_horizon_weeks}}w horizon). Projected demand: {{run-forecast.total_units}}. Inventory plans updated."
  consumes:
    - type: http
      namespace: sapbw
      baseUri: "https://kellanova-bw.sap.com/sap/opu/odata/sap/BW_SALES_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-data
          path: "/SalesHistory?$filter=Category eq '{{category}}' and Region eq '{{region}}'"
          inputParameters:
            - name: category
              in: query
            - name: region
              in: query
          operations:
            - name: get-sales-data
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory-plans
          path: "/InventoryPlans"
          operations:
            - name: update-inventory-plan
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "Digital Marketing Campaign Pipeline"
  description: "Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets."
  tags:
    - marketing
    - hubspot
    - facebook
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: digital-marketing-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates campaign in HubSpot, sets up Facebook ads, tracks in Google Analytics, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "facebook.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-analytics.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves current inventory levels at a distribution center from SAP by material number and plant code.

naftiko: "0.5"
info:
  label: "Distribution Center Inventory Lookup"
  description: "Retrieves current inventory levels at a distribution center from SAP by material number and plant code."
  tags:
    - distribution
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-dc-inventory
          description: "Look up inventory levels at a distribution center in SAP."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: plant_code
              in: body
              type: string
              description: "The distribution center plant code."
          call: "sap.get-inventory"
          with:
            material: "{{material_number}}"
            plant: "{{plant_code}}"
          outputParameters:
            - name: available_quantity
              type: string
              mapping: "$.d.AvailableStock"
            - name: reserved_quantity
              type: string
              mapping: "$.d.ReservedStock"
            - name: unit_of_measure
              type: string
              mapping: "$.d.BaseUnit"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/MaterialStock(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-inventory
              method: GET

Retrieves the status of a DocuSign supplier agreement envelope.

naftiko: "0.5"
info:
  label: "DocuSign Supplier Agreement Lookup"
  description: "Retrieves the status of a DocuSign supplier agreement envelope."
  tags:
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: docusign-agreements
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves the status of a DocuSign supplier agreement envelope."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "docusign-agreements.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: docusign-agreements
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/kellanova"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves application performance metrics from Dynatrace for a given service.

naftiko: "0.5"
info:
  label: "Dynatrace Application Health Check"
  description: "Retrieves application performance metrics from Dynatrace for a given service."
  tags:
    - monitoring
    - dynatrace
capability:
  exposes:
    - type: mcp
      namespace: app-monitoring
      port: 8080
      tools:
        - name: get-app-health
          description: "Retrieve application health metrics from Dynatrace."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Dynatrace service name."
          call: "dynatrace.get-service-metrics"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.result[0].data[0].values[0]"
            - name: error_rate
              type: string
              mapping: "$.result[1].data[0].values[0]"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://kellanova.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate&entitySelector=type(SERVICE),entityName({{service_name}})"
          inputParameters:
            - name: service_name
              in: query
          operations:
            - name: get-service-metrics
              method: GET

When a BigCommerce order is placed, creates a delivery in SAP, updates the order status in BigCommerce, and sends a shipping confirmation via MailChimp.

naftiko: "0.5"
info:
  label: "E-Commerce Order Fulfillment Pipeline"
  description: "When a BigCommerce order is placed, creates a delivery in SAP, updates the order status in BigCommerce, and sends a shipping confirmation via MailChimp."
  tags:
    - e-commerce
    - fulfillment
    - bigcommerce
    - sap
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: fulfill-order
          description: "Given an order ID, create a delivery, update status, and send shipping confirmation."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
          steps:
            - name: get-order
              type: call
              call: "bigcommerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-delivery
              type: call
              call: "sap.create-delivery"
              with:
                order_id: "{{order_id}}"
                items: "{{get-order.products}}"
                shipping_address: "{{get-order.shipping_addresses}}"
            - name: update-status
              type: call
              call: "bigcommerce.update-order-status"
              with:
                order_id: "{{order_id}}"
                status: "shipped"
                tracking_number: "{{create-delivery.tracking_number}}"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template: "shipping-confirmation"
                recipient_email: "{{customer_email}}"
                tracking_number: "{{create-delivery.tracking_number}}"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
            - name: update-order-status
              method: PUT
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/SD_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/Deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box."
  tags:
    - hr
    - workday
    - azure-active-directory
    - servicenow
    - box
capability:
  exposes:
    - type: mcp
      namespace: employee-offboarding-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Deactivates Workday profile, revokes Azure AD access, creates ServiceNow ticket, and archives in Box."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "azure-active-directory.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "servicenow.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "box.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-active-directory
      baseUri: "https://api.azureactivedirectory.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_active_directory_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.

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

Enrolls employees from Workday, provisions in Stripe, sends welcome via MailChimp, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Employee Wellness Program Pipeline"
  description: "Enrolls employees from Workday, provisions in Stripe, sends welcome via MailChimp, and tracks in Google Sheets."
  tags:
    - hr
    - workday
    - stripe
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: employee-wellness-program-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Enrolls employees from Workday, provisions in Stripe, sends welcome via MailChimp, and tracks in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "workday.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "stripe.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "mailchimp.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://api.mailchimp.com/v1"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Figma packaging design file by key.

naftiko: "0.5"
info:
  label: "Figma Packaging Design Lookup"
  description: "Retrieves a Figma packaging design file by key."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: figma-packaging
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Figma packaging design file by key."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "figma-packaging.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: figma-packaging
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Financial Close Pipeline"
  description: "Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams."
  tags:
    - finance
    - sap
    - power-bi
    - box
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: financial-close-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Triggers SAP period close, generates Power BI reports, archives in Box, and notifies leadership via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "power-bi.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a food safety issue is detected, identifies affected batches in SAP, creates a recall case in ServiceNow, alerts retail partners via Salesforce, and notifies the crisis team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Food Safety Recall Pipeline"
  description: "When a food safety issue is detected, identifies affected batches in SAP, creates a recall case in ServiceNow, alerts retail partners via Salesforce, and notifies the crisis team via Microsoft Teams."
  tags:
    - food-safety
    - recall
    - sap
    - servicenow
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-safety
      port: 8080
      tools:
        - name: initiate-recall
          description: "Given a product and issue description, identify affected batches, create a recall case, and alert stakeholders."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number of the affected product."
            - name: issue_description
              in: body
              type: string
              description: "Description of the food safety issue."
            - name: severity
              in: body
              type: string
              description: "Severity level (class-I, class-II, class-III)."
          steps:
            - name: find-batches
              type: call
              call: "sap.find-affected-batches"
              with:
                material_number: "{{material_number}}"
            - name: create-recall-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Food safety recall: {{material_number}} - {{severity}}"
                category: "food_safety"
                priority: "critical"
                description: "{{issue_description}}. Affected batches: {{find-batches.batch_count}}."
            - name: alert-retailers
              type: call
              call: "salesforce.create-recall-alert"
              with:
                material_number: "{{material_number}}"
                batches: "{{find-batches.batch_ids}}"
                severity: "{{severity}}"
            - name: notify-crisis-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "crisis-management"
                text: "FOOD SAFETY RECALL initiated. Product: {{material_number}}. Severity: {{severity}}. Affected batches: {{find-batches.batch_count}}. Case: {{create-recall-case.number}}. Retail alerts sent."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batch-trace
          path: "/BatchTrace?$filter=Material eq '{{material_number}}'"
          inputParameters:
            - name: material_number
              in: query
          operations:
            - name: find-affected-batches
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kellanova.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: recall-alerts
          path: "/sobjects/RecallAlert__c"
          operations:
            - name: create-recall-alert
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Global Pricing Update Pipeline"
  description: "Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams."
  tags:
    - pricing
    - sap
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: global-pricing-update-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Updates pricing in SAP, syncs to retailers via Salesforce, logs in Snowflake, and notifies sales via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "snowflake.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Searches Google Drive for brand guidelines and creative assets.

naftiko: "0.5"
info:
  label: "Google Drive Brand Asset Search"
  description: "Searches Google Drive for brand guidelines and creative assets."
  tags:
    - marketing
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: brand-assets
      port: 8080
      tools:
        - name: search-brand-assets
          description: "Search Google Drive for brand assets."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "google-drive.search-files"
          with:
            query: "name contains '{{keyword}}'"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?q={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-files
              method: GET

Searches Google Drive for product recipe and formulation documents by keyword.

naftiko: "0.5"
info:
  label: "Google Drive Recipe Document Search"
  description: "Searches Google Drive for product recipe and formulation documents by keyword."
  tags:
    - product-development
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: recipe-management
      port: 8080
      tools:
        - name: search-recipes
          description: "Search Google Drive for recipe and formulation documents."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "The search keyword."
          call: "google-drive.search-files"
          with:
            query: "name contains '{{keyword}}' and '{{folder_id}}' in parents"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?q={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-files
              method: GET

Retrieves nearby retail locations carrying Kellanova products using Google Maps.

naftiko: "0.5"
info:
  label: "Google Maps Store Locator"
  description: "Retrieves nearby retail locations carrying Kellanova products using Google Maps."
  tags:
    - retail
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: store-locator
      port: 8080
      tools:
        - name: find-nearby-stores
          description: "Find retail stores carrying Kellanova products near a location."
          inputParameters:
            - name: address
              in: body
              type: string
              description: "The consumer address or zip code."
            - name: brand
              in: body
              type: string
              description: "The brand to search for."
          call: "google-maps.search-places"
          with:
            query: "{{brand}} near {{address}}"
          outputParameters:
            - name: stores
              type: string
              mapping: "$.results"
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apikey
        key: "$secrets.google_maps_key"
      resources:
        - name: places
          path: "/place/textsearch/json?query={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-places
              method: GET

Retrieves search performance data from Google Search Console for Kellanova properties.

naftiko: "0.5"
info:
  label: "Google Search Console SEO Lookup"
  description: "Retrieves search performance data from Google Search Console for Kellanova properties."
  tags:
    - seo
    - google-search-console
capability:
  exposes:
    - type: mcp
      namespace: gsc-seo
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves search performance data from Google Search Console for Kellanova properties."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "gsc-seo.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: gsc-seo
      baseUri: "https://www.googleapis.com/webmasters/v3"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves promotion data from a Google Sheets tracker used by the trade marketing team.

naftiko: "0.5"
info:
  label: "Google Sheets Promotion Tracker"
  description: "Retrieves promotion data from a Google Sheets tracker used by the trade marketing team."
  tags:
    - marketing
    - promotions
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: trade-marketing
      port: 8080
      tools:
        - name: get-promotion-data
          description: "Retrieve promotion tracking data from Google Sheets."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets spreadsheet ID."
            - name: range
              in: body
              type: string
              description: "The cell range to retrieve (e.g., Sheet1!A1:Z100)."
          call: "google-sheets.get-values"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{range}}"
          outputParameters:
            - name: values
              type: string
              mapping: "$.values"
  consumes:
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-values
              method: GET

Retrieves new retail lead details from HubSpot CRM for the sales development team.

naftiko: "0.5"
info:
  label: "HubSpot Retail Lead Tracking"
  description: "Retrieves new retail lead details from HubSpot CRM for the sales development team."
  tags:
    - sales
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: sales-leads
      port: 8080
      tools:
        - name: get-retail-lead
          description: "Look up a retail lead in HubSpot by company name."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "The retail company name."
          call: "hubspot.search-contacts"
          with:
            query: "{{company_name}}"
          outputParameters:
            - name: contact_name
              type: string
              mapping: "$.results[0].properties.firstname"
            - name: email
              type: string
              mapping: "$.results[0].properties.email"
            - name: lifecycle_stage
              type: string
              mapping: "$.results[0].properties.lifecyclestage"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/search"
          operations:
            - name: search-contacts
              method: POST

Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics.

naftiko: "0.5"
info:
  label: "Influencer Partnership Pipeline"
  description: "Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics."
  tags:
    - marketing
    - hubspot
    - docusign
    - asana
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: influencer-partnership-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates campaign in HubSpot, generates contract via DocuSign, tracks deliverables in Asana, and monitors Instagram metrics."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "asana.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "instagram.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "Ingredient Sourcing Optimization Pipeline"
  description: "Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets."
  tags:
    - sourcing
    - sap
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: ingredient-sourcing-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Analyzes supplier data from SAP, models costs in Snowflake, updates procurement, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves engagement metrics for Kellanova brand Instagram posts.

naftiko: "0.5"
info:
  label: "Instagram Brand Metrics Lookup"
  description: "Retrieves engagement metrics for Kellanova brand Instagram posts."
  tags:
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: instagram-brand
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves engagement metrics for Kellanova brand Instagram posts."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "instagram-brand.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: instagram-brand
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge.

naftiko: "0.5"
info:
  label: "IT Incident Response Pipeline"
  description: "On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge."
  tags:
    - incident
    - dynatrace
    - servicenow
    - slack
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: it-incident-response-pipeline
      port: 8080
      tools:
        - name: execute
          description: "On Dynatrace alert, creates ServiceNow incident, pages team via Slack, and opens Zoom bridge."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "dynatrace.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "zoom.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://api.dynatrace.com/v1"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Jira issue by key from the product development project, returning summary, status, assignee, and sprint.

naftiko: "0.5"
info:
  label: "Jira Product Development Task Lookup"
  description: "Retrieves a Jira issue by key from the product development project, returning summary, status, assignee, and sprint."
  tags:
    - product-development
    - jira
capability:
  exposes:
    - type: mcp
      namespace: product-dev
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key from the product development project."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://kellanova.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Creates a brand content post on LinkedIn for Kellanova's corporate page and logs it in Salesforce for tracking.

naftiko: "0.5"
info:
  label: "LinkedIn Brand Content Post"
  description: "Creates a brand content post on LinkedIn for Kellanova's corporate page and logs it in Salesforce for tracking."
  tags:
    - marketing
    - social-media
    - linkedin
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: social-content
      port: 8080
      tools:
        - name: post-brand-content
          description: "Given content details, create a LinkedIn post and log it in Salesforce."
          inputParameters:
            - name: content_text
              in: body
              type: string
              description: "The post content text."
            - name: campaign_id
              in: body
              type: string
              description: "The associated Salesforce campaign ID."
          steps:
            - name: create-post
              type: call
              call: "linkedin.create-post"
              with:
                text: "{{content_text}}"
            - name: log-post
              type: call
              call: "salesforce.create-activity"
              with:
                campaign_id: "{{campaign_id}}"
                type: "social_post"
                platform: "linkedin"
                post_id: "{{create-post.post_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: posts
          path: "/ugcPosts"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activities
          path: "/sobjects/CampaignActivity__c"
          operations:
            - name: create-activity
              method: POST

Creates and sends a consumer newsletter campaign in MailChimp targeting a specific brand audience segment.

naftiko: "0.5"
info:
  label: "MailChimp Consumer Newsletter Campaign"
  description: "Creates and sends a consumer newsletter campaign in MailChimp targeting a specific brand audience segment."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: send-newsletter
          description: "Create and send a MailChimp newsletter campaign."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The campaign name."
            - name: list_id
              in: body
              type: string
              description: "The MailChimp audience list ID."
            - name: template_id
              in: body
              type: string
              description: "The email template ID."
            - name: subject
              in: body
              type: string
              description: "The email subject line."
          call: "mailchimp.create-campaign"
          with:
            name: "{{campaign_name}}"
            list_id: "{{list_id}}"
            template_id: "{{template_id}}"
            subject: "{{subject}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST

Pulls campaign data from Google Analytics, enriches with retail sales from Circana, creates a performance report in Power BI, and shares results with the marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Pipeline"
  description: "Pulls campaign data from Google Analytics, enriches with retail sales from Circana, creates a performance report in Power BI, and shares results with the marketing team via Microsoft Teams."
  tags:
    - marketing
    - analytics
    - google-analytics
    - circana
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: analyze-campaign
          description: "Given a campaign ID, pull digital and retail data, refresh the dashboard, and notify the marketing team."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The marketing campaign identifier."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date in YYYY-MM-DD format."
          steps:
            - name: get-digital-metrics
              type: call
              call: "google-analytics.get-report"
              with:
                property_id: "kellanova-brand-site"
                campaign_id: "{{campaign_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-retail-lift
              type: call
              call: "circana.get-sales-lift"
              with:
                campaign_id: "{{campaign_id}}"
                period: "{{start_date}}_{{end_date}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "marketing-campaign-performance"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing"
                text: "Campaign {{campaign_id}} performance: Digital impressions: {{get-digital-metrics.impressions}}. Retail lift: {{get-retail-lift.lift_percent}}%. Dashboard refreshed."
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: sales-lift
          path: "/campaigns/{{campaign_id}}/lift"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-sales-lift
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves financial data from SAP BW and generates a formatted Excel report stored in SharePoint.

naftiko: "0.5"
info:
  label: "Microsoft Excel Financial Report"
  description: "Retrieves financial data from SAP BW and generates a formatted Excel report stored in SharePoint."
  tags:
    - finance
    - reporting
    - sap-bw
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: financial-reporting
      port: 8080
      tools:
        - name: generate-financial-report
          description: "Given a report type and period, pull data from SAP BW and create an Excel report in SharePoint."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "The report type (e.g., p-and-l, balance-sheet, cost-center)."
            - name: period
              in: body
              type: string
              description: "The fiscal period."
          steps:
            - name: extract-data
              type: call
              call: "sapbw.get-financial-data"
              with:
                report_type: "{{report_type}}"
                period: "{{period}}"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "finance-reports"
                folder_path: "FinancialReports/{{report_type}}"
                file_name: "{{report_type}}_{{period}}.xlsx"
                content: "{{extract-data.results}}"
  consumes:
    - type: http
      namespace: sapbw
      baseUri: "https://kellanova-bw.sap.com/sap/opu/odata/sap/BW_FINANCE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: financial-data
          path: "/FinancialData?$filter=ReportType eq '{{report_type}}' and Period eq '{{period}}'"
          inputParameters:
            - name: report_type
              in: query
            - name: period
              in: query
          operations:
            - name: get-financial-data
              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:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT

Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Market Entry Pipeline"
  description: "Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams."
  tags:
    - expansion
    - salesforce
    - airtable
    - figma
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: new-market-entry-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates market record in Salesforce, validates compliance in Airtable, generates localized packaging in Figma, and notifies via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "salesforce.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "airtable.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "figma.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When launching a new product, creates the product master in SAP, sets up a Salesforce campaign, configures Google Tag Manager tracking, and announces to the sales team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Product Launch Pipeline"
  description: "When launching a new product, creates the product master in SAP, sets up a Salesforce campaign, configures Google Tag Manager tracking, and announces to the sales team via Microsoft Teams."
  tags:
    - product-management
    - sap
    - salesforce
    - google-tag-manager
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: launch-product
          description: "Given product details, create master data, set up marketing tracking, and notify the sales team."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "The new product name."
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: brand
              in: body
              type: string
              description: "The brand name."
            - name: launch_date
              in: body
              type: string
              description: "The launch date in YYYY-MM-DD format."
          steps:
            - name: create-master
              type: call
              call: "sap.create-material"
              with:
                material_number: "{{material_number}}"
                description: "{{product_name}}"
                brand: "{{brand}}"
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Launch: {{product_name}}"
                brand: "{{brand}}"
                start_date: "{{launch_date}}"
            - name: setup-tracking
              type: call
              call: "gtm.create-tag"
              with:
                tag_name: "{{product_name}}_launch"
                product_id: "{{material_number}}"
            - name: announce-launch
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sales-team"
                text: "New product launch: {{product_name}} ({{brand}}) on {{launch_date}}. SAP material: {{material_number}}. Salesforce campaign: {{create-campaign.campaign_id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-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"
          operations:
            - name: create-material
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: tags
          path: "/accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}/tags"
          operations:
            - name: create-tag
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves production system health metrics from New Relic.

naftiko: "0.5"
info:
  label: "New Relic Production Health Lookup"
  description: "Retrieves production system health metrics from New Relic."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: newrelic-prod
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves production system health metrics from New Relic."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "newrelic-prod.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: newrelic-prod
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Generates nutritional labels from SAP recipe data, validates against regulatory database, uploads to SharePoint, and notifies compliance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Nutritional Labeling Pipeline"
  description: "Generates nutritional labels from SAP recipe data, validates against regulatory database, uploads to SharePoint, and notifies compliance team via Microsoft Teams."
  tags:
    - compliance
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nutritional-labeling
      port: 8080
      tools:
        - name: execute
          description: "Orchestrate nutritional labeling across SAP, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The product ID."
            - name: context
              in: body
              type: string
              description: "Additional context."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "sharepoint.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-teams.execute-step-3"
              with:
                data: "{{step-2.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a new packaging design is submitted, stores it in SharePoint, creates a review task in Jira, and notifies the team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Packaging Design Review Pipeline"
  description: "When a new packaging design is submitted, stores it in SharePoint, creates a review task in Jira, and notifies the team via Microsoft Teams."
  tags:
    - product-development
    - packaging
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: packaging-design
      port: 8080
      tools:
        - name: submit-design-review
          description: "Given packaging design details, store the design, create a review task, and notify."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "The product name."
            - name: design_version
              in: body
              type: string
              description: "The design version."
          steps:
            - name: store-design
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "packaging-designs"
                folder_path: "Designs/{{product_name}}/{{design_version}}"
                file_name: "packaging_{{design_version}}.pdf"
            - name: create-review
              type: call
              call: "jira.create-issue"
              with:
                project: "PKG"
                summary: "Packaging review: {{product_name}} v{{design_version}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "packaging-design"
                text: "New packaging design for review: {{product_name}} v{{design_version}}. Jira: {{create-review.key}}."
  consumes:
    - 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:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: jira
      baseUri: "https://kellanova.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack.

naftiko: "0.5"
info:
  label: "Plant Energy Monitoring Pipeline"
  description: "Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack."
  tags:
    - operations
    - sap
    - snowflake
    - power-bi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: plant-energy-monitoring-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Collects energy data from SAP, analyzes in Snowflake, updates dashboards in Power BI, and alerts operations via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "power-bi.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When equipment requires maintenance, creates a work order in SAP, assigns a technician via ServiceNow, and notifies the plant manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Plant Maintenance Work Order Pipeline"
  description: "When equipment requires maintenance, creates a work order in SAP, assigns a technician via ServiceNow, and notifies the plant manager via Microsoft Teams."
  tags:
    - manufacturing
    - maintenance
    - sap
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: plant-maintenance
      port: 8080
      tools:
        - name: create-maintenance-order
          description: "Given equipment details, create a work order, assign a technician, and notify management."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "The SAP equipment identifier."
            - name: plant_code
              in: body
              type: string
              description: "The manufacturing plant code."
            - name: issue_description
              in: body
              type: string
              description: "Description of the maintenance issue."
            - name: priority
              in: body
              type: string
              description: "Priority level (emergency, high, medium, low)."
          steps:
            - name: create-order
              type: call
              call: "sap.create-maintenance-order"
              with:
                equipment_id: "{{equipment_id}}"
                plant: "{{plant_code}}"
                description: "{{issue_description}}"
                priority: "{{priority}}"
            - name: assign-technician
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Equipment maintenance: {{equipment_id}} at {{plant_code}}"
                priority: "{{priority}}"
                description: "{{issue_description}}. SAP order: {{create-order.order_number}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-ops-{{plant_code}}"
                text: "Maintenance order created for equipment {{equipment_id}} at {{plant_code}}. Priority: {{priority}}. SAP order: {{create-order.order_number}}. ServiceNow: {{assign-technician.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: maintenance-orders
          path: "/MaintenanceOrders"
          operations:
            - name: create-maintenance-order
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kellanova.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves team training progress from Pluralsight for a given course.

naftiko: "0.5"
info:
  label: "Pluralsight Training Progress Lookup"
  description: "Retrieves team training progress from Pluralsight for a given course."
  tags:
    - training
    - pluralsight
capability:
  exposes:
    - type: mcp
      namespace: learning
      port: 8080
      tools:
        - name: get-training-progress
          description: "Look up team training progress in Pluralsight."
          inputParameters:
            - name: team_name
              in: body
              type: string
              description: "The team name."
            - name: course_name
              in: body
              type: string
              description: "The course name."
          call: "pluralsight.get-team-progress"
          with:
            team: "{{team_name}}"
            course: "{{course_name}}"
          outputParameters:
            - name: completion_rate
              type: string
              mapping: "$.completionRate"
            - name: enrolled_count
              type: string
              mapping: "$.enrolledCount"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: team-progress
          path: "/teams/{{team}}/courses/{{course}}/progress"
          inputParameters:
            - name: team
              in: path
            - name: course
              in: path
          operations:
            - name: get-team-progress
              method: GET

Retrieves Power BI manufacturing performance dashboard refresh status.

naftiko: "0.5"
info:
  label: "Power BI Manufacturing Dashboard"
  description: "Retrieves Power BI manufacturing performance dashboard refresh status."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: powerbi-mfg
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves Power BI manufacturing performance dashboard refresh status."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "powerbi-mfg.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: powerbi-mfg
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Triggers a refresh of the sales performance Power BI dataset to ensure dashboards reflect the latest retail data.

naftiko: "0.5"
info:
  label: "Power BI Sales Dashboard Refresh"
  description: "Triggers a refresh of the sales performance Power BI dataset to ensure dashboards reflect the latest retail data."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: refresh-sales-dashboard
          description: "Trigger a Power BI dataset refresh for the sales performance dashboard."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset identifier."
          call: "powerbi.refresh-dataset"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable.

naftiko: "0.5"
info:
  label: "Product Photography Pipeline"
  description: "Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable."
  tags:
    - creative
    - asana
    - google-drive
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: product-photography-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates task in Asana, uploads assets to Google Drive, updates product listing, and tracks in Airtable."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "asana.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "google-drive.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "airtable.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "airtable.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://api.asana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-drive
      baseUri: "https://api.googledrive.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v1"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker.

naftiko: "0.5"
info:
  label: "Production Line Changeover Pipeline"
  description: "Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker."
  tags:
    - manufacturing
    - sap
    - servicenow
    - slack
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: production-line-changeover-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Schedules changeover in SAP, creates maintenance ticket in ServiceNow, notifies plant team via Slack, and updates Google Sheets tracker."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "servicenow.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://api.servicenow.com/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves the current status of a manufacturing production line from SAP, including throughput rate, downtime, and batch in progress.

naftiko: "0.5"
info:
  label: "Production Line Status Lookup"
  description: "Retrieves the current status of a manufacturing production line from SAP, including throughput rate, downtime, and batch in progress."
  tags:
    - manufacturing
    - production
    - sap
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: get-production-line-status
          description: "Look up a production line status in SAP by line ID."
          inputParameters:
            - name: line_id
              in: body
              type: string
              description: "The SAP production line identifier."
          call: "sap.get-production-line"
          with:
            line_id: "{{line_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.LineStatus"
            - name: throughput_rate
              type: string
              mapping: "$.d.ThroughputRate"
            - name: current_batch
              type: string
              mapping: "$.d.CurrentBatchId"
            - name: downtime_minutes
              type: string
              mapping: "$.d.DowntimeMinutes"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-lines
          path: "/ProductionLines('{{line_id}}')"
          inputParameters:
            - name: line_id
              in: path
          operations:
            - name: get-production-line
              method: GET

Pulls demand forecasts from Azure Databricks, creates production orders in SAP, and notifies plant managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Production Scheduling Pipeline"
  description: "Pulls demand forecasts from Azure Databricks, creates production orders in SAP, and notifies plant managers via Microsoft Teams."
  tags:
    - manufacturing
    - scheduling
    - azure-databricks
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: production-scheduling
      port: 8080
      tools:
        - name: schedule-production
          description: "Given a plant and period, generate production schedule from demand forecasts."
          inputParameters:
            - name: plant_code
              in: body
              type: string
              description: "The manufacturing plant code."
            - name: period
              in: body
              type: string
              description: "The scheduling period."
          steps:
            - name: get-forecast
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM demand_forecast WHERE plant = '{{plant_code}}' AND period = '{{period}}'"
            - name: create-orders
              type: call
              call: "sap.create-production-orders"
              with:
                plant: "{{plant_code}}"
                forecast: "{{get-forecast.results}}"
            - name: notify-plant
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "plant-ops-{{plant_code}}"
                text: "Production schedule for {{plant_code}} ({{period}}): {{create-orders.order_count}} orders created."
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/PP_PRODUCTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: production-orders
          path: "/ProductionOrders"
          operations:
            - name: create-production-orders
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a production batch completes in SAP, runs quality checks, updates batch status, creates a release certificate in SharePoint, and notifies the QA team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Quality Control Batch Release Pipeline"
  description: "When a production batch completes in SAP, runs quality checks, updates batch status, creates a release certificate in SharePoint, and notifies the QA team via Microsoft Teams."
  tags:
    - manufacturing
    - quality-control
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-control
      port: 8080
      tools:
        - name: process-batch-release
          description: "Given a batch ID, run quality checks, generate release certificate, and notify QA."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The SAP production batch identifier."
            - name: plant_code
              in: body
              type: string
              description: "The manufacturing plant code."
          steps:
            - name: get-batch
              type: call
              call: "sap.get-batch"
              with:
                batch_id: "{{batch_id}}"
            - name: run-qa-checks
              type: call
              call: "sap.run-quality-inspection"
              with:
                batch_id: "{{batch_id}}"
                plant: "{{plant_code}}"
            - name: create-certificate
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "qa-documents"
                folder_path: "BatchRelease/{{plant_code}}/{{batch_id}}"
                content: "Batch {{batch_id}} - Plant {{plant_code}} - QA Result: {{run-qa-checks.result}} - Release Date: {{run-qa-checks.inspection_date}}"
            - name: notify-qa
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-assurance"
                text: "Batch {{batch_id}} from {{plant_code}}: QA {{run-qa-checks.result}}. Certificate: {{create-certificate.url}}. Product: {{get-batch.product_name}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/Batches('{{batch_id}}')"
          inputParameters:
            - name: batch_id
              in: path
          operations:
            - name: get-batch
              method: GET
        - name: inspections
          path: "/QualityInspections"
          operations:
            - name: run-quality-inspection
              method: POST
    - 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:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-document
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When raw material inventory falls below threshold, generates a purchase requisition in SAP, gets supplier quotes, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Raw Material Procurement Pipeline"
  description: "When raw material inventory falls below threshold, generates a purchase requisition in SAP, gets supplier quotes, and notifies the procurement team via Microsoft Teams."
  tags:
    - supply-chain
    - procurement
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: raw-materials
      port: 8080
      tools:
        - name: trigger-reorder
          description: "Given a material and plant, check inventory and trigger reorder if below threshold."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: plant_code
              in: body
              type: string
              description: "The plant code."
            - name: reorder_quantity
              in: body
              type: string
              description: "The quantity to reorder."
          steps:
            - name: check-stock
              type: call
              call: "sap.get-inventory"
              with:
                material: "{{material_number}}"
                plant: "{{plant_code}}"
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                material: "{{material_number}}"
                plant: "{{plant_code}}"
                quantity: "{{reorder_quantity}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement"
                text: "Reorder triggered for {{material_number}} at {{plant_code}}. Current stock: {{check-stock.AvailableStock}}. Requisition: {{create-requisition.req_number}} for {{reorder_quantity}} units."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/MaterialStock(Material='{{material}}',Plant='{{plant}}')"
          inputParameters:
            - name: material
              in: path
            - name: plant
              in: path
          operations:
            - name: get-inventory
              method: GET
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Recipe Formulation Pipeline"
  description: "Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams."
  tags:
    - food-science
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: recipe-formulation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates recipe record in SAP, generates nutrition label, uploads to SharePoint, and notifies R&D via Microsoft Teams."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "sharepoint.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "microsoft-teams.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-teams.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://api.sharepoint.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-teams
      baseUri: "https://api.microsoftteams.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_teams_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a field rep completes a store visit, logs the visit in Salesforce, uploads photos to SharePoint, captures competitive data in Google Sheets, and notifies the regional manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Retail Execution Pipeline"
  description: "When a field rep completes a store visit, logs the visit in Salesforce, uploads photos to SharePoint, captures competitive data in Google Sheets, and notifies the regional manager via Microsoft Teams."
  tags:
    - retail
    - field-sales
    - salesforce
    - sharepoint
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: retail-execution
      port: 8080
      tools:
        - name: log-store-visit
          description: "Given visit details, log the store visit, upload photos, capture data, and notify management."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: rep_name
              in: body
              type: string
              description: "The field rep name."
            - name: visit_notes
              in: body
              type: string
              description: "Notes from the store visit."
            - name: manager_email
              in: body
              type: string
              description: "The regional manager email."
          steps:
            - name: log-visit
              type: call
              call: "salesforce.create-visit"
              with:
                store_id: "{{store_id}}"
                rep: "{{rep_name}}"
                notes: "{{visit_notes}}"
            - name: upload-photos
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "retail-execution"
                folder_path: "StoreVisits/{{store_id}}"
                file_name: "visit_{{log-visit.visit_id}}.zip"
            - name: update-tracker
              type: call
              call: "google-sheets.append-row"
              with:
                spreadsheet_id: "retail-visits-tracker"
                values: "{{store_id}},{{rep_name}},{{log-visit.visit_date}},{{visit_notes}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Store visit logged: {{store_id}} by {{rep_name}}. Notes: {{visit_notes}}. Photos: {{upload-photos.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: visits
          path: "/sobjects/StoreVisit__c"
          operations:
            - name: create-visit
              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:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack.

naftiko: "0.5"
info:
  label: "Retail Promotion Execution Pipeline"
  description: "Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack."
  tags:
    - promotions
    - sap
    - salesforce
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: retail-promotion-execution-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates promotion in SAP, syncs to retail partners via Salesforce, tracks in Google Sheets, and notifies sales via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Extracts planogram compliance data from Circana, creates follow-up actions in Salesforce for field reps, and notifies the category management team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Retailer Planogram Compliance Pipeline"
  description: "Extracts planogram compliance data from Circana, creates follow-up actions in Salesforce for field reps, and notifies the category management team via Microsoft Teams."
  tags:
    - retail
    - planogram
    - circana
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: planogram-compliance
      port: 8080
      tools:
        - name: check-planogram-compliance
          description: "Given a retailer and category, check planogram compliance and create follow-up actions."
          inputParameters:
            - name: retailer
              in: body
              type: string
              description: "The retailer name."
            - name: category
              in: body
              type: string
              description: "The product category."
          steps:
            - name: get-compliance
              type: call
              call: "circana.get-planogram-data"
              with:
                retailer: "{{retailer}}"
                category: "{{category}}"
            - name: create-actions
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Planogram compliance follow-up: {{retailer}} - {{category}}"
                description: "Compliance rate: {{get-compliance.compliance_rate}}%. Non-compliant stores: {{get-compliance.nc_store_count}}."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "category-management"
                text: "Planogram compliance for {{category}} at {{retailer}}: {{get-compliance.compliance_rate}}%. {{get-compliance.nc_store_count}} stores need attention. Task: {{create-actions.task_id}}."
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: planogram
          path: "/planogram/compliance?retailer={{retailer}}&category={{category}}"
          inputParameters:
            - name: retailer
              in: query
            - name: category
              in: query
          operations:
            - name: get-planogram-data
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce broker account by ID for retail distribution.

naftiko: "0.5"
info:
  label: "Salesforce Broker Account Lookup"
  description: "Retrieves a Salesforce broker account by ID for retail distribution."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sf-brokers
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Salesforce broker account by ID for retail distribution."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sf-brokers.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sf-brokers
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves a sales opportunity from Salesforce by opportunity ID.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a sales opportunity from Salesforce by opportunity ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales-opportunities
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
          outputParameters:
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: amount
              type: string
              mapping: "$.Amount"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET

Retrieves a retail account from Salesforce by account name, returning account status, region, and primary contact.

naftiko: "0.5"
info:
  label: "Salesforce Retail Account Lookup"
  description: "Retrieves a retail account from Salesforce by account name, returning account status, region, and primary contact."
  tags:
    - sales
    - retail
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: retail-accounts
      port: 8080
      tools:
        - name: get-retail-account
          description: "Look up a retail account in Salesforce by name."
          inputParameters:
            - name: account_name
              in: body
              type: string
              description: "The retail account name."
          call: "salesforce.get-account"
          with:
            account_name: "{{account_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.records[0].Status__c"
            - name: region
              type: string
              mapping: "$.records[0].Region__c"
            - name: primary_contact
              type: string
              mapping: "$.records[0].Primary_Contact__r.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query/?q=SELECT+Id,Status__c,Region__c,Primary_Contact__r.Name+FROM+Account+WHERE+Name='{{account_name}}'"
          inputParameters:
            - name: account_name
              in: query
          operations:
            - name: get-account
              method: GET

Retrieves a travel expense report from SAP Concur by report ID.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Lookup"
  description: "Retrieves a travel expense report from SAP Concur by report ID."
  tags:
    - finance
    - travel
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: travel-expenses
      port: 8080
      tools:
        - name: get-expense-report
          description: "Look up a SAP Concur expense report by report ID."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          call: "concur.get-report"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: total_amount
              type: string
              mapping: "$.Total"
            - name: approval_status
              type: string
              mapping: "$.ApprovalStatusName"
            - name: submit_date
              type: string
              mapping: "$.SubmitDate"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET

Retrieves material master data from SAP by material number.

naftiko: "0.5"
info:
  label: "SAP Material Master Lookup"
  description: "Retrieves material master data from SAP by material number."
  tags:
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: material-master
      port: 8080
      tools:
        - name: get-material
          description: "Look up a material in SAP by material number."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          call: "sap.get-material"
          with:
            material: "{{material_number}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.d.MaterialDescription"
            - name: unit
              type: string
              mapping: "$.d.BaseUnit"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-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}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material
              method: GET

Retrieves production batch details from SAP by batch ID.

naftiko: "0.5"
info:
  label: "SAP Production Batch Lookup"
  description: "Retrieves production batch details from SAP by batch ID."
  tags:
    - manufacturing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-batches
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves production batch details from SAP by batch ID."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "sap-batches.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap-batches
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/ZBATCH_SRV"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date for procurement tracking.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date for procurement tracking."
  tags:
    - procurement
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches.

naftiko: "0.5"
info:
  label: "Security Vulnerability Pipeline"
  description: "Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches."
  tags:
    - security
    - dynatrace
    - jira
    - slack
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: security-vulnerability-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Detects issues via Dynatrace, creates Jira tickets, alerts team via Slack, and triggers Azure DevOps patches."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "dynatrace.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "jira.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "slack.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "azure-devops.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://api.dynatrace.com/v1"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://api.jira.com/v1"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: azure-devops
      baseUri: "https://api.azuredevops.com/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_devops_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates website, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "SEO Content Optimization Pipeline"
  description: "Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates website, and reports via Google Sheets."
  tags:
    - seo
    - google-search-console
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: seo-content-optimization-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls search data from Google Search Console, identifies opportunities in Snowflake, updates website, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "google-search-console.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: google-search-console
      baseUri: "https://api.googlesearchconsole.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_search_console_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a ServiceNow incident by number and returns priority, status, assigned group, and resolution notes.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns priority, status, assigned group, and resolution notes."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kellanova.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Monitors product shelf life in SAP, alerts distribution teams via Slack, updates retailer notifications in Salesforce, and logs expiring inventory in Snowflake.

naftiko: "0.5"
info:
  label: "Shelf Life Monitoring Pipeline"
  description: "Monitors product shelf life in SAP, alerts distribution teams via Slack, updates retailer notifications in Salesforce, and logs expiring inventory in Snowflake."
  tags:
    - quality
    - sap
    - slack
    - salesforce
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: shelf-life-monitoring
      port: 8080
      tools:
        - name: execute
          description: "Orchestrate shelf life monitoring across SAP, Slack, Salesforce, and Snowflake."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "slack.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "salesforce.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "snowflake.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Sends a message to a Slack supply chain operations channel.

naftiko: "0.5"
info:
  label: "Slack Supply Chain Message Sender"
  description: "Sends a message to a Slack supply chain operations channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-supplychain
      port: 8080
      tools:
        - name: get-data
          description: "Sends a message to a Slack supply chain operations channel."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "slack-supplychain.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: slack-supplychain
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Queries aggregated sales data from Snowflake by product line and region.

naftiko: "0.5"
info:
  label: "Snowflake Sales Analytics Query"
  description: "Queries aggregated sales data from Snowflake by product line and region."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake-sales
      port: 8080
      tools:
        - name: get-data
          description: "Queries aggregated sales data from Snowflake by product line and region."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "snowflake-sales.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake-sales
      baseUri: "https://kellanova.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Monitors brand mentions across Instagram and Facebook via Meta APIs, analyzes sentiment in Azure Databricks, and alerts the brand team via Microsoft Teams if negative sentiment spikes.

naftiko: "0.5"
info:
  label: "Social Media Brand Monitoring Pipeline"
  description: "Monitors brand mentions across Instagram and Facebook via Meta APIs, analyzes sentiment in Azure Databricks, and alerts the brand team via Microsoft Teams if negative sentiment spikes."
  tags:
    - marketing
    - social-media
    - instagram
    - facebook
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: brand-monitoring
      port: 8080
      tools:
        - name: monitor-brand-sentiment
          description: "Given a brand name and date range, check social mentions, analyze sentiment, and alert if negative."
          inputParameters:
            - name: brand_name
              in: body
              type: string
              description: "The brand name to monitor."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          steps:
            - name: get-instagram-mentions
              type: call
              call: "instagram.get-mentions"
              with:
                brand: "{{brand_name}}"
                since: "{{start_date}}"
                until: "{{end_date}}"
            - name: get-facebook-mentions
              type: call
              call: "facebook.get-mentions"
              with:
                brand: "{{brand_name}}"
                since: "{{start_date}}"
                until: "{{end_date}}"
            - name: analyze-sentiment
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT sentiment_score, negative_pct FROM brand_sentiment WHERE brand = '{{brand_name}}' AND date BETWEEN '{{start_date}}' AND '{{end_date}}'"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "brand-management"
                text: "Brand sentiment report for {{brand_name}} ({{start_date}} to {{end_date}}): Sentiment score: {{analyze-sentiment.sentiment_score}}. Negative: {{analyze-sentiment.negative_pct}}%. Instagram mentions: {{get-instagram-mentions.count}}. Facebook mentions: {{get-facebook-mentions.count}}."
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: mentions
          path: "/{{ig_user_id}}/tags"
          operations:
            - name: get-mentions
              method: GET
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.meta_token"
      resources:
        - name: mentions
          path: "/{{page_id}}/tagged"
          operations:
            - name: get-mentions
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "Social Media Campaign Pipeline"
  description: "Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets."
  tags:
    - social-media
    - hubspot
    - instagram
    - facebook
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: social-media-campaign-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates campaign in HubSpot, schedules posts on Instagram and Facebook, tracks in Google Analytics, and reports via Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "hubspot.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "instagram.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "facebook.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubspot.com/v1"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://api.instagram.com/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://api.facebook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://api.googleanalytics.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves a Stripe payment for Kellanova direct-to-consumer orders.

naftiko: "0.5"
info:
  label: "Stripe E-Commerce Payment Lookup"
  description: "Retrieves a Stripe payment for Kellanova direct-to-consumer orders."
  tags:
    - payments
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: stripe-payments
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves a Stripe payment for Kellanova direct-to-consumer orders."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "stripe-payments.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: stripe-payments
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Retrieves supplier audit results from SAP, creates compliance findings in ServiceNow, shares documentation in SharePoint, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Compliance Audit Pipeline"
  description: "Retrieves supplier audit results from SAP, creates compliance findings in ServiceNow, shares documentation in SharePoint, and notifies the procurement team via Microsoft Teams."
  tags:
    - supply-chain
    - compliance
    - sap
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supplier-compliance
      port: 8080
      tools:
        - name: process-supplier-audit
          description: "Given a supplier ID, process audit results, create findings, and notify procurement."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier identifier."
            - name: audit_date
              in: body
              type: string
              description: "The audit date in YYYY-MM-DD format."
            - name: audit_type
              in: body
              type: string
              description: "The type of audit (food-safety, quality, environmental)."
          steps:
            - name: get-audit-results
              type: call
              call: "sap.get-supplier-audit"
              with:
                supplier_id: "{{supplier_id}}"
                audit_date: "{{audit_date}}"
            - name: create-findings
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Supplier audit findings: {{get-audit-results.supplier_name}} ({{audit_type}})"
                category: "supplier_compliance"
                description: "Audit score: {{get-audit-results.score}}. Findings: {{get-audit-results.findings_count}} items."
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "supplier-compliance"
                folder_path: "Audits/{{supplier_id}}/{{audit_date}}"
                file_name: "audit_report_{{audit_type}}.pdf"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "procurement"
                text: "Supplier audit complete: {{get-audit-results.supplier_name}} ({{audit_type}}). Score: {{get-audit-results.score}}. Findings: {{get-audit-results.findings_count}}. Report: {{upload-report.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/SUPPLIER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: audits
          path: "/SupplierAudits(SupplierId='{{supplier_id}}',AuditDate='{{audit_date}}')"
          inputParameters:
            - name: supplier_id
              in: path
            - name: audit_date
              in: path
          operations:
            - name: get-supplier-audit
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kellanova.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: files
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Supplier Onboarding Pipeline"
  description: "Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook."
  tags:
    - procurement
    - sap
    - docusign
    - box
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: supplier-onboarding-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Creates vendor in SAP, generates contract via DocuSign, sets up folder in Box, and sends welcome via Microsoft Outlook."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "docusign.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "box.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "microsoft-outlook.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://api.docusign.com/v1"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/v1"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: microsoft-outlook
      baseUri: "https://api.microsoftoutlook.com/v1"
      authentication:
        type: bearer
        token: "$secrets.microsoft_outlook_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack.

naftiko: "0.5"
info:
  label: "Supply Chain Visibility Pipeline"
  description: "Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack."
  tags:
    - logistics
    - sap
    - snowflake
    - tableau
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-visibility-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Tracks shipments in SAP, aggregates in Snowflake, refreshes Tableau dashboards, and alerts logistics via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "snowflake.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "tableau.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://api.tableau.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Extracts sustainability metrics from SAP, calculates carbon footprint in Azure Databricks, stores the report in SharePoint, and notifies the ESG team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Sustainability Reporting Pipeline"
  description: "Extracts sustainability metrics from SAP, calculates carbon footprint in Azure Databricks, stores the report in SharePoint, and notifies the ESG team via Microsoft Teams."
  tags:
    - sustainability
    - esg
    - sap
    - azure-databricks
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: generate-sustainability-report
          description: "Given a reporting period, extract sustainability data, calculate metrics, and distribute the report."
          inputParameters:
            - name: reporting_period
              in: body
              type: string
              description: "The reporting period (e.g., 2025-Q4)."
            - name: scope
              in: body
              type: string
              description: "The reporting scope (scope-1, scope-2, scope-3)."
          steps:
            - name: extract-data
              type: call
              call: "sap.get-sustainability-data"
              with:
                period: "{{reporting_period}}"
                scope: "{{scope}}"
            - name: calculate-footprint
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM carbon_footprint_calc('{{reporting_period}}', '{{scope}}')"
            - name: store-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "esg-reports"
                folder_path: "Sustainability/{{reporting_period}}"
                file_name: "sustainability_{{scope}}_{{reporting_period}}.pdf"
            - name: notify-esg
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "esg-team"
                text: "Sustainability report for {{reporting_period}} ({{scope}}): Total emissions: {{calculate-footprint.total_emissions}} tCO2e. Report: {{store-report.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/SUSTAINABILITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sustainability
          path: "/SustainabilityData?$filter=Period eq '{{period}}' and Scope eq '{{scope}}'"
          inputParameters:
            - name: period
              in: query
            - name: scope
              in: query
          operations:
            - name: get-sustainability-data
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              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:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Tableau dashboard embed URL for retail sales analytics.

naftiko: "0.5"
info:
  label: "Tableau Retail Analytics Dashboard"
  description: "Retrieves a Tableau dashboard embed URL for retail sales analytics."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: retail-analytics
      port: 8080
      tools:
        - name: get-retail-dashboard
          description: "Retrieve the embed URL for a Tableau retail analytics dashboard."
          inputParameters:
            - name: workbook_name
              in: body
              type: string
              description: "The Tableau workbook name."
          call: "tableau.get-workbook"
          with:
            workbook_name: "{{workbook_name}}"
          outputParameters:
            - name: embed_url
              type: string
              mapping: "$.workbook.contentUrl"
            - name: updated_at
              type: string
              mapping: "$.workbook.updatedAt"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://kellanova-tableau.online/api/3.14"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}"
          inputParameters:
            - name: workbook_name
              in: query
          operations:
            - name: get-workbook
              method: GET

Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies managers via Slack.

naftiko: "0.5"
info:
  label: "Talent Acquisition Pipeline"
  description: "Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies managers via Slack."
  tags:
    - recruiting
    - linkedin
    - workday
    - zoom
    - slack
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Posts jobs to LinkedIn, syncs applicants to Workday, schedules interviews via Zoom, and notifies managers via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "linkedin.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "workday.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "zoom.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v1"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Queries consumer purchase insights from Teradata data warehouse.

naftiko: "0.5"
info:
  label: "Teradata Consumer Insights Query"
  description: "Queries consumer purchase insights from Teradata data warehouse."
  tags:
    - analytics
    - teradata
capability:
  exposes:
    - type: mcp
      namespace: teradata-insights
      port: 8080
      tools:
        - name: get-data
          description: "Queries consumer purchase insights from Teradata data warehouse."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "teradata-insights.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: teradata-insights
      baseUri: "https://kellanova.teradata.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Pulls promotion execution data from SAP, enriches with Circana retail data, analyzes ROI in Azure Databricks, and shares results with the trade team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Trade Promotion Effectiveness Pipeline"
  description: "Pulls promotion execution data from SAP, enriches with Circana retail data, analyzes ROI in Azure Databricks, and shares results with the trade team via Microsoft Teams."
  tags:
    - marketing
    - trade-promotion
    - sap
    - circana
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: trade-promotion
      port: 8080
      tools:
        - name: analyze-promotion-roi
          description: "Given a promotion ID, pull execution and retail data, analyze ROI, and share results."
          inputParameters:
            - name: promotion_id
              in: body
              type: string
              description: "The trade promotion identifier."
            - name: retailer
              in: body
              type: string
              description: "The retailer name."
          steps:
            - name: get-promo-data
              type: call
              call: "sap.get-promotion"
              with:
                promotion_id: "{{promotion_id}}"
            - name: get-retail-data
              type: call
              call: "circana.get-promo-performance"
              with:
                promotion_id: "{{promotion_id}}"
                retailer: "{{retailer}}"
            - name: calculate-roi
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT promotion_roi('{{promotion_id}}', '{{retailer}}') as roi"
            - name: share-results
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "trade-marketing"
                text: "Promotion {{promotion_id}} at {{retailer}}: Spend: {{get-promo-data.spend}}. Incremental sales: {{get-retail-data.incremental_sales}}. ROI: {{calculate-roi.roi}}%."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/TPM_PROMOTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: promotions
          path: "/Promotions('{{promotion_id}}')"
          inputParameters:
            - name: promotion_id
              in: path
          operations:
            - name: get-promotion
              method: GET
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: promo-performance
          path: "/promotions/{{promotion_id}}/performance?retailer={{retailer}}"
          inputParameters:
            - name: promotion_id
              in: path
            - name: retailer
              in: query
          operations:
            - name: get-promo-performance
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack.

naftiko: "0.5"
info:
  label: "Training Compliance Pipeline"
  description: "Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack."
  tags:
    - training
    - pluralsight
    - workday
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: training-compliance-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Pulls completions from Pluralsight, syncs with Workday, generates reports in Google Sheets, and alerts managers via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "pluralsight.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "workday.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://api.workday.com/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

When a shipment is ready, creates a transport order in SAP, updates the delivery status in Salesforce, and notifies the logistics team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Transportation Logistics Orchestrator"
  description: "When a shipment is ready, creates a transport order in SAP, updates the delivery status in Salesforce, and notifies the logistics team via Microsoft Teams."
  tags:
    - distribution
    - logistics
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: process-shipment
          description: "Given shipment details, create transport order, update delivery tracking, and notify logistics."
          inputParameters:
            - name: delivery_number
              in: body
              type: string
              description: "The SAP delivery number."
            - name: destination
              in: body
              type: string
              description: "The delivery destination."
            - name: carrier
              in: body
              type: string
              description: "The carrier name."
          steps:
            - name: create-transport
              type: call
              call: "sap.create-transport-order"
              with:
                delivery_number: "{{delivery_number}}"
                destination: "{{destination}}"
                carrier: "{{carrier}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-delivery"
              with:
                delivery_number: "{{delivery_number}}"
                transport_id: "{{create-transport.transport_id}}"
                status: "in_transit"
            - name: notify-logistics
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "logistics"
                text: "Shipment {{delivery_number}} dispatched via {{carrier}} to {{destination}}. Transport order: {{create-transport.transport_id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/TM_TRANSPORT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: transport-orders
          path: "/TransportOrders"
          operations:
            - name: create-transport-order
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kellanova.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: deliveries
          path: "/sobjects/Delivery__c/{{delivery_number}}"
          inputParameters:
            - name: delivery_number
              in: path
          operations:
            - name: update-delivery
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "When a vendor invoice arrives, validates against the SAP purchase order, routes for approval in Workday, and notifies accounts payable via Microsoft Teams."
  tags:
    - finance
    - accounts-payable
    - sap
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: invoice-processing
      port: 8080
      tools:
        - name: process-invoice
          description: "Given an invoice and PO number, validate, route for approval, and notify AP."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The vendor invoice number."
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: amount
              in: body
              type: string
              description: "The invoice amount."
            - name: approver_id
              in: body
              type: string
              description: "The Workday approver employee ID."
          steps:
            - name: validate-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: route-approval
              type: call
              call: "workday.submit-approval"
              with:
                approver_id: "{{approver_id}}"
                amount: "{{amount}}"
                description: "Invoice {{invoice_number}} for PO {{po_number}}"
            - name: notify-ap
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "accounts-payable"
                text: "Invoice {{invoice_number}} processed for PO {{po_number}}. Amount: ${{amount}}. Vendor: {{validate-po.Supplier.CompanyName}}. Approval routed to {{approver_id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: approvals
          path: "/approvals"
          operations:
            - name: submit-approval
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Vendor Invoice Reconciliation Pipeline"
  description: "Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets."
  tags:
    - finance
    - sap
    - salesforce
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: vendor-invoice-reconciliation-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Matches invoices from SAP, validates contracts in Salesforce, processes payments, and logs in Google Sheets."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "sap.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "salesforce.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "google-sheets.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "google-sheets.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://api.sap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://api.salesforce.com/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://api.googlesheets.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Analyzes warehouse utilization data from SAP, runs optimization in Azure Databricks, updates slot assignments in SAP, and notifies the warehouse team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Warehouse Slot Optimization Pipeline"
  description: "Analyzes warehouse utilization data from SAP, runs optimization in Azure Databricks, updates slot assignments in SAP, and notifies the warehouse team via Microsoft Teams."
  tags:
    - distribution
    - warehouse
    - sap
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse-optimization
      port: 8080
      tools:
        - name: optimize-warehouse-slots
          description: "Given a warehouse code, analyze utilization, run optimization, and update slot assignments."
          inputParameters:
            - name: warehouse_code
              in: body
              type: string
              description: "The SAP warehouse code."
          steps:
            - name: get-utilization
              type: call
              call: "sap.get-warehouse-data"
              with:
                warehouse: "{{warehouse_code}}"
            - name: run-optimization
              type: call
              call: "databricks.run-query"
              with:
                query: "SELECT * FROM warehouse_optimization('{{warehouse_code}}')"
            - name: update-slots
              type: call
              call: "sap.update-slot-assignments"
              with:
                warehouse: "{{warehouse_code}}"
                assignments: "{{run-optimization.results}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "warehouse-ops"
                text: "Slot optimization complete for warehouse {{warehouse_code}}. {{run-optimization.moves_count}} moves recommended. Utilization improved from {{get-utilization.current_pct}}% to {{run-optimization.projected_pct}}%."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kellanova-s4.sap.com/sap/opu/odata/sap/WM_WAREHOUSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: warehouse
          path: "/WarehouseData('{{warehouse}}')"
          inputParameters:
            - name: warehouse
              in: path
          operations:
            - name: get-warehouse-data
              method: GET
        - name: slots
          path: "/SlotAssignments"
          operations:
            - name: update-slot-assignments
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://kellanova-analytics.azuredatabricks.net/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: sql-queries
          path: "/sql/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates sales from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack.

naftiko: "0.5"
info:
  label: "Weekly Sales Digest Pipeline"
  description: "Aggregates sales from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack."
  tags:
    - sales
    - snowflake
    - power-bi
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: weekly-sales-digest-pipeline
      port: 8080
      tools:
        - name: execute
          description: "Aggregates sales from Snowflake, generates Power BI reports, creates Confluence summaries, and distributes via Slack."
          inputParameters:
            - name: input_id
              in: body
              type: string
              description: "The primary input identifier."
            - name: context
              in: body
              type: string
              description: "Additional context parameter."
          steps:
            - name: step-1
              type: call
              call: "snowflake.execute-step-1"
              with:
                input: "{{input_id}}"
                context: "{{context}}"
            - name: step-2
              type: call
              call: "power-bi.execute-step-2"
              with:
                data: "{{step-1.result}}"
            - name: step-3
              type: call
              call: "confluence.execute-step-3"
              with:
                data: "{{step-2.result}}"
            - name: step-4
              type: call
              call: "slack.execute-step-4"
              with:
                data: "{{step-3.result}}"
                id: "{{input_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://api.snowflake.com/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://api.confluence.com/v1"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://api.slack.com/v1"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: resources
          path: "/{{id}}"
          operations:
            - name: execute
              method: POST

Retrieves employee benefits enrollment from Workday.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Lookup"
  description: "Retrieves employee benefits enrollment from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday-benefits
      port: 8080
      tools:
        - name: get-data
          description: "Retrieves employee benefits enrollment from Workday."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "The lookup identifier."
          call: "workday-benefits.get-data"
          with:
            id: "{{query_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.data"
  consumes:
    - type: http
      namespace: workday-benefits
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/kellanova"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: data
          path: "/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-data
              method: GET

Looks up an employee in Workday by employee ID and returns name, department, title, and contact information.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Looks up an employee in Workday by employee ID and returns name, department, title, and contact information."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee by Workday worker ID."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.descriptor"
            - name: department
              type: string
              mapping: "$.worker.primarySupervisoryOrganization.descriptor"
            - name: title
              type: string
              mapping: "$.worker.businessTitle"
            - name: email
              type: string
              mapping: "$.worker.primaryWorkEmail"
  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

Retrieves a Zendesk consumer support ticket by ID.

naftiko: "0.5"
info:
  label: "Zendesk Consumer Support Ticket Lookup"
  description: "Retrieves a Zendesk consumer support ticket by ID."
  tags:
    - customer-service
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: consumer-support
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Look up a Zendesk support ticket by ticket ID."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://kellanova.zendesk.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.zendesk_user"
        password: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET