Kraft Heinz Capabilities
Naftiko 0.5 capability definitions for Kraft Heinz - 100 capabilities showing integration workflows and service orchestrations.
Uses Anthropic Claude to review and summarize product marketing claims documents retrieved from SharePoint, checking for regulatory compliance language and flagging ambiguous claims.
naftiko: "0.5"
info:
label: "AI-Assisted Brand Claim Document Review"
description: "Uses Anthropic Claude to review and summarize product marketing claims documents retrieved from SharePoint, checking for regulatory compliance language and flagging ambiguous claims."
tags:
- ai
- marketing
- compliance
- anthropic
- sharepoint
capability:
exposes:
- type: mcp
namespace: ai-compliance
port: 8080
tools:
- name: review-brand-claims
description: "Given a SharePoint document URL for a product marketing claims brief, retrieve the document, send it to Anthropic Claude for compliance review, and write the review summary back to SharePoint. Use before packaging or campaign approvals."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the claims document is stored."
- name: document_path
in: body
type: string
description: "The SharePoint document relative path."
steps:
- name: get-document
type: call
call: sharepoint.get-document
with:
site_id: "{{site_id}}"
path: "{{document_path}}"
- name: review-claims
type: call
call: anthropic.create-message
with:
model: "claude-opus-4-5"
content: "Review this product marketing claims document for regulatory compliance. Flag any ambiguous health, nutrition, or comparative claims. Document: {{get-document.content}}"
- name: write-review
type: call
call: sharepoint.create-file
with:
site_id: "{{site_id}}"
filename: "claims-review.md"
content: "{{review-claims.text}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: get-document
method: GET
- name: create-file
method: PUT
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Checks Azure AD group memberships for a user to validate access rights.
naftiko: "0.5"
info:
label: "Azure AD User Group Membership Check"
description: "Checks Azure AD group memberships for a user to validate access rights."
tags:
- security
- identity
- azure-active-directory
- access
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: check-groups
description: "List Azure AD group memberships for access validation."
inputParameters:
- name: user_upn
type: string
description: "User principal name."
call: azuread.get-member-of
with:
upn: "{{user_upn}}"
outputParameters:
- name: groups
type: string
mapping: "$.value"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: member-of
path: "/users/memberOf"
operations:
- name: get-member-of
method: GET
Monitors Azure subscriptions for cost anomalies, creates a ServiceNow ticket for investigation, and posts an alert to the cloud FinOps Teams channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Alert"
description: "Monitors Azure subscriptions for cost anomalies, creates a ServiceNow ticket for investigation, and posts an alert to the cloud FinOps Teams channel."
tags:
- cloud
- finops
- azure
- servicenow
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and look-back period, retrieve cost anomalies from Azure Cost Management, open a ServiceNow investigation ticket, and alert the FinOps channel in Teams. Use for scheduled cloud cost governance runs."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to analyze for cost anomalies."
- name: period_days
in: body
type: integer
description: "Number of days to check for cost anomalies, e.g. 7."
steps:
- name: get-cost-anomalies
type: call
call: azure-cost.get-anomalies
with:
subscription_id: "{{subscription_id}}"
period_days: "{{period_days}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Azure cost anomaly in subscription {{subscription_id}}"
category: "cloud_cost"
priority: "3"
- name: post-alert
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finops_channel_id"
text: "Azure Cost Anomaly: Subscription {{subscription_id}} | SNOW: {{create-ticket.number}} | Period: {{period_days}} days"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: anomalies
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/anomalies"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-anomalies
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams.
naftiko: "0.5"
info:
label: "Azure DevOps Release Approval Handler"
description: "Handles releases by checking Azure DevOps pipeline, ServiceNow change, and notifying Teams."
tags:
- operations
- devops
- azure-devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-mgmt
port: 8080
tools:
- name: handle-release
description: "Handle release approval."
inputParameters:
- name: pipeline_id
type: string
description: "Pipeline ID."
- name: change_request
type: string
description: "Change request."
steps:
- name: get-pipeline
type: call
call: azuredevops.get-run
with:
pipeline_id: "{{pipeline_id}}"
- name: validate
type: call
call: servicenow.get-change
with:
number: "{{change_request}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "releases"
text: "Release: Pipeline {{pipeline_id}} ({{get-pipeline.status}})"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/kraftheinz"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: pipelines
path: "/_apis/pipelines"
operations:
- name: get-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams.
naftiko: "0.5"
info:
label: "Brand Sentiment Monitoring Responder"
description: "Monitors brand sentiment from Snowflake, creates Salesforce cases, and alerts brand management via Teams."
tags:
- marketing
- social
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: respond-sentiment
description: "Monitor brand sentiment and respond to negative trends."
inputParameters:
- name: brand_name
type: string
description: "Brand name."
- name: threshold
type: number
description: "Negative threshold pct."
steps:
- name: get-sentiment
type: call
call: snowflake.execute-query
with:
warehouse: "SOCIAL_WH"
query: "SELECT negative_pct FROM sentiment WHERE brand='{{brand_name}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "Sentiment alert: {{brand_name}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "brand-mgmt"
text: "SENTIMENT: {{brand_name}} negative at {{get-sentiment.negative_pct}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams.
naftiko: "0.5"
info:
label: "Co-Manufacturer Production Monitoring"
description: "Monitors co-manufacturer production by pulling Snowflake output data, comparing against SAP planned orders, and posting status to Teams."
tags:
- manufacturing
- supply-chain
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: co-mfg
port: 8080
tools:
- name: monitor-co-mfg
description: "Monitor co-manufacturer production output against plans."
inputParameters:
- name: co_mfg_id
type: string
description: "Co-manufacturer identifier."
- name: period
type: string
description: "Production period."
steps:
- name: get-output
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT sku, actual_units, planned_units FROM co_mfg_output WHERE mfg_id='{{co_mfg_id}}' AND period='{{period}}'"
- name: get-orders
type: call
call: sap.get-orders
with:
supplier: "{{co_mfg_id}}"
period: "{{period}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "co-manufacturing"
text: "Co-mfg {{co_mfg_id}} ({{period}}): Actual {{get-output.total_units}} vs planned {{get-orders.planned_units}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/data"
operations:
- name: get-orders
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Monitoring"
description: "Monitors cold chain temperatures from Snowflake IoT data, flags excursions, and creates ServiceNow incidents for out-of-range events."
tags:
- supply-chain
- quality
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-chain
port: 8080
tools:
- name: monitor-cold-chain
description: "Monitor cold chain temperature excursions and create incidents."
inputParameters:
- name: shipment_id
type: string
description: "Shipment tracking ID."
- name: max_temp
type: number
description: "Maximum allowed temperature in Celsius."
steps:
- name: get-temps
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT timestamp, temp_celsius FROM cold_chain WHERE shipment='{{shipment_id}}' AND temp_celsius>{{max_temp}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Cold chain excursion: shipment {{shipment_id}}"
description: "{{get-temps.excursion_count}} temperature excursions above {{max_temp}}C"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "COLD CHAIN ALERT: Shipment {{shipment_id}} had {{get-temps.excursion_count}} excursions"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams.
naftiko: "0.5"
info:
label: "Competitive Market Intelligence Digest"
description: "Compiles competitive intelligence from Snowflake Circana data, updates Salesforce, and posts digest to Teams."
tags:
- marketing
- analytics
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: market-intelligence
port: 8080
tools:
- name: generate-digest
description: "Generate competitive market intelligence digest."
inputParameters:
- name: category
type: string
description: "Product category."
- name: period
type: string
description: "Period."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKET_WH"
query: "SELECT brand, share FROM circana WHERE category='{{category}}'"
- name: update-sf
type: call
call: salesforce.update-report
with:
category: "{{category}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "market-intel"
text: "Market digest for {{category}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Consumer Review Analysis Pipeline"
description: "Analyzes consumer reviews from Snowflake, creates Jira tasks, and posts summary to Teams."
tags:
- marketing
- quality
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: consumer-insights
port: 8080
tools:
- name: analyze-reviews
description: "Analyze consumer reviews for complaint trends."
inputParameters:
- name: product_line
type: string
description: "Product line."
- name: period_days
type: number
description: "Lookback days."
steps:
- name: get-reviews
type: call
call: snowflake.execute-query
with:
warehouse: "CONSUMER_WH"
query: "SELECT topic, count FROM reviews WHERE product='{{product_line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Reviews: {{product_line}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "insights"
text: "Review analysis for {{product_line}} complete"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists.
naftiko: "0.5"
info:
label: "Contract Manufacturer Quality Audit"
description: "Initiates CM audit from Ariba supplier data, Jira tasks, and SharePoint checklists."
tags:
- quality
- procurement
- sap
- jira
- sharepoint
capability:
exposes:
- type: mcp
namespace: quality-audit
port: 8080
tools:
- name: initiate-audit
description: "Start contract manufacturer quality audit."
inputParameters:
- name: supplier_id
type: string
description: "Supplier ID."
- name: audit_type
type: string
description: "Audit type."
steps:
- name: get-supplier
type: call
call: ariba.get-supplier
with:
supplier_id: "{{supplier_id}}"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QAUDIT"
summary: "CM Audit: {{get-supplier.name}}"
- name: share-checklist
type: call
call: sharepoint.copy-template
with:
template: "audit-{{audit_type}}"
destination: "audits/{{supplier_id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks.
naftiko: "0.5"
info:
label: "Contractor Access Expiry Handler"
description: "Handles contractor expiry by checking Okta, Workday dates, and creating ServiceNow tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-lifecycle
port: 8080
tools:
- name: handle-expiry
description: "Handle contractor access expiry."
inputParameters:
- name: contractor_email
type: string
description: "Contractor email."
steps:
- name: get-okta
type: call
call: okta.get-user
with:
email: "{{contractor_email}}"
- name: check-wd
type: call
call: workday.get-worker
with:
email: "{{contractor_email}}"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Expiry: {{contractor_email}}"
consumes:
- type: http
namespace: okta
baseUri: "https://kraftheinz.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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
Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow.
naftiko: "0.5"
info:
label: "Customer Complaint Quality Investigation"
description: "Routes complaints to quality by tracing batch in SAP, creating Jira investigation, and updating ServiceNow."
tags:
- quality
- customer-service
- sap
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: complaint-quality
port: 8080
tools:
- name: route-complaint
description: "Route customer complaint to quality investigation."
inputParameters:
- name: ticket_id
type: string
description: "ServiceNow ticket."
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: trace
type: call
call: sap.get-batch
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-inv
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Complaint: batch {{batch_number}}"
- name: update
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Investigation: {{create-inv.key}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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
Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Customer Returns Analysis"
description: "Analyzes returns from SAP, Snowflake quality data, and creates Jira improvement tasks."
tags:
- quality
- sales
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: returns-analytics
port: 8080
tools:
- name: analyze-returns
description: "Analyze customer return patterns."
inputParameters:
- name: material_number
type: string
description: "Material."
- name: period
type: string
description: "Period."
steps:
- name: get-returns
type: call
call: sap.get-returns
with:
material: "{{material_number}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "QUALITY_WH"
query: "SELECT reason FROM returns WHERE material='{{material_number}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "QUAL"
summary: "Returns: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_RETURNS_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-returns
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
On a Datadog critical monitor trigger for Kraft Heinz digital commerce or manufacturing systems, creates a ServiceNow incident and posts a triage summary to the ops Teams channel.
naftiko: "0.5"
info:
label: "Datadog Production Monitoring Alert Handler"
description: "On a Datadog critical monitor trigger for Kraft Heinz digital commerce or manufacturing systems, creates a ServiceNow incident and posts a triage summary to the ops Teams channel."
tags:
- observability
- monitoring
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-datadog-alert
description: "Given a Datadog alert ID and monitor name, retrieve event details, open a ServiceNow incident, and post a triage message to the ops Teams channel. Invoke when Datadog fires a critical alert on production systems."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog event or alert ID."
- name: monitor_name
in: body
type: string
description: "The Datadog monitor name that fired the alert."
steps:
- name: get-event
type: call
call: datadog.get-event
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Datadog Alert: {{monitor_name}}"
category: "monitoring"
priority: "2"
- name: post-triage
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ops_channel_id"
text: "Datadog Alert: {{monitor_name}} | SNOW: {{create-incident.number}} | Event: {{alert_id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-event
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Checks production service health in Datadog including error rate, latency, and uptime.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Checks production service health in Datadog including error rate, latency, and uptime."
tags:
- operations
- monitoring
- datadog
- performance
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: check-service-health
description: "Check Datadog for service health metrics."
inputParameters:
- name: service_name
type: string
description: "Datadog service name."
- name: time_from
type: string
description: "Start timestamp."
call: datadog.query-metrics
with:
query: "avg:trace.errors{service:{{service_name}}}"
from: "{{time_from}}"
outputParameters:
- name: error_rate
type: string
mapping: "$.series[0].pointlist[0][1]"
- name: latency
type: string
mapping: "$.series[1].pointlist[0][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Sync"
description: "Syncs demand forecasts from Snowflake with SAP inventory and creates planned production orders."
tags:
- supply-chain
- manufacturing
- snowflake
- sap
- planning
capability:
exposes:
- type: mcp
namespace: demand-planning
port: 8080
tools:
- name: sync-demand
description: "Synchronize demand forecasts with production planning."
inputParameters:
- name: category
type: string
description: "Product category."
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Planning weeks."
steps:
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM forecast WHERE category='{{category}}'"
- name: check-stock
type: call
call: sap.get-stock
with:
plant: "{{plant_code}}"
category: "{{category}}"
- name: create-orders
type: call
call: sap.create-planned-order
with:
plant: "{{plant_code}}"
data: "{{get-forecast.data}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: create-planned-order
method: POST
Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams.
naftiko: "0.5"
info:
label: "Digital Shelf Price Monitor"
description: "Monitors e-commerce pricing from Snowflake, flags MAP violations, creates Salesforce cases, alerts Teams."
tags:
- ecommerce
- sales
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pricing-ops
port: 8080
tools:
- name: monitor-pricing
description: "Monitor digital shelf pricing for MAP violations."
inputParameters:
- name: brand
type: string
description: "Brand name."
- name: marketplace
type: string
description: "Marketplace."
steps:
- name: get-prices
type: call
call: snowflake.execute-query
with:
warehouse: "ECOM_WH"
query: "SELECT sku, price FROM shelf WHERE brand='{{brand}}'"
- name: create-case
type: call
call: salesforce.create-case
with:
Subject: "MAP violation: {{brand}} on {{marketplace}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "pricing"
text: "MAP alert: {{brand}} on {{marketplace}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel.
naftiko: "0.5"
info:
label: "Distributor Order to Cash Tracker"
description: "Tracks distributor orders from Salesforce through SAP fulfillment and posts cash collection status to the finance Teams channel."
tags:
- sales
- finance
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-to-cash
port: 8080
tools:
- name: track-order-to-cash
description: "Track distributor order through fulfillment and collection."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: get-fulfillment
type: call
call: sap.get-delivery-status
with:
order: "{{get-order.sap_reference}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "finance-ar"
text: "Order {{order_id}}: Fulfillment {{get-fulfillment.status}}. Invoice: {{get-fulfillment.invoice_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order"
operations:
- name: get-order
method: GET
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/data"
operations:
- name: get-delivery-status
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket.
naftiko: "0.5"
info:
label: "E-commerce Order Fulfillment Tracker"
description: "Tracks fulfillment from Salesforce order, SAP picking, and updates ServiceNow customer ticket."
tags:
- ecommerce
- supply-chain
- salesforce
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ecom-fulfillment
port: 8080
tools:
- name: track-fulfillment
description: "Track e-commerce order fulfillment."
inputParameters:
- name: order_id
type: string
description: "Salesforce order ID."
- name: ticket_id
type: string
description: "ServiceNow ticket."
steps:
- name: get-order
type: call
call: salesforce.get-order
with:
order_id: "{{order_id}}"
- name: check-picking
type: call
call: sap.get-delivery
with:
order: "{{get-order.sap_order}}"
- name: update-ticket
type: call
call: servicenow.update-incident
with:
number: "{{ticket_id}}"
comment: "Status: {{get-order.status}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Generates learning paths from Workday skills, matches with training, and creates Jira development plans.
naftiko: "0.5"
info:
label: "Employee Learning Path Generator"
description: "Generates learning paths from Workday skills, matches with training, and creates Jira development plans."
tags:
- hr
- training
- workday
- jira
capability:
exposes:
- type: mcp
namespace: hr-learning
port: 8080
tools:
- name: generate-path
description: "Create personalized learning path."
inputParameters:
- name: employee_id
type: string
description: "Employee ID."
- name: target_role
type: string
description: "Target role."
steps:
- name: get-skills
type: call
call: workday.get-skills
with:
worker_id: "{{employee_id}}"
- name: create-plan
type: call
call: jira.create-issue
with:
project_key: "LEARN"
summary: "Learning: {{target_role}} for {{employee_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When an employee termination is recorded in Workday, disables the Microsoft 365 account, clears Okta sessions, and closes all open ServiceNow tickets assigned to the departing employee.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee termination is recorded in Workday, disables the Microsoft 365 account, clears Okta sessions, and closes all open ServiceNow tickets assigned to the departing employee."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- access-management
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID for a terminating employee, disable their Microsoft 365 account, revoke all Okta sessions, and close their open ServiceNow tickets. Invoke on confirmed termination events from Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: disable-m365
type: call
call: msgraph.disable-user
with:
user_id: "{{get-worker.work_email}}"
- name: revoke-okta-sessions
type: call
call: okta.clear-sessions
with:
login: "{{get-worker.work_email}}"
- name: close-snow-tickets
type: call
call: servicenow.close-tickets
with:
assigned_to: "{{get-worker.work_email}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraft-heinz/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://kraft-heinz.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{{login}}/sessions"
inputParameters:
- name: login
in: path
operations:
- name: clear-sessions
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-tickets
method: PATCH
Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies.
naftiko: "0.5"
info:
label: "Food Safety Allergen Verification"
description: "Verifies allergen declarations by checking SAP BOM ingredients, querying Snowflake allergen database, and creating Jira review tasks for discrepancies."
tags:
- quality
- food-safety
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: food-safety
port: 8080
tools:
- name: verify-allergens
description: "Verify allergen declarations against BOM and regulatory database."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: market
type: string
description: "Target market country code."
steps:
- name: get-ingredients
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
- name: check-allergens
type: call
call: snowflake.execute-query
with:
warehouse: "FOOD_SAFETY_WH"
query: "SELECT allergen, status FROM allergen_db WHERE ingredient IN ({{get-ingredients.components}}) AND market='{{market}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FSAFETY"
summary: "Allergen verification: {{material_number}} for {{market}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: bom
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When a food safety or quality incident is reported via Salesforce Service Cloud, creates a high-priority ServiceNow incident, notifies the quality assurance team, and escalates to the regulatory affairs Teams channel.
naftiko: "0.5"
info:
label: "Food Safety Incident Triage"
description: "When a food safety or quality incident is reported via Salesforce Service Cloud, creates a high-priority ServiceNow incident, notifies the quality assurance team, and escalates to the regulatory affairs Teams channel."
tags:
- customer-support
- quality
- food-safety
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: triage-food-safety-incident
description: "Given a Salesforce Service Cloud case ID flagged as food safety related, retrieve case details, create a P1 ServiceNow incident, and alert the quality assurance and regulatory affairs Teams channels. Use when a consumer complaint or safety report is escalated."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce Service Cloud case ID for the food safety incident."
- name: severity
in: body
type: string
description: "Incident severity level: critical, high, or medium."
steps:
- name: get-case
type: call
call: salesforce.get-case
with:
case_id: "{{case_id}}"
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
short_description: "Food Safety Incident: {{get-case.subject}}"
category: "food_safety"
priority: "1"
description: "Salesforce Case {{case_id}}: {{get-case.description}}"
- name: alert-qa-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_qa_channel_id"
text: "FOOD SAFETY INCIDENT: {{get-case.subject}} | Severity: {{severity}} | SNOW: {{create-snow-incident.number}} | SF Case: {{case_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraft-heinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and posts a summary alert to the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and posts a summary alert to the engineering Teams channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
- incident-response
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow run ID and repository that failed on a protected branch, create a Jira bug ticket and alert the engineering Teams channel with failure context. Invoke when CI/CD fails on main or release branches."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: workflow_run_id
in: body
type: string
description: "The GitHub Actions workflow run ID that failed."
- name: branch
in: body
type: string
description: "The branch where the failure occurred."
steps:
- name: get-run
type: call
call: github.get-workflow-run
with:
repo: "{{repo_name}}"
run_id: "{{workflow_run_id}}"
- name: create-jira-bug
type: call
call: jira.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo_name}} / {{branch}} — Run {{workflow_run_id}}"
description: "GitHub Actions failed on {{branch}}. Run ID: {{workflow_run_id}}"
- name: post-alert
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "CI Failure: {{repo_name}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}}"
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
- type: http
namespace: jira
baseUri: "https://kraft-heinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Scans a GitHub repository for critical code vulnerabilities using GitHub Advanced Security and creates Jira issues for each critical finding, notifying the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Code Security Scan and Jira Triage"
description: "Scans a GitHub repository for critical code vulnerabilities using GitHub Advanced Security and creates Jira issues for each critical finding, notifying the security team via Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-scanning
port: 8080
tools:
- name: scan-and-triage-vulnerabilities
description: "Given a GitHub repository, retrieve critical and high-severity code scanning alerts from GitHub Advanced Security, create a Jira security tracking issue, and notify the security channel in Teams. Use for weekly vulnerability management."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository in owner/repo format."
steps:
- name: get-vulnerabilities
type: call
call: github.get-code-scanning-alerts
with:
repo: "{{repo_name}}"
- name: create-jira-issue
type: call
call: jira.create-issue
with:
project_key: "SEC"
issuetype: "Security"
summary: "Security scan: {{get-vulnerabilities.count}} critical findings in {{repo_name}}"
description: "GitHub Advanced Security found {{get-vulnerabilities.count}} issues in {{repo_name}}."
- name: notify-security
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Security Scan: {{repo_name}} has {{get-vulnerabilities.count}} critical vulnerabilities. Jira: {{create-jira-issue.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
operations:
- name: get-code-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://kraft-heinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks.
naftiko: "0.5"
info:
label: "GMP Training Compliance Tracker"
description: "Tracks GMP training compliance by pulling Workday certifications, checking overdue trainings in Snowflake, and creating ServiceNow remediation tasks."
tags:
- quality
- manufacturing
- workday
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: gmp-compliance
port: 8080
tools:
- name: track-gmp-compliance
description: "Track GMP training compliance across the workforce."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: department
type: string
description: "Department name."
steps:
- name: get-certifications
type: call
call: workday.get-certifications
with:
plant: "{{plant_code}}"
department: "{{department}}"
- name: check-overdue
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT employee_id, training, days_overdue FROM gmp_compliance WHERE plant='{{plant_code}}' AND overdue=true"
- name: create-remediation
type: call
call: servicenow.create-incident
with:
short_description: "GMP training overdue: {{plant_code}} {{department}}"
description: "{{check-overdue.count}} employees with overdue GMP training"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/kraftheinz/certifications"
operations:
- name: get-certifications
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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://kraftheinz.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
Retrieves web traffic metrics from Google Analytics for a brand website.
naftiko: "0.5"
info:
label: "Google Analytics Web Traffic Report"
description: "Retrieves web traffic metrics from Google Analytics for a brand website."
tags:
- marketing
- analytics
- google-analytics
- web
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic
description: "Fetch web traffic data from Google Analytics."
inputParameters:
- name: property_id
type: string
description: "GA4 property ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: ga.run-report
with:
property: "{{property_id}}"
startDate: "{{date_from}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversion_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/runReport"
operations:
- name: run-report
method: POST
Retrieves active employee headcount and salary band data from Workday grouped by department and cost center for finance planning and HR reporting.
naftiko: "0.5"
info:
label: "Headcount and Payroll Snapshot"
description: "Retrieves active employee headcount and salary band data from Workday grouped by department and cost center for finance planning and HR reporting."
tags:
- hr
- finance
- workday
- headcount
- reporting
capability:
exposes:
- type: mcp
namespace: hr-finance
port: 8080
tools:
- name: get-headcount-snapshot
description: "Return active employee records grouped by department and cost center from Workday, including employment type and salary band data. Use for quarterly headcount planning and budget variance analysis."
call: workday.get-headcount
outputParameters:
- name: employees
type: array
mapping: "$.data"
- name: total_count
type: number
mapping: "$.total"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraft-heinz/workers"
operations:
- name: get-headcount
method: GET
On a high-severity PagerDuty alert for production systems, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT operations Teams channel.
naftiko: "0.5"
info:
label: "IT Incident Response and PagerDuty Escalation"
description: "On a high-severity PagerDuty alert for production systems, creates a ServiceNow P1 incident, pages the on-call team, and posts a war-room message to the IT operations Teams channel."
tags:
- itsm
- incident-response
- pagerduty
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a PagerDuty alert ID and affected service name, create a P1 ServiceNow incident, trigger an on-call PagerDuty page, and open a war-room Teams message. Invoke on critical production alerts."
inputParameters:
- name: alert_id
in: body
type: string
description: "The PagerDuty alert ID for the critical production alert."
- name: service_name
in: body
type: string
description: "The name of the affected production service."
- name: alert_summary
in: body
type: string
description: "A brief description of the alert condition."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
priority: "1"
short_description: "P1: {{alert_summary}} in {{service_name}}"
category: "production_outage"
- name: trigger-page
type: call
call: pagerduty.create-incident
with:
title: "P1 Incident: {{alert_summary}}"
service_id: "$secrets.pagerduty_service_id"
body_details: "SNOW: {{create-snow-incident.number}}"
- name: open-war-room
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "P1 INCIDENT: {{alert_summary}} | Service: {{service_name}} | SNOW: {{create-snow-incident.number}} | PD: {{trigger-page.incident_key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves Jira project backlog summary with issue counts by priority and status.
naftiko: "0.5"
info:
label: "Jira Project Backlog Summary"
description: "Retrieves Jira project backlog summary with issue counts by priority and status."
tags:
- project-management
- operations
- jira
- reporting
capability:
exposes:
- type: mcp
namespace: project-ops
port: 8080
tools:
- name: get-backlog
description: "Get Jira project backlog summary."
inputParameters:
- name: project_key
type: string
description: "Jira project key."
call: jira.search-issues
with:
jql: "project={{project_key}} AND status!=Done"
outputParameters:
- name: total
type: string
mapping: "$.total"
- name: issues
type: string
mapping: "$.issues"
consumes:
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves sprint completion metrics from Jira for engineering teams and posts a weekly delivery performance summary to the technology leadership Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity and Delivery Report"
description: "Retrieves sprint completion metrics from Jira for engineering teams and posts a weekly delivery performance summary to the technology leadership Teams channel."
tags:
- devops
- engineering
- jira
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engineering-reporting
port: 8080
tools:
- name: publish-sprint-velocity
description: "Given a Jira project key and sprint ID, retrieve sprint velocity metrics (completed vs. committed points) and post a delivery summary to the technology leadership Teams channel. Use for weekly engineering stand-ups and sprint retrospectives."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key, e.g. ENG."
- name: sprint_id
in: body
type: integer
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint
type: call
call: jira.get-sprint
with:
sprint_id: "{{sprint_id}}"
- name: post-summary
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_tech_channel_id"
text: "Sprint {{sprint_id}} ({{project_key}}): {{get-sprint.completed_points}} of {{get-sprint.committed_points}} story points completed."
consumes:
- type: http
namespace: jira
baseUri: "https://kraft-heinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{sprint_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: sprint_id
in: path
operations:
- name: get-sprint
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Enrichment"
description: "Enriches talent pipeline from Workday requisitions, LinkedIn data, and Jira sourcing tasks."
tags:
- hr
- recruiting
- workday
- linkedin
- jira
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: enrich-pipeline
description: "Enrich talent pipeline."
inputParameters:
- name: department
type: string
description: "Department."
steps:
- name: get-reqs
type: call
call: workday.get-positions
with:
department: "{{department}}"
- name: create-tasks
type: call
call: jira.create-issue
with:
project_key: "RECRUIT"
summary: "Sourcing: {{department}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams.
naftiko: "0.5"
info:
label: "Manufacturing Line Downtime Handler"
description: "Handles line downtime by creating ServiceNow incident, updating SAP status, and alerting operations via Teams."
tags:
- manufacturing
- operations
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: mfg-ops
port: 8080
tools:
- name: handle-downtime
description: "Respond to manufacturing line downtime."
inputParameters:
- name: production_line
type: string
description: "Line ID."
- name: plant_code
type: string
description: "Plant code."
- name: reason
type: string
description: "Downtime reason."
steps:
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Line down: {{production_line}}"
urgency: "1"
- name: update-sap
type: call
call: sap.update-status
with:
plant: "{{plant_code}}"
line: "{{production_line}}"
- name: alert-ops
type: call
call: msteams.send-message
with:
channel_id: "plant-ops"
text: "LINE DOWN: {{production_line}}. Reason: {{reason}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: update-status
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Coordinates the launch of a new digital marketing campaign by creating tasks in Jira, scheduling posts in LinkedIn Campaign Manager, and notifying the brand team via Teams.
naftiko: "0.5"
info:
label: "Marketing Campaign Launch Coordinator"
description: "Coordinates the launch of a new digital marketing campaign by creating tasks in Jira, scheduling posts in LinkedIn Campaign Manager, and notifying the brand team via Teams."
tags:
- marketing
- campaign
- jira
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: campaign-ops
port: 8080
tools:
- name: launch-marketing-campaign
description: "Given a campaign name, target launch date, and budget, create a Jira project task for campaign tracking, schedule a LinkedIn sponsored content campaign, and notify the marketing Teams channel. Use for coordinating brand and product launch campaigns."
inputParameters:
- name: campaign_name
in: body
type: string
description: "The name of the marketing campaign to launch."
- name: launch_date
in: body
type: string
description: "Planned campaign launch date in YYYY-MM-DD format."
- name: budget_usd
in: body
type: number
description: "Total campaign budget in USD."
steps:
- name: create-jira-task
type: call
call: jira.create-issue
with:
project_key: "MKT"
issuetype: "Task"
summary: "Campaign Launch: {{campaign_name}} ({{launch_date}})"
description: "Budget: ${{budget_usd}} | Launch: {{launch_date}}"
- name: create-linkedin-campaign
type: call
call: linkedin.create-campaign
with:
name: "{{campaign_name}}"
totalBudget: "{{budget_usd}}"
startDate: "{{launch_date}}"
- name: notify-marketing
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_marketing_channel_id"
text: "Campaign '{{campaign_name}}' launched! Jira: {{create-jira-task.key}} | LinkedIn Campaign: {{create-linkedin-campaign.campaign_id}}"
consumes:
- type: http
namespace: jira
baseUri: "https://kraft-heinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaigns
path: "/adCampaignsV2"
operations:
- name: create-campaign
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams.
naftiko: "0.5"
info:
label: "Media Mix Optimization Report"
description: "Generates media mix reports from Snowflake, refreshes Power BI, and posts summary to Teams."
tags:
- marketing
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: media-planning
port: 8080
tools:
- name: gen-media-report
description: "Generate media mix optimization report."
inputParameters:
- name: brand
type: string
description: "Brand."
- name: date_from
type: string
description: "Start."
- name: date_to
type: string
description: "End."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "MARKETING_WH"
query: "SELECT channel, roas FROM media WHERE brand='{{brand}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "media-mix"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "media"
text: "Media report for {{brand}} ready"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Retrieves Meta Ads campaign performance metrics for a campaign and date range.
naftiko: "0.5"
info:
label: "Meta Ad Campaign Performance Lookup"
description: "Retrieves Meta Ads campaign performance metrics for a campaign and date range."
tags:
- marketing
- social
- meta
- reporting
capability:
exposes:
- type: mcp
namespace: social-ads
port: 8080
tools:
- name: get-campaign-insights
description: "Fetch Meta Ads campaign insights."
inputParameters:
- name: campaign_id
type: string
description: "Meta campaign ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
call: meta.get-insights
with:
campaign_id: "{{campaign_id}}"
since: "{{date_from}}"
outputParameters:
- name: impressions
type: string
mapping: "$.data[0].impressions"
- name: spend
type: string
mapping: "$.data[0].spend"
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: get-insights
method: GET
Retrieves Facebook and Instagram campaign performance metrics from Meta Graph API and posts a weekly brand performance digest to the social media marketing Teams channel.
naftiko: "0.5"
info:
label: "Meta Social Campaign Performance Digest"
description: "Retrieves Facebook and Instagram campaign performance metrics from Meta Graph API and posts a weekly brand performance digest to the social media marketing Teams channel."
tags:
- marketing
- social
- meta
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-analytics
port: 8080
tools:
- name: digest-meta-campaign-performance
description: "Given a Meta ad account ID and date range, retrieve campaign impressions, clicks, and ROAS from Meta Graph API and post a performance digest to the social media Teams channel. Use for weekly brand performance reviews."
inputParameters:
- name: ad_account_id
in: body
type: string
description: "The Meta ad account ID in act_XXXXXXXXX format."
- name: start_date
in: body
type: string
description: "Reporting period start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Reporting period end date in YYYY-MM-DD format."
steps:
- name: get-campaign-insights
type: call
call: meta.get-ad-insights
with:
ad_account_id: "{{ad_account_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-digest
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_social_channel_id"
text: "Meta Campaign Digest {{start_date}}-{{end_date}}: {{get-campaign-insights.impressions}} impressions | {{get-campaign-insights.clicks}} clicks"
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_access_token"
resources:
- name: ad-insights
path: "/{{ad_account_id}}/insights"
inputParameters:
- name: ad_account_id
in: path
operations:
- name: get-ad-insights
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a new hire is confirmed in Workday, opens a ServiceNow onboarding ticket, provisions an Azure Active Directory account via Microsoft Graph, and sends a Teams welcome message to the new employee.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire is confirmed in Workday, opens a ServiceNow onboarding ticket, provisions an Azure Active Directory account via Microsoft Graph, and sends a Teams welcome message to the new employee."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: open a ServiceNow IT ticket, provision a Microsoft 365 account, and send a Teams welcome message. Invoke when a new hire record is activated in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee's start date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: create-snow-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-worker.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-aad
type: call
call: msgraph.create-user
with:
displayName: "{{get-worker.full_name}}"
userPrincipalName: "{{get-worker.work_email}}"
mailNickname: "{{get-worker.preferred_name}}"
- name: send-welcome
type: call
call: msteams.post-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Kraft Heinz, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-snow-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraft-heinz/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
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: post-message
method: POST
Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams.
naftiko: "0.5"
info:
label: "New Product Development Gate Review"
description: "Orchestrates NPD gate reviews by pulling project status from Jira, financial projections from Snowflake, and posting review summary to Teams."
tags:
- r-and-d
- innovation
- jira
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: npd-gates
port: 8080
tools:
- name: conduct-gate-review
description: "Conduct NPD gate review by gathering project status and financials."
inputParameters:
- name: project_key
type: string
description: "Jira project key for NPD."
- name: gate_number
type: number
description: "Gate review number."
steps:
- name: get-project-status
type: call
call: jira.get-issue
with:
issue_key: "{{project_key}}"
- name: get-financials
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT npv, roi_pct, payback_months FROM npd_financials WHERE project='{{project_key}}'"
- name: post-review
type: call
call: msteams.send-message
with:
channel_id: "npd-reviews"
text: "Gate {{gate_number}} review for {{project_key}}: NPV ${{get-financials.npv}}, ROI {{get-financials.roi_pct}}%"
consumes:
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: get-issue
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams.
naftiko: "0.5"
info:
label: "New SKU Onboarding Workflow"
description: "Onboards new SKU by creating SAP material, Salesforce product, and notifying supply chain via Teams."
tags:
- supply-chain
- sales
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sku-management
port: 8080
tools:
- name: onboard-sku
description: "Orchestrate new SKU onboarding."
inputParameters:
- name: sku_name
type: string
description: "Product name."
- name: category
type: string
description: "Category."
- name: unit_cost
type: number
description: "Unit cost."
steps:
- name: create-material
type: call
call: sap.create-material
with:
description: "{{sku_name}}"
group: "{{category}}"
- name: create-product
type: call
call: salesforce.create-product
with:
Name: "{{sku_name}}"
ProductCode: "{{create-material.number}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "New SKU: {{sku_name}} ({{create-material.number}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-material
method: POST
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks.
naftiko: "0.5"
info:
label: "Nutrition Label Compliance Check"
description: "Checks nutrition label compliance by pulling recipe data from SAP, validating against regulatory requirements in Snowflake, and creating Jira tasks."
tags:
- quality
- regulatory
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: label-compliance
port: 8080
tools:
- name: check-nutrition-label
description: "Check nutrition label compliance against regulations."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: target_market
type: string
description: "Target market country code."
steps:
- name: get-recipe
type: call
call: sap.get-recipe
with:
material: "{{material_number}}"
- name: check-regs
type: call
call: snowflake.execute-query
with:
warehouse: "REGULATORY_WH"
query: "SELECT requirement, compliant FROM label_regs WHERE market='{{target_market}}' AND material='{{material_number}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "REGULATORY"
summary: "Label compliance: {{material_number}} for {{target_market}}"
description: "Non-compliant items: {{check-regs.non_compliant_count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recipes
path: "/data"
operations:
- name: get-recipe
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks.
naftiko: "0.5"
info:
label: "Okta Privileged Access Audit"
description: "Audits privileged Okta accounts against Workday employment, creating ServiceNow review tasks."
tags:
- security
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-access
description: "Audit privileged access."
inputParameters:
- name: role_type
type: string
description: "Okta admin role type."
steps:
- name: get-admins
type: call
call: okta.list-admins
with:
role_type: "{{role_type}}"
- name: check-employment
type: call
call: workday.get-active
with:
emails: "{{get-admins.emails}}"
- name: create-review
type: call
call: servicenow.create-incident
with:
short_description: "Access audit: {{role_type}}"
consumes:
- type: http
namespace: okta
baseUri: "https://kraftheinz.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-user
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access entitlements and notifies the IT security team.
naftiko: "0.5"
info:
label: "Okta Role-Based Access Provisioning"
description: "When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access entitlements and notifies the IT security team."
tags:
- identity
- security
- hr
- okta
- workday
- access-management
capability:
exposes:
- type: mcp
namespace: identity-ops
port: 8080
tools:
- name: sync-role-access
description: "Given a Workday employee ID and new job profile, update the employee's Okta group memberships to reflect the new role's access entitlements. Notify the security team in Teams. Invoke on Workday role change events."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee whose role changed."
- name: new_role
in: body
type: string
description: "The new job profile or role name as defined in Workday."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: get-okta-user
type: call
call: okta.get-user
with:
login: "{{get-worker.work_email}}"
- name: update-groups
type: call
call: okta.add-user-to-group
with:
user_id: "{{get-okta-user.id}}"
profile: "{{new_role}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraft-heinz/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://kraft-heinz.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
- name: user-groups
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks.
naftiko: "0.5"
info:
label: "Packaging Sustainability Compliance Check"
description: "Checks packaging sustainability from SAP BOM, Snowflake compliance data, and creates Jira tasks."
tags:
- sustainability
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: check-packaging
description: "Verify packaging sustainability compliance."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
steps:
- name: get-bom
type: call
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: check
type: call
call: snowflake.execute-query
with:
warehouse: "SUSTAINABILITY_WH"
query: "SELECT recyclable_pct FROM packaging WHERE material IN ({{get-bom.components}})"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "SUSTAIN"
summary: "Packaging: {{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams.
naftiko: "0.5"
info:
label: "Plant Energy Consumption Monitor"
description: "Monitors plant energy from Snowflake IoT data, creates ServiceNow tasks, and alerts via Teams."
tags:
- manufacturing
- sustainability
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: energy-monitoring
port: 8080
tools:
- name: monitor-energy
description: "Monitor plant energy against targets."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: date
type: string
description: "Date."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "IOT_WH"
query: "SELECT kwh FROM energy WHERE plant='{{plant_code}}'"
- name: create-task
type: call
call: servicenow.create-incident
with:
short_description: "Energy anomaly: {{plant_code}}"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Energy alert: {{plant_code}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams.
naftiko: "0.5"
info:
label: "Plant Maintenance Schedule Report"
description: "Generates maintenance reports from SAP orders, Snowflake equipment history, and posts to Teams."
tags:
- manufacturing
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: maintenance-reporting
port: 8080
tools:
- name: gen-schedule
description: "Generate maintenance schedule report."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: weeks
type: number
description: "Weeks ahead."
steps:
- name: get-orders
type: call
call: sap.get-orders
with:
plant: "{{plant_code}}"
- name: get-history
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT mtbf FROM equipment WHERE plant='{{plant_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance for {{plant_code}}: {{get-orders.count}} orders"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-orders
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Checks Power BI dataset refresh status and returns last refresh time.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks Power BI dataset refresh status and returns last refresh time."
tags:
- analytics
- reporting
- power-bi
- data
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: check-refresh
description: "Check Power BI dataset refresh status."
inputParameters:
- name: dataset_id
type: string
description: "Power BI dataset ID."
call: powerbi.get-refresh
with:
datasetId: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Triggers a Power BI dataset refresh for the trade spend and promotional analytics workspace and notifies the commercial finance team via Teams on completion.
naftiko: "0.5"
info:
label: "Power BI Trade Spend Analytics Refresh"
description: "Triggers a Power BI dataset refresh for the trade spend and promotional analytics workspace and notifies the commercial finance team via Teams on completion."
tags:
- finance
- analytics
- power-bi
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-analytics
port: 8080
tools:
- name: refresh-trade-spend-report
description: "Trigger a Power BI dataset refresh for the trade spend analytics workspace and dataset, then post a completion notification to the commercial finance Teams channel. Use at the start of each promotional planning cycle or on demand."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the trade spend dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: powerbi.trigger-refresh
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Trade Spend dataset {{dataset_id}} refresh triggered. Refresh ID: {{trigger-refresh.refresh_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks.
naftiko: "0.5"
info:
label: "Private Label Contract Review Workflow"
description: "Reviews private label contracts by pulling data from Salesforce, checking pricing in SAP, and creating Jira approval tasks."
tags:
- sales
- procurement
- salesforce
- sap
- jira
capability:
exposes:
- type: mcp
namespace: contract-mgmt
port: 8080
tools:
- name: review-pl-contract
description: "Review a private label contract across CRM, ERP, and project systems."
inputParameters:
- name: contract_id
type: string
description: "Salesforce contract ID."
steps:
- name: get-contract
type: call
call: salesforce.get-contract
with:
contract_id: "{{contract_id}}"
- name: check-pricing
type: call
call: sap.get-pricing
with:
customer: "{{get-contract.customer_id}}"
materials: "{{get-contract.product_list}}"
- name: create-approval
type: call
call: jira.create-issue
with:
project_key: "CONTRACTS"
summary: "PL Contract Review: {{get-contract.customer_name}}"
description: "Contract value: {{get-contract.total_value}}. Margin: {{check-pricing.margin_pct}}%"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/sobjects/Contract"
operations:
- name: get-contract
method: GET
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: pricing
path: "/data"
operations:
- name: get-pricing
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews.
naftiko: "0.5"
info:
label: "Product Costing Variance Analyzer"
description: "Analyzes costing variances between SAP standard and Snowflake actual costs, creating Jira reviews."
tags:
- finance
- manufacturing
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: cost-analytics
port: 8080
tools:
- name: analyze-variance
description: "Analyze product costing variances."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: period
type: string
description: "Period."
steps:
- name: get-standard
type: call
call: sap.get-cost
with:
material: "{{material_number}}"
- name: get-actual
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT actual_cost FROM costs WHERE material='{{material_number}}'"
- name: create-review
type: call
call: jira.create-issue
with:
project_key: "FIN"
summary: "Variance: {{material_number}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-cost
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams.
naftiko: "0.5"
info:
label: "Product Recall Investigation Orchestrator"
description: "Traces affected batch in SAP, creates ServiceNow incident, and alerts quality team via Teams."
tags:
- quality
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: investigate-recall
description: "Orchestrate product recall investigation."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
- name: severity
type: string
description: "Severity level."
steps:
- name: trace-batch
type: call
call: sap.get-batch-details
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Recall: batch {{batch_number}}"
urgency: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "RECALL: Batch {{batch_number}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-details
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams.
naftiko: "0.5"
info:
label: "Product Shelf Life Monitoring"
description: "Monitors product shelf life by checking SAP batch expiry dates, identifying at-risk inventory in Snowflake, and alerting supply chain via Teams."
tags:
- quality
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shelf-life
port: 8080
tools:
- name: monitor-shelf-life
description: "Monitor product shelf life and alert on expiring inventory."
inputParameters:
- name: plant_code
type: string
description: "SAP plant code."
- name: days_threshold
type: number
description: "Days until expiry threshold."
steps:
- name: get-expiring
type: call
call: sap.get-expiring-batches
with:
plant: "{{plant_code}}"
threshold: "{{days_threshold}}"
- name: get-inventory-value
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT sum(value) FROM inventory WHERE plant='{{plant_code}}' AND days_to_expiry<={{days_threshold}}"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "supply-chain"
text: "Shelf life alert: {{get-expiring.count}} batches expiring within {{days_threshold}} days at {{plant_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: batches
path: "/data"
operations:
- name: get-expiring-batches
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams.
naftiko: "0.5"
info:
label: "Production Batch Release Workflow"
description: "Releases production batch after QA by checking SAP inspection, updating status, and notifying logistics via Teams."
tags:
- manufacturing
- quality
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: batch-release
port: 8080
tools:
- name: release-batch
description: "Release production batch after QA."
inputParameters:
- name: batch_number
type: string
description: "Batch number."
- name: material_number
type: string
description: "Material number."
steps:
- name: check-qa
type: call
call: sap.get-inspection
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
- name: release
type: call
call: sap.update-batch
with:
batch: "{{batch_number}}"
status: "RELEASED"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Batch {{batch_number}} released. QA: {{check-qa.decision}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-inspection
method: GET
- name: update-batch
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals.
naftiko: "0.5"
info:
label: "Production Scheduling Optimizer"
description: "Optimizes scheduling from Snowflake demand, SAP capacity, and Jira schedule proposals."
tags:
- manufacturing
- supply-chain
- snowflake
- sap
- jira
capability:
exposes:
- type: mcp
namespace: production-planning
port: 8080
tools:
- name: optimize-schedule
description: "Optimize production scheduling."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-demand
type: call
call: snowflake.execute-query
with:
warehouse: "DEMAND_WH"
query: "SELECT sku, units FROM demand WHERE plant='{{plant_code}}'"
- name: get-capacity
type: call
call: sap.get-capacity
with:
plant: "{{plant_code}}"
- name: create-schedule
type: call
call: jira.create-issue
with:
project_key: "PROD"
summary: "Schedule: {{plant_code}} {{period}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-capacity
method: GET
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks.
naftiko: "0.5"
info:
label: "Production Yield Analysis"
description: "Analyzes yield from SAP planned vs actual, Snowflake waste trends, and creates Jira improvement tasks."
tags:
- manufacturing
- quality
- sap
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: production-analytics
port: 8080
tools:
- name: analyze-yield
description: "Analyze production yield."
inputParameters:
- name: line
type: string
description: "Production line."
- name: plant_code
type: string
description: "Plant code."
- name: period
type: string
description: "Period."
steps:
- name: get-yield
type: call
call: sap.get-confirmations
with:
plant: "{{plant_code}}"
line: "{{line}}"
- name: get-waste
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT waste_pct FROM waste WHERE line='{{line}}'"
- name: create-task
type: call
call: jira.create-issue
with:
project_key: "MFG"
summary: "Yield: {{line}} ({{period}})"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-confirmations
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests.
naftiko: "0.5"
info:
label: "Raw Material Shortage Alert Handler"
description: "Handles shortages by checking SAP stock, identifying affected orders, and creating Ariba procurement requests."
tags:
- supply-chain
- procurement
- sap
- manufacturing
capability:
exposes:
- type: mcp
namespace: supply-ops
port: 8080
tools:
- name: handle-shortage
description: "Handle raw material shortage."
inputParameters:
- name: material_number
type: string
description: "Material number."
- name: plant_code
type: string
description: "Plant code."
- name: reorder_qty
type: number
description: "Reorder quantity."
steps:
- name: check-stock
type: call
call: sap.get-stock
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: get-orders
type: call
call: sap.get-orders
with:
material: "{{material_number}}"
- name: create-req
type: call
call: ariba.create-requisition
with:
material: "{{material_number}}"
quantity: "{{reorder_qty}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-stock
method: GET
- name: get-orders
method: GET
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard.
naftiko: "0.5"
info:
label: "Regulatory Document Compliance Tracker"
description: "Tracks regulatory compliance from Jira submissions, SharePoint docs, and Power BI dashboard."
tags:
- regulatory
- quality
- jira
- sharepoint
- power-bi
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: track-compliance
description: "Track regulatory submission status."
inputParameters:
- name: submission_id
type: string
description: "Jira submission key."
steps:
- name: get-status
type: call
call: jira.get-issue
with:
issue_key: "{{submission_id}}"
- name: check-docs
type: call
call: sharepoint.list-folder
with:
folder: "{{submission_id}}"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "regulatory-tracker"
consumes:
- type: http
namespace: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Planogram Compliance Audit"
description: "Audits planogram compliance from Salesforce visits, Snowflake metrics, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-compliance
port: 8080
tools:
- name: audit-planogram
description: "Audit planogram compliance."
inputParameters:
- name: region
type: string
description: "Region."
- name: audit_week
type: string
description: "Audit week."
steps:
- name: get-visits
type: call
call: salesforce.get-visits
with:
region: "{{region}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM planogram WHERE region='{{region}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Planogram: {{region}} week {{audit_week}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups.
naftiko: "0.5"
info:
label: "Retail Shelf Audit Orchestrator"
description: "Orchestrates shelf audits from Salesforce data, Snowflake compliance, and Jira follow-ups."
tags:
- sales
- retail
- salesforce
- snowflake
- jira
capability:
exposes:
- type: mcp
namespace: retail-ops
port: 8080
tools:
- name: run-audit
description: "Orchestrate retail shelf audit."
inputParameters:
- name: account_id
type: string
description: "Salesforce account ID."
- name: audit_period
type: string
description: "Period."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: get-compliance
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT score FROM audit WHERE account='{{account_id}}'"
- name: create-followup
type: call
call: jira.create-issue
with:
project_key: "RETAIL"
summary: "Audit: {{get-account.name}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Generates a weekly digest of Kraft Heinz's key retail and foodservice accounts from Salesforce CRM, including open opportunities and recent activity, then posts the summary to the sales leadership Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Health Digest"
description: "Generates a weekly digest of Kraft Heinz's key retail and foodservice accounts from Salesforce CRM, including open opportunities and recent activity, then posts the summary to the sales leadership Teams channel."
tags:
- sales
- crm
- reporting
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm-reporting
port: 8080
tools:
- name: digest-account-health
description: "Query Salesforce for accounts with recent activity and open opportunities, then post a formatted account health digest to the sales leadership Teams channel. Use for weekly pipeline reviews and customer health monitoring."
inputParameters:
- name: days_back
in: body
type: integer
description: "Number of days of activity to include, e.g. 7 for a weekly digest."
steps:
- name: get-accounts
type: call
call: salesforce.query-accounts
with:
days_back: "{{days_back}}"
- name: post-digest
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "Weekly Account Digest (last {{days_back}} days): {{get-accounts.count}} active accounts with open opportunities."
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraft-heinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query"
operations:
- name: query-accounts
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the sales opportunity pipeline from Salesforce for a business unit.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Lookup"
description: "Retrieves the sales opportunity pipeline from Salesforce for a business unit."
tags:
- sales
- crm
- salesforce
- reporting
capability:
exposes:
- type: mcp
namespace: crm-sales
port: 8080
tools:
- name: get-pipeline
description: "Look up Salesforce opportunity pipeline by business unit."
inputParameters:
- name: business_unit
type: string
description: "Business unit name."
call: salesforce.get-pipeline
with:
bu: "{{business_unit}}"
outputParameters:
- name: total_value
type: string
mapping: "$.totalSize"
- name: opportunities
type: string
mapping: "$.records"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
When a Salesforce opportunity closes as Won, creates a corresponding SAP S/4HANA sales order and notifies the account team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Opportunity to SAP Sales Order Sync"
description: "When a Salesforce opportunity closes as Won, creates a corresponding SAP S/4HANA sales order and notifies the account team in Microsoft Teams."
tags:
- sales
- crm
- erp
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm-erp-sync
port: 8080
tools:
- name: sync-opportunity-to-order
description: "Given a Salesforce opportunity ID for a Closed Won deal, retrieve account and opportunity data, create a SAP S/4HANA sales order, and notify the account team in Teams. Use when a deal is marked Closed Won in Salesforce."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The 18-character Salesforce opportunity record ID."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sap-order
type: call
call: sap.create-sales-order
with:
customer_id: "{{get-opportunity.account_sap_id}}"
amount: "{{get-opportunity.amount}}"
currency: "{{get-opportunity.currency_code}}"
- name: notify-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "SAP Order {{create-sap-order.order_number}} created for opportunity {{opportunity_id}} ({{get-opportunity.name}})."
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraft-heinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: sales-orders
path: "/A_SalesOrder"
operations:
- name: create-sales-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a supplier invoice is submitted in SAP Ariba, validates it against the matching SAP S/4HANA purchase order and routes exceptions to the accounts payable team via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Invoice Validation and Routing"
description: "When a supplier invoice is submitted in SAP Ariba, validates it against the matching SAP S/4HANA purchase order and routes exceptions to the accounts payable team via Teams."
tags:
- finance
- procurement
- sap-ariba
- sap
- invoice
- approval
capability:
exposes:
- type: mcp
namespace: invoice-ops
port: 8080
tools:
- name: validate-and-route-invoice
description: "Given an Ariba invoice ID and associated PO number, retrieve invoice details from SAP Ariba, compare with the SAP S/4HANA PO, and alert the AP team via Teams if discrepancies exceed tolerance. Use for three-way match validation."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The SAP Ariba invoice document ID."
- name: po_number
in: body
type: string
description: "The associated SAP purchase order number."
steps:
- name: get-invoice
type: call
call: ariba.get-invoice
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: notify-ap
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ap_channel_id"
text: "Invoice {{invoice_id}} requires review. Invoiced: {{get-invoice.total_amount}} | PO Amount: {{get-po.total_value}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/invoice/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves supplier performance scores from SAP Ariba Supplier Risk, cross-references with open POs in SAP S/4HANA, and escalates high-risk suppliers to the procurement team via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Risk Assessment"
description: "Retrieves supplier performance scores from SAP Ariba Supplier Risk, cross-references with open POs in SAP S/4HANA, and escalates high-risk suppliers to the procurement team via Teams."
tags:
- procurement
- sap-ariba
- sap
- supplier-risk
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-risk
port: 8080
tools:
- name: assess-supplier-risk
description: "Given a supplier ID, retrieve their risk score from SAP Ariba Supplier Risk and check for open purchase orders in SAP S/4HANA. If risk score exceeds threshold, notify the procurement Teams channel. Use for quarterly supplier risk reviews."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID to assess."
steps:
- name: get-risk-score
type: call
call: ariba.get-supplier-risk
with:
supplier_id: "{{supplier_id}}"
- name: get-open-pos
type: call
call: sap.get-supplier-pos
with:
supplier_id: "{{supplier_id}}"
- name: notify-procurement
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "Supplier Risk Alert: {{supplier_id}} | Risk Score: {{get-risk-score.score}} | Open POs: {{get-open-pos.count}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplierRisk/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: supplier-risk
path: "/suppliers/{{supplier_id}}/riskScore"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier-risk
method: GET
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder"
operations:
- name: get-supplier-pos
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Traces a product batch through SAP to retrieve production origins and component lots.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Traces a product batch through SAP to retrieve production origins and component lots."
tags:
- quality
- supply-chain
- sap
- traceability
capability:
exposes:
- type: mcp
namespace: erp-traceability
port: 8080
tools:
- name: trace-batch
description: "Trace a product batch in SAP for production details."
inputParameters:
- name: batch_number
type: string
description: "SAP batch number."
- name: material_number
type: string
description: "SAP material number."
call: sap.get-batch-trace
with:
batch: "{{batch_number}}"
material: "{{material_number}}"
outputParameters:
- name: plant
type: string
mapping: "$.d.ProductionPlant"
- name: date
type: string
mapping: "$.d.ManufactureDate"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-batch-trace
method: GET
Retrieves the bill of materials for a finished product from SAP including component materials and quantities.
naftiko: "0.5"
info:
label: "SAP Bill of Materials Lookup"
description: "Retrieves the bill of materials for a finished product from SAP including component materials and quantities."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-engineering
port: 8080
tools:
- name: get-bom
description: "Retrieve BOM from SAP for a material. Returns component list with quantities."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.get-bom
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: bom_number
type: string
mapping: "$.d.BillOfMaterial"
- name: components
type: string
mapping: "$.d.to_BillOfMaterialItem.results"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-bom
method: GET
Retrieves expense reports from SAP Concur that exceed policy thresholds, creates ServiceNow approval tasks for finance review, and notifies the AP team via Teams.
naftiko: "0.5"
info:
label: "SAP Concur Travel and Expense Policy Audit"
description: "Retrieves expense reports from SAP Concur that exceed policy thresholds, creates ServiceNow approval tasks for finance review, and notifies the AP team via Teams."
tags:
- finance
- expense-management
- sap-concur
- servicenow
- audit
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit-expense-reports
description: "Retrieve submitted expense reports from SAP Concur exceeding the policy spending threshold and create ServiceNow approval tasks for AP review. Run nightly or before period close."
inputParameters:
- name: threshold_amount
in: body
type: number
description: "Dollar threshold above which expense reports require additional approval."
- name: report_date
in: body
type: string
description: "Date filter for submitted reports in YYYY-MM-DD format."
steps:
- name: get-reports
type: call
call: concur.list-expense-reports
with:
submitDateAfter: "{{report_date}}"
- name: create-review-tasks
type: call
call: servicenow.create-approval
with:
short_description: "Expense reports exceeding ${{threshold_amount}} pending review"
category: "expense_audit"
- name: notify-ap
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_ap_channel_id"
text: "Expense audit complete: reports exceeding ${{threshold_amount}} have been queued for AP review in ServiceNow."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: list-expense-reports
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves actual spending for a cost center from SAP for a fiscal period.
naftiko: "0.5"
info:
label: "SAP Cost Center Actuals Lookup"
description: "Retrieves actual spending for a cost center from SAP for a fiscal period."
tags:
- finance
- operations
- sap
- erp
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: get-actuals
description: "Look up cost center actuals in SAP."
inputParameters:
- name: cost_center
type: string
description: "SAP cost center ID."
- name: period
type: string
description: "Fiscal period."
call: sap.get-actuals
with:
cost_center: "{{cost_center}}"
period: "{{period}}"
outputParameters:
- name: total
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Monitor"
description: "Monitors budgets from SAP actuals, Snowflake plans, and alerts via Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: budget-monitoring
port: 8080
tools:
- name: monitor-budget
description: "Monitor cost center budget."
inputParameters:
- name: cost_center
type: string
description: "Cost center."
- name: period
type: string
description: "Period."
- name: threshold
type: number
description: "Threshold pct."
steps:
- name: get-actuals
type: call
call: sap.get-actuals
with:
cc: "{{cost_center}}"
period: "{{period}}"
- name: get-plan
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT planned FROM budget WHERE cc='{{cost_center}}'"
- name: alert
type: call
call: msteams.send-message
with:
channel_id: "finance"
text: "Budget: {{cost_center}} at {{get-plan.consumed_pct}}%"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-actuals
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account.
naftiko: "0.5"
info:
label: "SAP Credit Memo Processing"
description: "Processes credit memos by validating SAP invoice, creating credit doc, and updating Salesforce account."
tags:
- finance
- sales
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: finance-ar
port: 8080
tools:
- name: process-credit-memo
description: "Process credit memo."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: credit_amount
type: number
description: "Credit amount."
- name: reason
type: string
description: "Reason."
steps:
- name: validate
type: call
call: sap.get-invoice
with:
invoice: "{{invoice_number}}"
- name: create-credit
type: call
call: sap.create-credit-memo
with:
reference: "{{invoice_number}}"
amount: "{{credit_amount}}"
- name: update-account
type: call
call: salesforce.update-account
with:
id: "{{validate.customer_id}}"
credit: "{{credit_amount}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-invoice
method: GET
- name: create-credit-memo
method: POST
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams.
naftiko: "0.5"
info:
label: "SAP Financial Period Close Orchestrator"
description: "Orchestrates monthly close by running SAP tasks, validating Snowflake balances, and posting status to Teams."
tags:
- finance
- operations
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: close-period
description: "Orchestrate financial period close."
inputParameters:
- name: period
type: string
description: "Fiscal period."
- name: company_code
type: string
description: "Company code."
steps:
- name: check-items
type: call
call: sap.get-open-items
with:
code: "{{company_code}}"
period: "{{period}}"
- name: validate
type: call
call: snowflake.execute-query
with:
warehouse: "FINANCE_WH"
query: "SELECT * FROM recon WHERE code='{{company_code}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "finance-close"
text: "Period {{period}}: Open items {{check-items.count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-open-items
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Confirmation"
description: "Confirms goods receipt in SAP S/4HANA for a purchase order, returning receipt document and quantity."
tags:
- supply-chain
- manufacturing
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-logistics
port: 8080
tools:
- name: confirm-goods-receipt
description: "Confirm goods receipt against a PO. Returns receipt doc, quantity, and posting date."
inputParameters:
- name: po_number
type: string
description: "SAP purchase order number."
- name: plant_code
type: string
description: "SAP plant code."
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
plant: "{{plant_code}}"
outputParameters:
- name: receipt_doc
type: string
mapping: "$.d.MaterialDocumentNumber"
- name: quantity
type: string
mapping: "$.d.QuantityReceived"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-goods-receipt
method: POST
Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams.
naftiko: "0.5"
info:
label: "SAP Intercompany Transfer Workflow"
description: "Creates intercompany transfers in SAP, updates Snowflake forecasts, and notifies via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: intercompany
port: 8080
tools:
- name: create-transfer
description: "Create intercompany stock transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_plant
type: string
description: "Source plant."
- name: to_plant
type: string
description: "Target plant."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.create-transfer
with:
material: "{{material}}"
from: "{{from_plant}}"
to: "{{to_plant}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_forecast('{{to_plant}}', '{{material}}', {{quantity}})"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "logistics"
text: "Transfer: {{quantity}} of {{material}} from {{from_plant}} to {{to_plant}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams.
naftiko: "0.5"
info:
label: "SAP Maintenance Order Creation"
description: "Creates maintenance orders in SAP from ServiceNow requests and notifies team via Teams."
tags:
- manufacturing
- operations
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: create-order
description: "Create maintenance order."
inputParameters:
- name: snow_ticket
type: string
description: "ServiceNow ticket."
- name: equipment_id
type: string
description: "Equipment ID."
- name: priority
type: string
description: "Priority."
steps:
- name: get-request
type: call
call: servicenow.get-request
with:
number: "{{snow_ticket}}"
- name: create-order
type: call
call: sap.create-order
with:
equipment: "{{equipment_id}}"
priority: "{{priority}}"
- name: notify
type: call
call: msteams.send-message
with:
channel_id: "maintenance"
text: "Maintenance order for {{equipment_id}}. Priority: {{priority}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: create-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Validates that SAP S/4HANA posting periods are properly closed at month-end by checking open items and period status, then posts a close-readiness summary to the finance Teams channel.
naftiko: "0.5"
info:
label: "SAP Month-End Period Close Validation"
description: "Validates that SAP S/4HANA posting periods are properly closed at month-end by checking open items and period status, then posts a close-readiness summary to the finance Teams channel."
tags:
- finance
- erp
- sap
- period-close
- reporting
capability:
exposes:
- type: mcp
namespace: period-close
port: 8080
tools:
- name: validate-period-close
description: "Given a fiscal period and SAP company code, check posting period status and count of open items in SAP S/4HANA, then post a close-readiness report to the finance Teams channel. Use at month-end before final close."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format, e.g. 202503."
- name: company_code
in: body
type: string
description: "The SAP company code, e.g. 1000."
steps:
- name: get-period-status
type: call
call: sap.get-posting-periods
with:
period: "{{fiscal_period}}"
companyCode: "{{company_code}}"
- name: get-open-items
type: call
call: sap.get-open-items
with:
period: "{{fiscal_period}}"
companyCode: "{{company_code}}"
- name: post-summary
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Period Close Check {{fiscal_period}} ({{company_code}}): Status={{get-period-status.status}} | Open Items={{get-open-items.count}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPLANDATA_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: posting-periods
path: "/PostingPeriods"
operations:
- name: get-posting-periods
method: GET
- name: open-items
path: "/OpenItems"
operations:
- name: get-open-items
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor name, total value, and currency for procurement review and spend visibility.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor name, total value, and currency for procurement review and spend visibility."
tags:
- procurement
- erp
- sap
- finance
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO header status, vendor name, total amount, and currency. Use for procurement approvals, spend analysis, and vendor reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number to look up, e.g. 4500067890."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications.
naftiko: "0.5"
info:
label: "SAP Recipe Management Lookup"
description: "Retrieves product recipe details from SAP including ingredients, process parameters, and yield specifications."
tags:
- manufacturing
- r-and-d
- sap
- erp
capability:
exposes:
- type: mcp
namespace: recipe-mgmt
port: 8080
tools:
- name: get-recipe
description: "Look up a product recipe in SAP by material number. Returns ingredients, process steps, and yield."
inputParameters:
- name: material_number
type: string
description: "SAP material number."
call: sap.get-recipe
with:
material: "{{material_number}}"
outputParameters:
- name: recipe_id
type: string
mapping: "$.d.RecipeId"
- name: ingredients
type: string
mapping: "$.d.Ingredients"
- name: yield_pct
type: string
mapping: "$.d.PlannedYield"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_RECIPE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: recipes
path: "/A_Recipe"
operations:
- name: get-recipe
method: GET
Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info.
naftiko: "0.5"
info:
label: "SAP Transport Shipment Tracker"
description: "Tracks shipments from SAP delivery docs and updates Salesforce orders with tracking info."
tags:
- supply-chain
- logistics
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: logistics-tracking
port: 8080
tools:
- name: track-shipment
description: "Track outbound shipment."
inputParameters:
- name: delivery_number
type: string
description: "SAP delivery number."
- name: sf_order_id
type: string
description: "Salesforce order ID."
steps:
- name: get-delivery
type: call
call: sap.get-delivery
with:
delivery: "{{delivery_number}}"
- name: update-order
type: call
call: salesforce.update-order
with:
order_id: "{{sf_order_id}}"
tracking: "{{get-delivery.tracking}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-delivery
method: GET
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
Retrieves vendor payment terms and credit limit from SAP.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Terms Lookup"
description: "Retrieves vendor payment terms and credit limit from SAP."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-payment-terms
description: "Look up vendor payment terms in SAP."
inputParameters:
- name: vendor_number
type: string
description: "SAP vendor number."
call: sap.get-vendor-terms
with:
vendor: "{{vendor_number}}"
outputParameters:
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: credit_limit
type: string
mapping: "$.d.CreditLimit"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-vendor-terms
method: GET
Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams.
naftiko: "0.5"
info:
label: "SAP Warehouse Transfer Posting"
description: "Posts warehouse transfers in SAP, updates Snowflake inventory, and confirms via Teams."
tags:
- supply-chain
- logistics
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: warehouse-ops
port: 8080
tools:
- name: post-transfer
description: "Post warehouse transfer."
inputParameters:
- name: material
type: string
description: "Material."
- name: from_loc
type: string
description: "Source."
- name: to_loc
type: string
description: "Target."
- name: quantity
type: number
description: "Quantity."
steps:
- name: transfer
type: call
call: sap.post-transfer
with:
material: "{{material}}"
from: "{{from_loc}}"
- name: update
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "CALL update_inv('{{material}}', {{quantity}})"
- name: confirm
type: call
call: msteams.send-message
with:
channel_id: "warehouse"
text: "Transfer: {{quantity}} of {{material}} to {{to_loc}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: post-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Creates and tracks IT infrastructure change requests in ServiceNow, assigns them to the change advisory board, and sends approval reminders via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lifecycle Management"
description: "Creates and tracks IT infrastructure change requests in ServiceNow, assigns them to the change advisory board, and sends approval reminders via Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: create-change-request
description: "Given a change description, risk level, and planned implementation window, create a ServiceNow change request and notify the change advisory board in Teams. Use before any production infrastructure modification."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the planned change and business justification."
- name: risk_level
in: body
type: string
description: "Risk level: low, medium, or high."
- name: implementation_window
in: body
type: string
description: "Planned maintenance window in ISO 8601 format."
steps:
- name: create-cr
type: call
call: servicenow.create-change-request
with:
short_description: "{{change_description}}"
risk: "{{risk_level}}"
start_date: "{{implementation_window}}"
- name: notify-cab
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_cab_channel_id"
text: "New Change Request {{create-cr.number}} ({{risk_level}} risk) requires CAB review: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves current status of a ServiceNow incident including priority and assignment.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves current status of a ServiceNow incident including priority and assignment."
tags:
- operations
- it-service
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: it-service-mgmt
port: 8080
tools:
- name: get-incident
description: "Look up ServiceNow incident status."
inputParameters:
- name: incident_number
type: string
description: "ServiceNow incident number."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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
Searches SharePoint for documents matching a keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches SharePoint for documents matching a keyword."
tags:
- operations
- documents
- sharepoint
- search
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: search-docs
description: "Search SharePoint for documents."
inputParameters:
- name: keyword
type: string
description: "Search keyword."
- name: site_id
type: string
description: "SharePoint site ID."
call: sharepoint.search
with:
siteId: "{{site_id}}"
query: "{{keyword}}"
outputParameters:
- name: results
type: string
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/drive/items"
operations:
- name: search-docs
method: GET
Monitors Snowflake task execution for the consumer analytics and demand-sensing pipelines, creates a ServiceNow incident if jobs fail, and alerts the data team via Teams.
naftiko: "0.5"
info:
label: "Snowflake Consumer Analytics Pipeline Monitor"
description: "Monitors Snowflake task execution for the consumer analytics and demand-sensing pipelines, creates a ServiceNow incident if jobs fail, and alerts the data team via Teams."
tags:
- data
- analytics
- snowflake
- servicenow
- monitoring
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-analytics-pipelines
description: "Query Snowflake task history for failures in the consumer analytics and demand-sensing data pipelines over the last N hours. Open a ServiceNow incident and alert the data team if critical jobs have failed."
inputParameters:
- name: hours_back
in: body
type: integer
description: "Number of hours of task execution history to check, e.g. 6."
steps:
- name: get-failed-tasks
type: call
call: snowflake.query-task-history
with:
hours_back: "{{hours_back}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Snowflake pipeline failures in last {{hours_back}} hours"
category: "data_platform"
priority: "2"
- name: notify-data-team
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_data_channel_id"
text: "Snowflake pipeline failures detected over last {{hours_back}}h. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraft-heinz.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/statements"
operations:
- name: query-task-history
method: POST
- type: http
namespace: servicenow
baseUri: "https://kraft-heinz.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.snow_user"
password: "$secrets.snow_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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Audits Snowflake query history for excessive credit consumption and long-running queries, posts a governance summary to the data platform Teams channel.
naftiko: "0.5"
info:
label: "Snowflake Data Governance Query Audit"
description: "Audits Snowflake query history for excessive credit consumption and long-running queries, posts a governance summary to the data platform Teams channel."
tags:
- data
- governance
- snowflake
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: audit-snowflake-queries
description: "Query Snowflake execution history for queries exceeding cost or duration thresholds and post a governance report to the data platform Teams channel. Use for daily FinOps and data platform cost management."
inputParameters:
- name: hours_back
in: body
type: integer
description: "Number of hours of query history to audit, e.g. 24."
- name: threshold_seconds
in: body
type: integer
description: "Query execution time in seconds above which queries are flagged."
steps:
- name: query-history
type: call
call: snowflake.query-history
with:
hours_back: "{{hours_back}}"
- name: post-report
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_data_channel_id"
text: "Snowflake Governance Report (last {{hours_back}}h): {{query-history.flagged_count}} queries exceeded {{threshold_seconds}}s."
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraft-heinz.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: query-history
path: "/statements"
operations:
- name: query-history
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Queries Snowflake for retail POS analytics including velocity, distribution, and share data.
naftiko: "0.5"
info:
label: "Snowflake Retail POS Analytics Query"
description: "Queries Snowflake for retail POS analytics including velocity, distribution, and share data."
tags:
- analytics
- sales
- snowflake
- retail
capability:
exposes:
- type: mcp
namespace: retail-analytics
port: 8080
tools:
- name: query-pos-data
description: "Query Snowflake retail POS data for a category and retailer."
inputParameters:
- name: category
type: string
description: "Product category."
- name: retailer
type: string
description: "Retail account."
- name: date_from
type: string
description: "Start date."
call: snowflake.execute-query
with:
warehouse: "RETAIL_ANALYTICS_WH"
query: "SELECT * FROM pos WHERE category='{{category}}'"
outputParameters:
- name: data
type: string
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns.
naftiko: "0.5"
info:
label: "Snowflake Supply Chain KPI Query"
description: "Queries Snowflake for supply chain KPIs including fill rate, OTIF, and inventory turns."
tags:
- supply-chain
- analytics
- snowflake
- reporting
capability:
exposes:
- type: mcp
namespace: sc-analytics
port: 8080
tools:
- name: query-sc-kpis
description: "Query supply chain KPIs from Snowflake."
inputParameters:
- name: region
type: string
description: "Region code."
- name: period
type: string
description: "Period."
call: snowflake.execute-query
with:
warehouse: "SC_ANALYTICS_WH"
query: "SELECT fill_rate, otif FROM sc_kpis WHERE region='{{region}}'"
outputParameters:
- name: fill_rate
type: string
mapping: "$.data[0].fill_rate"
- name: otif
type: string
mapping: "$.data[0].otif"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders.
naftiko: "0.5"
info:
label: "Store Level Inventory Replenishment"
description: "Triggers store-level replenishment by querying Snowflake POS data, checking SAP DC inventory, and creating Salesforce replenishment orders."
tags:
- supply-chain
- sales
- snowflake
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: replenishment
port: 8080
tools:
- name: trigger-replenishment
description: "Trigger store replenishment based on POS velocity and DC inventory."
inputParameters:
- name: retailer
type: string
description: "Retailer account name."
- name: region
type: string
description: "Sales region."
steps:
- name: get-pos-velocity
type: call
call: snowflake.execute-query
with:
warehouse: "RETAIL_WH"
query: "SELECT sku, velocity, weeks_of_supply FROM pos WHERE retailer='{{retailer}}' AND region='{{region}}' AND weeks_of_supply<2"
- name: check-dc-stock
type: call
call: sap.get-dc-inventory
with:
region: "{{region}}"
skus: "{{get-pos-velocity.skus}}"
- name: create-order
type: call
call: salesforce.create-replenishment
with:
retailer: "{{retailer}}"
items: "{{get-pos-velocity.data}}"
available: "{{check-dc-stock.levels}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: stock
path: "/data"
operations:
- name: get-dc-inventory
method: GET
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order"
operations:
- name: create-replenishment
method: POST
Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams.
naftiko: "0.5"
info:
label: "Supplier Performance Scorecard Generator"
description: "Generates supplier scorecards from Ariba delivery data, Snowflake quality metrics, and posts to Teams."
tags:
- procurement
- supply-chain
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-analytics
port: 8080
tools:
- name: generate-scorecard
description: "Generate supplier performance scorecard."
inputParameters:
- name: supplier_id
type: string
description: "Ariba supplier ID."
- name: period
type: string
description: "Period."
steps:
- name: get-delivery
type: call
call: ariba.get-performance
with:
supplier_id: "{{supplier_id}}"
period: "{{period}}"
- name: get-quality
type: call
call: snowflake.execute-query
with:
warehouse: "PROCUREMENT_WH"
query: "SELECT defect_rate FROM supplier_quality WHERE supplier='{{supplier_id}}'"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "procurement"
text: "Supplier {{supplier_id}}: OTD {{get-delivery.on_time_rate}}%"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Queries SAP S/4HANA for current production order status and inventory levels, then writes a demand-sensing snapshot to Snowflake for supply chain analytics and forecasting.
naftiko: "0.5"
info:
label: "Supply Chain Demand Sensing Snapshot"
description: "Queries SAP S/4HANA for current production order status and inventory levels, then writes a demand-sensing snapshot to Snowflake for supply chain analytics and forecasting."
tags:
- supply-chain
- manufacturing
- sap
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: capture-demand-snapshot
description: "Pull production order status and stock levels for a given SAP plant from S/4HANA and write a timestamped demand snapshot to Snowflake for downstream forecasting models. Use for daily supply chain data ingestion."
inputParameters:
- name: plant_code
in: body
type: string
description: "The SAP plant code to snapshot, e.g. KH01 for Chicago manufacturing."
steps:
- name: get-production-orders
type: call
call: sap.get-production-orders
with:
plant: "{{plant_code}}"
- name: get-stock-levels
type: call
call: sap.get-stock-levels
with:
plant: "{{plant_code}}"
- name: write-snapshot
type: call
call: snowflake.insert-snapshot
with:
plant: "{{plant_code}}"
orders: "{{get-production-orders.results}}"
stock: "{{get-stock-levels.results}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraft-heinz-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDERS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: production-orders
path: "/A_ProductionOrder"
operations:
- name: get-production-orders
method: GET
- name: stock-levels
path: "/A_MatlStkInAcctMod"
operations:
- name: get-stock-levels
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraft-heinz.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: insert-snapshot
method: POST
Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams.
naftiko: "0.5"
info:
label: "Supply Chain Risk Assessment"
description: "Assesses risk from Snowflake supplier data, Ariba status, and posts alerts to Teams."
tags:
- supply-chain
- procurement
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-risk
port: 8080
tools:
- name: assess-risk
description: "Assess supply chain risk."
inputParameters:
- name: material_group
type: string
description: "Material group."
steps:
- name: get-data
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT supplier, share FROM concentration WHERE group='{{material_group}}'"
- name: get-risk
type: call
call: ariba.get-risk
with:
group: "{{material_group}}"
- name: post
type: call
call: msteams.send-message
with:
channel_id: "supply-risk"
text: "Risk for {{material_group}}: Top share {{get-data.top_share}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: get-supplier
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI.
naftiko: "0.5"
info:
label: "Trade Promotion Effectiveness Report"
description: "Generates TPE by pulling Salesforce promotions, Snowflake sales, and refreshing Power BI."
tags:
- sales
- marketing
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: trade-analytics
port: 8080
tools:
- name: generate-tpe
description: "Generate trade promotion effectiveness report."
inputParameters:
- name: promotion_id
type: string
description: "Salesforce promotion ID."
- name: date_from
type: string
description: "Start date."
- name: date_to
type: string
description: "End date."
steps:
- name: get-promo
type: call
call: salesforce.get-promotion
with:
promotion_id: "{{promotion_id}}"
- name: get-sales
type: call
call: snowflake.execute-query
with:
warehouse: "SALES_WH"
query: "SELECT revenue FROM pos WHERE promo='{{promotion_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "trade-promotion-effectiveness"
consumes:
- type: http
namespace: salesforce
baseUri: "https://kraftheinz.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: sobjects
path: "/sobjects"
operations:
- name: query
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Invoice Three-Way Match"
description: "Performs three-way match between SAP PO, goods receipt, and invoice, routing exceptions to ServiceNow."
tags:
- finance
- procurement
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: ap-automation
port: 8080
tools:
- name: three-way-match
description: "Perform three-way match for vendor invoice."
inputParameters:
- name: invoice_number
type: string
description: "Invoice number."
- name: po_number
type: string
description: "PO number."
steps:
- name: get-po
type: call
call: sap.get-po
with:
po_number: "{{po_number}}"
- name: get-receipt
type: call
call: sap.get-receipt
with:
po_number: "{{po_number}}"
- name: create-exception
type: call
call: servicenow.create-incident
with:
short_description: "Mismatch: {{invoice_number}} vs PO {{po_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-po
method: GET
- name: get-receipt
method: GET
- type: http
namespace: servicenow
baseUri: "https://kraftheinz.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
Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard.
naftiko: "0.5"
info:
label: "Warehouse Capacity Planning Orchestrator"
description: "Analyzes warehouse capacity from SAP, demand from Snowflake, and refreshes Power BI dashboard."
tags:
- supply-chain
- logistics
- sap
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: warehouse-planning
port: 8080
tools:
- name: plan-capacity
description: "Analyze warehouse capacity."
inputParameters:
- name: warehouse_id
type: string
description: "Warehouse number."
- name: weeks
type: number
description: "Forecast weeks."
steps:
- name: get-util
type: call
call: sap.get-warehouse-stock
with:
warehouse: "{{warehouse_id}}"
- name: get-forecast
type: call
call: snowflake.execute-query
with:
warehouse: "SC_WH"
query: "SELECT pallets FROM forecast WHERE id='{{warehouse_id}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "warehouse-capacity"
consumes:
- type: http
namespace: sap
baseUri: "https://kraftheinz-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: resource
path: "/data"
operations:
- name: get-warehouse-stock
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams.
naftiko: "0.5"
info:
label: "Waste Reduction Initiative Tracker"
description: "Tracks waste reduction initiatives by pulling manufacturing waste data from Snowflake, comparing to targets, and posting progress to Teams."
tags:
- manufacturing
- sustainability
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: waste-reduction
port: 8080
tools:
- name: track-waste-reduction
description: "Track waste reduction progress against targets."
inputParameters:
- name: plant_code
type: string
description: "Plant code."
- name: initiative_id
type: string
description: "Jira initiative key."
steps:
- name: get-waste-data
type: call
call: snowflake.execute-query
with:
warehouse: "MFG_WH"
query: "SELECT waste_type, current_pct, target_pct FROM waste_tracking WHERE plant='{{plant_code}}'"
- name: update-initiative
type: call
call: jira.update-issue
with:
issue_key: "{{initiative_id}}"
comment: "Current waste: {{get-waste-data.current_total}}%. Target: {{get-waste-data.target_total}}%"
- name: post-progress
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Waste reduction at {{plant_code}}: {{get-waste-data.current_total}}% (target: {{get-waste-data.target_total}}%)"
consumes:
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: jira
baseUri: "https://kraftheinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: update-issue
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/channels/messages"
operations:
- name: send-message
method: POST
Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Generates diversity metrics from Workday, enriches with Snowflake analytics, refreshes Power BI."
tags:
- hr
- analytics
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: generate-diversity
description: "Generate workforce diversity metrics."
inputParameters:
- name: business_unit
type: string
description: "Business unit."
- name: period
type: string
description: "Period."
steps:
- name: get-demo
type: call
call: workday.get-demographics
with:
bu: "{{business_unit}}"
- name: get-analytics
type: call
call: snowflake.execute-query
with:
warehouse: "HR_WH"
query: "SELECT diversity_index FROM metrics WHERE bu='{{business_unit}}'"
- name: refresh
type: call
call: powerbi.refresh-dataset
with:
datasetId: "diversity-dashboard"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
- type: http
namespace: snowflake
baseUri: "https://kraftheinz.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: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
operations:
- name: refresh-dataset
method: POST
Retrieves headcount data from Workday by department including active employees and open positions.
naftiko: "0.5"
info:
label: "Workday Headcount Report Lookup"
description: "Retrieves headcount data from Workday by department including active employees and open positions."
tags:
- hr
- workforce
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount
description: "Get headcount report from Workday by department."
inputParameters:
- name: department
type: string
description: "Department name."
call: workday.get-headcount
with:
department: "{{department}}"
outputParameters:
- name: active_count
type: string
mapping: "$.headcount.active"
- name: open_positions
type: string
mapping: "$.headcount.open"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET
When a new job requisition is approved in Workday Recruiting, creates a Jira tracking issue for the hiring team and posts a notification to the HR Teams channel.
naftiko: "0.5"
info:
label: "Workday Job Requisition to Jira Tracker Sync"
description: "When a new job requisition is approved in Workday Recruiting, creates a Jira tracking issue for the hiring team and posts a notification to the HR Teams channel."
tags:
- hr
- recruiting
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recruiting-ops
port: 8080
tools:
- name: sync-requisition-to-jira
description: "Given a Workday job requisition ID, retrieve requisition details and create a Jira task for the hiring team. Notify the HR Teams channel with a summary. Invoke when a job requisition is approved in Workday."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: workday.get-requisition
with:
requisition_id: "{{requisition_id}}"
- name: create-jira-task
type: call
call: jira.create-issue
with:
project_key: "HR"
issuetype: "Task"
summary: "Hire: {{get-requisition.job_title}} — {{get-requisition.department}}"
description: "Workday requisition {{requisition_id}}. Target: {{get-requisition.target_hire_date}}"
- name: notify-hr
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "New req approved: {{get-requisition.job_title}} | Jira: {{create-jira-task.key}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/kraft-heinz/recruiting/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: jira
baseUri: "https://kraft-heinz.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Initiates the annual performance review cycle in Workday for all eligible Kraft Heinz employees and sends a kickoff reminder to managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Initiation"
description: "Initiates the annual performance review cycle in Workday for all eligible Kraft Heinz employees and sends a kickoff reminder to managers via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-review-cycle
description: "Given a review cycle name and due date, start the Workday performance review process and send reminder messages to all managers via Teams. Use at the beginning of each performance review period."
inputParameters:
- name: cycle_name
in: body
type: string
description: "Name of the performance cycle, e.g. 2025 Annual Review."
- name: due_date
in: body
type: string
description: "Review completion deadline in YYYY-MM-DD format."
steps:
- name: start-cycle
type: call
call: workday.create-review-cycle
with:
name: "{{cycle_name}}"
dueDate: "{{due_date}}"
- name: notify-hr
type: call
call: msteams.post-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Performance Review '{{cycle_name}}' has launched in Workday. Deadline: {{due_date}}. Please complete reviews before the deadline."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-cycles
path: "/kraft-heinz/performanceManagement/reviewCycles"
operations:
- name: create-review-cycle
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/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves employee time off balances from Workday.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves employee time off balances from Workday."
tags:
- hr
- workforce
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-time-mgmt
port: 8080
tools:
- name: get-time-off
description: "Look up time off balances in Workday."
inputParameters:
- name: employee_id
type: string
description: "Workday employee ID."
call: workday.get-time-off
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation
type: string
mapping: "$.balance.vacation"
- name: sick
type: string
mapping: "$.balance.sick"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/kraftheinz/workers"
operations:
- name: get-worker
method: GET