Kroger Capabilities
Naftiko 0.5 capability definitions for Kroger - 100 capabilities showing integration workflows and service orchestrations.
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