Kroger Capabilities

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

Sort
Expand

Retrieves customer loyalty behavior insights from 84.51 data science platform for personalization.

naftiko: "0.5"
info:
  label: "84.51 Loyalty Insights Lookup"
  description: "Retrieves customer loyalty behavior insights from 84.51 data science platform for personalization."
  tags:
    - loyalty
    - 84-51
capability:
  exposes:
    - type: mcp
      namespace: loyalty-insights
      port: 8080
      tools:
        - name: get-insights
          description: "Retrieve loyalty insights for a customer segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The segment id." 
          call: "insights.get-segment"
          with:
            segment_id: "{{segment_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: insights
      baseUri: "https://kroger-insights.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.insights_token"
      resources:
        - name: segments
          path: "/segments"
          operations:
            - name: get-segment
              method: GET

Processes associate engagement surveys by collecting responses from Microsoft Forms, analyzing results in Snowflake, generating reports in Power BI, and sharing with leadership via Teams.

naftiko: "0.5"
info:
  label: "Associate Engagement Survey Pipeline"
  description: "Processes associate engagement surveys by collecting responses from Microsoft Forms, analyzing results in Snowflake, generating reports in Power BI, and sharing with leadership via Teams."
  tags:
    - hr
    - engagement
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: associate-ops
      port: 8080
      tools:
        - name: associate-engagement-survey
          description: "Processes associate engagement surveys."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Associate Engagement Survey Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Checks the latest deployment pipeline status in Azure DevOps for a Kroger microservice, returning build result, environment, and release timestamp.

naftiko: "0.5"
info:
  label: "Azure DevOps Deployment Status"
  description: "Checks the latest deployment pipeline status in Azure DevOps for a Kroger microservice, returning build result, environment, and release timestamp."
  tags:
    - devops
    - azure-devops
    - deployment
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: get-deployment-status
          description: "Retrieve the latest Azure DevOps pipeline run status for a given Kroger service."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azdo.get-latest-run"
          with:
            project: "{{project_name}}"
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
            - name: status
              type: string
              mapping: "$.value[0].state"
            - name: finished_date
              type: string
              mapping: "$.value[0].finishedDate"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/kroger"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: pipeline-runs
          path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.0&$top=1"
          inputParameters:
            - name: project
              in: path
            - name: pipeline_id
              in: path
          operations:
            - name: get-latest-run
              method: GET

Reads cold chain temperature sensor data from Azure IoT Hub for perishable goods monitoring.

naftiko: "0.5"
info:
  label: "Azure IoT Hub Cold Chain Sensor"
  description: "Reads cold chain temperature sensor data from Azure IoT Hub for perishable goods monitoring."
  tags:
    - cold-chain
    - azure-iot
capability:
  exposes:
    - type: mcp
      namespace: cold-chain
      port: 8080
      tools:
        - name: get-sensor-data
          description: "Read cold chain sensor data from IoT Hub."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "The device id." 
          call: "iothub.get-telemetry"
          with:
            device_id: "{{device_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: iothub
      baseUri: "https://kroger-iothub.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iothub_token"
      resources:
        - name: telemetry
          path: "/telemetry"
          operations:
            - name: get-telemetry
              method: GET

Tracks scratch bakery production costs by pulling ingredient costs from SAP, calculating per-unit costs in Snowflake, comparing against targets, and reporting variances.

naftiko: "0.5"
info:
  label: "Bakery Scratch Production Cost Pipeline"
  description: "Tracks scratch bakery production costs by pulling ingredient costs from SAP, calculating per-unit costs in Snowflake, comparing against targets, and reporting variances."
  tags:
    - bakery
    - costing
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bakery-ops
      port: 8080
      tools:
        - name: bakery-scratch-production-cost
          description: "Tracks scratch bakery production costs."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Bakery Scratch Production Cost Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Retrieves demand forecasts from Blue Yonder for product demand planning and inventory optimization.

naftiko: "0.5"
info:
  label: "Blue Yonder Demand Forecast Retrieval"
  description: "Retrieves demand forecasts from Blue Yonder for product demand planning and inventory optimization."
  tags:
    - demand-planning
    - blue-yonder
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: get-forecast
          description: "Retrieve demand forecast for a product category."
          inputParameters:
            - name: category_id
              in: body
              type: string
              description: "The category id." 
          call: "blueyonder.get-forecast"
          with:
            category_id: "{{category_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: blueyonder
      baseUri: "https://kroger-blueyonder.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.blueyonder_token"
      resources:
        - name: forecasts
          path: "/forecasts"
          operations:
            - name: get-forecast
              method: GET

Retrieves market share data from Circana (formerly IRI) for a given product category and market area, returning Kroger share versus competitors.

naftiko: "0.5"
info:
  label: "Circana Market Share Data"
  description: "Retrieves market share data from Circana (formerly IRI) for a given product category and market area, returning Kroger share versus competitors."
  tags:
    - analytics
    - circana
    - market-intelligence
capability:
  exposes:
    - type: mcp
      namespace: market-intelligence
      port: 8080
      tools:
        - name: get-market-share
          description: "Fetch Circana market share data by product category and market."
          inputParameters:
            - name: category_id
              in: body
              type: string
              description: "The Circana product category identifier."
            - name: market_code
              in: body
              type: string
              description: "The geographic market code."
          call: "circana.get-share-data"
          with:
            category_id: "{{category_id}}"
            market_code: "{{market_code}}"
          outputParameters:
            - name: kroger_share
              type: number
              mapping: "$.data.kroger_share_pct"
            - name: category_total
              type: number
              mapping: "$.data.category_volume"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_api_token"
      resources:
        - name: market-share
          path: "/market-share?category={{category_id}}&market={{market_code}}"
          inputParameters:
            - name: category_id
              in: query
            - name: market_code
              in: query
          operations:
            - name: get-share-data
              method: GET

Handles ClickList order exceptions by identifying substitution needs from the order management system, notifying personal shoppers via Teams, and updating customer preferences in Salesforce.

naftiko: "0.5"
info:
  label: "Click List Order Exception Handler"
  description: "Handles ClickList order exceptions by identifying substitution needs from the order management system, notifying personal shoppers via Teams, and updating customer preferences in Salesforce."
  tags:
    - e-commerce
    - clicklist
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: click-ops
      port: 8080
      tools:
        - name: click-list-order-exception-handler
          description: "Handles ClickList order exceptions."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Click List Order Exception Handler complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Coordinates community food donations by identifying surplus inventory from SAP, scheduling pickups with food banks via Salesforce, generating donation receipts in SharePoint, and tracking totals.

naftiko: "0.5"
info:
  label: "Community Donation Coordination Orchestrator"
  description: "Coordinates community food donations by identifying surplus inventory from SAP, scheduling pickups with food banks via Salesforce, generating donation receipts in SharePoint, and tracking totals."
  tags:
    - community
    - donations
    - sap
    - salesforce
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: community-ops
      port: 8080
      tools:
        - name: community-donation-coordination
          description: "Coordinates community food donations."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Community Donation Coordination Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Pulls food safety inspection data from ServiceNow, labor compliance records from PeopleSoft, financial controls from Oracle Cloud, compiles into a report on SharePoint, and notifies the compliance team in Teams.

naftiko: "0.5"
info:
  label: "Compliance Audit Report Generator"
  description: "Pulls food safety inspection data from ServiceNow, labor compliance records from PeopleSoft, financial controls from Oracle Cloud, compiles into a report on SharePoint, and notifies the compliance team in Teams."
  tags:
    - compliance
    - audit
    - servicenow
    - peoplesoft
    - oracle-cloud
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-audit
      port: 8080
      tools:
        - name: generate-compliance-report
          description: "Given a store ID and audit period, compile compliance data from all sources and publish the report."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store identifier."
            - name: audit_period_start
              in: body
              type: string
              description: "Audit period start (YYYY-MM-DD)."
            - name: audit_period_end
              in: body
              type: string
              description: "Audit period end (YYYY-MM-DD)."
          steps:
            - name: get-inspection-records
              type: call
              call: "servicenow.query-incidents"
              with:
                query: "store_id={{store_id}}^category=food_safety^opened_at>={{audit_period_start}}^opened_at<={{audit_period_end}}"
            - name: get-labor-compliance
              type: call
              call: "peoplesoft.get-compliance-records"
              with:
                store_id: "{{store_id}}"
                from_date: "{{audit_period_start}}"
                to_date: "{{audit_period_end}}"
            - name: get-financial-controls
              type: call
              call: "oracle-cloud.get-audit-findings"
              with:
                location_code: "{{store_id}}"
                period_start: "{{audit_period_start}}"
                period_end: "{{audit_period_end}}"
            - name: publish-report
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "kroger-compliance"
                file_path: "AuditReports/{{store_id}}/{{audit_period_end}}_compliance_report.json"
                content: "{storeId: '{{store_id}}', period: '{{audit_period_start}} to {{audit_period_end}}', inspections: {{get-inspection-records.count}}, laborViolations: {{get-labor-compliance.violation_count}}, financialFindings: {{get-financial-controls.finding_count}}}"
            - name: notify-compliance-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "compliance"
                channel_id: "audit-reports"
                text: "Compliance report published for store {{store_id}} ({{audit_period_start}} to {{audit_period_end}}). Food safety inspections: {{get-inspection-records.count}}. Labor compliance issues: {{get-labor-compliance.violation_count}}. Financial findings: {{get-financial-controls.finding_count}}. Report: {{publish-report.url}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: query-incidents
              method: GET
    - type: http
      namespace: peoplesoft
      baseUri: "https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: compliance
          path: "/compliance-records?store_id={{store_id}}&from={{from_date}}&to={{to_date}}"
          inputParameters:
            - name: store_id
              in: query
            - name: from_date
              in: query
            - name: to_date
              in: query
          operations:
            - name: get-compliance-records
              method: GET
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: audit-findings
          path: "/auditFindings?locationCode={{location_code}}&periodStart={{period_start}}&periodEnd={{period_end}}"
          inputParameters:
            - name: location_code
              in: query
            - name: period_start
              in: query
            - name: period_end
              in: query
          operations:
            - name: get-audit-findings
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: create-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Searches Kroger's Confluence knowledge base for store operations procedures by keyword, returning matching page titles, URLs, and last-updated dates.

naftiko: "0.5"
info:
  label: "Confluence Store Ops Knowledge Lookup"
  description: "Searches Kroger's Confluence knowledge base for store operations procedures by keyword, returning matching page titles, URLs, and last-updated dates."
  tags:
    - knowledge-management
    - confluence
    - store-ops
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-store-procedures
          description: "Search Confluence for store operations procedures by keyword."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The keyword or phrase to search for."
          call: "confluence.search-content"
          with:
            cql: "type=page AND space=STOREOPS AND text~'{{search_query}}'"
            limit: "10"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://kroger.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-content
              method: GET

Monitors the status of Confluent Kafka event streams for real-time data pipeline health.

naftiko: "0.5"
info:
  label: "Confluent Kafka Event Stream Status"
  description: "Monitors the status of Confluent Kafka event streams for real-time data pipeline health."
  tags:
    - streaming
    - kafka
capability:
  exposes:
    - type: mcp
      namespace: event-streams
      port: 8080
      tools:
        - name: get-stream-status
          description: "Check Kafka event stream status."
          inputParameters:
            - name: topic_name
              in: body
              type: string
              description: "The topic name." 
          call: "kafka.get-topic-status"
          with:
            topic_name: "{{topic_name}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: kafka
      baseUri: "https://kroger-kafka.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_token"
      resources:
        - name: topics
          path: "/topics"
          operations:
            - name: get-topic-status
              method: GET

Manages health clinic appointment capacity by pulling scheduling data, optimizing slot allocation in Snowflake, updating the booking system, and notifying clinic managers.

naftiko: "0.5"
info:
  label: "Health Clinic Appointment Capacity Pipeline"
  description: "Manages health clinic appointment capacity by pulling scheduling data, optimizing slot allocation in Snowflake, updating the booking system, and notifying clinic managers."
  tags:
    - health-clinic
    - scheduling
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: covid-ops
      port: 8080
      tools:
        - name: covid-testing-site-capacity
          description: "Manages health clinic appointment capacity."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Health Clinic Appointment Capacity Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

When a customer checks in for curbside pickup via the Kroger app, retrieves order details, updates fulfillment status in ServiceNow, and sends real-time updates to the customer and the store runner via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Curbside Pickup Notification Workflow"
  description: "When a customer checks in for curbside pickup via the Kroger app, retrieves order details, updates fulfillment status in ServiceNow, and sends real-time updates to the customer and the store runner via Microsoft Teams."
  tags:
    - e-commerce
    - pickup
    - servicenow
    - microsoft-teams
    - customer-experience
capability:
  exposes:
    - type: mcp
      namespace: curbside-pickup
      port: 8080
      tools:
        - name: process-curbside-checkin
          description: "Given an order ID, parking spot, and store ID, update systems and notify all parties."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The pickup order identifier."
            - name: parking_spot
              in: body
              type: string
              description: "The parking spot number."
            - name: store_id
              in: body
              type: string
              description: "The store location."
          steps:
            - name: get-order
              type: call
              call: "kroger-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: update-fulfillment
              type: call
              call: "servicenow.update-task"
              with:
                task_id: "{{get-order.fulfillment_task_id}}"
                state: "in_progress"
                work_notes: "Customer checked in. Parking spot: {{parking_spot}}."
            - name: notify-runner
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-{{store_id}}"
                channel_id: "curbside"
                text: "PICKUP READY: Order {{order_id}} — Customer in spot {{parking_spot}}. {{get-order.bag_count}} bags, {{get-order.item_count}} items. Customer: {{get-order.customer_name}}. Vehicle: {{get-order.vehicle_description}}."
  consumes:
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task/{{task_id}}"
          inputParameters:
            - name: task_id
              in: path
          operations:
            - name: update-task
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a customer complaint arrives, looks up order history in the Kroger API, retrieves the loyalty profile from Salesforce, creates a ServiceNow case, and sends a personalized apology email via Salesforce Marketing Cloud.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Pipeline"
  description: "When a customer complaint arrives, looks up order history in the Kroger API, retrieves the loyalty profile from Salesforce, creates a ServiceNow case, and sends a personalized apology email via Salesforce Marketing Cloud."
  tags:
    - customer-service
    - salesforce
    - servicenow
    - salesforce-marketing-cloud
    - loyalty
capability:
  exposes:
    - type: mcp
      namespace: customer-complaints
      port: 8080
      tools:
        - name: process-complaint
          description: "Given a customer email, order ID, and complaint details, look up history, create a case, and send an apology."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "The complaining customer's email."
            - name: order_id
              in: body
              type: string
              description: "The order ID related to the complaint."
            - name: complaint_text
              in: body
              type: string
              description: "The customer's complaint description."
          steps:
            - name: get-order-history
              type: call
              call: "kroger-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-customer
              type: call
              call: "salesforce.get-contact-by-email"
              with:
                email: "{{customer_email}}"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer complaint: order {{order_id}}"
                description: "Customer: {{get-customer.full_name}} ({{get-customer.loyalty_tier}}). Order: {{order_id}} placed {{get-order-history.order_date}}. Complaint: {{complaint_text}}."
                category: "customer_complaint"
                assigned_group: "Customer_Service"
            - name: send-acknowledgment
              type: call
              call: "sfmc.send-triggered-email"
              with:
                email: "{{customer_email}}"
                template: "complaint_acknowledgment"
                data: "{firstName: '{{get-customer.first_name}}', caseNumber: '{{create-case.number}}', orderId: '{{order_id}}'}"
  consumes:
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query?q=SELECT+Id,FirstName,Full_Name__c,Loyalty_Tier__c+FROM+Contact+WHERE+Email='{{email}}'"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-contact-by-email
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: triggered-sends
          path: "/email/messages"
          operations:
            - name: send-triggered-email
              method: POST

Analyzes customer complaint trends by aggregating data from Zendesk, running sentiment analysis in Snowflake, generating trend reports in Tableau, and alerting customer experience leaders.

naftiko: "0.5"
info:
  label: "Customer Complaint Trend Analysis Pipeline"
  description: "Analyzes customer complaint trends by aggregating data from Zendesk, running sentiment analysis in Snowflake, generating trend reports in Tableau, and alerting customer experience leaders."
  tags:
    - customer-experience
    - complaints
    - zendesk
    - snowflake
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-ops
      port: 8080
      tools:
        - name: customer-complaint-trend-analysis
          description: "Analyzes customer complaint trends."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Customer Complaint Trend Analysis Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Queries Datadog for current infrastructure health metrics for a given Kroger store, including POS system uptime, network latency, and active alerts.

naftiko: "0.5"
info:
  label: "Datadog Store Infrastructure Health"
  description: "Queries Datadog for current infrastructure health metrics for a given Kroger store, including POS system uptime, network latency, and active alerts."
  tags:
    - monitoring
    - datadog
    - store-ops
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: store-monitoring
      port: 8080
      tools:
        - name: get-store-health
          description: "Retrieve infrastructure health metrics from Datadog for a Kroger store location by store tag."
          inputParameters:
            - name: store_tag
              in: body
              type: string
              description: "The Datadog tag for the store (e.g. store:kroger-0412)."
          call: "datadog.query-metrics"
          with:
            query: "avg:system.cpu.user{{{store_tag}}} by {host}"
            from: "now-1h"
            to: "now"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET

Plans deli and bakery production by pulling demand forecasts from Blue Yonder, scheduling production in Kronos, ordering ingredients via SAP, and notifying department managers.

naftiko: "0.5"
info:
  label: "Deli Bakery Production Planning Pipeline"
  description: "Plans deli and bakery production by pulling demand forecasts from Blue Yonder, scheduling production in Kronos, ordering ingredients via SAP, and notifying department managers."
  tags:
    - production-planning
    - deli-bakery
    - blue-yonder
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deli-ops
      port: 8080
      tools:
        - name: deli-bakery-production-planning
          description: "Plans deli and bakery production."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Deli Bakery Production Planning Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Pulls pending delivery orders from the Kroger API, optimizes routes using Google Maps, updates driver assignments in PeopleSoft, and sends route details to drivers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Delivery Driver Route Optimization"
  description: "Pulls pending delivery orders from the Kroger API, optimizes routes using Google Maps, updates driver assignments in PeopleSoft, and sends route details to drivers via Microsoft Teams."
  tags:
    - logistics
    - delivery
    - google-maps
    - peoplesoft
    - microsoft-teams
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: delivery-routing
      port: 8080
      tools:
        - name: optimize-delivery-routes
          description: "Given a store ID and delivery window, fetch orders, optimize routes, assign drivers, and notify."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store fulfilling deliveries."
            - name: delivery_window
              in: body
              type: string
              description: "The delivery time window (e.g. 2PM-4PM)."
          steps:
            - name: get-pending-deliveries
              type: call
              call: "kroger-api.get-delivery-orders"
              with:
                store_id: "{{store_id}}"
                window: "{{delivery_window}}"
            - name: optimize-routes
              type: call
              call: "googlemaps.optimize-routes"
              with:
                origin: "{{get-pending-deliveries.store_address}}"
                destinations: "{{get-pending-deliveries.delivery_addresses}}"
            - name: assign-drivers
              type: call
              call: "peoplesoft.assign-delivery-shifts"
              with:
                store_id: "{{store_id}}"
                routes: "{{optimize-routes.route_assignments}}"
                window: "{{delivery_window}}"
            - name: notify-drivers
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-{{store_id}}"
                channel_id: "delivery"
                text: "Routes posted for {{delivery_window}} window: {{optimize-routes.route_count}} routes, {{get-pending-deliveries.order_count}} orders. Estimated total distance: {{optimize-routes.total_distance_miles}} miles. Check your assigned route in the driver app."
  consumes:
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: delivery-orders
          path: "/stores/{{store_id}}/deliveries?window={{window}}&status=pending"
          inputParameters:
            - name: store_id
              in: path
            - name: window
              in: query
          operations:
            - name: get-delivery-orders
              method: GET
    - type: http
      namespace: googlemaps
      baseUri: "https://routes.googleapis.com/distanceMatrix/v2"
      authentication:
        type: bearer
        token: "$secrets.google_maps_key"
      resources:
        - name: route-optimization
          path: "/computeRoutes"
          operations:
            - name: optimize-routes
              method: POST
    - type: http
      namespace: peoplesoft
      baseUri: "https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: delivery-shifts
          path: "/delivery-assignments"
          operations:
            - name: assign-delivery-shifts
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Pulls historical sales from Snowflake, runs demand forecast via Azure Machine Learning, stores predictions back in Snowflake, and notifies the planning team in Teams with forecast highlights.

naftiko: "0.5"
info:
  label: "Demand Forecasting Pipeline"
  description: "Pulls historical sales from Snowflake, runs demand forecast via Azure Machine Learning, stores predictions back in Snowflake, and notifies the planning team in Teams with forecast highlights."
  tags:
    - supply-chain
    - forecasting
    - snowflake
    - azure-machine-learning
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: run-demand-forecast
          description: "Given a product category and forecast horizon, generate demand predictions and notify the planning team."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The product category to forecast."
            - name: horizon_days
              in: body
              type: number
              description: "Number of days to forecast forward."
            - name: division_code
              in: body
              type: string
              description: "The Kroger division for regional forecasting."
          steps:
            - name: get-historical-sales
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT sale_date, SUM(units_sold) as daily_units FROM kroger_dw.sales.daily_transactions WHERE category = '{{category}}' AND division = '{{division_code}}' AND sale_date >= DATEADD(day, -365, CURRENT_DATE()) GROUP BY sale_date ORDER BY sale_date"
                warehouse: "KROGER_ANALYTICS_WH"
            - name: run-ml-forecast
              type: call
              call: "azureml.invoke-endpoint"
              with:
                endpoint_name: "kroger-demand-forecast"
                data: "{historical: '{{get-historical-sales.results}}', horizon: {{horizon_days}}, category: '{{category}}', division: '{{division_code}}'}"
            - name: store-predictions
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.supply_chain.demand_forecasts (category, division, forecast_date, predicted_units, confidence_interval, generated_at) SELECT '{{category}}', '{{division_code}}', forecast_date, predicted_units, confidence_interval, CURRENT_TIMESTAMP() FROM TABLE(RESULT_SCAN('{{run-ml-forecast.result_id}}'))"
                warehouse: "KROGER_SUPPLY_CHAIN_WH"
            - name: notify-planners
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "supply-chain-planning"
                channel_id: "forecasts"
                text: "Demand forecast complete for {{category}} ({{division_code}}): {{horizon_days}}-day horizon. Peak demand expected {{run-ml-forecast.peak_date}} at {{run-ml-forecast.peak_units}} units. Avg daily: {{run-ml-forecast.avg_daily_units}}. Confidence: {{run-ml-forecast.confidence_pct}}%."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: azureml
      baseUri: "https://kroger-ml.eastus.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: endpoints
          path: "/score"
          operations:
            - name: invoke-endpoint
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Creates a digital coupon campaign by defining the offer in Salesforce, configuring the audience in Salesforce Marketing Cloud, publishing to the Kroger app via the API, and tracking baseline metrics in Google Analytics.

naftiko: "0.5"
info:
  label: "Digital Coupon Campaign Launcher"
  description: "Creates a digital coupon campaign by defining the offer in Salesforce, configuring the audience in Salesforce Marketing Cloud, publishing to the Kroger app via the API, and tracking baseline metrics in Google Analytics."
  tags:
    - marketing
    - promotions
    - salesforce
    - salesforce-marketing-cloud
    - google-analytics
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: coupon-campaigns
      port: 8080
      tools:
        - name: launch-digital-coupon
          description: "Given coupon parameters, create the offer, configure the audience, publish to app, and set up tracking."
          inputParameters:
            - name: coupon_name
              in: body
              type: string
              description: "Name of the coupon campaign."
            - name: discount_value
              in: body
              type: string
              description: "Discount amount or percentage."
            - name: target_upc_list
              in: body
              type: string
              description: "Comma-separated UPCs eligible for the coupon."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date (YYYY-MM-DD)."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date (YYYY-MM-DD)."
          steps:
            - name: create-offer
              type: call
              call: "salesforce.create-coupon-offer"
              with:
                name: "{{coupon_name}}"
                discount: "{{discount_value}}"
                eligible_upcs: "{{target_upc_list}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: configure-audience
              type: call
              call: "sfmc.create-audience-segment"
              with:
                segment_name: "coupon_{{create-offer.offer_id}}"
                criteria: "active_loyalty_members_with_category_affinity"
            - name: publish-to-app
              type: call
              call: "kroger-api.publish-coupon"
              with:
                offer_id: "{{create-offer.offer_id}}"
                audience_id: "{{configure-audience.segment_id}}"
            - name: setup-tracking
              type: call
              call: "ga.create-campaign"
              with:
                campaign_name: "coupon_{{create-offer.offer_id}}"
                source: "kroger_app"
                medium: "digital_coupon"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: coupon-offers
          path: "/sobjects/Coupon_Offer__c"
          operations:
            - name: create-coupon-offer
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/contacts/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: audiences
          path: "/audiences"
          operations:
            - name: create-audience-segment
              method: POST
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: coupons
          path: "/coupons/publish"
          operations:
            - name: publish-coupon
              method: POST
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: campaigns
          path: "/properties/kroger-ecommerce/campaigns"
          operations:
            - name: create-campaign
              method: POST

Analyzes digital coupon performance by pulling redemption data from Snowflake, calculating ROI metrics, generating performance reports in Tableau, and sharing with marketing leaders.

naftiko: "0.5"
info:
  label: "Digital Coupon Performance Analytics Pipeline"
  description: "Analyzes digital coupon performance by pulling redemption data from Snowflake, calculating ROI metrics, generating performance reports in Tableau, and sharing with marketing leaders."
  tags:
    - marketing
    - coupons
    - snowflake
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: digital-ops
      port: 8080
      tools:
        - name: digital-coupon-performance-analytics
          description: "Analyzes digital coupon performance."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Digital Coupon Performance Analytics Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Allocates distribution center labor by pulling volume forecasts from Blue Yonder, scheduling associates in Kronos, optimizing assignments, and notifying DC managers via Teams.

naftiko: "0.5"
info:
  label: "Distribution Center Labor Allocation Pipeline"
  description: "Allocates distribution center labor by pulling volume forecasts from Blue Yonder, scheduling associates in Kronos, optimizing assignments, and notifying DC managers via Teams."
  tags:
    - distribution
    - labor
    - blue-yonder
    - kronos
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: distribution-ops
      port: 8080
      tools:
        - name: distribution-center-labor-allocation
          description: "Allocates distribution center labor."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Distribution Center Labor Allocation Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Detects abandoned carts via Google Analytics, enriches customer data from Salesforce, sends personalized recovery emails through Salesforce Marketing Cloud, and logs the campaign interaction in Snowflake.

naftiko: "0.5"
info:
  label: "E-Commerce Cart Abandonment Recovery"
  description: "Detects abandoned carts via Google Analytics, enriches customer data from Salesforce, sends personalized recovery emails through Salesforce Marketing Cloud, and logs the campaign interaction in Snowflake."
  tags:
    - e-commerce
    - marketing
    - google-analytics
    - salesforce
    - salesforce-marketing-cloud
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: cart-recovery
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Given a cart session ID and customer email, enrich the profile, send recovery email, and log the interaction."
          inputParameters:
            - name: session_id
              in: body
              type: string
              description: "The abandoned cart session identifier."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
          steps:
            - name: get-cart-data
              type: call
              call: "ga.get-session-data"
              with:
                session_id: "{{session_id}}"
                property: "properties/kroger-ecommerce"
            - name: get-customer-profile
              type: call
              call: "salesforce.get-contact-by-email"
              with:
                email: "{{customer_email}}"
            - name: send-recovery-email
              type: call
              call: "sfmc.send-triggered-email"
              with:
                email: "{{customer_email}}"
                template: "cart_abandonment"
                data: "{firstName: '{{get-customer-profile.first_name}}', cartItems: '{{get-cart-data.cart_items}}', cartTotal: '{{get-cart-data.cart_total}}', loyaltyTier: '{{get-customer-profile.loyalty_tier}}'}"
            - name: log-recovery-attempt
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.marketing.cart_recovery_log (session_id, customer_email, cart_total, items_count, loyalty_tier, sent_at) VALUES ('{{session_id}}', '{{customer_email}}', {{get-cart-data.cart_total}}, {{get-cart-data.item_count}}, '{{get-customer-profile.loyalty_tier}}', CURRENT_TIMESTAMP())"
                warehouse: "KROGER_MARKETING_WH"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: sessions
          path: "/{{property}}/sessions/{{session_id}}"
          inputParameters:
            - name: property
              in: path
            - name: session_id
              in: path
          operations:
            - name: get-session-data
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query?q=SELECT+Id,FirstName,Loyalty_Tier__c+FROM+Contact+WHERE+Email='{{email}}'"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-contact-by-email
              method: GET
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: triggered-sends
          path: "/email/messages"
          operations:
            - name: send-triggered-email
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Personalizes e-commerce experience by pulling customer behavior from 84.51 insights, generating recommendations in Snowflake, updating product rankings, and A/B testing via Google Analytics.

naftiko: "0.5"
info:
  label: "E-Commerce Personalization Pipeline"
  description: "Personalizes e-commerce experience by pulling customer behavior from 84.51 insights, generating recommendations in Snowflake, updating product rankings, and A/B testing via Google Analytics."
  tags:
    - e-commerce
    - personalization
    - 84-51
    - snowflake
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: e-ops
      port: 8080
      tools:
        - name: e-commerce-personalization
          description: "Personalizes e-commerce experience."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "E-Commerce Personalization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Searches the Kroger product catalog in Elasticsearch by keyword, returning matched products with name, UPC, department, aisle, and current price.

naftiko: "0.5"
info:
  label: "Elasticsearch Product Search"
  description: "Searches the Kroger product catalog in Elasticsearch by keyword, returning matched products with name, UPC, department, aisle, and current price."
  tags:
    - search
    - elasticsearch
    - product-catalog
capability:
  exposes:
    - type: mcp
      namespace: product-search
      port: 8080
      tools:
        - name: search-products
          description: "Search the Kroger product catalog in Elasticsearch by keyword."
          inputParameters:
            - name: search_term
              in: body
              type: string
              description: "The product search keyword or phrase."
            - name: store_id
              in: body
              type: string
              description: "Optional store ID to filter by local availability."
          call: "elasticsearch.search-products"
          with:
            index: "kroger-product-catalog"
            query: "{{search_term}}"
            store_filter: "{{store_id}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://kroger-es.elastic-cloud.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: product-index
          path: "/{{index}}/_search"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: search-products
              method: POST

Pulls associate shift schedules from PeopleSoft, syncs to Microsoft Teams shift calendar, and posts upcoming schedule to the store's Teams channel for visibility.

naftiko: "0.5"
info:
  label: "Employee Scheduling Sync"
  description: "Pulls associate shift schedules from PeopleSoft, syncs to Microsoft Teams shift calendar, and posts upcoming schedule to the store's Teams channel for visibility."
  tags:
    - store-ops
    - hr
    - peoplesoft
    - microsoft-teams
    - scheduling
capability:
  exposes:
    - type: mcp
      namespace: scheduling
      port: 8080
      tools:
        - name: sync-store-schedule
          description: "Given a store ID and week start date, pull schedules from PeopleSoft and sync to Teams."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store location identifier."
            - name: week_start
              in: body
              type: string
              description: "The Monday date for the schedule week (YYYY-MM-DD)."
          steps:
            - name: get-schedule
              type: call
              call: "peoplesoft.get-store-schedule"
              with:
                store_id: "{{store_id}}"
                week_start: "{{week_start}}"
            - name: update-teams-shifts
              type: call
              call: "msteams.update-shifts"
              with:
                team_id: "store-{{store_id}}"
                schedule_data: "{{get-schedule.shifts}}"
            - name: post-schedule-summary
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-{{store_id}}"
                channel_id: "general"
                text: "Schedule posted for week of {{week_start}}: {{get-schedule.total_hours}} total hours across {{get-schedule.associate_count}} associates. {{get-schedule.open_shifts}} open shifts remaining."
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: schedules
          path: "/schedules?store_id={{store_id}}&week_start={{week_start}}"
          inputParameters:
            - name: store_id
              in: query
            - name: week_start
              in: query
          operations:
            - name: get-store-schedule
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: shifts
          path: "/teams/{{team_id}}/schedule/shifts"
          inputParameters:
            - name: team_id
              in: path
          operations:
            - name: update-shifts
              method: POST
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Schedules fleet maintenance by pulling vehicle telematics from Azure IoT, forecasting service needs in Snowflake, creating work orders in ServiceNow, and notifying fleet managers.

naftiko: "0.5"
info:
  label: "Fleet Maintenance Scheduling Orchestrator"
  description: "Schedules fleet maintenance by pulling vehicle telematics from Azure IoT, forecasting service needs in Snowflake, creating work orders in ServiceNow, and notifying fleet managers."
  tags:
    - fleet
    - maintenance
    - azure-iot
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fleet-ops
      port: 8080
      tools:
        - name: fleet-maintenance-scheduling
          description: "Schedules fleet maintenance."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Fleet Maintenance Scheduling Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Manages food recall responses by identifying affected products in SAP, pulling store inventory data, creating pull lists in SharePoint, and notifying all affected stores via Teams.

naftiko: "0.5"
info:
  label: "Food Recall Rapid Response Orchestrator"
  description: "Manages food recall responses by identifying affected products in SAP, pulling store inventory data, creating pull lists in SharePoint, and notifying all affected stores via Teams."
  tags:
    - food-safety
    - recall
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-ops
      port: 8080
      tools:
        - name: food-recall-rapid-response
          description: "Manages food recall responses."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Food Recall Rapid Response Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

When a temperature threshold breach is detected by Datadog IoT sensors, creates a ServiceNow critical incident, notifies the store food safety team in Teams, and logs the event in Snowflake for compliance reporting.

naftiko: "0.5"
info:
  label: "Food Safety Temperature Monitoring"
  description: "When a temperature threshold breach is detected by Datadog IoT sensors, creates a ServiceNow critical incident, notifies the store food safety team in Teams, and logs the event in Snowflake for compliance reporting."
  tags:
    - food-safety
    - datadog
    - servicenow
    - microsoft-teams
    - snowflake
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: food-safety
      port: 8080
      tools:
        - name: handle-temp-breach
          description: "Given a sensor ID, store ID, and temperature reading, create incident, notify team, and log for compliance."
          inputParameters:
            - name: sensor_id
              in: body
              type: string
              description: "The IoT temperature sensor identifier."
            - name: store_id
              in: body
              type: string
              description: "The affected store location."
            - name: current_temp
              in: body
              type: number
              description: "The current temperature reading in Fahrenheit."
            - name: threshold_temp
              in: body
              type: number
              description: "The allowable threshold temperature."
          steps:
            - name: get-sensor-history
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:iot.temperature{sensor_id:{{sensor_id}}}"
                from: "now-2h"
                to: "now"
            - name: create-critical-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "TEMP BREACH: Store {{store_id}}, sensor {{sensor_id}} at {{current_temp}}F (threshold: {{threshold_temp}}F)"
                description: "Temperature breach detected. Current: {{current_temp}}F. Threshold: {{threshold_temp}}F. 2-hour trend: {{get-sensor-history.trend}}. Immediate action required per food safety protocol."
                category: "food_safety"
                priority: "1"
                assigned_group: "Food_Safety"
            - name: notify-store-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-{{store_id}}"
                channel_id: "food-safety"
                text: "CRITICAL: Temperature breach at sensor {{sensor_id}}. Reading: {{current_temp}}F (limit: {{threshold_temp}}F). Incident {{create-critical-incident.number}} created. Check affected cases immediately. Do NOT sell product from this unit until cleared."
            - name: log-compliance-event
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.compliance.temp_breach_log (store_id, sensor_id, temp_reading, threshold, incident_number, detected_at) VALUES ('{{store_id}}', '{{sensor_id}}', {{current_temp}}, {{threshold_temp}}, '{{create-critical-incident.number}}', CURRENT_TIMESTAMP())"
                warehouse: "KROGER_COMPLIANCE_WH"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Reduces fresh department waste by analyzing spoilage data in Snowflake, adjusting orders in Blue Yonder, creating markdown recommendations, and alerting store managers via Teams.

naftiko: "0.5"
info:
  label: "Fresh Department Waste Reduction Pipeline"
  description: "Reduces fresh department waste by analyzing spoilage data in Snowflake, adjusting orders in Blue Yonder, creating markdown recommendations, and alerting store managers via Teams."
  tags:
    - waste-reduction
    - fresh
    - snowflake
    - blue-yonder
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fresh-ops
      port: 8080
      tools:
        - name: fresh-department-waste-reduction
          description: "Reduces fresh department waste."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Fresh Department Waste Reduction Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Optimizes fuel center pricing by analyzing competitor prices from market data, calculating optimal margins in Snowflake, updating POS pricing, and notifying fuel center managers.

naftiko: "0.5"
info:
  label: "Fuel Center Pricing Optimization Pipeline"
  description: "Optimizes fuel center pricing by analyzing competitor prices from market data, calculating optimal margins in Snowflake, updating POS pricing, and notifying fuel center managers."
  tags:
    - fuel
    - pricing
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fuel-ops
      port: 8080
      tools:
        - name: fuel-center-pricing-optimization
          description: "Optimizes fuel center pricing."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Fuel Center Pricing Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Checks the status of a GitHub Actions workflow run, fetches test results, and posts a build status summary to the engineering Teams channel with links to artifacts.

naftiko: "0.5"
info:
  label: "GitHub Actions CI/CD Pipeline Monitor"
  description: "Checks the status of a GitHub Actions workflow run, fetches test results, and posts a build status summary to the engineering Teams channel with links to artifacts."
  tags:
    - devops
    - github-actions
    - microsoft-teams
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: cicd-monitor
      port: 8080
      tools:
        - name: report-build-status
          description: "Given a GitHub repo and workflow run ID, fetch status and test results, then post to Teams."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository (org/repo format)."
            - name: run_id
              in: body
              type: string
              description: "The workflow run ID."
          steps:
            - name: get-run-status
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo}}"
                run_id: "{{run_id}}"
            - name: get-test-artifacts
              type: call
              call: "github.list-artifacts"
              with:
                repo: "{{repo}}"
                run_id: "{{run_id}}"
            - name: post-status
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "kroger-engineering"
                channel_id: "builds"
                text: "Build {{get-run-status.conclusion}}: {{repo}} #{{run_id}}. Branch: {{get-run-status.head_branch}}. Duration: {{get-run-status.duration_minutes}}m. Tests: {{get-test-artifacts.test_count}} ({{get-test-artifacts.pass_count}} passed). URL: {{get-run-status.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repo
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              method: GET
        - name: artifacts
          path: "/repos/{{repo}}/actions/runs/{{run_id}}/artifacts"
          inputParameters:
            - name: repo
              in: path
            - name: run_id
              in: path
          operations:
            - name: list-artifacts
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves Kroger.com e-commerce funnel metrics from Google Analytics for a specified date range, including sessions, add-to-cart rate, and checkout conversion.

naftiko: "0.5"
info:
  label: "Google Analytics E-Commerce Metrics"
  description: "Retrieves Kroger.com e-commerce funnel metrics from Google Analytics for a specified date range, including sessions, add-to-cart rate, and checkout conversion."
  tags:
    - analytics
    - google-analytics
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: ecommerce-analytics
      port: 8080
      tools:
        - name: get-ecommerce-funnel
          description: "Fetch e-commerce funnel metrics from Google Analytics for kroger.com by date range."
          inputParameters:
            - 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."
          call: "ga.run-report"
          with:
            property: "properties/kroger-ecommerce"
            dateRanges: "[{startDate: '{{start_date}}', endDate: '{{end_date}}'}]"
            metrics: "sessions,addToCarts,checkouts,purchases"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/{{property}}:runReport"
          inputParameters:
            - name: property
              in: path
          operations:
            - name: run-report
              method: POST

Analyzes shelf images using Google Cloud Vision API to detect out-of-stock conditions and planogram compliance.

naftiko: "0.5"
info:
  label: "Google Cloud Vision Shelf Scan"
  description: "Analyzes shelf images using Google Cloud Vision API to detect out-of-stock conditions and planogram compliance."
  tags:
    - computer-vision
    - google-cloud
capability:
  exposes:
    - type: mcp
      namespace: shelf-analytics
      port: 8080
      tools:
        - name: scan-shelf
          description: "Analyze a shelf image for stock conditions."
          inputParameters:
            - name: image_url
              in: body
              type: string
              description: "The image url." 
          call: "vision.analyze-image"
          with:
            image_url: "{{image_url}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: vision
      baseUri: "https://kroger-vision.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.vision_token"
      resources:
        - name: analysis
          path: "/analysis"
          operations:
            - name: analyze-image
              method: GET

Conducts hazmat compliance audits by pulling chemical inventory from SAP, verifying SDS documentation in SharePoint, creating audit findings in ServiceNow, and notifying the safety team.

naftiko: "0.5"
info:
  label: "Hazmat Compliance Audit Orchestrator"
  description: "Conducts hazmat compliance audits by pulling chemical inventory from SAP, verifying SDS documentation in SharePoint, creating audit findings in ServiceNow, and notifying the safety team."
  tags:
    - compliance
    - hazmat
    - sap
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hazmat-ops
      port: 8080
      tools:
        - name: hazmat-compliance-audit
          description: "Conducts hazmat compliance audits."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Hazmat Compliance Audit Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Captures a vendor marketing co-op lead from HubSpot, enriches with vendor data from Oracle Cloud, creates an opportunity in Salesforce, and notifies the vendor partnerships team in Teams.

naftiko: "0.5"
info:
  label: "HubSpot Vendor Marketing Lead Capture"
  description: "Captures a vendor marketing co-op lead from HubSpot, enriches with vendor data from Oracle Cloud, creates an opportunity in Salesforce, and notifies the vendor partnerships team in Teams."
  tags:
    - vendor-management
    - marketing
    - hubspot
    - oracle-cloud
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-marketing
      port: 8080
      tools:
        - name: process-vendor-lead
          description: "Given a HubSpot contact ID, enrich with vendor data, create opportunity, and notify partnerships."
          inputParameters:
            - name: hubspot_contact_id
              in: body
              type: string
              description: "The HubSpot contact identifier."
            - name: campaign_type
              in: body
              type: string
              description: "The co-op marketing campaign type (e.g. endcap, digital, circular)."
          steps:
            - name: get-hubspot-contact
              type: call
              call: "hubspot.get-contact"
              with:
                contact_id: "{{hubspot_contact_id}}"
            - name: get-vendor-details
              type: call
              call: "oracle-cloud.get-supplier-by-name"
              with:
                supplier_name: "{{get-hubspot-contact.company}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Co-op: {{get-hubspot-contact.company}} — {{campaign_type}}"
                vendor_id: "{{get-vendor-details.supplier_id}}"
                amount: "{{get-hubspot-contact.deal_value}}"
                stage: "Qualification"
            - name: notify-partnerships
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "vendor-partnerships"
                channel_id: "new-leads"
                text: "New vendor co-op lead: {{get-hubspot-contact.company}} ({{campaign_type}}). Contact: {{get-hubspot-contact.firstname}} {{get-hubspot-contact.lastname}}. Deal value: ${{get-hubspot-contact.deal_value}}. Salesforce opp: {{create-opportunity.opportunity_id}}."
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: suppliers
          path: "/suppliers?q=SupplierName={{supplier_name}}"
          inputParameters:
            - name: supplier_name
              in: query
          operations:
            - name: get-supplier-by-name
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Compares physical cycle count results entered in Oracle EBS against book inventory, logs variances in Snowflake, creates ServiceNow tasks for high-variance items, and updates the store's Tableau dashboard.

naftiko: "0.5"
info:
  label: "Inventory Cycle Count Reconciliation"
  description: "Compares physical cycle count results entered in Oracle EBS against book inventory, logs variances in Snowflake, creates ServiceNow tasks for high-variance items, and updates the store's Tableau dashboard."
  tags:
    - inventory
    - oracle-e-business-suite
    - snowflake
    - servicenow
    - tableau
    - store-ops
capability:
  exposes:
    - type: mcp
      namespace: cycle-count
      port: 8080
      tools:
        - name: reconcile-cycle-count
          description: "Given a store ID and cycle count batch ID, reconcile physical vs. book counts, log variances, and trigger follow-ups."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store identifier."
            - name: batch_id
              in: body
              type: string
              description: "The cycle count batch identifier."
          steps:
            - name: get-count-results
              type: call
              call: "oracle-ebs.get-cycle-count"
              with:
                store_id: "{{store_id}}"
                batch_id: "{{batch_id}}"
            - name: log-variances
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.inventory.cycle_count_variances SELECT * FROM TABLE(RESULT_SCAN('{{get-count-results.query_id}}')) WHERE abs_variance_pct > 5"
                warehouse: "KROGER_INVENTORY_WH"
            - name: create-variance-tasks
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Cycle count variances: store {{store_id}}, batch {{batch_id}}"
                description: "{{get-count-results.high_variance_count}} items with >5% variance. Total variance value: ${{get-count-results.total_variance_value}}. Top items: {{get-count-results.top_variance_items}}."
                assigned_group: "Inventory_Control"
                category: "cycle_count"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-extract"
              with:
                site_id: "kroger-stores"
                datasource_id: "inventory-accuracy-{{store_id}}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: cycle-counts
          path: "/cycle-counts?store_id={{store_id}}&batch_id={{batch_id}}"
          inputParameters:
            - name: store_id
              in: query
            - name: batch_id
              in: query
          operations:
            - name: get-cycle-count
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://kroger-tableau.online.tableau.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: site_id
              in: path
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

Checks warehouse slot availability in JDA warehouse management system for distribution planning.

naftiko: "0.5"
info:
  label: "JDA Warehouse Slot Availability"
  description: "Checks warehouse slot availability in JDA warehouse management system for distribution planning."
  tags:
    - warehouse
    - jda
capability:
  exposes:
    - type: mcp
      namespace: warehouse-mgmt
      port: 8080
      tools:
        - name: check-slots
          description: "Check warehouse slot availability."
          inputParameters:
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse id." 
          call: "jda.get-slots"
          with:
            warehouse_id: "{{warehouse_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: jda
      baseUri: "https://kroger-jda.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.jda_token"
      resources:
        - name: slots
          path: "/slots"
          operations:
            - name: get-slots
              method: GET

Consumes product price change events from Apache Kafka, transforms and loads them into Snowflake, and triggers a Tableau dashboard refresh for the pricing analytics team.

naftiko: "0.5"
info:
  label: "Kafka Event Stream to Snowflake Loader"
  description: "Consumes product price change events from Apache Kafka, transforms and loads them into Snowflake, and triggers a Tableau dashboard refresh for the pricing analytics team."
  tags:
    - data-engineering
    - apache-kafka
    - snowflake
    - tableau
    - pricing
capability:
  exposes:
    - type: mcp
      namespace: kafka-snowflake-loader
      port: 8080
      tools:
        - name: load-price-events
          description: "Given a Kafka topic and time window, consume events, load to Snowflake, and refresh the dashboard."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "The Kafka topic name (e.g. kroger.pricing.changes)."
            - name: from_offset
              in: body
              type: string
              description: "Starting offset or timestamp."
          steps:
            - name: consume-events
              type: call
              call: "kafka.consume-messages"
              with:
                topic: "{{topic}}"
                from_offset: "{{from_offset}}"
                max_messages: "10000"
            - name: load-to-snowflake
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "COPY INTO kroger_dw.pricing.price_change_events FROM @kroger_stage/{{consume-events.batch_file}} FILE_FORMAT = (TYPE = 'JSON')"
                warehouse: "KROGER_ETL_WH"
            - name: refresh-pricing-dashboard
              type: call
              call: "tableau.refresh-extract"
              with:
                site_id: "kroger-analytics"
                datasource_id: "pricing-changes"
  consumes:
    - type: http
      namespace: kafka
      baseUri: "https://kroger-kafka.confluent.cloud/kafka/v3"
      authentication:
        type: basic
        username: "$secrets.kafka_api_key"
        password: "$secrets.kafka_api_secret"
      resources:
        - name: consumer
          path: "/clusters/kroger-prod/topics/{{topic}}/records"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: consume-messages
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://kroger-tableau.online.tableau.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/{{site_id}}/datasources/{{datasource_id}}/refresh"
          inputParameters:
            - name: site_id
              in: path
            - name: datasource_id
              in: path
          operations:
            - name: refresh-extract
              method: POST

Retrieves associate work schedules from Kronos workforce management system by employee ID.

naftiko: "0.5"
info:
  label: "Kronos Associate Schedule Lookup"
  description: "Retrieves associate work schedules from Kronos workforce management system by employee ID."
  tags:
    - scheduling
    - kronos
capability:
  exposes:
    - type: mcp
      namespace: scheduling
      port: 8080
      tools:
        - name: get-schedule
          description: "Look up associate schedule by employee ID."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee id." 
          call: "kronos.get-schedule"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: kronos
      baseUri: "https://kroger-kronos.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kronos_token"
      resources:
        - name: schedule
          path: "/schedule"
          operations:
            - name: get-schedule
              method: GET

Optimizes last-mile delivery by pulling orders from the OMS, optimizing routes via Google Maps, assigning drivers in Kronos, and sending customer ETAs via Twilio.

naftiko: "0.5"
info:
  label: "Last Mile Delivery Optimization Pipeline"
  description: "Optimizes last-mile delivery by pulling orders from the OMS, optimizing routes via Google Maps, assigning drivers in Kronos, and sending customer ETAs via Twilio."
  tags:
    - delivery
    - last-mile
    - google-maps
    - twilio
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: last-ops
      port: 8080
      tools:
        - name: last-mile-delivery-optimization
          description: "Optimizes last-mile delivery."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Last Mile Delivery Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Retrieves a Kroger Plus loyalty member profile from Salesforce by member ID, returning points balance, tier status, and preferred store.

naftiko: "0.5"
info:
  label: "Loyalty Member Profile Lookup"
  description: "Retrieves a Kroger Plus loyalty member profile from Salesforce by member ID, returning points balance, tier status, and preferred store."
  tags:
    - loyalty
    - salesforce
    - customer-experience
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: get-loyalty-member
          description: "Fetch a Kroger Plus loyalty member profile by member ID. Returns points balance, tier, preferred store, and enrollment date."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The Kroger Plus loyalty member ID."
          call: "salesforce.get-loyalty-member"
          with:
            member_id: "{{member_id}}"
          outputParameters:
            - name: points_balance
              type: number
              mapping: "$.records[0].Points_Balance__c"
            - name: tier
              type: string
              mapping: "$.records[0].Tier__c"
            - name: preferred_store
              type: string
              mapping: "$.records[0].Preferred_Store__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty-members
          path: "/query?q=SELECT+Id,Points_Balance__c,Tier__c,Preferred_Store__c+FROM+Loyalty_Member__c+WHERE+Member_Id__c='{{member_id}}'"
          inputParameters:
            - name: member_id
              in: query
          operations:
            - name: get-loyalty-member
              method: GET

When a customer redeems Kroger Plus fuel points, validates the balance in Salesforce, processes the redemption via the Kroger API, logs the transaction in Snowflake, and sends a receipt via Salesforce Marketing Cloud.

naftiko: "0.5"
info:
  label: "Loyalty Points Redemption Processor"
  description: "When a customer redeems Kroger Plus fuel points, validates the balance in Salesforce, processes the redemption via the Kroger API, logs the transaction in Snowflake, and sends a receipt via Salesforce Marketing Cloud."
  tags:
    - loyalty
    - salesforce
    - snowflake
    - salesforce-marketing-cloud
    - fuel-rewards
capability:
  exposes:
    - type: mcp
      namespace: loyalty-redemption
      port: 8080
      tools:
        - name: redeem-fuel-points
          description: "Given a loyalty member ID and points to redeem, validate balance, process redemption, log it, and send receipt."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "The Kroger Plus loyalty member ID."
            - name: points_to_redeem
              in: body
              type: number
              description: "Number of fuel points to redeem."
            - name: fuel_station_id
              in: body
              type: string
              description: "The fuel station location ID."
          steps:
            - name: get-member
              type: call
              call: "salesforce.get-loyalty-member"
              with:
                member_id: "{{member_id}}"
            - name: process-redemption
              type: call
              call: "kroger-api.redeem-points"
              with:
                member_id: "{{member_id}}"
                points: "{{points_to_redeem}}"
                station_id: "{{fuel_station_id}}"
            - name: log-transaction
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.loyalty.redemptions (member_id, points_redeemed, fuel_discount, station_id, timestamp) VALUES ('{{member_id}}', {{points_to_redeem}}, '{{process-redemption.discount_per_gallon}}', '{{fuel_station_id}}', CURRENT_TIMESTAMP())"
                warehouse: "KROGER_LOYALTY_WH"
            - name: send-receipt
              type: call
              call: "sfmc.send-triggered-email"
              with:
                email: "{{get-member.email}}"
                template: "fuel_points_receipt"
                data: "{memberId: '{{member_id}}', pointsRedeemed: {{points_to_redeem}}, discount: '{{process-redemption.discount_per_gallon}}', remainingBalance: '{{process-redemption.remaining_points}}'}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty-members
          path: "/query?q=SELECT+Id,Email__c,Points_Balance__c+FROM+Loyalty_Member__c+WHERE+Member_Id__c='{{member_id}}'"
          inputParameters:
            - name: member_id
              in: query
          operations:
            - name: get-loyalty-member
              method: GET
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: fuel-redemptions
          path: "/loyalty/redeem"
          operations:
            - name: redeem-points
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: triggered-sends
          path: "/email/messages"
          operations:
            - name: send-triggered-email
              method: POST

Pulls top deals from Oracle Cloud, personalized recommendations from Salesforce, and builds a weekly newsletter in MailChimp targeted to loyalty members, then logs send metrics in Snowflake.

naftiko: "0.5"
info:
  label: "MailChimp Weekly Newsletter Orchestrator"
  description: "Pulls top deals from Oracle Cloud, personalized recommendations from Salesforce, and builds a weekly newsletter in MailChimp targeted to loyalty members, then logs send metrics in Snowflake."
  tags:
    - marketing
    - mailchimp
    - oracle-cloud
    - salesforce
    - snowflake
    - loyalty
capability:
  exposes:
    - type: mcp
      namespace: newsletter
      port: 8080
      tools:
        - name: send-weekly-newsletter
          description: "Given a campaign week and division, compile deals, build newsletter, send, and log metrics."
          inputParameters:
            - name: campaign_week
              in: body
              type: string
              description: "The campaign week identifier (e.g. 2026-W13)."
            - name: division_code
              in: body
              type: string
              description: "The Kroger division code."
          steps:
            - name: get-top-deals
              type: call
              call: "oracle-cloud.get-promotional-items"
              with:
                division: "{{division_code}}"
                week_start: "{{campaign_week}}"
            - name: get-audience-segments
              type: call
              call: "salesforce.get-loyalty-segments"
              with:
                division: "{{division_code}}"
            - name: create-campaign
              type: call
              call: "mailchimp.create-campaign"
              with:
                list_id: "kroger-loyalty-{{division_code}}"
                subject: "Your Weekly Deals — {{campaign_week}}"
                template_id: "weekly_deals"
                content: "{deals: '{{get-top-deals.items}}', segments: '{{get-audience-segments.segment_ids}}'}"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{create-campaign.campaign_id}}"
            - name: log-send
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.marketing.newsletter_sends (campaign_week, division, campaign_id, deal_count, audience_size, sent_at) VALUES ('{{campaign_week}}', '{{division_code}}', '{{create-campaign.campaign_id}}', {{get-top-deals.item_count}}, {{get-audience-segments.total_members}}, CURRENT_TIMESTAMP())"
                warehouse: "KROGER_MARKETING_WH"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: promotions
          path: "/promotionalItems?division={{division}}&weekStart={{week_start}}"
          inputParameters:
            - name: division
              in: query
            - name: week_start
              in: query
          operations:
            - name: get-promotional-items
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty-segments
          path: "/query?q=SELECT+Id,Segment_Name__c,Member_Count__c+FROM+Loyalty_Segment__c+WHERE+Division__c='{{division}}'"
          inputParameters:
            - name: division
              in: query
          operations:
            - name: get-loyalty-segments
              method: GET
    - 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
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Tracks meat department yields by collecting production data, analyzing against standards in Snowflake, generating yield reports, and alerting district managers on variances.

naftiko: "0.5"
info:
  label: "Meat Department Yield Tracking Pipeline"
  description: "Tracks meat department yields by collecting production data, analyzing against standards in Snowflake, generating yield reports, and alerting district managers on variances."
  tags:
    - production
    - yield-tracking
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: meat-ops
      port: 8080
      tools:
        - name: meat-department-yield-tracking
          description: "Tracks meat department yields."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Meat Department Yield Tracking Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Consolidates milk run delivery routes by analyzing delivery volumes in Snowflake, optimizing routes via Google Maps, updating schedules in the TMS, and notifying logistics teams.

naftiko: "0.5"
info:
  label: "Milk Run Route Consolidation Pipeline"
  description: "Consolidates milk run delivery routes by analyzing delivery volumes in Snowflake, optimizing routes via Google Maps, updating schedules in the TMS, and notifying logistics teams."
  tags:
    - logistics
    - routing
    - snowflake
    - google-maps
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: milk-ops
      port: 8080
      tools:
        - name: milk-run-route-consolidation
          description: "Consolidates milk run delivery routes."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Milk Run Route Consolidation Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Reviews natural and organic product categories by pulling sales data from Snowflake, comparing trends against Circana market data, and generating category reports in SharePoint.

naftiko: "0.5"
info:
  label: "Natural Organic Category Review Pipeline"
  description: "Reviews natural and organic product categories by pulling sales data from Snowflake, comparing trends against Circana market data, and generating category reports in SharePoint."
  tags:
    - category-management
    - natural-organic
    - snowflake
    - circana
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: natural-ops
      port: 8080
      tools:
        - name: natural-organic-category-review
          description: "Reviews natural and organic product categories."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Natural Organic Category Review Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

On new hire creation in PeopleSoft, provisions a Microsoft Teams account, creates a ServiceNow onboarding ticket, sets up training in Pluralsight, and sends a welcome message via Teams.

naftiko: "0.5"
info:
  label: "New Associate Onboarding Orchestrator"
  description: "On new hire creation in PeopleSoft, provisions a Microsoft Teams account, creates a ServiceNow onboarding ticket, sets up training in Pluralsight, and sends a welcome message via Teams."
  tags:
    - hr
    - onboarding
    - peoplesoft
    - microsoft-teams
    - servicenow
    - pluralsight
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: onboard-associate
          description: "Given a PeopleSoft employee ID and start date, orchestrate the full onboarding sequence."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The PeopleSoft employee ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The start date in YYYY-MM-DD format."
            - name: store_id
              in: body
              type: string
              description: "The store the associate is joining."
            - name: department
              in: body
              type: string
              description: "Department (e.g. produce, deli, front-end)."
          steps:
            - name: get-employee
              type: call
              call: "peoplesoft.get-employee"
              with:
                employee_id: "{{employee_id}}"
            - name: open-onboarding-ticket
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "New associate onboarding: {{get-employee.full_name}} at store {{store_id}}"
                description: "Department: {{department}}. Start date: {{start_date}}. Provision badge, locker, register access."
                assigned_group: "Store_HR_{{store_id}}"
                category: "hr_onboarding"
            - name: assign-training
              type: call
              call: "pluralsight.assign-channel"
              with:
                user_email: "{{get-employee.email}}"
                channel_id: "kroger-{{department}}-fundamentals"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.email}}"
                text: "Welcome to Kroger, {{get-employee.first_name}}! You're joining the {{department}} team at store {{store_id}} on {{start_date}}. Your onboarding ticket is {{open-onboarding-ticket.number}}. Training has been assigned in Pluralsight."
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/employees/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/graphql"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: channel-assignments
          path: "/assign"
          operations:
            - name: assign-channel
              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

Retrieves application performance metrics from New Relic for Kroger's curbside pickup service, including response time, throughput, and error rate.

naftiko: "0.5"
info:
  label: "New Relic Pickup Service Performance"
  description: "Retrieves application performance metrics from New Relic for Kroger's curbside pickup service, including response time, throughput, and error rate."
  tags:
    - monitoring
    - new-relic
    - e-commerce
    - pickup
capability:
  exposes:
    - type: mcp
      namespace: pickup-monitoring
      port: 8080
      tools:
        - name: get-pickup-apm
          description: "Fetch New Relic APM metrics for the Kroger curbside pickup service."
          inputParameters:
            - name: time_range
              in: body
              type: string
              description: "Time range for metrics (e.g. last_30_minutes, last_1_hour)."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "kroger-pickup-service"
            time_range: "{{time_range}}"
            metrics: "HttpDispatcher,Errors/all,Apdex"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}/metrics/data.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Onboards a new vendor by creating records in Oracle Cloud procurement, provisioning a SharePoint collaboration site, setting up EDI integration tracking in ServiceNow, and notifying the category manager in Teams.

naftiko: "0.5"
info:
  label: "New Vendor Onboarding Pipeline"
  description: "Onboards a new vendor by creating records in Oracle Cloud procurement, provisioning a SharePoint collaboration site, setting up EDI integration tracking in ServiceNow, and notifying the category manager in Teams."
  tags:
    - vendor-management
    - onboarding
    - oracle-cloud
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Given vendor details, create procurement records, provision collaboration space, set up tracking, and notify the category manager."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "The vendor company name."
            - name: vendor_contact_email
              in: body
              type: string
              description: "Primary vendor contact email."
            - name: category
              in: body
              type: string
              description: "Product category (e.g. produce, dairy, frozen)."
            - name: category_manager_email
              in: body
              type: string
              description: "Kroger category manager email."
          steps:
            - name: create-vendor-record
              type: call
              call: "oracle-cloud.create-supplier"
              with:
                supplier_name: "{{vendor_name}}"
                contact_email: "{{vendor_contact_email}}"
                category: "{{category}}"
            - name: provision-site
              type: call
              call: "sharepoint.create-site"
              with:
                site_name: "vendor-{{create-vendor-record.supplier_id}}"
                description: "Collaboration site for {{vendor_name}}"
                template: "vendor-collaboration"
            - name: create-edi-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "EDI setup for new vendor: {{vendor_name}}"
                description: "Vendor ID: {{create-vendor-record.supplier_id}}. Category: {{category}}. Configure EDI 850/810/856 transactions. SharePoint: {{provision-site.url}}."
                assigned_group: "EDI_Integration"
                category: "vendor_onboarding"
            - name: notify-category-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{category_manager_email}}"
                text: "New vendor onboarded: {{vendor_name}} ({{category}}). Vendor ID: {{create-vendor-record.supplier_id}}. SharePoint: {{provision-site.url}}. EDI setup task: {{create-edi-task.number}}."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: suppliers
          path: "/suppliers"
          operations:
            - name: create-supplier
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: sites
          path: "/sites"
          operations:
            - name: create-site
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries Apache NiFi for data pipeline status, checks Prometheus for throughput metrics, and alerts the data engineering team in Teams when pipelines degrade.

naftiko: "0.5"
info:
  label: "NiFi Data Pipeline Health Check"
  description: "Queries Apache NiFi for data pipeline status, checks Prometheus for throughput metrics, and alerts the data engineering team in Teams when pipelines degrade."
  tags:
    - data-engineering
    - apache-nifi
    - prometheus
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-pipeline-health
      port: 8080
      tools:
        - name: check-pipeline-health
          description: "Given a NiFi process group ID, check pipeline status and throughput, and alert if degraded."
          inputParameters:
            - name: process_group_id
              in: body
              type: string
              description: "The NiFi process group identifier."
            - name: pipeline_name
              in: body
              type: string
              description: "Human-readable pipeline name for notifications."
          steps:
            - name: get-nifi-status
              type: call
              call: "nifi.get-process-group"
              with:
                pg_id: "{{process_group_id}}"
            - name: get-throughput
              type: call
              call: "prometheus.query-instant"
              with:
                query: "rate(nifi_amount_bytes_read_total{process_group='{{process_group_id}}'}[5m])"
            - name: alert-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "data-engineering"
                channel_id: "pipeline-alerts"
                text: "Pipeline health check: {{pipeline_name}}. Status: {{get-nifi-status.status}}. Active threads: {{get-nifi-status.active_threads}}. Queued: {{get-nifi-status.queued_count}}. Throughput: {{get-throughput.value}} bytes/sec. Bulletin count: {{get-nifi-status.bulletin_count}}."
  consumes:
    - type: http
      namespace: nifi
      baseUri: "https://kroger-nifi.internal.kroger.com/nifi-api"
      authentication:
        type: bearer
        token: "$secrets.nifi_token"
      resources:
        - name: process-groups
          path: "/process-groups/{{pg_id}}/status"
          inputParameters:
            - name: pg_id
              in: path
          operations:
            - name: get-process-group
              method: GET
    - type: http
      namespace: prometheus
      baseUri: "https://kroger-prometheus.internal.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.prometheus_token"
      resources:
        - name: instant-query
          path: "/query"
          operations:
            - name: query-instant
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Kroger.com order is placed, validates inventory in Oracle EBS, assigns a pickup slot, creates a fulfillment task in ServiceNow, and sends the customer a confirmation via Salesforce Marketing Cloud.

naftiko: "0.5"
info:
  label: "Online Order Fulfillment Orchestrator"
  description: "When a Kroger.com order is placed, validates inventory in Oracle EBS, assigns a pickup slot, creates a fulfillment task in ServiceNow, and sends the customer a confirmation via Salesforce Marketing Cloud."
  tags:
    - e-commerce
    - fulfillment
    - oracle-e-business-suite
    - servicenow
    - salesforce-marketing-cloud
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: process-online-order
          description: "Given an order ID, validate inventory, schedule fulfillment, create a task, and notify the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Kroger.com order identifier."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: store_id
              in: body
              type: string
              description: "The fulfilling store location code."
          steps:
            - name: get-order-details
              type: call
              call: "kroger-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: check-inventory
              type: call
              call: "oracle-ebs.check-availability"
              with:
                store_id: "{{store_id}}"
                items: "{{get-order-details.line_items}}"
            - name: create-fulfillment-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Fulfill order {{order_id}} at store {{store_id}}"
                description: "Items: {{get-order-details.item_summary}}. Pickup window: {{get-order-details.pickup_window}}. Availability: {{check-inventory.status}}."
                assigned_group: "Store_Fulfillment_{{store_id}}"
                category: "order_fulfillment"
            - name: send-confirmation
              type: call
              call: "sfmc.send-triggered-email"
              with:
                email: "{{customer_email}}"
                template: "order_confirmation"
                data: "{orderId: '{{order_id}}', pickupWindow: '{{get-order-details.pickup_window}}', taskNumber: '{{create-fulfillment-task.number}}'}"
  consumes:
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: availability
          path: "/availability-check"
          operations:
            - name: check-availability
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: triggered-sends
          path: "/email/messages"
          operations:
            - name: send-triggered-email
              method: POST

Rebalances pharmacy inventory across stores by analyzing stock levels in SAP, optimizing transfers, creating transfer orders, and notifying pharmacy managers via Teams.

naftiko: "0.5"
info:
  label: "Pharmacy Inventory Rebalancing Orchestrator"
  description: "Rebalances pharmacy inventory across stores by analyzing stock levels in SAP, optimizing transfers, creating transfer orders, and notifying pharmacy managers via Teams."
  tags:
    - pharmacy
    - inventory
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pharmacy-ops
      port: 8080
      tools:
        - name: pharmacy-inventory-rebalancing
          description: "Rebalances pharmacy inventory across stores."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Pharmacy Inventory Rebalancing Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Processes a prescription transfer between Kroger pharmacy locations by looking up the prescription in Oracle EBS, verifying patient identity in Salesforce, creating a transfer record, and notifying the receiving pharmacy via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Pharmacy Prescription Transfer Workflow"
  description: "Processes a prescription transfer between Kroger pharmacy locations by looking up the prescription in Oracle EBS, verifying patient identity in Salesforce, creating a transfer record, and notifying the receiving pharmacy via Microsoft Teams."
  tags:
    - pharmacy
    - oracle-e-business-suite
    - salesforce
    - microsoft-teams
    - healthcare
capability:
  exposes:
    - type: mcp
      namespace: pharmacy
      port: 8080
      tools:
        - name: transfer-prescription
          description: "Given a prescription ID, originating and destination pharmacy IDs, process the transfer and notify the receiving location."
          inputParameters:
            - name: rx_number
              in: body
              type: string
              description: "The prescription number."
            - name: from_pharmacy_id
              in: body
              type: string
              description: "The originating pharmacy store ID."
            - name: to_pharmacy_id
              in: body
              type: string
              description: "The destination pharmacy store ID."
            - name: patient_id
              in: body
              type: string
              description: "The patient identifier."
          steps:
            - name: get-prescription
              type: call
              call: "oracle-ebs.get-prescription"
              with:
                rx_number: "{{rx_number}}"
                pharmacy_id: "{{from_pharmacy_id}}"
            - name: verify-patient
              type: call
              call: "salesforce.get-patient"
              with:
                patient_id: "{{patient_id}}"
            - name: create-transfer
              type: call
              call: "oracle-ebs.create-rx-transfer"
              with:
                rx_number: "{{rx_number}}"
                from_pharmacy: "{{from_pharmacy_id}}"
                to_pharmacy: "{{to_pharmacy_id}}"
                patient_name: "{{verify-patient.full_name}}"
            - name: notify-destination
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "pharmacy-{{to_pharmacy_id}}"
                channel_id: "transfers"
                text: "Incoming Rx transfer: {{rx_number}} for patient {{verify-patient.full_name}} from store {{from_pharmacy_id}}. Medication: {{get-prescription.drug_name}}, {{get-prescription.dosage}}. Transfer ID: {{create-transfer.transfer_id}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/pharmacy/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: prescriptions
          path: "/prescriptions/{{rx_number}}?pharmacy_id={{pharmacy_id}}"
          inputParameters:
            - name: rx_number
              in: path
            - name: pharmacy_id
              in: query
          operations:
            - name: get-prescription
              method: GET
        - name: transfers
          path: "/transfers"
          operations:
            - name: create-rx-transfer
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: patients
          path: "/query?q=SELECT+Id,Full_Name__c+FROM+Patient__c+WHERE+Patient_Id__c='{{patient_id}}'"
          inputParameters:
            - name: patient_id
              in: query
          operations:
            - name: get-patient
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Optimizes pickup locker capacity by analyzing usage patterns from IoT sensors, forecasting demand in Snowflake, adjusting time slots, and notifying store operations.

naftiko: "0.5"
info:
  label: "Pickup Locker Capacity Optimization Pipeline"
  description: "Optimizes pickup locker capacity by analyzing usage patterns from IoT sensors, forecasting demand in Snowflake, adjusting time slots, and notifying store operations."
  tags:
    - pickup
    - locker
    - azure-iot
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pickup-ops
      port: 8080
      tools:
        - name: pickup-locker-capacity-optimization
          description: "Optimizes pickup locker capacity."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Pickup Locker Capacity Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Retrieves the current planogram from SharePoint, compares against on-shelf data from the Kroger API, logs discrepancies in ServiceNow, and notifies the merchandising team in Teams.

naftiko: "0.5"
info:
  label: "Planogram Compliance Audit"
  description: "Retrieves the current planogram from SharePoint, compares against on-shelf data from the Kroger API, logs discrepancies in ServiceNow, and notifies the merchandising team in Teams."
  tags:
    - merchandising
    - planogram
    - sharepoint
    - servicenow
    - microsoft-teams
    - store-ops
capability:
  exposes:
    - type: mcp
      namespace: planogram-audit
      port: 8080
      tools:
        - name: audit-planogram
          description: "Given a store ID and aisle ID, compare the planogram against actual shelf data and report discrepancies."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store identifier."
            - name: aisle_id
              in: body
              type: string
              description: "The aisle identifier to audit."
          steps:
            - name: get-planogram
              type: call
              call: "sharepoint.get-file"
              with:
                site_id: "kroger-merchandising"
                file_path: "Planograms/{{store_id}}/{{aisle_id}}.json"
            - name: get-shelf-data
              type: call
              call: "kroger-api.get-aisle-inventory"
              with:
                store_id: "{{store_id}}"
                aisle_id: "{{aisle_id}}"
            - name: log-discrepancies
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Planogram discrepancies: store {{store_id}}, aisle {{aisle_id}}"
                description: "Planogram audit found mismatches. Expected facings: {{get-planogram.total_facings}}. Actual: {{get-shelf-data.total_facings}}. Missing items: {{get-shelf-data.missing_upcs}}."
                assigned_group: "Merchandising"
                category: "planogram_compliance"
            - name: notify-merch-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "merchandising"
                channel_id: "planogram-audits"
                text: "Audit complete for store {{store_id}}, aisle {{aisle_id}}: {{get-shelf-data.compliance_pct}}% compliant. Task {{log-discrepancies.number}} created for {{get-shelf-data.discrepancy_count}} discrepancies."
  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:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: aisle-inventory
          path: "/stores/{{store_id}}/aisles/{{aisle_id}}/inventory"
          inputParameters:
            - name: store_id
              in: path
            - name: aisle_id
              in: path
          operations:
            - name: get-aisle-inventory
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Dynatrace detects a POS system anomaly, correlates with Datadog infrastructure metrics, creates a ServiceNow priority incident, and pages the store IT team via Teams.

naftiko: "0.5"
info:
  label: "POS System Outage Response"
  description: "When Dynatrace detects a POS system anomaly, correlates with Datadog infrastructure metrics, creates a ServiceNow priority incident, and pages the store IT team via Teams."
  tags:
    - store-ops
    - incident-management
    - dynatrace
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pos-incident
      port: 8080
      tools:
        - name: handle-pos-outage
          description: "Given a Dynatrace problem ID and store ID, correlate metrics, create incident, and notify IT team."
          inputParameters:
            - name: problem_id
              in: body
              type: string
              description: "The Dynatrace problem identifier."
            - name: store_id
              in: body
              type: string
              description: "The affected store location."
          steps:
            - name: get-dynatrace-problem
              type: call
              call: "dynatrace.get-problem"
              with:
                problem_id: "{{problem_id}}"
            - name: get-infra-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:system.cpu.user{store:{{store_id}},service:pos} by {host}"
                from: "now-30m"
                to: "now"
            - name: create-p1-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "POS outage: store {{store_id}} — {{get-dynatrace-problem.title}}"
                description: "Dynatrace problem: {{get-dynatrace-problem.title}}. Impact: {{get-dynatrace-problem.impact_level}}. Root cause: {{get-dynatrace-problem.root_cause}}. Infra status: CPU avg {{get-infra-metrics.avg_cpu}}%."
                category: "pos_system"
                priority: "1"
                assigned_group: "Store_IT"
            - name: page-it-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-it-support"
                channel_id: "critical-alerts"
                text: "P1 POS OUTAGE at store {{store_id}}: {{get-dynatrace-problem.title}}. Impact: {{get-dynatrace-problem.impact_level}}. Incident: {{create-p1-incident.number}}. CPU: {{get-infra-metrics.avg_cpu}}%. Immediate response required."
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://kroger.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: problems
          path: "/problems/{{problem_id}}"
          inputParameters:
            - name: problem_id
              in: path
          operations:
            - name: get-problem
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Fetches the latest shrink and loss prevention report from Power BI for a given Kroger division, returning embedded report URL and last refresh timestamp.

naftiko: "0.5"
info:
  label: "Power BI Shrink Report Retrieval"
  description: "Fetches the latest shrink and loss prevention report from Power BI for a given Kroger division, returning embedded report URL and last refresh timestamp."
  tags:
    - analytics
    - power-bi
    - loss-prevention
capability:
  exposes:
    - type: mcp
      namespace: loss-prevention
      port: 8080
      tools:
        - name: get-shrink-report
          description: "Retrieve the latest shrink report from Power BI by division code."
          inputParameters:
            - name: division_code
              in: body
              type: string
              description: "The Kroger division code (e.g. CINCY, DALLAS)."
          call: "powerbi.get-report"
          with:
            group_id: "kroger-lp-workspace"
            report_id: "shrink-{{division_code}}"
          outputParameters:
            - name: report_url
              type: string
              mapping: "$.embedUrl"
            - name: last_refresh
              type: string
              mapping: "$.lastRefreshTime"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: reports
          path: "/groups/{{group_id}}/reports/{{report_id}}"
          inputParameters:
            - name: group_id
              in: path
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET

When a pricing analyst updates a product price in Oracle Cloud, validates the change against Circana competitive data, pushes to the Kroger API product catalog, and logs the change in Snowflake for audit.

naftiko: "0.5"
info:
  label: "Price Change Propagation Workflow"
  description: "When a pricing analyst updates a product price in Oracle Cloud, validates the change against Circana competitive data, pushes to the Kroger API product catalog, and logs the change in Snowflake for audit."
  tags:
    - pricing
    - oracle-cloud
    - circana
    - snowflake
    - product-catalog
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: propagate-price-change
          description: "Given a UPC and new price, validate against market data, update the catalog, and log for audit."
          inputParameters:
            - name: upc
              in: body
              type: string
              description: "The product UPC."
            - name: new_price
              in: body
              type: number
              description: "The new retail price."
            - name: effective_date
              in: body
              type: string
              description: "The date the price takes effect (YYYY-MM-DD)."
            - name: analyst_id
              in: body
              type: string
              description: "The pricing analyst employee ID."
          steps:
            - name: get-competitive-price
              type: call
              call: "circana.get-price-benchmark"
              with:
                upc: "{{upc}}"
            - name: update-catalog-price
              type: call
              call: "kroger-api.update-product-price"
              with:
                upc: "{{upc}}"
                price: "{{new_price}}"
                effective_date: "{{effective_date}}"
            - name: log-price-change
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.pricing.change_audit (upc, old_price, new_price, competitive_avg, effective_date, analyst_id, timestamp) VALUES ('{{upc}}', '{{get-competitive-price.current_kroger_price}}', '{{new_price}}', '{{get-competitive-price.market_avg_price}}', '{{effective_date}}', '{{analyst_id}}', CURRENT_TIMESTAMP())"
                warehouse: "KROGER_PRICING_WH"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_api_token"
      resources:
        - name: price-benchmarks
          path: "/pricing/benchmark?upc={{upc}}"
          inputParameters:
            - name: upc
              in: query
          operations:
            - name: get-price-benchmark
              method: GET
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: products
          path: "/products/{{upc}}/price"
          inputParameters:
            - name: upc
              in: path
          operations:
            - name: update-product-price
              method: PUT
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Orchestrates a Kroger private label product launch by creating the item in Oracle Cloud, setting up the product page via the Kroger API, configuring Salesforce Marketing Cloud campaigns, and publishing to the BigCommerce catalog.

naftiko: "0.5"
info:
  label: "Private Label Product Launch Workflow"
  description: "Orchestrates a Kroger private label product launch by creating the item in Oracle Cloud, setting up the product page via the Kroger API, configuring Salesforce Marketing Cloud campaigns, and publishing to the BigCommerce catalog."
  tags:
    - product-management
    - private-label
    - oracle-cloud
    - salesforce-marketing-cloud
    - bigcommerce
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: private-label
      port: 8080
      tools:
        - name: launch-private-label-product
          description: "Given product details, create the item across all systems and set up marketing."
          inputParameters:
            - name: product_name
              in: body
              type: string
              description: "The product display name."
            - name: upc
              in: body
              type: string
              description: "The product UPC."
            - name: brand
              in: body
              type: string
              description: "The private label brand (e.g. Simple Truth, Kroger Brand)."
            - name: category
              in: body
              type: string
              description: "Product category."
            - name: retail_price
              in: body
              type: number
              description: "The retail price."
          steps:
            - name: create-item
              type: call
              call: "oracle-cloud.create-item"
              with:
                item_name: "{{product_name}}"
                upc: "{{upc}}"
                brand: "{{brand}}"
                category: "{{category}}"
                price: "{{retail_price}}"
            - name: publish-to-kroger
              type: call
              call: "kroger-api.create-product"
              with:
                upc: "{{upc}}"
                name: "{{product_name}}"
                brand: "{{brand}}"
                price: "{{retail_price}}"
                item_id: "{{create-item.item_id}}"
            - name: setup-campaign
              type: call
              call: "sfmc.create-email-campaign"
              with:
                campaign_name: "launch_{{upc}}"
                subject: "NEW: {{product_name}} from {{brand}}"
                template: "private_label_launch"
            - name: publish-to-bigcommerce
              type: call
              call: "bigcommerce.create-product"
              with:
                name: "{{product_name}}"
                sku: "{{upc}}"
                price: "{{retail_price}}"
                brand_name: "{{brand}}"
                categories: "[{{category}}]"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: items
          path: "/itemsV2"
          operations:
            - name: create-item
              method: POST
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: products
          path: "/products"
          operations:
            - name: create-product
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: campaigns
          path: "/email/campaigns"
          operations:
            - name: create-email-campaign
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/kroger/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: create-product
              method: POST

Manages private label quality control by tracking supplier quality scores in SAP, scheduling inspections in ServiceNow, documenting results in SharePoint, and notifying the quality team.

naftiko: "0.5"
info:
  label: "Private Label Quality Control Pipeline"
  description: "Manages private label quality control by tracking supplier quality scores in SAP, scheduling inspections in ServiceNow, documenting results in SharePoint, and notifying the quality team."
  tags:
    - quality
    - private-label
    - sap
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: private-ops
      port: 8080
      tools:
        - name: private-label-quality-control
          description: "Manages private label quality control."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Private Label Quality Control Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Tracks produce traceability from farm to shelf by pulling supplier lot data from SAP, logging provenance in the blockchain ledger, and enabling rapid trace-back for food safety investigations.

naftiko: "0.5"
info:
  label: "Produce Traceability Pipeline"
  description: "Tracks produce traceability from farm to shelf by pulling supplier lot data from SAP, logging provenance in the blockchain ledger, and enabling rapid trace-back for food safety investigations."
  tags:
    - food-safety
    - traceability
    - sap
    - blockchain
capability:
  exposes:
    - type: mcp
      namespace: produce-ops
      port: 8080
      tools:
        - name: produce-traceability
          description: "Tracks produce traceability from farm to shelf."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Produce Traceability Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Queries the Oracle E-Business Suite inventory module for a given product UPC and store location, returning on-hand quantity, reorder point, and last replenishment date.

naftiko: "0.5"
info:
  label: "Product Inventory Lookup"
  description: "Queries the Oracle E-Business Suite inventory module for a given product UPC and store location, returning on-hand quantity, reorder point, and last replenishment date."
  tags:
    - inventory
    - oracle-e-business-suite
    - store-ops
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-product-inventory
          description: "Look up current on-hand inventory for a product by UPC and store location code."
          inputParameters:
            - name: upc
              in: body
              type: string
              description: "The Universal Product Code for the item."
            - name: location_code
              in: body
              type: string
              description: "The Kroger store location identifier."
          call: "oracle-ebs.get-inventory"
          with:
            upc: "{{upc}}"
            location_code: "{{location_code}}"
          outputParameters:
            - name: on_hand_qty
              type: number
              mapping: "$.inventory.on_hand_quantity"
            - name: reorder_point
              type: number
              mapping: "$.inventory.reorder_point"
            - name: last_replenishment
              type: string
              mapping: "$.inventory.last_replenishment_date"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: inventory-items
          path: "/items?upc={{upc}}&location={{location_code}}"
          inputParameters:
            - name: upc
              in: query
            - name: location_code
              in: query
          operations:
            - name: get-inventory
              method: GET

On a product recall event, identifies affected inventory in Oracle EBS, pulls impacted orders from the Kroger API, creates a ServiceNow major incident, notifies store managers via Teams, and emails affected customers through Salesforce Marketing Cloud.

naftiko: "0.5"
info:
  label: "Product Recall Response Orchestrator"
  description: "On a product recall event, identifies affected inventory in Oracle EBS, pulls impacted orders from the Kroger API, creates a ServiceNow major incident, notifies store managers via Teams, and emails affected customers through Salesforce Marketing Cloud."
  tags:
    - food-safety
    - recall
    - oracle-e-business-suite
    - servicenow
    - microsoft-teams
    - salesforce-marketing-cloud
capability:
  exposes:
    - type: mcp
      namespace: recall-management
      port: 8080
      tools:
        - name: execute-product-recall
          description: "Given a product UPC and recall reason, identify impact, create incident, and notify all stakeholders."
          inputParameters:
            - name: upc
              in: body
              type: string
              description: "The recalled product UPC."
            - name: recall_reason
              in: body
              type: string
              description: "The reason for the recall."
            - name: lot_numbers
              in: body
              type: string
              description: "Comma-separated lot numbers affected."
          steps:
            - name: find-inventory
              type: call
              call: "oracle-ebs.find-by-lot"
              with:
                upc: "{{upc}}"
                lot_numbers: "{{lot_numbers}}"
            - name: find-affected-orders
              type: call
              call: "kroger-api.search-orders-by-upc"
              with:
                upc: "{{upc}}"
                date_range: "last_90_days"
            - name: create-major-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "RECALL: {{upc}} — {{recall_reason}}"
                description: "Product recall for UPC {{upc}}. Lots: {{lot_numbers}}. Found in {{find-inventory.store_count}} stores. {{find-affected-orders.order_count}} customer orders affected."
                category: "product_recall"
                priority: "1"
                assigned_group: "Food_Safety"
            - name: notify-store-managers
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-operations"
                channel_id: "recalls"
                text: "URGENT RECALL: UPC {{upc}} ({{recall_reason}}). Lots: {{lot_numbers}}. Pull immediately from shelves. Incident: {{create-major-incident.number}}. Affected stores: {{find-inventory.store_list}}."
            - name: notify-customers
              type: call
              call: "sfmc.send-triggered-email"
              with:
                list_id: "{{find-affected-orders.customer_list_id}}"
                template: "product_recall_notice"
                data: "{upc: '{{upc}}', reason: '{{recall_reason}}', lots: '{{lot_numbers}}'}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: lot-search
          path: "/items/lot-search"
          operations:
            - name: find-by-lot
              method: POST
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: order-search
          path: "/orders/search"
          operations:
            - name: search-orders-by-upc
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://kroger.rest.marketingcloudapis.com/messaging/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: triggered-sends
          path: "/email/messages"
          operations:
            - name: send-triggered-email
              method: POST

Looks up current product pricing from the Redis cache for real-time price verification.

naftiko: "0.5"
info:
  label: "Redis Product Price Cache Lookup"
  description: "Looks up current product pricing from the Redis cache for real-time price verification."
  tags:
    - pricing
    - redis
capability:
  exposes:
    - type: mcp
      namespace: price-cache
      port: 8080
      tools:
        - name: get-price
          description: "Look up product price from cache."
          inputParameters:
            - name: product_upc
              in: body
              type: string
              description: "The product upc." 
          call: "redis.get-value"
          with:
            product_upc: "{{product_upc}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://kroger-redis.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: cache
          path: "/cache"
          operations:
            - name: get-value
              method: GET

Checks the goods receipt status of a purchase order in SAP for supply chain tracking.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt Status"
  description: "Checks the goods receipt status of a purchase order in SAP for supply chain tracking."
  tags:
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: goods-receipt
      port: 8080
      tools:
        - name: get-receipt-status
          description: "Check goods receipt status for a PO."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The po number." 
          call: "sap.get-receipt"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kroger-sap.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: receipts
          path: "/receipts"
          operations:
            - name: get-receipt
              method: GET

Retrieves vendor master data from SAP including contact information, payment terms, and compliance status.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP including contact information, payment terms, and compliance status."
  tags:
    - vendors
    - sap
capability:
  exposes:
    - type: mcp
      namespace: vendor-management
      port: 8080
      tools:
        - name: get-vendor
          description: "Look up vendor master record in SAP."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor id." 
          call: "sap.get-vendor"
          with:
            vendor_id: "{{vendor_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://kroger-sap.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: vendor
          path: "/vendor"
          operations:
            - name: get-vendor
              method: GET

Orchestrates seasonal category resets by pulling new planograms from JDA, generating task lists in Jira, scheduling associates in Kronos, and tracking completion via Teams.

naftiko: "0.5"
info:
  label: "Seasonal Category Reset Orchestrator"
  description: "Orchestrates seasonal category resets by pulling new planograms from JDA, generating task lists in Jira, scheduling associates in Kronos, and tracking completion via Teams."
  tags:
    - category-management
    - seasonal
    - jda
    - jira
    - kronos
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: seasonal-ops
      port: 8080
      tools:
        - name: seasonal-category-reset
          description: "Orchestrates seasonal category resets."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Seasonal Category Reset Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Orchestrates seasonal hiring by posting positions via the ATS, scheduling interviews in Kronos, creating onboarding packets in SharePoint, and tracking progress in Jira.

naftiko: "0.5"
info:
  label: "Seasonal Hiring Campaign Orchestrator"
  description: "Orchestrates seasonal hiring by posting positions via the ATS, scheduling interviews in Kronos, creating onboarding packets in SharePoint, and tracking progress in Jira."
  tags:
    - hiring
    - seasonal
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: seasonal-ops
      port: 8080
      tools:
        - name: seasonal-hiring-campaign
          description: "Orchestrates seasonal hiring."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Seasonal Hiring Campaign Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Monitors self-checkout loss by analyzing transaction exceptions from the POS system, scoring risk patterns in Snowflake, creating alerts in ServiceNow, and notifying asset protection.

naftiko: "0.5"
info:
  label: "Self-Checkout Loss Prevention Pipeline"
  description: "Monitors self-checkout loss by analyzing transaction exceptions from the POS system, scoring risk patterns in Snowflake, creating alerts in ServiceNow, and notifying asset protection."
  tags:
    - loss-prevention
    - self-checkout
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: self-ops
      port: 8080
      tools:
        - name: self-checkout-loss-prevention
          description: "Monitors self-checkout loss."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Self-Checkout Loss Prevention Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Retrieves store maintenance ticket details from ServiceNow including priority, status, and assigned technician.

naftiko: "0.5"
info:
  label: "ServiceNow Store Maintenance Ticket"
  description: "Retrieves store maintenance ticket details from ServiceNow including priority, status, and assigned technician."
  tags:
    - maintenance
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: store-maintenance
      port: 8080
      tools:
        - name: get-ticket
          description: "Look up a store maintenance ticket."
          inputParameters:
            - name: ticket_number
              in: body
              type: string
              description: "The ticket number." 
          call: "servicenow.get-ticket"
          with:
            ticket_number: "{{ticket_number}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kroger-servicenow.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: tickets
          path: "/tickets"
          operations:
            - name: get-ticket
              method: GET

Verifies shelf tag price accuracy by scanning tags via Cloud Vision, comparing against the pricing database in Redis, creating correction tickets in ServiceNow, and alerting pricing teams.

naftiko: "0.5"
info:
  label: "Shelf Tag Price Accuracy Pipeline"
  description: "Verifies shelf tag price accuracy by scanning tags via Cloud Vision, comparing against the pricing database in Redis, creating correction tickets in ServiceNow, and alerting pricing teams."
  tags:
    - pricing
    - accuracy
    - google-cloud
    - redis
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shelf-ops
      port: 8080
      tools:
        - name: shelf-tag-price-accuracy
          description: "Verifies shelf tag price accuracy."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Shelf Tag Price Accuracy Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Investigates inventory shrink by pulling loss data from SAP, analyzing patterns in Snowflake, creating investigation cases in ServiceNow, and notifying the asset protection team.

naftiko: "0.5"
info:
  label: "Shrink Investigation Orchestrator"
  description: "Investigates inventory shrink by pulling loss data from SAP, analyzing patterns in Snowflake, creating investigation cases in ServiceNow, and notifying the asset protection team."
  tags:
    - asset-protection
    - shrink
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shrink-ops
      port: 8080
      tools:
        - name: shrink-investigation
          description: "Investigates inventory shrink."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Shrink Investigation Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Queries customer segmentation data from Snowflake for marketing analytics and targeted promotions.

naftiko: "0.5"
info:
  label: "Snowflake Customer Segment Query"
  description: "Queries customer segmentation data from Snowflake for marketing analytics and targeted promotions."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-analytics
      port: 8080
      tools:
        - name: query-segments
          description: "Query customer segments from Snowflake."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The query." 
          call: "snowflake.run-query"
          with:
            query: "{{query}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://kroger-snowflake.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: analytics
          path: "/analytics"
          operations:
            - name: run-query
              method: GET

Executes a parameterized query against the Kroger Snowflake data warehouse to retrieve daily sales totals by department and store.

naftiko: "0.5"
info:
  label: "Snowflake Sales Query"
  description: "Executes a parameterized query against the Kroger Snowflake data warehouse to retrieve daily sales totals by department and store."
  tags:
    - analytics
    - snowflake
    - sales
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: get-daily-sales
          description: "Query daily sales totals from Snowflake by store ID and date. Returns department-level revenue breakdowns."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store identifier."
            - name: sales_date
              in: body
              type: string
              description: "The date for sales data in YYYY-MM-DD format."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT department, SUM(net_sales) as total_sales, SUM(units_sold) as total_units FROM kroger_dw.sales.daily_transactions WHERE store_id = '{{store_id}}' AND transaction_date = '{{sales_date}}' GROUP BY department"
            warehouse: "KROGER_ANALYTICS_WH"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Checks SonarQube quality gate status for a Kroger microservice build, and if failed, creates a GitHub issue and alerts the development team in Teams with details on blockers.

naftiko: "0.5"
info:
  label: "SonarQube Code Quality Gate Enforcer"
  description: "Checks SonarQube quality gate status for a Kroger microservice build, and if failed, creates a GitHub issue and alerts the development team in Teams with details on blockers."
  tags:
    - code-quality
    - sonarqube
    - github
    - microsoft-teams
    - devops
capability:
  exposes:
    - type: mcp
      namespace: code-quality
      port: 8080
      tools:
        - name: enforce-quality-gate
          description: "Given a SonarQube project key, check quality gate and escalate failures."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The SonarQube project key."
            - name: github_repo
              in: body
              type: string
              description: "The GitHub repository (org/repo)."
            - name: branch
              in: body
              type: string
              description: "The branch being analyzed."
          steps:
            - name: get-quality-gate
              type: call
              call: "sonarqube.get-quality-gate-status"
              with:
                project_key: "{{project_key}}"
            - name: create-issue
              type: call
              call: "github.create-issue"
              with:
                repo: "{{github_repo}}"
                title: "Quality gate failed: {{project_key}} on {{branch}}"
                body: "SonarQube quality gate FAILED. Status: {{get-quality-gate.status}}. Bugs: {{get-quality-gate.bugs}}. Vulnerabilities: {{get-quality-gate.vulnerabilities}}. Code smells: {{get-quality-gate.code_smells}}. Coverage: {{get-quality-gate.coverage}}%. Duplications: {{get-quality-gate.duplications}}%."
                labels: "quality-gate,automated"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "kroger-engineering"
                channel_id: "code-quality"
                text: "Quality gate FAILED for {{project_key}} ({{branch}}). Bugs: {{get-quality-gate.bugs}}, Vulns: {{get-quality-gate.vulnerabilities}}, Smells: {{get-quality-gate.code_smells}}. Coverage: {{get-quality-gate.coverage}}%. GitHub issue: {{create-issue.html_url}}"
  consumes:
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.kroger.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality-gates
          path: "/qualitygates/project_status?projectKey={{project_key}}"
          inputParameters:
            - name: project_key
              in: query
          operations:
            - name: get-quality-gate-status
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: issues
          path: "/repos/{{repo}}/issues"
          inputParameters:
            - name: repo
              in: path
          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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Triggers an Apache Spark inventory optimization job, monitors execution via Datadog, stores results in Snowflake, and notifies the analytics team in Teams upon completion.

naftiko: "0.5"
info:
  label: "Spark Inventory Analytics Job Trigger"
  description: "Triggers an Apache Spark inventory optimization job, monitors execution via Datadog, stores results in Snowflake, and notifies the analytics team in Teams upon completion."
  tags:
    - analytics
    - apache-spark
    - datadog
    - snowflake
    - microsoft-teams
    - inventory
capability:
  exposes:
    - type: mcp
      namespace: spark-analytics
      port: 8080
      tools:
        - name: run-inventory-analytics
          description: "Given an analysis type and date range, trigger Spark job, monitor, store results, and notify."
          inputParameters:
            - name: analysis_type
              in: body
              type: string
              description: "Type of analysis (e.g. safety_stock, abc_classification, dead_stock)."
            - name: date_range_start
              in: body
              type: string
              description: "Analysis period start date."
            - name: date_range_end
              in: body
              type: string
              description: "Analysis period end date."
          steps:
            - name: submit-spark-job
              type: call
              call: "spark.submit-job"
              with:
                job_name: "inventory-{{analysis_type}}"
                params: "{start: '{{date_range_start}}', end: '{{date_range_end}}'}"
            - name: monitor-job
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:spark.job.duration{job_name:inventory-{{analysis_type}}}"
                from: "now-1h"
                to: "now"
            - name: store-results
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.inventory.analytics_results SELECT '{{analysis_type}}', * FROM @kroger_stage/spark_output/inventory-{{analysis_type}}/latest/"
                warehouse: "KROGER_ANALYTICS_WH"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "inventory-analytics"
                channel_id: "job-results"
                text: "Spark job complete: inventory-{{analysis_type}} for {{date_range_start}} to {{date_range_end}}. Job ID: {{submit-spark-job.job_id}}. Duration: {{monitor-job.last_value}}s. Results loaded to Snowflake."
  consumes:
    - type: http
      namespace: spark
      baseUri: "https://kroger-spark.internal.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.spark_token"
      resources:
        - name: jobs
          path: "/submissions/create"
          operations:
            - name: submit-job
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Optimizes store energy consumption by collecting IoT sensor data from Azure IoT Hub, analyzing patterns in Snowflake, adjusting HVAC schedules, and reporting savings via Power BI.

naftiko: "0.5"
info:
  label: "Store Energy Optimization Pipeline"
  description: "Optimizes store energy consumption by collecting IoT sensor data from Azure IoT Hub, analyzing patterns in Snowflake, adjusting HVAC schedules, and reporting savings via Power BI."
  tags:
    - energy
    - sustainability
    - azure-iot
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: store-energy-optimization
          description: "Optimizes store energy consumption."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Store Energy Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

When a refrigeration or HVAC alert fires in Datadog, creates a ServiceNow work order, assigns to the facilities team, and notifies the store manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Equipment Maintenance Orchestrator"
  description: "When a refrigeration or HVAC alert fires in Datadog, creates a ServiceNow work order, assigns to the facilities team, and notifies the store manager in Microsoft Teams."
  tags:
    - store-ops
    - maintenance
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: equipment-maintenance
      port: 8080
      tools:
        - name: handle-equipment-alert
          description: "Given a Datadog alert ID and store ID, create a maintenance work order and notify the store."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert event ID."
            - name: store_id
              in: body
              type: string
              description: "The affected store location ID."
            - name: equipment_type
              in: body
              type: string
              description: "Type of equipment (e.g. REFRIGERATION, HVAC, POS)."
          steps:
            - name: get-alert-details
              type: call
              call: "datadog.get-event"
              with:
                event_id: "{{alert_id}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "{{equipment_type}} maintenance required at store {{store_id}}"
                description: "Alert: {{get-alert-details.title}}. Severity: {{get-alert-details.priority}}. Details: {{get-alert-details.text}}. Equipment: {{equipment_type}}."
                assigned_group: "Facilities_Maintenance"
                category: "equipment_maintenance"
                priority: "{{get-alert-details.priority}}"
            - name: notify-store-manager
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-{{store_id}}"
                channel_id: "maintenance"
                text: "Equipment alert: {{equipment_type}} issue detected. {{get-alert-details.title}}. Work order {{create-work-order.number}} has been created and assigned to Facilities. Priority: {{get-alert-details.priority}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-event
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Prepares for store grand openings by verifying inventory in SAP, scheduling staff in Kronos, launching marketing campaigns via MailChimp, and coordinating with leadership via Teams.

naftiko: "0.5"
info:
  label: "Store Grand Opening Preparation Orchestrator"
  description: "Prepares for store grand openings by verifying inventory in SAP, scheduling staff in Kronos, launching marketing campaigns via MailChimp, and coordinating with leadership via Teams."
  tags:
    - store-operations
    - grand-opening
    - sap
    - kronos
    - mailchimp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: store-grand-opening-preparation
          description: "Prepares for store grand openings."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Store Grand Opening Preparation Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Retrieves an open ServiceNow incident for a Kroger store by incident number, returning current status, priority, assigned group, and resolution notes.

naftiko: "0.5"
info:
  label: "Store Incident Ticket Lookup"
  description: "Retrieves an open ServiceNow incident for a Kroger store by incident number, returning current status, priority, assigned group, and resolution notes."
  tags:
    - store-ops
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: get-store-incident
          description: "Look up a ServiceNow incident by number for a Kroger store. Returns status, priority, assigned group, and description."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g. INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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 store labor budget variances by pulling hours from Kronos, comparing against budgets in SAP, generating variance reports, and alerting store directors via Teams.

naftiko: "0.5"
info:
  label: "Store Labor Budget Variance Pipeline"
  description: "Monitors store labor budget variances by pulling hours from Kronos, comparing against budgets in SAP, generating variance reports, and alerting store directors via Teams."
  tags:
    - labor
    - budget
    - kronos
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: store-labor-budget-variance
          description: "Monitors store labor budget variances."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Store Labor Budget Variance Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Aggregates daily store KPIs from Snowflake, labor metrics from PeopleSoft, and customer satisfaction scores from Salesforce, then refreshes the Power BI dashboard dataset.

naftiko: "0.5"
info:
  label: "Store Performance Dashboard Sync"
  description: "Aggregates daily store KPIs from Snowflake, labor metrics from PeopleSoft, and customer satisfaction scores from Salesforce, then refreshes the Power BI dashboard dataset."
  tags:
    - analytics
    - store-ops
    - snowflake
    - peoplesoft
    - salesforce
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: store-dashboard
      port: 8080
      tools:
        - name: refresh-store-dashboard
          description: "Given a store ID and date, aggregate KPIs from multiple sources and trigger a Power BI refresh."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Kroger store identifier."
            - name: report_date
              in: body
              type: string
              description: "The reporting date (YYYY-MM-DD)."
          steps:
            - name: get-sales-kpis
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT store_id, net_sales, transactions, avg_basket, shrink_pct FROM kroger_dw.store_ops.daily_kpis WHERE store_id = '{{store_id}}' AND report_date = '{{report_date}}'"
                warehouse: "KROGER_ANALYTICS_WH"
            - name: get-labor-metrics
              type: call
              call: "peoplesoft.get-labor-summary"
              with:
                store_id: "{{store_id}}"
                date: "{{report_date}}"
            - name: get-csat-scores
              type: call
              call: "salesforce.get-store-csat"
              with:
                store_id: "{{store_id}}"
                date: "{{report_date}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                group_id: "kroger-store-ops"
                dataset_id: "store-performance-{{store_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: peoplesoft
      baseUri: "https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: labor
          path: "/labor-summary?store_id={{store_id}}&date={{date}}"
          inputParameters:
            - name: store_id
              in: query
            - name: date
              in: query
          operations:
            - name: get-labor-summary
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://kroger.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: store-csat
          path: "/query?q=SELECT+AVG(Score__c)+avg_score+FROM+CSAT_Survey__c+WHERE+Store_Id__c='{{store_id}}'+AND+Survey_Date__c={{date}}"
          inputParameters:
            - name: store_id
              in: query
            - name: date
              in: query
          operations:
            - name: get-store-csat
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refresh
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Manages store remodel communications by pulling project milestones from Jira, generating customer notifications via Twilio, updating store hours in Google Business Profile, and briefing leadership.

naftiko: "0.5"
info:
  label: "Store Remodel Communication Orchestrator"
  description: "Manages store remodel communications by pulling project milestones from Jira, generating customer notifications via Twilio, updating store hours in Google Business Profile, and briefing leadership."
  tags:
    - store-remodel
    - communications
    - jira
    - twilio
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: store-remodel-communication
          description: "Manages store remodel communications."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Store Remodel Communication Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Tracks a store remodel project by pulling milestones from Microsoft Project, budget data from Oracle Cloud, and posting weekly status updates to SharePoint and Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Remodel Project Tracker"
  description: "Tracks a store remodel project by pulling milestones from Microsoft Project, budget data from Oracle Cloud, and posting weekly status updates to SharePoint and Microsoft Teams."
  tags:
    - store-ops
    - project-management
    - microsoft-project
    - oracle-cloud
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-remodel
      port: 8080
      tools:
        - name: generate-remodel-status
          description: "Given a project ID and store ID, pull milestones and budget data, then publish a status update."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The Microsoft Project plan identifier."
            - name: store_id
              in: body
              type: string
              description: "The store being remodeled."
          steps:
            - name: get-milestones
              type: call
              call: "msproject.get-tasks"
              with:
                project_id: "{{project_id}}"
                filter: "milestone=true"
            - name: get-budget
              type: call
              call: "oracle-cloud.get-project-costs"
              with:
                project_id: "remodel-{{store_id}}"
            - name: publish-status
              type: call
              call: "sharepoint.create-list-item"
              with:
                site_id: "kroger-construction"
                list_name: "RemodelStatus"
                fields: "{store_id: '{{store_id}}', pct_complete: '{{get-milestones.pct_complete}}', budget_spent: '{{get-budget.spent_to_date}}', budget_total: '{{get-budget.total_budget}}', next_milestone: '{{get-milestones.next_milestone}}'}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "store-construction"
                channel_id: "remodel-{{store_id}}"
                text: "Weekly remodel update for store {{store_id}}: {{get-milestones.pct_complete}}% complete. Budget: ${{get-budget.spent_to_date}}/${{get-budget.total_budget}}. Next milestone: {{get-milestones.next_milestone}} on {{get-milestones.next_milestone_date}}."
  consumes:
    - type: http
      namespace: msproject
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: project-tasks
          path: "/planner/plans/{{project_id}}/tasks"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-tasks
              method: GET
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: project-costs
          path: "/projects/{{project_id}}/costs"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-project-costs
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-list-item
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Reports store safety incidents by creating cases in ServiceNow, documenting evidence in SharePoint, notifying risk management via Teams, and triggering OSHA reporting workflows.

naftiko: "0.5"
info:
  label: "Store Safety Incident Reporting Pipeline"
  description: "Reports store safety incidents by creating cases in ServiceNow, documenting evidence in SharePoint, notifying risk management via Teams, and triggering OSHA reporting workflows."
  tags:
    - safety
    - incidents
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-ops
      port: 8080
      tools:
        - name: store-safety-incident-reporting
          description: "Reports store safety incidents."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Store Safety Incident Reporting Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

When a delivery exception is detected in Oracle Cloud, checks impacted store inventory levels, creates a ServiceNow incident, reassigns affected orders, and alerts the supply chain team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Orchestrator"
  description: "When a delivery exception is detected in Oracle Cloud, checks impacted store inventory levels, creates a ServiceNow incident, reassigns affected orders, and alerts the supply chain team in Microsoft Teams."
  tags:
    - supply-chain
    - oracle-cloud
    - oracle-e-business-suite
    - servicenow
    - microsoft-teams
    - logistics
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-alerts
      port: 8080
      tools:
        - name: handle-delivery-exception
          description: "Given a shipment ID and exception type, assess inventory impact, create an incident, and notify the supply chain team."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "The Oracle Cloud shipment tracking identifier."
            - name: exception_type
              in: body
              type: string
              description: "Type of exception (e.g. DELAYED, DAMAGED, SHORT_SHIP)."
            - name: affected_store_ids
              in: body
              type: string
              description: "Comma-separated list of affected store IDs."
          steps:
            - name: get-shipment
              type: call
              call: "oracle-cloud.get-shipment"
              with:
                shipment_id: "{{shipment_id}}"
            - name: check-store-stock
              type: call
              call: "oracle-ebs.get-inventory-levels"
              with:
                store_ids: "{{affected_store_ids}}"
                items: "{{get-shipment.item_list}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Supply chain disruption: {{exception_type}} on shipment {{shipment_id}}"
                description: "Shipment {{shipment_id}} from {{get-shipment.vendor_name}} experienced {{exception_type}}. Affected stores: {{affected_store_ids}}. Items: {{get-shipment.item_summary}}. Current stock status: {{check-store-stock.summary}}."
                category: "supply_chain"
                priority: "2"
                assigned_group: "Supply_Chain_Ops"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "supply-chain-ops"
                channel_id: "disruptions"
                text: "ALERT: {{exception_type}} on shipment {{shipment_id}} ({{get-shipment.vendor_name}}). {{check-store-stock.impacted_count}} stores affected. Incident: {{create-incident.number}}. Stock at risk for {{get-shipment.item_count}} items."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: shipments
          path: "/shipments/{{shipment_id}}"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: get-shipment
              method: GET
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: inventory-levels
          path: "/levels"
          operations:
            - name: get-inventory-levels
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves district-level store performance metrics from Tableau dashboards.

naftiko: "0.5"
info:
  label: "Tableau District Performance Metrics"
  description: "Retrieves district-level store performance metrics from Tableau dashboards."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: district-analytics
      port: 8080
      tools:
        - name: get-district-metrics
          description: "Retrieve district performance metrics."
          inputParameters:
            - name: view_id
              in: body
              type: string
              description: "The view id." 
          call: "tableau.get-view-data"
          with:
            view_id: "{{view_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://kroger-tableau.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/views"
          operations:
            - name: get-view-data
              method: GET

Queries the Kroger Teradata data warehouse for promotion performance metrics by campaign ID, returning lift percentage, redemption count, and incremental revenue.

naftiko: "0.5"
info:
  label: "Teradata Promotion Performance Query"
  description: "Queries the Kroger Teradata data warehouse for promotion performance metrics by campaign ID, returning lift percentage, redemption count, and incremental revenue."
  tags:
    - analytics
    - teradata
    - promotions
    - pricing
capability:
  exposes:
    - type: mcp
      namespace: promo-analytics
      port: 8080
      tools:
        - name: get-promotion-performance
          description: "Retrieve promotion performance metrics from Teradata by campaign ID."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The promotion campaign identifier."
          call: "teradata.execute-query"
          with:
            query: "SELECT campaign_id, lift_pct, redemption_count, incremental_revenue FROM kroger_promo.campaign_results WHERE campaign_id = '{{campaign_id}}'"
          outputParameters:
            - name: lift_pct
              type: number
              mapping: "$.results[0].lift_pct"
            - name: redemption_count
              type: number
              mapping: "$.results[0].redemption_count"
            - name: incremental_revenue
              type: number
              mapping: "$.results[0].incremental_revenue"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://kroger-td.teradata.com/api/query/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/execute"
          operations:
            - name: execute-query
              method: POST

Runs a Terraform plan against Kroger's cloud infrastructure, compares with the current Azure state, logs drift findings in ServiceNow, and alerts the platform team in Teams.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Drift Detector"
  description: "Runs a Terraform plan against Kroger's cloud infrastructure, compares with the current Azure state, logs drift findings in ServiceNow, and alerts the platform team in Teams."
  tags:
    - infrastructure
    - terraform
    - microsoft-azure
    - servicenow
    - microsoft-teams
    - devops
capability:
  exposes:
    - type: mcp
      namespace: infra-drift
      port: 8080
      tools:
        - name: detect-infra-drift
          description: "Given a Terraform workspace and environment, run plan, detect drift, log findings, and notify."
          inputParameters:
            - name: workspace
              in: body
              type: string
              description: "The Terraform Cloud workspace name."
            - name: environment
              in: body
              type: string
              description: "The target environment (e.g. prod, staging)."
          steps:
            - name: run-plan
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace}}"
                plan_only: "true"
                message: "Drift detection run for {{environment}}"
            - name: get-plan-output
              type: call
              call: "terraform.get-plan"
              with:
                run_id: "{{run-plan.run_id}}"
            - name: log-drift
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Infrastructure drift detected: {{workspace}} ({{environment}})"
                description: "Terraform plan detected {{get-plan-output.resource_changes}} resource changes. Additions: {{get-plan-output.additions}}. Changes: {{get-plan-output.changes}}. Destructions: {{get-plan-output.destructions}}. Workspace: {{workspace}}."
                assigned_group: "Platform_Engineering"
                category: "infrastructure_drift"
            - name: notify-platform-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "platform-engineering"
                channel_id: "drift-alerts"
                text: "Infrastructure drift detected in {{workspace}} ({{environment}}): {{get-plan-output.resource_changes}} resources changed ({{get-plan-output.additions}} add, {{get-plan-output.changes}} change, {{get-plan-output.destructions}} destroy). Task: {{log-drift.number}}. Plan URL: {{run-plan.plan_url}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/workspaces/{{workspace_id}}/runs"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: create-run
              method: POST
        - name: plans
          path: "/runs/{{run_id}}/plan"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: get-plan
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Checks the delivery status of customer notification SMS messages sent via Twilio.

naftiko: "0.5"
info:
  label: "Twilio Customer SMS Status"
  description: "Checks the delivery status of customer notification SMS messages sent via Twilio."
  tags:
    - messaging
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: sms-notifications
      port: 8080
      tools:
        - name: get-sms-status
          description: "Check SMS delivery status."
          inputParameters:
            - name: message_sid
              in: body
              type: string
              description: "The message sid." 
          call: "twilio.get-message"
          with:
            message_sid: "{{message_sid}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: twilio
      baseUri: "https://kroger-twilio.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.twilio_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: get-message
              method: GET

Retrieves vendor contract details from Oracle Cloud by contract ID, returning vendor name, contract value, expiration date, and renewal terms.

naftiko: "0.5"
info:
  label: "Vendor Contract Lookup"
  description: "Retrieves vendor contract details from Oracle Cloud by contract ID, returning vendor name, contract value, expiration date, and renewal terms."
  tags:
    - vendor-management
    - oracle-cloud
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: vendor-contracts
      port: 8080
      tools:
        - name: get-vendor-contract
          description: "Retrieve a vendor contract from Oracle Cloud by contract ID. Returns vendor name, value, expiration, and renewal status."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "The Oracle Cloud procurement contract identifier."
          call: "oracle-cloud.get-contract"
          with:
            contract_id: "{{contract_id}}"
          outputParameters:
            - name: vendor_name
              type: string
              mapping: "$.ContractHeader.SupplierName"
            - name: contract_value
              type: string
              mapping: "$.ContractHeader.ContractAmount"
            - name: expiration_date
              type: string
              mapping: "$.ContractHeader.ExpirationDate"
            - name: renewal_status
              type: string
              mapping: "$.ContractHeader.RenewalStatus"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: contracts
          path: "/purchaseContracts/{{contract_id}}"
          inputParameters:
            - name: contract_id
              in: path
          operations:
            - name: get-contract
              method: GET

Matches vendor invoices from Oracle Cloud against purchase orders, identifies discrepancies, logs them in Snowflake, creates ServiceNow tasks for unresolved variances, and emails the vendor contact via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Vendor Invoice Reconciliation"
  description: "Matches vendor invoices from Oracle Cloud against purchase orders, identifies discrepancies, logs them in Snowflake, creates ServiceNow tasks for unresolved variances, and emails the vendor contact via Microsoft Outlook."
  tags:
    - finance
    - vendor-management
    - oracle-cloud
    - snowflake
    - servicenow
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: invoice-reconciliation
      port: 8080
      tools:
        - name: reconcile-vendor-invoice
          description: "Given an invoice ID, match against POs, log discrepancies, and escalate unresolved variances."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "The Oracle Cloud invoice identifier."
            - name: vendor_id
              in: body
              type: string
              description: "The vendor/supplier identifier."
          steps:
            - name: get-invoice
              type: call
              call: "oracle-cloud.get-invoice"
              with:
                invoice_id: "{{invoice_id}}"
            - name: get-matched-po
              type: call
              call: "oracle-cloud.get-purchase-order"
              with:
                po_number: "{{get-invoice.po_number}}"
            - name: log-discrepancy
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.finance.invoice_discrepancies (invoice_id, po_number, vendor_id, invoice_amount, po_amount, variance, logged_at) VALUES ('{{invoice_id}}', '{{get-invoice.po_number}}', '{{vendor_id}}', {{get-invoice.total_amount}}, {{get-matched-po.total_amount}}, {{get-invoice.total_amount}} - {{get-matched-po.total_amount}}, CURRENT_TIMESTAMP())"
                warehouse: "KROGER_FINANCE_WH"
            - name: create-variance-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Invoice variance: {{invoice_id}} vs PO {{get-invoice.po_number}}"
                description: "Vendor: {{get-invoice.vendor_name}}. Invoice: ${{get-invoice.total_amount}}. PO: ${{get-matched-po.total_amount}}. Variance: ${{get-invoice.variance_amount}}."
                assigned_group: "Accounts_Payable"
                category: "invoice_reconciliation"
            - name: notify-vendor
              type: call
              call: "outlook.send-email"
              with:
                to: "{{get-invoice.vendor_contact_email}}"
                subject: "Invoice {{invoice_id}} — Variance Notification"
                body: "We identified a variance between invoice {{invoice_id}} (${{get-invoice.total_amount}}) and PO {{get-invoice.po_number}} (${{get-matched-po.total_amount}}). Please review and provide documentation. Reference: {{create-variance-task.number}}."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: invoices
          path: "/invoices/{{invoice_id}}"
          inputParameters:
            - name: invoice_id
              in: path
          operations:
            - name: get-invoice
              method: GET
        - name: purchase-orders
          path: "/purchaseOrders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-purchase-order
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/ap-team@kroger.com/sendMail"
          operations:
            - name: send-email
              method: POST

Orchestrates new vendor item setup by collecting product data from vendors, creating master records in SAP, setting up planograms in JDA, and notifying category managers.

naftiko: "0.5"
info:
  label: "Vendor New Item Setup Orchestrator"
  description: "Orchestrates new vendor item setup by collecting product data from vendors, creating master records in SAP, setting up planograms in JDA, and notifying category managers."
  tags:
    - vendor-management
    - item-setup
    - sap
    - jda
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-ops
      port: 8080
      tools:
        - name: vendor-new-item-setup
          description: "Orchestrates new vendor item setup."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Vendor New Item Setup Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Verifies vendor promotional compliance by checking ad placement against contracts in SAP, validating shelf displays via Cloud Vision, and creating variance reports in SharePoint.

naftiko: "0.5"
info:
  label: "Vendor Promotional Compliance Checker"
  description: "Verifies vendor promotional compliance by checking ad placement against contracts in SAP, validating shelf displays via Cloud Vision, and creating variance reports in SharePoint."
  tags:
    - promotions
    - vendor-compliance
    - sap
    - google-cloud
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: vendor-ops
      port: 8080
      tools:
        - name: vendor-promotional-compliance-checker
          description: "Verifies vendor promotional compliance."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                store_id: "{{store_id}}"
            - name: analyze-data
              type: call
              call: "analytics.run-analysis"
              with:
                store_id: "{{store_id}}"
                data: "{{gather-data.results}}"
            - name: take-action
              type: call
              call: "action.execute"
              with:
                store_id: "{{store_id}}"
                analysis: "{{analyze-data.recommendations}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Vendor Promotional Compliance Checker complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://kroger-api.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://kroger-analytics.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: analysis
          path: "/analyze"
          operations:
            - name: run-analysis
              method: POST
    - type: http
      namespace: action
      baseUri: "https://kroger-ops.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Pulls vendor delivery performance from Oracle Cloud, quality metrics from ServiceNow, and cost data from Snowflake, then posts a consolidated scorecard to SharePoint for procurement review.

naftiko: "0.5"
info:
  label: "Vendor Scorecard Generator"
  description: "Pulls vendor delivery performance from Oracle Cloud, quality metrics from ServiceNow, and cost data from Snowflake, then posts a consolidated scorecard to SharePoint for procurement review."
  tags:
    - vendor-management
    - oracle-cloud
    - servicenow
    - snowflake
    - sharepoint
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: vendor-scorecard
      port: 8080
      tools:
        - name: generate-vendor-scorecard
          description: "Given a vendor ID and review period, compile delivery, quality, and cost metrics into a scorecard and publish to SharePoint."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The Oracle Cloud vendor/supplier identifier."
            - name: period_start
              in: body
              type: string
              description: "Review period start date (YYYY-MM-DD)."
            - name: period_end
              in: body
              type: string
              description: "Review period end date (YYYY-MM-DD)."
          steps:
            - name: get-delivery-metrics
              type: call
              call: "oracle-cloud.get-vendor-deliveries"
              with:
                vendor_id: "{{vendor_id}}"
                from_date: "{{period_start}}"
                to_date: "{{period_end}}"
            - name: get-quality-incidents
              type: call
              call: "servicenow.query-incidents"
              with:
                query: "vendor_id={{vendor_id}}^opened_at>={{period_start}}^opened_at<={{period_end}}^category=vendor_quality"
            - name: get-cost-data
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT vendor_id, SUM(invoice_amount) as total_spend, AVG(price_variance_pct) as avg_variance FROM kroger_dw.procurement.vendor_costs WHERE vendor_id = '{{vendor_id}}' AND invoice_date BETWEEN '{{period_start}}' AND '{{period_end}}' GROUP BY vendor_id"
                warehouse: "KROGER_PROCUREMENT_WH"
            - name: publish-scorecard
              type: call
              call: "sharepoint.create-list-item"
              with:
                site_id: "kroger-procurement"
                list_name: "VendorScorecards"
                fields: "{vendor_id: '{{vendor_id}}', on_time_pct: '{{get-delivery-metrics.on_time_rate}}', quality_incidents: '{{get-quality-incidents.count}}', total_spend: '{{get-cost-data.total_spend}}', price_variance: '{{get-cost-data.avg_variance}}'}"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: vendor-deliveries
          path: "/receivingReceipts?q=VendorId={{vendor_id}};ReceiptDate>={{from_date}};ReceiptDate<={{to_date}}"
          inputParameters:
            - name: vendor_id
              in: query
            - name: from_date
              in: query
            - name: to_date
              in: query
          operations:
            - name: get-vendor-deliveries
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://kroger.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: query-incidents
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-list-item
              method: POST

Identifies low-stock items across distribution centers in Oracle EBS, generates purchase orders in Oracle Cloud, logs replenishment actions in Snowflake, and alerts the distribution team in Teams.

naftiko: "0.5"
info:
  label: "Warehouse Replenishment Orchestrator"
  description: "Identifies low-stock items across distribution centers in Oracle EBS, generates purchase orders in Oracle Cloud, logs replenishment actions in Snowflake, and alerts the distribution team in Teams."
  tags:
    - supply-chain
    - warehouse
    - oracle-e-business-suite
    - oracle-cloud
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse-replenishment
      port: 8080
      tools:
        - name: trigger-replenishment
          description: "Given a distribution center ID and threshold, find low-stock items, generate POs, log, and notify."
          inputParameters:
            - name: dc_id
              in: body
              type: string
              description: "The distribution center identifier."
            - name: stock_threshold_pct
              in: body
              type: number
              description: "Percentage threshold below which items are considered low-stock."
          steps:
            - name: find-low-stock
              type: call
              call: "oracle-ebs.get-low-stock-items"
              with:
                dc_id: "{{dc_id}}"
                threshold_pct: "{{stock_threshold_pct}}"
            - name: generate-pos
              type: call
              call: "oracle-cloud.create-purchase-orders"
              with:
                items: "{{find-low-stock.items}}"
                dc_id: "{{dc_id}}"
            - name: log-replenishment
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.supply_chain.replenishment_log (dc_id, item_count, po_count, threshold_pct, triggered_at) VALUES ('{{dc_id}}', {{find-low-stock.item_count}}, {{generate-pos.po_count}}, {{stock_threshold_pct}}, CURRENT_TIMESTAMP())"
                warehouse: "KROGER_SUPPLY_CHAIN_WH"
            - name: notify-distribution
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "distribution-{{dc_id}}"
                channel_id: "replenishment"
                text: "Replenishment triggered for DC {{dc_id}}: {{find-low-stock.item_count}} items below {{stock_threshold_pct}}% threshold. {{generate-pos.po_count}} purchase orders generated. Top items: {{find-low-stock.top_items}}."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: low-stock
          path: "/low-stock-report"
          operations:
            - name: get-low-stock-items
              method: POST
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: purchase-orders
          path: "/purchaseOrders"
          operations:
            - name: create-purchase-orders
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Pulls promotional item list from Oracle Cloud, enriches with market pricing from Circana, generates ad layouts in Adobe Creative Cloud, publishes digital versions via the Kroger API, and tracks in Snowflake.

naftiko: "0.5"
info:
  label: "Weekly Ad Promotion Builder"
  description: "Pulls promotional item list from Oracle Cloud, enriches with market pricing from Circana, generates ad layouts in Adobe Creative Cloud, publishes digital versions via the Kroger API, and tracks in Snowflake."
  tags:
    - marketing
    - promotions
    - oracle-cloud
    - circana
    - adobe-creative-cloud
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: weekly-ad
      port: 8080
      tools:
        - name: build-weekly-ad
          description: "Given a division code and ad week, compile promotional items, check market pricing, build ad, and publish."
          inputParameters:
            - name: division_code
              in: body
              type: string
              description: "The Kroger division code."
            - name: ad_week_start
              in: body
              type: string
              description: "The Wednesday start date of the ad week (YYYY-MM-DD)."
          steps:
            - name: get-promo-items
              type: call
              call: "oracle-cloud.get-promotional-items"
              with:
                division: "{{division_code}}"
                week_start: "{{ad_week_start}}"
            - name: get-market-pricing
              type: call
              call: "circana.get-competitive-prices"
              with:
                upcs: "{{get-promo-items.upc_list}}"
                market: "{{division_code}}"
            - name: generate-ad-assets
              type: call
              call: "adobe-cc.generate-ad-layout"
              with:
                template: "weekly_ad_{{division_code}}"
                items: "{{get-promo-items.items}}"
                pricing: "{{get-market-pricing.price_data}}"
            - name: publish-digital-ad
              type: call
              call: "kroger-api.publish-weekly-ad"
              with:
                division: "{{division_code}}"
                week_start: "{{ad_week_start}}"
                asset_url: "{{generate-ad-assets.output_url}}"
            - name: log-ad-build
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO kroger_dw.marketing.weekly_ad_log (division, week_start, item_count, published_at) VALUES ('{{division_code}}', '{{ad_week_start}}', {{get-promo-items.item_count}}, CURRENT_TIMESTAMP())"
                warehouse: "KROGER_MARKETING_WH"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: promotions
          path: "/promotionalItems?division={{division}}&weekStart={{week_start}}"
          inputParameters:
            - name: division
              in: query
            - name: week_start
              in: query
          operations:
            - name: get-promotional-items
              method: GET
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_api_token"
      resources:
        - name: competitive-prices
          path: "/pricing/competitive"
          operations:
            - name: get-competitive-prices
              method: POST
    - type: http
      namespace: adobe-cc
      baseUri: "https://cc-api.adobe.io/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_cc_token"
      resources:
        - name: ad-layouts
          path: "/documents/generate"
          operations:
            - name: generate-ad-layout
              method: POST
    - type: http
      namespace: kroger-api
      baseUri: "https://api.kroger.com/v1"
      authentication:
        type: bearer
        token: "$secrets.kroger_api_token"
      resources:
        - name: weekly-ads
          path: "/weekly-ads"
          operations:
            - name: publish-weekly-ad
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://kroger.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Checks associate food safety and compliance certifications in Workday for regulatory compliance.

naftiko: "0.5"
info:
  label: "Workday Associate Certification Check"
  description: "Checks associate food safety and compliance certifications in Workday for regulatory compliance."
  tags:
    - compliance
    - workday
capability:
  exposes:
    - type: mcp
      namespace: certifications
      port: 8080
      tools:
        - name: check-certs
          description: "Check associate certifications."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee id." 
          call: "workday.get-certs"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: result
              type: object
              mapping: "$.data"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://kroger-workday.kroger.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: certs
          path: "/certs"
          operations:
            - name: get-certs
              method: GET