PepsiCo Capabilities
Naftiko 0.5 capability definitions for PepsiCo - 100 capabilities showing integration workflows and service orchestrations.
Monitors accounts receivable aging by pulling AR data from SAP, matching with Salesforce accounts, and alerting the collections team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Accounts Receivable Aging Alert"
description: "Monitors accounts receivable aging by pulling AR data from SAP, matching with Salesforce accounts, and alerting the collections team via Microsoft Teams."
tags:
- finance
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ar-management
port: 8080
tools:
- name: check-ar-aging
description: "Check AR aging: pull SAP receivables, match Salesforce accounts, alert collections."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: aging_bucket
in: body
type: string
description: "The aging bucket: 30, 60, 90, 120."
steps:
- name: get-ar-aging
type: call
call: sap.get-ar-aging-report
with:
company_code: "{{company_code}}"
aging_days: "{{aging_bucket}}"
- name: get-customer-accounts
type: call
call: salesforce.get-customer-list
with:
overdue_threshold: "{{aging_bucket}}"
- name: alert-collections
type: call
call: msteams.send-message
with:
channel_id: "finance-collections"
text: "AR Aging Alert ({{aging_bucket}}+ days): Total overdue: ${{get-ar-aging.total_overdue}}. Customers: {{get-ar-aging.customer_count}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_AR_AGING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: aging
path: "/ARAgingReport(CompanyCode='{{company_code}}',AgingDays={{aging_days}})"
inputParameters:
- name: company_code
in: path
- name: aging_days
in: path
operations:
- name: get-ar-aging-report
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: customers
path: "/query?q=SELECT+Id,Name+FROM+Account+WHERE+Days_Overdue__c>=+{{overdue_threshold}}"
inputParameters:
- name: overdue_threshold
in: query
operations:
- name: get-customer-list
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Given a vendor contract document, uses Anthropic Claude to extract key terms, payment conditions, and renewal clauses, then posts the summary to the legal team's Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Contract Intelligence"
description: "Given a vendor contract document, uses Anthropic Claude to extract key terms, payment conditions, and renewal clauses, then posts the summary to the legal team's Teams channel."
tags:
- ai
- legal
- anthropic
- microsoft-teams
- contract-management
capability:
exposes:
- type: mcp
namespace: legal-ai
port: 8080
tools:
- name: extract-contract-terms
description: "Given contract text content, invoke Anthropic Claude to identify and extract payment terms, renewal clauses, liability caps, and key obligations, then post the extraction to the legal Teams channel."
inputParameters:
- name: contract_text
in: body
type: string
description: "The full text content of the vendor contract to analyze."
- name: vendor_name
in: body
type: string
description: "The name of the vendor associated with the contract."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the legal team digest."
steps:
- name: extract-terms
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "Extract the following from this vendor contract for {{vendor_name}}: 1) Payment terms, 2) Contract duration and renewal clauses, 3) Liability caps, 4) Key obligations for each party. Contract text: {{contract_text}}"
- name: post-extraction
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Contract Intelligence — {{vendor_name}}:\n{{extract-terms.content}}"
consumes:
- 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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a SAP demand forecast for a product category and uses Anthropic Claude to generate a plain-language executive summary for the supply chain leadership team.
naftiko: "0.5"
info:
label: "AI-Assisted Demand Forecast Summary"
description: "Retrieves a SAP demand forecast for a product category and uses Anthropic Claude to generate a plain-language executive summary for the supply chain leadership team."
tags:
- ai
- supply-chain
- sap
- anthropic
- microsoft-teams
- forecasting
capability:
exposes:
- type: mcp
namespace: forecast-ai
port: 8080
tools:
- name: summarize-demand-forecast
description: "Given a SAP material number and planning horizon, retrieve the demand forecast from SAP, generate a plain-language executive summary using Anthropic Claude, and post it to the supply chain Teams channel."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number to retrieve demand forecast for."
- name: plant_code
in: body
type: string
description: "The SAP plant code for the forecast."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the supply chain forecast summary."
steps:
- name: get-forecast
type: call
call: sap.get-demand-forecast
with:
material: "{{material_number}}"
plant: "{{plant_code}}"
- name: generate-summary
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "Summarize the following demand forecast data for material {{material_number}} at plant {{plant_code}} in 3 bullet points for a supply chain executive: {{get-forecast.forecast_data}}"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Demand Forecast Summary — {{material_number}} (Plant {{plant_code}}):\n{{generate-summary.content}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MRP_MATERIALS_SRV_01"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: demand-forecasts
path: "/A_MrpMaterial(Material='{{material}}',MRPArea='{{plant}}')"
inputParameters:
- name: material
in: path
- name: plant
in: path
operations:
- name: get-demand-forecast
method: GET
- 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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Azure Cost Management detects a spend anomaly, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Responder"
description: "When Azure Cost Management detects a spend anomaly, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel."
tags:
- finops
- cloud
- azure
- servicenow
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-azure-cost-anomaly
description: "Given an Azure subscription ID, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps alert to Teams."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the cost anomaly was detected."
- name: resource_group
in: body
type: string
description: "The Azure resource group driving the anomaly."
- name: estimated_overage_usd
in: body
type: number
description: "The estimated spend overage in US dollars."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
short_description: "Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}} overage"
category: "cloud_cost"
urgency: "2"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "finops-alerts"
text: "Azure Cost Anomaly: {{resource_group}} (sub: {{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates Azure cloud cost optimization reports by pulling cost data, identifying anomalies in Datadog, and posting recommendations to Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Optimization Report"
description: "Generates Azure cloud cost optimization reports by pulling cost data, identifying anomalies in Datadog, and posting recommendations to Microsoft Teams."
tags:
- it-operations
- finance
- azure-devops
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: generate-cost-report
description: "Generate Azure cost report: pull cost data, check Datadog anomalies, post recommendations."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID."
- name: period
in: body
type: string
description: "The billing period."
steps:
- name: get-azure-costs
type: call
call: azure.get-cost-summary
with:
subscription_id: "{{subscription_id}}"
period: "{{period}}"
- name: check-anomalies
type: call
call: datadog.get-cost-anomalies
with:
subscription: "{{subscription_id}}"
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "cloud-finops"
text: "Azure Cost Report ({{period}}): Total: ${{get-azure-costs.total_cost}}. vs. Budget: ${{get-azure-costs.budget}}. Anomalies: {{check-anomalies.anomaly_count}}."
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: costs
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query?api-version=2023-11-01"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-cost-summary
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
header: "DD-API-KEY"
value: "$secrets.datadog_api_key"
resources:
- name: anomalies
path: "/cost/anomalies?subscription={{subscription}}"
inputParameters:
- name: subscription
in: query
operations:
- name: get-cost-anomalies
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the latest build status for an Azure DevOps pipeline, returning build result, duration, and source branch.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status for an Azure DevOps pipeline, returning build result, duration, and source branch."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-build-status
description: "Check the latest build status for an Azure DevOps pipeline. Returns result, finish time, and source branch."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "The Azure DevOps pipeline definition ID."
call: azdo.get-latest-build
with:
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: result
type: string
mapping: "$.value[0].result"
- name: finish_time
type: string
mapping: "$.value[0].finishTime"
- name: source_branch
type: string
mapping: "$.value[0].sourceBranch"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/pepsico"
authentication:
type: basic
username: "$secrets.azdo_user"
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
inputParameters:
- name: pipeline_id
in: query
operations:
- name: get-latest-build
method: GET
Processes fountain equipment service requests by looking up the Salesforce customer, creating a ServiceNow ticket, and notifying the technician via Microsoft Teams.
naftiko: "0.5"
info:
label: "Beverage Fountain Equipment Service"
description: "Processes fountain equipment service requests by looking up the Salesforce customer, creating a ServiceNow ticket, and notifying the technician via Microsoft Teams."
tags:
- distribution
- customer-service
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: field-service
port: 8080
tools:
- name: create-fountain-service
description: "Process fountain service: look up Salesforce customer, create ServiceNow ticket, notify tech."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: equipment_serial
in: body
type: string
description: "The fountain serial number."
- name: issue_description
in: body
type: string
description: "The service issue."
steps:
- name: get-customer
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: create-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Fountain service: {{equipment_serial}} at {{get-customer.name}}"
description: "{{issue_description}}"
category: "fountain_equipment"
assignment_group: "Fountain_Service"
- name: notify-tech
type: call
call: msteams.send-message
with:
channel_id: "fountain-service"
text: "Fountain service: {{get-customer.name}}. Equipment: {{equipment_serial}}. Issue: {{issue_description}}. Ticket: {{create-ticket.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages packaging changes by updating SAP material master, creating a ServiceNow change request, and notifying brand and manufacturing teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Brand Packaging Change Management"
description: "Manages packaging changes by updating SAP material master, creating a ServiceNow change request, and notifying brand and manufacturing teams via Microsoft Teams."
tags:
- brand-management
- manufacturing
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: packaging-change
port: 8080
tools:
- name: manage-packaging-change
description: "Manage packaging change: update SAP, create ServiceNow CR, notify teams."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: change_description
in: body
type: string
description: "Description of the packaging change."
- name: effective_date
in: body
type: string
description: "Effective date."
steps:
- name: get-current-material
type: call
call: sap.get-material-master
with:
material_number: "{{material_number}}"
- name: create-change-request
type: call
call: servicenow.create-change-request
with:
short_description: "Packaging change: {{material_number}}"
description: "{{change_description}}. Effective: {{effective_date}}."
category: "packaging_change"
- name: notify-stakeholders
type: call
call: msteams.send-message
with:
channel_id: "brand-packaging"
text: "Packaging Change: {{material_number}} ({{get-current-material.description}}). Change: {{change_description}}. CR: {{create-change-request.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material-master
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors co-packer production by pulling SAP reports, validating against Salesforce contracted volumes, and posting variance to Microsoft Teams.
naftiko: "0.5"
info:
label: "Co-Packer Production Monitoring"
description: "Monitors co-packer production by pulling SAP reports, validating against Salesforce contracted volumes, and posting variance to Microsoft Teams."
tags:
- manufacturing
- supply-chain
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: co-packer
port: 8080
tools:
- name: monitor-copacker-production
description: "Monitor co-packer: pull SAP reports, validate Salesforce contracts, post variance."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP co-packer vendor ID."
- name: sf_contract_id
in: body
type: string
description: "The Salesforce contract ID."
- name: period
in: body
type: string
description: "The production period."
steps:
- name: get-production-report
type: call
call: sap.get-copacker-production
with:
vendor_id: "{{vendor_id}}"
period: "{{period}}"
- name: get-contracted-volumes
type: call
call: salesforce.get-contract
with:
contract_id: "{{sf_contract_id}}"
- name: post-variance
type: call
call: msteams.send-message
with:
channel_id: "co-packer-ops"
text: "Co-Packer Report ({{period}}): Produced: {{get-production-report.actual_volume}}. Contracted: {{get-contracted-volumes.contracted_volume}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: copacker
path: "/CopackerProduction(VendorId='{{vendor_id}}',Period='{{period}}')"
inputParameters:
- name: vendor_id
in: path
- name: period
in: path
operations:
- name: get-copacker-production
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/sobjects/Contract/{{contract_id}}"
inputParameters:
- name: contract_id
in: path
operations:
- name: get-contract
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a cold chain breach is detected, retrieves shipment details from SAP, creates a quality incident in ServiceNow, and alerts the distribution team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cold Chain Temperature Breach Response"
description: "When a cold chain breach is detected, retrieves shipment details from SAP, creates a quality incident in ServiceNow, and alerts the distribution team via Microsoft Teams."
tags:
- supply-chain
- distribution
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cold-chain
port: 8080
tools:
- name: handle-temperature-breach
description: "Orchestrate cold chain breach: pull SAP shipment, create quality incident, alert distribution."
inputParameters:
- name: shipment_id
in: body
type: string
description: "The SAP shipment document number."
- name: temperature_reading
in: body
type: string
description: "The recorded temperature in Celsius."
steps:
- name: get-shipment
type: call
call: sap.get-shipment
with:
shipment_id: "{{shipment_id}}"
- name: create-quality-incident
type: call
call: servicenow.create-incident
with:
short_description: "Cold chain breach: Shipment {{shipment_id}} at {{temperature_reading}}C"
category: "quality_cold_chain"
urgency: "1"
assignment_group: "Quality_Distribution"
- name: alert-distribution
type: call
call: msteams.send-message
with:
channel_id: "distribution-alerts"
text: "COLD CHAIN ALERT: Shipment {{shipment_id}} at {{temperature_reading}}C. Destination: {{get-shipment.destination}}. Case: {{create-quality-incident.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_SHIPMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: shipments
path: "/A_Shipment('{{shipment_id}}')"
inputParameters:
- name: shipment_id
in: path
operations:
- name: get-shipment
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors contract renewal dates by checking SAP vendor contracts, creating renewal tasks in ServiceNow, and sending reminders via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Contract Renewal Reminder Workflow"
description: "Monitors contract renewal dates by checking SAP vendor contracts, creating renewal tasks in ServiceNow, and sending reminders via Microsoft Outlook."
tags:
- procurement
- sap
- servicenow
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: contract-management
port: 8080
tools:
- name: trigger-renewal-reminder
description: "Orchestrate contract renewal: check SAP contract, create ServiceNow task, send Outlook reminder."
inputParameters:
- name: contract_number
in: body
type: string
description: "The SAP contract number."
steps:
- name: get-contract
type: call
call: sap.get-contract
with:
contract_number: "{{contract_number}}"
- name: create-renewal-task
type: call
call: servicenow.create-task
with:
short_description: "Contract renewal: {{contract_number}} - {{get-contract.vendor_name}}"
due_date: "{{get-contract.expiry_date}}"
assignment_group: "Procurement_Management"
- name: send-reminder-email
type: call
call: outlook.send-email
with:
to: "{{get-contract.procurement_manager_email}}"
subject: "Contract Renewal: {{get-contract.vendor_name}}"
body: "Contract {{contract_number}} expires on {{get-contract.expiry_date}}. Value: ${{get-contract.total_value}}. Task: {{create-renewal-task.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PURCHASECONTRACT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: contracts
path: "/A_PurchaseContract('{{contract_number}}')"
inputParameters:
- name: contract_number
in: path
operations:
- name: get-contract
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Validates cross-border trade compliance by checking SAP export documentation, verifying customs classification, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Cross-Border Trade Compliance Check"
description: "Validates cross-border trade compliance by checking SAP export documentation, verifying customs classification, and logging in ServiceNow."
tags:
- distribution
- supply-chain
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: trade-compliance
port: 8080
tools:
- name: check-trade-compliance
description: "Validate cross-border compliance: check SAP export docs, verify customs, log in ServiceNow."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
- name: destination_country
in: body
type: string
description: "The destination country code."
steps:
- name: get-export-docs
type: call
call: sap.get-export-documentation
with:
delivery_number: "{{delivery_number}}"
- name: verify-customs
type: call
call: sap.get-customs-classification
with:
material: "{{get-export-docs.material_number}}"
country: "{{destination_country}}"
- name: log-compliance
type: call
call: servicenow.create-task
with:
short_description: "Trade compliance: {{delivery_number}} to {{destination_country}}"
description: "Export status: {{get-export-docs.status}}. HS code: {{verify-customs.hs_code}}."
category: "trade_compliance"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: export-docs
path: "/A_OutbDeliveryHeader('{{delivery_number}}')/to_ExportDocuments"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-export-documentation
method: GET
- name: customs
path: "/CustomsClassification(Material='{{material}}',Country='{{country}}')"
inputParameters:
- name: material
in: path
- name: country
in: path
operations:
- name: get-customs-classification
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Converts a customer complaint into a quality case by creating a SAP quality notification, linking to Salesforce, and notifying the quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Complaint to Quality Case"
description: "Converts a customer complaint into a quality case by creating a SAP quality notification, linking to Salesforce, and notifying the quality team via Microsoft Teams."
tags:
- customer-service
- quality
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-feedback
port: 8080
tools:
- name: convert-complaint-to-quality-case
description: "Convert complaint to SAP quality case, link Salesforce, notify quality team."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-case
type: call
call: salesforce.get-case
with:
case_id: "{{case_id}}"
- name: create-quality-notification
type: call
call: sap.create-quality-notification
with:
notification_type: "customer_complaint"
description: "{{get-case.subject}}: {{get-case.description}}"
- name: update-sf-case
type: call
call: salesforce.update-case
with:
case_id: "{{case_id}}"
sap_notification: "{{create-quality-notification.notification_number}}"
- name: notify-quality
type: call
call: msteams.send-message
with:
channel_id: "quality-cases"
text: "Quality case from complaint. Case: {{case_id}}. SAP: {{create-quality-notification.notification_number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.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
- name: update-case
method: PATCH
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: notifications
path: "/A_QualityNotification"
operations:
- name: create-quality-notification
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up a Datadog alert and, when resolved, updates the linked ServiceNow incident to resolved status and posts a closure notification in Microsoft Teams.
naftiko: "0.5"
info:
label: "Datadog Alert Resolution Tracker"
description: "Looks up a Datadog alert and, when resolved, updates the linked ServiceNow incident to resolved status and posts a closure notification in Microsoft Teams."
tags:
- observability
- datadog
- servicenow
- incident-response
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: alert-resolution
port: 8080
tools:
- name: resolve-alert-and-incident
description: "Given a Datadog alert ID and linked ServiceNow incident number, check if the alert is resolved, then update the SNOW incident to Resolved and post a closure notice in Teams."
inputParameters:
- name: datadog_alert_id
in: body
type: string
description: "The Datadog monitor alert ID that has been resolved."
- name: snow_incident_number
in: body
type: string
description: "The ServiceNow incident number linked to this alert."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to post the closure notification."
steps:
- name: get-alert-status
type: call
call: datadog.get-alert
with:
alert_id: "{{datadog_alert_id}}"
- name: resolve-incident
type: call
call: servicenow.resolve-incident
with:
number: "{{snow_incident_number}}"
close_code: "Solved (Permanently)"
close_notes: "Datadog alert {{datadog_alert_id}} resolved. Auto-closed."
- name: post-closure
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Incident Resolved: SNOW {{snow_incident_number}} closed. Datadog alert {{datadog_alert_id}} status: {{get-alert-status.status}}."
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: alerts
path: "/monitor/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: resolve-incident
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches the current status of all monitored Datadog hosts in a given tag group and posts a health digest to the infrastructure Teams channel.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Dashboard Digest"
description: "Fetches the current status of all monitored Datadog hosts in a given tag group and posts a health digest to the infrastructure Teams channel."
tags:
- observability
- datadog
- reporting
- microsoft-teams
- infrastructure
capability:
exposes:
- type: mcp
namespace: infra-reporting
port: 8080
tools:
- name: digest-host-health
description: "Given a Datadog host tag filter, list all matching hosts and their statuses, then post a health digest to the infrastructure Teams channel."
inputParameters:
- name: host_tag
in: body
type: string
description: "The Datadog tag filter to scope the host list (e.g., 'env:production')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the infrastructure digest."
steps:
- name: list-hosts
type: call
call: datadog.list-hosts
with:
filter: "{{host_tag}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Infrastructure Health ({{host_tag}}): {{list-hosts.total}} hosts | Up: {{list-hosts.up_count}} | Down: {{list-hosts.down_count}} | Muted: {{list-hosts.muted_count}}"
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: hosts
path: "/hosts"
inputParameters:
- name: filter
in: query
operations:
- name: list-hosts
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Datadog for the current health status of a specified service, returning uptime, error rate, and latency metrics.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the current health status of a specified service, returning uptime, error rate, and latency metrics."
tags:
- it-operations
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-service-health
description: "Check the health of a service in Datadog. Returns uptime percentage, error rate, and p99 latency."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
call: datadog.get-service-metrics
with:
service_name: "{{service_name}}"
outputParameters:
- name: uptime
type: string
mapping: "$.data.attributes.uptime"
- name: error_rate
type: string
mapping: "$.data.attributes.error_rate"
- name: p99_latency
type: string
mapping: "$.data.attributes.p99_latency"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
header: "DD-API-KEY"
value: "$secrets.datadog_api_key"
resources:
- name: service-metrics
path: "/metrics/query?query=service:{{service_name}}"
inputParameters:
- name: service_name
in: query
operations:
- name: get-service-metrics
method: GET
Converts demand forecasts into production plans by pulling Salesforce forecast data, creating planned orders in SAP, and refreshing the Power BI demand dashboard.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Plan"
description: "Converts demand forecasts into production plans by pulling Salesforce forecast data, creating planned orders in SAP, and refreshing the Power BI demand dashboard."
tags:
- supply-chain
- manufacturing
- salesforce
- sap
- power-bi
capability:
exposes:
- type: mcp
namespace: demand-planning
port: 8080
tools:
- name: convert-forecast-to-plan
description: "Convert forecast to production plan: pull Salesforce forecast, create SAP planned orders, refresh dashboard."
inputParameters:
- name: forecast_id
in: body
type: string
description: "The Salesforce forecast record ID."
- name: plant_code
in: body
type: string
description: "The target manufacturing plant code."
- name: dataset_id
in: body
type: string
description: "The Power BI demand dataset ID."
steps:
- name: get-forecast
type: call
call: salesforce.get-forecast
with:
forecast_id: "{{forecast_id}}"
- name: create-planned-orders
type: call
call: sap.create-planned-order
with:
material_number: "{{get-forecast.material}}"
plant: "{{plant_code}}"
planned_quantity: "{{get-forecast.quantity}}"
planned_date: "{{get-forecast.delivery_date}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: forecasts
path: "/sobjects/Demand_Forecast__c/{{forecast_id}}"
inputParameters:
- name: forecast_id
in: path
operations:
- name: get-forecast
method: GET
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PLANNED_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: planned-orders
path: "/A_PlannedOrder"
operations:
- name: create-planned-order
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/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Reconciles digital marketing spend by pulling campaign costs from Google Analytics, comparing with SAP cost center actuals, and posting a variance report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Digital Marketing Spend Reconciliation"
description: "Reconciles digital marketing spend by pulling campaign costs from Google Analytics, comparing with SAP cost center actuals, and posting a variance report to Microsoft Teams."
tags:
- marketing
- finance
- google-analytics
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing-finance
port: 8080
tools:
- name: reconcile-marketing-spend
description: "Reconcile digital marketing spend across GA and SAP, then post variance report."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP marketing cost center."
- name: campaign_id
in: body
type: string
description: "The Google Analytics campaign ID."
- name: period
in: body
type: string
description: "The fiscal period."
steps:
- name: get-ga-spend
type: call
call: ga.get-campaign-cost
with:
campaign_id: "{{campaign_id}}"
period: "{{period}}"
- name: get-sap-actuals
type: call
call: sap.get-cost-center-actuals
with:
cost_center: "{{cost_center}}"
period: "{{period}}"
- name: post-variance-report
type: call
call: msteams.send-message
with:
channel_id: "marketing-finance"
text: "Marketing Spend Reconciliation {{period}}: GA Spend: ${{get-ga-spend.total_cost}}. SAP Actuals: ${{get-sap-actuals.total_actual}}."
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: campaign-cost
path: "/reports:batchGet"
operations:
- name: get-campaign-cost
method: POST
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')/to_Actuals?$filter=Period eq '{{period}}'"
inputParameters:
- name: cost_center
in: path
- name: period
in: query
operations:
- name: get-cost-center-actuals
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Performs distributor credit checks by validating SAP credit limits, checking Salesforce payment history, and releasing or blocking the sales order.
naftiko: "0.5"
info:
label: "Distributor Credit Check and Order Release"
description: "Performs distributor credit checks by validating SAP credit limits, checking Salesforce payment history, and releasing or blocking the sales order."
tags:
- distribution
- finance
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: credit-management
port: 8080
tools:
- name: check-credit-and-release
description: "Check distributor credit in SAP, verify Salesforce history, release or block order."
inputParameters:
- name: sales_order_number
in: body
type: string
description: "The SAP sales order number."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-credit-status
type: call
call: sap.get-credit-status
with:
sales_order: "{{sales_order_number}}"
- name: get-payment-history
type: call
call: salesforce.get-payment-history
with:
account_id: "{{account_id}}"
- name: release-order
type: call
call: sap.release-credit-block
with:
sales_order: "{{sales_order_number}}"
payment_score: "{{get-payment-history.payment_score}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: credit-status
path: "/A_SalesOrder('{{sales_order}}')/to_CreditStatus"
inputParameters:
- name: sales_order
in: path
operations:
- name: get-credit-status
method: GET
- name: credit-release
path: "/A_SalesOrder('{{sales_order}}')/to_CreditRelease"
inputParameters:
- name: sales_order
in: path
operations:
- name: release-credit-block
method: POST
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: payment-history
path: "/sobjects/Account/{{account_id}}/Payment_History__r"
inputParameters:
- name: account_id
in: path
operations:
- name: get-payment-history
method: GET
Tracks distributor order fulfillment by pulling the sales order from SAP, checking delivery status, and updating the Salesforce account.
naftiko: "0.5"
info:
label: "Distributor Order Fulfillment Tracker"
description: "Tracks distributor order fulfillment by pulling the sales order from SAP, checking delivery status, and updating the Salesforce account."
tags:
- distribution
- sap
- salesforce
- supply-chain
capability:
exposes:
- type: mcp
namespace: distribution
port: 8080
tools:
- name: track-distributor-order
description: "Track distributor order: pull SAP sales order, check delivery, update Salesforce account."
inputParameters:
- name: sales_order_number
in: body
type: string
description: "The SAP sales order number."
- name: account_id
in: body
type: string
description: "The Salesforce distributor account ID."
steps:
- name: get-sales-order
type: call
call: sap.get-sales-order
with:
sales_order_number: "{{sales_order_number}}"
- name: get-delivery-status
type: call
call: sap.get-delivery-by-order
with:
sales_order: "{{sales_order_number}}"
- name: update-sf-account
type: call
call: salesforce.update-account
with:
account_id: "{{account_id}}"
last_order_status: "{{get-sales-order.status}}"
last_delivery_date: "{{get-delivery-status.actual_goods_issue_date}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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('{{sales_order_number}}')"
inputParameters:
- name: sales_order_number
in: path
operations:
- name: get-sales-order
method: GET
- name: deliveries
path: "/A_SalesOrder('{{sales_order}}')/to_Delivery"
inputParameters:
- name: sales_order
in: path
operations:
- name: get-delivery-by-order
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
Optimizes Direct Store Delivery routes by analyzing Salesforce retail accounts, checking SAP regional inventory, and posting optimized routes to Microsoft Teams.
naftiko: "0.5"
info:
label: "DSD Route Delivery Optimization"
description: "Optimizes Direct Store Delivery routes by analyzing Salesforce retail accounts, checking SAP regional inventory, and posting optimized routes to Microsoft Teams."
tags:
- distribution
- supply-chain
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dsd-optimization
port: 8080
tools:
- name: optimize-dsd-routes
description: "Optimize DSD routes: analyze Salesforce accounts, check SAP inventory, post routes."
inputParameters:
- name: region_code
in: body
type: string
description: "The distribution region code."
- name: delivery_date
in: body
type: string
description: "Target delivery date."
steps:
- name: get-retail-accounts
type: call
call: salesforce.get-region-accounts
with:
region: "{{region_code}}"
- name: check-warehouse-stock
type: call
call: sap.get-regional-stock
with:
region: "{{region_code}}"
- name: post-optimized-routes
type: call
call: msteams.send-message
with:
channel_id: "dsd-{{region_code}}"
text: "DSD Route Optimization for {{region_code}} on {{delivery_date}}: Accounts: {{get-retail-accounts.count}}. Stock: {{check-warehouse-stock.total_cases}} cases."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query?q=SELECT+Id,Name+FROM+Account+WHERE+Region__c='{{region}}'"
inputParameters:
- name: region
in: query
operations:
- name: get-region-accounts
method: GET
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: regional-stock
path: "/RegionalInventory('{{region}}')"
inputParameters:
- name: region
in: path
operations:
- name: get-regional-stock
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Dynatrace detects performance degradation, retrieves problem details, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Dynatrace Performance Degradation Alert"
description: "When Dynatrace detects performance degradation, retrieves problem details, creates a ServiceNow incident, and notifies the SRE team via Microsoft Teams."
tags:
- it-operations
- dynatrace
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: performance-ops
port: 8080
tools:
- name: handle-performance-degradation
description: "Handle Dynatrace alert: get problem, create ServiceNow incident, notify SRE."
inputParameters:
- name: problem_id
in: body
type: string
description: "The Dynatrace problem ID."
steps:
- name: get-problem-details
type: call
call: dynatrace.get-problem
with:
problem_id: "{{problem_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Performance: {{get-problem-details.title}}"
description: "Impact: {{get-problem-details.impact_level}}. Root cause: {{get-problem-details.root_cause}}."
urgency: "2"
assignment_group: "SRE_Team"
- name: notify-sre
type: call
call: msteams.send-message
with:
channel_id: "sre-alerts"
text: "Performance Alert: {{get-problem-details.title}}. Impact: {{get-problem-details.impact_level}}. Ticket: {{create-incident.number}}."
consumes:
- type: http
namespace: dynatrace
baseUri: "https://pepsico.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: problems
path: "/problems/{{problem_id}}"
inputParameters:
- name: problem_id
in: path
operations:
- name: get-problem
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies the IT security team in Microsoft Teams for access revocation.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies the IT security team in Microsoft Teams for access revocation."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday worker ID and termination date, create a ServiceNow offboarding ticket and alert IT security via Teams to begin access revocation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-offboard-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Offboarding: {{get-employee.full_name}} — last day {{termination_date}}"
category: "hr_offboarding"
assigned_group: "IT_Security"
- name: notify-it-security
type: call
call: msteams.send-message
with:
channel_id: "it-security-channel"
text: "Offboarding initiated for {{get-employee.full_name}} (last day: {{termination_date}}). SNOW: {{create-offboard-ticket.number}}. Please begin access revocation."
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: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an employee changes roles in Workday, updates ServiceNow access groups, modifies SharePoint permissions, and notifies the employee via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Role Change Provisioning"
description: "When an employee changes roles in Workday, updates ServiceNow access groups, modifies SharePoint permissions, and notifies the employee via Microsoft Teams."
tags:
- hr
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-provisioning
port: 8080
tools:
- name: process-role-change
description: "Orchestrate role change: update ServiceNow access, modify SharePoint permissions, notify via Teams."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: new_role
in: body
type: string
description: "The new role title."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: update-access-groups
type: call
call: servicenow.update-user-groups
with:
user_email: "{{get-worker.work_email}}"
new_role: "{{new_role}}"
- name: update-sharepoint-access
type: call
call: sharepoint.update-permissions
with:
user_email: "{{get-worker.work_email}}"
site_group: "{{new_role}}-team"
- name: notify-employee
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Hi {{get-worker.first_name}}, your role has been updated to {{new_role}}. Your system access has been adjusted accordingly."
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: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: user-groups
path: "/table/sys_user_grmember"
operations:
- name: update-user-groups
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: permissions
path: "/sites/root/permissions"
operations:
- name: update-permissions
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/chats"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates energy cost reports by pulling SAP plant energy data, comparing utility costs, and publishing to SharePoint.
naftiko: "0.5"
info:
label: "Energy Cost Optimization Report"
description: "Generates energy cost reports by pulling SAP plant energy data, comparing utility costs, and publishing to SharePoint."
tags:
- manufacturing
- finance
- sap
- sharepoint
capability:
exposes:
- type: mcp
namespace: energy-optimization
port: 8080
tools:
- name: generate-energy-report
description: "Generate energy cost report: pull SAP plant data, compare rates, publish to SharePoint."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: period
in: body
type: string
description: "The reporting period."
steps:
- name: get-energy-consumption
type: call
call: sap.get-plant-energy-consumption
with:
plant: "{{plant_code}}"
period: "{{period}}"
- name: get-energy-costs
type: call
call: sap.get-cost-center-actuals
with:
cost_center: "energy-{{plant_code}}"
period: "{{period}}"
- name: publish-report
type: call
call: sharepoint.upload-file
with:
site_id: "operations"
folder_path: "Energy/Reports/{{period}}"
file_name: "energy-{{plant_code}}.json"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: energy
path: "/PlantEnergyConsumption(Plant='{{plant}}',Period='{{period}}')"
inputParameters:
- name: plant
in: path
- name: period
in: path
operations:
- name: get-plant-energy-consumption
method: GET
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')/to_Actuals"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center-actuals
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Schedules fleet vehicle maintenance by checking SAP equipment records, creating a ServiceNow work order, and notifying the fleet team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Fleet Vehicle Maintenance Scheduler"
description: "Schedules fleet vehicle maintenance by checking SAP equipment records, creating a ServiceNow work order, and notifying the fleet team via Microsoft Teams."
tags:
- distribution
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fleet-ops
port: 8080
tools:
- name: schedule-vehicle-maintenance
description: "Schedule fleet maintenance: check SAP equipment, create ServiceNow work order, notify fleet team."
inputParameters:
- name: vehicle_id
in: body
type: string
description: "The SAP equipment ID for the fleet vehicle."
- name: maintenance_type
in: body
type: string
description: "Type: preventive, corrective, inspection."
steps:
- name: get-vehicle-record
type: call
call: sap.get-equipment
with:
equipment_id: "{{vehicle_id}}"
- name: create-work-order
type: call
call: servicenow.create-work-order
with:
short_description: "Fleet maintenance: {{vehicle_id}} - {{maintenance_type}}"
assignment_group: "Fleet_Maintenance"
- name: notify-fleet-team
type: call
call: msteams.send-message
with:
channel_id: "fleet-management"
text: "Maintenance scheduled for vehicle {{vehicle_id}}. Type: {{maintenance_type}}. Last service: {{get-vehicle-record.last_maintenance_date}}. Work order: {{create-work-order.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: equipment
path: "/A_Equipment('{{equipment_id}}')"
inputParameters:
- name: equipment_id
in: path
operations:
- name: get-equipment
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Frito-Lay production line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Frito-Lay Production Line Downtime Response"
description: "When a Frito-Lay production line goes down, retrieves equipment status from SAP, creates a ServiceNow maintenance ticket, and notifies the plant operations team via Microsoft Teams."
tags:
- manufacturing
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-ops
port: 8080
tools:
- name: handle-line-downtime
description: "Orchestrate Frito-Lay line downtime response: check SAP equipment, create ServiceNow ticket, notify plant ops."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The SAP equipment ID for the production line."
- name: plant_code
in: body
type: string
description: "The Frito-Lay plant code."
steps:
- name: get-equipment-status
type: call
call: sap.get-equipment
with:
equipment_id: "{{equipment_id}}"
- name: create-maintenance-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Production line downtime: {{equipment_id}} at plant {{plant_code}}"
category: "plant_maintenance"
urgency: "1"
assignment_group: "FritoLay_Maintenance_{{plant_code}}"
- name: notify-plant-ops
type: call
call: msteams.send-message
with:
channel_id: "fritolay-plant-ops-{{plant_code}}"
text: "ALERT: Production line {{equipment_id}} down at Frito-Lay plant {{plant_code}}. Status: {{get-equipment-status.system_status}}. Ticket: {{create-maintenance-ticket.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: equipment
path: "/A_Equipment('{{equipment_id}}')"
inputParameters:
- name: equipment_id
in: path
operations:
- name: get-equipment
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks Gatorade sports sponsorship performance by pulling social engagement from LinkedIn, campaign metrics from Salesforce, and posting a digest to Microsoft Teams.
naftiko: "0.5"
info:
label: "Gatorade Sports Sponsorship Performance"
description: "Tracks Gatorade sports sponsorship performance by pulling social engagement from LinkedIn, campaign metrics from Salesforce, and posting a digest to Microsoft Teams."
tags:
- marketing
- brand-management
- linkedin
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sponsorship
port: 8080
tools:
- name: track-sponsorship-performance
description: "Track Gatorade sponsorship: pull LinkedIn engagement, Salesforce metrics, post digest."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Salesforce sponsorship campaign ID."
- name: linkedin_campaign_id
in: body
type: string
description: "The LinkedIn campaign ID."
steps:
- name: get-linkedin-engagement
type: call
call: linkedin.get-campaign-analytics
with:
campaign_id: "{{linkedin_campaign_id}}"
- name: get-sf-campaign
type: call
call: salesforce.get-campaign
with:
campaign_id: "{{campaign_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "gatorade-marketing"
text: "Gatorade Sponsorship: {{get-sf-campaign.name}}. LinkedIn impressions: {{get-linkedin-engagement.impressions}}. Engagements: {{get-linkedin-engagement.engagements}}. Budget used: ${{get-sf-campaign.actual_cost}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks GitHub release deployments by checking release status, verifying Datadog health metrics, and updating ServiceNow change requests.
naftiko: "0.5"
info:
label: "GitHub Release Deployment Tracker"
description: "Tracks GitHub release deployments by checking release status, verifying Datadog health metrics, and updating ServiceNow change requests."
tags:
- devops
- github
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: deployment
port: 8080
tools:
- name: track-release-deployment
description: "Track release deployment: check GitHub, verify Datadog, update ServiceNow."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository."
- name: release_tag
in: body
type: string
description: "The release tag."
- name: change_request_id
in: body
type: string
description: "The ServiceNow change request sys_id."
steps:
- name: get-release
type: call
call: github.get-release
with:
repo: "{{repo}}"
tag: "{{release_tag}}"
- name: check-health
type: call
call: datadog.get-service-metrics
with:
service_name: "{{repo}}"
- name: update-change-request
type: call
call: servicenow.update-change-request
with:
sys_id: "{{change_request_id}}"
state: "review"
work_notes: "Release {{release_tag}} deployed. Error rate: {{check-health.error_rate}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/pepsico/{{repo}}/releases/tags/{{tag}}"
inputParameters:
- name: repo
in: path
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
header: "DD-API-KEY"
value: "$secrets.datadog_api_key"
resources:
- name: service-metrics
path: "/metrics/query?query=service:{{service_name}}"
inputParameters:
- name: service_name
in: query
operations:
- name: get-service-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: update-change-request
method: PATCH
Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions.
naftiko: "0.5"
info:
label: "Google Analytics Campaign Metrics"
description: "Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions."
tags:
- marketing
- google-analytics
- campaign-management
capability:
exposes:
- type: mcp
namespace: marketing-analytics
port: 8080
tools:
- name: get-campaign-metrics
description: "Fetch Google Analytics campaign performance. Returns sessions, bounce rate, and goal completions."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Google Analytics campaign identifier."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD:YYYY-MM-DD format."
call: ga.get-campaign-report
with:
campaign_id: "{{campaign_id}}"
date_range: "{{date_range}}"
outputParameters:
- name: sessions
type: string
mapping: "$.reports[0].data.totals[0].values[0]"
- name: bounce_rate
type: string
mapping: "$.reports[0].data.totals[0].values[1]"
- name: conversions
type: string
mapping: "$.reports[0].data.totals[0].values[2]"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/reports:batchGet"
operations:
- name: get-campaign-report
method: POST
Assesses supplier risk by pulling vendor data from SAP, checking compliance in ServiceNow, and posting a risk report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Ingredient Supplier Risk Assessment"
description: "Assesses supplier risk by pulling vendor data from SAP, checking compliance in ServiceNow, and posting a risk report to Microsoft Teams."
tags:
- procurement
- supply-chain
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supplier-risk
port: 8080
tools:
- name: assess-supplier-risk
description: "Assess supplier risk: pull SAP vendor data, check ServiceNow compliance, post risk report."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
steps:
- name: get-vendor-data
type: call
call: sap.get-vendor
with:
vendor_id: "{{vendor_id}}"
- name: check-compliance
type: call
call: servicenow.get-compliance-record
with:
vendor_name: "{{get-vendor-data.vendor_name}}"
- name: post-risk-report
type: call
call: msteams.send-message
with:
channel_id: "procurement-risk"
text: "Supplier Risk: {{get-vendor-data.vendor_name}} ({{vendor_id}}). Country: {{get-vendor-data.country}}. Compliance: {{check-compliance.status}}. Last audit: {{check-compliance.last_audit_date}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_BusinessPartner('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: compliance
path: "/table/vendor_compliance?sysparm_query=vendor_name={{vendor_name}}"
inputParameters:
- name: vendor_name
in: query
operations:
- name: get-compliance-record
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages IT asset lifecycle by checking ServiceNow asset status, verifying Workday user assignment, and updating tracking records.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Management"
description: "Manages IT asset lifecycle by checking ServiceNow asset status, verifying Workday user assignment, and updating tracking records."
tags:
- it-operations
- servicenow
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-asset
port: 8080
tools:
- name: manage-asset-lifecycle
description: "Manage IT asset: check ServiceNow, verify Workday user, update tracking."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The ServiceNow asset tag."
steps:
- name: get-asset
type: call
call: servicenow.get-asset
with:
asset_tag: "{{asset_tag}}"
- name: get-assigned-user
type: call
call: workday.get-worker
with:
worker_id: "{{get-asset.assigned_to_worker_id}}"
- name: notify-it-ops
type: call
call: msteams.send-message
with:
channel_id: "it-asset-management"
text: "Asset {{asset_tag}}: Assigned to {{get-assigned-user.full_name}} ({{get-assigned-user.department}}). Status: {{get-asset.status}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: assets
path: "/table/alm_hardware?sysparm_query=asset_tag={{asset_tag}}"
inputParameters:
- name: asset_tag
in: query
operations:
- name: get-asset
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: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches PepsiCo LinkedIn company page engagement metrics (impressions, shares, reactions) and posts a weekly digest to the brand marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Brand Engagement Digest"
description: "Fetches PepsiCo LinkedIn company page engagement metrics (impressions, shares, reactions) and posts a weekly digest to the brand marketing Teams channel."
tags:
- marketing
- linkedin
- social
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-reporting
port: 8080
tools:
- name: digest-linkedin-engagement
description: "Retrieve LinkedIn organization page engagement statistics for the past 30 days and post a branded performance digest to the marketing Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "The LinkedIn organization ID for PepsiCo's company page."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the brand marketing digest."
steps:
- name: get-engagement
type: call
call: linkedin.get-share-statistics
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "LinkedIn Brand Digest (30d): Impressions: {{get-engagement.impressions}} | Reactions: {{get-engagement.likes}} | Shares: {{get-engagement.shares}} | Comments: {{get-engagement.comments}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: share-statistics
path: "/organizationalEntityShareStatistics"
inputParameters:
- name: organization_id
in: query
operations:
- name: get-share-statistics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs LinkedIn employer branding campaign metrics to Workday recruiting analytics and posts a talent acquisition report to Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Campaign Sync"
description: "Syncs LinkedIn employer branding campaign metrics to Workday recruiting analytics and posts a talent acquisition report to Microsoft Teams."
tags:
- hr
- marketing
- linkedin
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-marketing
port: 8080
tools:
- name: sync-employer-brand
description: "Sync LinkedIn employer brand data to Workday and post report to Teams."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The LinkedIn campaign ID."
steps:
- name: get-linkedin-metrics
type: call
call: linkedin.get-campaign-analytics
with:
campaign_id: "{{campaign_id}}"
- name: update-workday-recruiting
type: call
call: workday.update-recruiting-metrics
with:
source: "linkedin"
impressions: "{{get-linkedin-metrics.impressions}}"
applications: "{{get-linkedin-metrics.conversions}}"
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "talent-acquisition"
text: "LinkedIn Employer Brand: Impressions: {{get-linkedin-metrics.impressions}}. Applications: {{get-linkedin-metrics.conversions}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-analytics
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: recruiting-metrics
path: "/pepsico/recruiting/metrics"
operations:
- name: update-recruiting-metrics
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs email campaign results from MailChimp to Salesforce and posts a performance summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "MailChimp Consumer Email Campaign Sync"
description: "Syncs email campaign results from MailChimp to Salesforce and posts a performance summary to Microsoft Teams."
tags:
- marketing
- mailchimp
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: sync-email-results
description: "Sync MailChimp results to Salesforce and post summary to Teams."
inputParameters:
- name: mailchimp_campaign_id
in: body
type: string
description: "The MailChimp campaign ID."
- name: sf_campaign_id
in: body
type: string
description: "The Salesforce campaign ID."
steps:
- name: get-report
type: call
call: mailchimp.get-campaign-report
with:
campaign_id: "{{mailchimp_campaign_id}}"
- name: update-sf
type: call
call: salesforce.update-campaign
with:
campaign_id: "{{sf_campaign_id}}"
emails_sent: "{{get-report.emails_sent}}"
open_rate: "{{get-report.open_rate}}"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "marketing-campaigns"
text: "Email Report: {{get-report.campaign_title}}. Sent: {{get-report.emails_sent}}. Open: {{get-report.open_rate}}%. Click: {{get-report.click_rate}}%."
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-report
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: update-campaign
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches campaign performance metrics from Salesforce Marketing Cloud and posts a weekly digest to the brand marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Marketing Campaign Performance Digest"
description: "Fetches campaign performance metrics from Salesforce Marketing Cloud and posts a weekly digest to the brand marketing Microsoft Teams channel."
tags:
- marketing
- salesforce
- reporting
- microsoft-teams
- campaign
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a Salesforce campaign ID and reporting period, fetch open rate, click rate, and conversion metrics, then post a digest to the marketing Teams channel."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Salesforce campaign ID to report on."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the marketing digest."
steps:
- name: get-campaign
type: call
call: salesforce.get-campaign
with:
campaign_id: "{{campaign_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Campaign Digest: {{get-campaign.Name}} | Status: {{get-campaign.Status}} | Sent: {{get-campaign.NumberSent}} | Responses: {{get-campaign.NumberOfResponses}} | Conversion: {{get-campaign.ConversionRate}}%"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Orchestrates the monthly financial close by checking SAP period-end status, refreshing the Power BI finance dashboard, and notifying the finance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Monthly Financial Close Orchestrator"
description: "Orchestrates the monthly financial close by checking SAP period-end status, refreshing the Power BI finance dashboard, and notifying the finance team via Microsoft Teams."
tags:
- finance
- sap
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: run-monthly-close
description: "Orchestrate monthly close: check SAP period status, refresh dashboard, notify finance."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period, e.g. 2026-03."
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: dataset_id
in: body
type: string
description: "The Power BI finance dataset ID."
steps:
- name: check-period-status
type: call
call: sap.get-period-close-status
with:
company_code: "{{company_code}}"
period: "{{fiscal_period}}"
- name: refresh-finance-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: msteams.send-message
with:
channel_id: "finance-close"
text: "Monthly close for {{fiscal_period}}: SAP period status: {{check-period-status.status}}. Dashboard refreshed."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_FINANCIALPERIODCLOSE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: period-close
path: "/A_FinancialPeriodClose(CompanyCode='{{company_code}}',Period='{{period}}')"
inputParameters:
- name: company_code
in: path
- name: period
in: path
operations:
- name: get-period-close-status
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Aggregates marketing attribution data from Google Analytics and LinkedIn to create a unified campaign view in Salesforce.
naftiko: "0.5"
info:
label: "Multi-Channel Marketing Attribution"
description: "Aggregates marketing attribution data from Google Analytics and LinkedIn to create a unified campaign view in Salesforce."
tags:
- marketing
- google-analytics
- linkedin
- salesforce
capability:
exposes:
- type: mcp
namespace: marketing-attribution
port: 8080
tools:
- name: aggregate-attribution
description: "Aggregate marketing attribution: pull GA and LinkedIn data, update Salesforce campaign."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Salesforce campaign ID."
- name: ga_campaign_id
in: body
type: string
description: "The GA campaign ID."
- name: linkedin_campaign_id
in: body
type: string
description: "The LinkedIn campaign ID."
steps:
- name: get-ga-attribution
type: call
call: ga.get-campaign-report
with:
campaign_id: "{{ga_campaign_id}}"
- name: get-linkedin-attribution
type: call
call: linkedin.get-campaign-analytics
with:
campaign_id: "{{linkedin_campaign_id}}"
- name: update-sf-campaign
type: call
call: salesforce.update-campaign
with:
campaign_id: "{{campaign_id}}"
web_conversions: "{{get-ga-attribution.conversions}}"
social_engagements: "{{get-linkedin-attribution.engagements}}"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/reports:batchGet"
operations:
- name: get-campaign-report
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/adAnalyticsV2?campaigns=urn:li:sponsoredCampaign:{{campaign_id}}"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: update-campaign
method: PATCH
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions SharePoint access, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions SharePoint access, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full PepsiCo onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-snow-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-sharepoint
type: call
call: sharepoint.create-folder
with:
site_id: "hr-onboarding"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
channel_id: "hr-new-hires"
text: "Welcome to PepsiCo, {{get-employee.full_name}}! Your IT ticket: {{create-snow-ticket.number}}. Start date: {{start_date}}."
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: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: folders
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Validates new product launch readiness by checking SAP material master, Salesforce product catalog, and Google Analytics tracking configuration.
naftiko: "0.5"
info:
label: "New Product Launch Readiness Check"
description: "Validates new product launch readiness by checking SAP material master, Salesforce product catalog, and Google Analytics tracking configuration."
tags:
- brand-management
- manufacturing
- sap
- salesforce
- google-analytics
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: check-launch-readiness
description: "Validate product launch readiness across SAP, Salesforce, and Google Analytics."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: product_id
in: body
type: string
description: "The Salesforce product record ID."
steps:
- name: check-material-master
type: call
call: sap.get-material-master
with:
material_number: "{{material_number}}"
- name: check-sf-product
type: call
call: salesforce.get-product
with:
product_id: "{{product_id}}"
- name: check-analytics-tracking
type: call
call: ga.get-tracking-config
with:
product_code: "{{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material-master
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: products
path: "/sobjects/Product2/{{product_id}}"
inputParameters:
- name: product_id
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsadmin.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: tracking-config
path: "/properties/pepsico/tracking/{{product_code}}"
inputParameters:
- name: product_code
in: path
operations:
- name: get-tracking-config
method: GET
Retrieves application health summary from New Relic, including response time, throughput, and error rate.
naftiko: "0.5"
info:
label: "New Relic Application Health"
description: "Retrieves application health summary from New Relic, including response time, throughput, and error rate."
tags:
- it-operations
- new-relic
- monitoring
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-health
description: "Get New Relic application health. Returns response time, throughput, and error rate."
inputParameters:
- name: app_id
in: body
type: string
description: "The New Relic application ID."
call: newrelic.get-app-summary
with:
app_id: "{{app_id}}"
outputParameters:
- name: response_time
type: string
mapping: "$.application_summary.response_time"
- name: throughput
type: string
mapping: "$.application_summary.throughput"
- name: error_rate
type: string
mapping: "$.application_summary.error_rate"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
header: "X-Api-Key"
value: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-summary
method: GET
When a P1 production incident is raised, creates a ServiceNow incident, annotates Datadog, and alerts the engineering on-call team in Microsoft Teams.
naftiko: "0.5"
info:
label: "P1 Incident Response Chain"
description: "When a P1 production incident is raised, creates a ServiceNow incident, annotates Datadog, and alerts the engineering on-call team in Microsoft Teams."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given an affected service and impact summary, create a ServiceNow P1 incident, create a Datadog event annotation, and alert the engineering team in Teams."
inputParameters:
- name: affected_service
in: body
type: string
description: "The name of the affected PepsiCo service or system."
- name: impact_summary
in: body
type: string
description: "A brief description of the business impact."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the on-call alert."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
short_description: "P1 Incident: {{affected_service}} — {{impact_summary}}"
urgency: "1"
category: "application"
- name: annotate-datadog
type: call
call: datadog.create-event
with:
title: "P1 Production Incident: {{affected_service}}"
text: "SNOW {{create-snow-incident.number}} — {{impact_summary}}"
alert_type: "error"
- name: alert-oncall
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "P1 INCIDENT: {{affected_service}} | Impact: {{impact_summary}} | SNOW: {{create-snow-incident.number}} | Datadog: {{annotate-datadog.url}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: 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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Detects packaging material shortages by checking SAP inventory, identifies affected production orders, and escalates to supply chain teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Packaging Material Shortage Alert"
description: "Detects packaging material shortages by checking SAP inventory, identifies affected production orders, and escalates to supply chain teams via Microsoft Teams."
tags:
- manufacturing
- supply-chain
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-chain-alert
port: 8080
tools:
- name: alert-packaging-shortage
description: "Orchestrate packaging shortage: check SAP inventory, identify affected orders, notify supply chain."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number for the packaging material."
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
steps:
- name: check-stock
type: call
call: sap.get-material-stock
with:
material_number: "{{material_number}}"
plant: "{{plant_code}}"
- name: get-affected-orders
type: call
call: sap.get-dependent-orders
with:
material_number: "{{material_number}}"
plant: "{{plant_code}}"
- name: notify-supply-chain
type: call
call: msteams.send-message
with:
channel_id: "supply-chain-alerts"
text: "PACKAGING SHORTAGE: Material {{material_number}} at plant {{plant_code}}. Stock: {{check-stock.available_stock}} {{check-stock.unit}}. Affected orders: {{get-affected-orders.count}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')"
inputParameters:
- name: material_number
in: path
- name: plant
in: path
operations:
- name: get-material-stock
method: GET
- name: dependent-orders
path: "/A_ProductionOrder?$filter=Material eq '{{material_number}}' and Plant eq '{{plant}}'"
inputParameters:
- name: material_number
in: query
- name: plant
in: query
operations:
- name: get-dependent-orders
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Optimizes vending machine refills by pulling telemetry data, checking regional SAP inventory, and creating route-optimized refill tasks in ServiceNow.
naftiko: "0.5"
info:
label: "Pepsi Vending Machine Refill Optimization"
description: "Optimizes vending machine refills by pulling telemetry data, checking regional SAP inventory, and creating route-optimized refill tasks in ServiceNow."
tags:
- distribution
- supply-chain
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: vending-ops
port: 8080
tools:
- name: optimize-refill-routes
description: "Optimize vending refills: pull telemetry, check SAP inventory, create ServiceNow tasks."
inputParameters:
- name: region_code
in: body
type: string
description: "The regional distribution code."
- name: threshold_percent
in: body
type: string
description: "Stock threshold percentage."
steps:
- name: get-machine-telemetry
type: call
call: sap.get-vending-telemetry
with:
region: "{{region_code}}"
threshold: "{{threshold_percent}}"
- name: check-regional-inventory
type: call
call: sap.get-regional-stock
with:
region: "{{region_code}}"
- name: create-refill-tasks
type: call
call: servicenow.create-task
with:
short_description: "Vending refill: Region {{region_code}}"
description: "Low stock machines: {{get-machine-telemetry.low_stock_count}}. Regional stock: {{check-regional-inventory.available_cases}} cases."
category: "vending_refill"
assignment_group: "Distribution_{{region_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_VENDING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: telemetry
path: "/VendingMachineStatus?$filter=Region eq '{{region}}'"
inputParameters:
- name: region
in: query
- name: threshold
in: query
operations:
- name: get-vending-telemetry
method: GET
- name: regional-stock
path: "/RegionalInventory('{{region}}')"
inputParameters:
- name: region
in: path
operations:
- name: get-regional-stock
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
Reports a plant safety incident by recording it in ServiceNow, updating the SAP maintenance log, and notifying safety officers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Plant Safety Incident Reporting"
description: "Reports a plant safety incident by recording it in ServiceNow, updating the SAP maintenance log, and notifying safety officers via Microsoft Teams."
tags:
- manufacturing
- servicenow
- sap
- microsoft-teams
- workday
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: report-safety-incident
description: "Orchestrate safety reporting: create ServiceNow record, update SAP, notify safety team."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: incident_description
in: body
type: string
description: "Description of the safety incident."
- name: severity
in: body
type: string
description: "Severity: low, medium, high, critical."
steps:
- name: create-safety-record
type: call
call: servicenow.create-incident
with:
short_description: "Plant safety incident at {{plant_code}}"
description: "{{incident_description}}"
category: "plant_safety"
urgency: "{{severity}}"
assignment_group: "Plant_Safety_{{plant_code}}"
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: notify-safety-team
type: call
call: msteams.send-message
with:
channel_id: "plant-safety"
text: "SAFETY INCIDENT at plant {{plant_code}}: {{incident_description}}. Severity: {{severity}}. Employee: {{get-worker.full_name}}. Case: {{create-safety-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Integrates POS data by pulling Circana retail data, updating Salesforce accounts, and refreshing the Power BI sales dashboard.
naftiko: "0.5"
info:
label: "Point of Sale Data Integration"
description: "Integrates POS data by pulling Circana retail data, updating Salesforce accounts, and refreshing the Power BI sales dashboard."
tags:
- distribution
- marketing
- salesforce
- power-bi
capability:
exposes:
- type: mcp
namespace: pos-integration
port: 8080
tools:
- name: integrate-pos-data
description: "Integrate POS data: pull Circana data, update Salesforce, refresh Power BI."
inputParameters:
- name: retailer_id
in: body
type: string
description: "The Circana retailer ID."
- name: sf_account_id
in: body
type: string
description: "The Salesforce account ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
steps:
- name: get-pos-data
type: call
call: circana.get-retailer-pos
with:
retailer_id: "{{retailer_id}}"
- name: update-sf-account
type: call
call: salesforce.update-account
with:
account_id: "{{sf_account_id}}"
weekly_volume: "{{get-pos-data.weekly_volume}}"
market_share: "{{get-pos-data.market_share}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: circana
baseUri: "https://api.circana.com/v2"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: pos
path: "/pos/retailer/{{retailer_id}}"
inputParameters:
- name: retailer_id
in: path
operations:
- name: get-retailer-pos
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Monitors frying oil quality at Frito-Lay plants by pulling quality test results from SAP, comparing against thresholds, and alerting quality teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Potato Chip Oil Quality Monitoring"
description: "Monitors frying oil quality at Frito-Lay plants by pulling quality test results from SAP, comparing against thresholds, and alerting quality teams via Microsoft Teams."
tags:
- manufacturing
- quality
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: oil-quality
port: 8080
tools:
- name: monitor-oil-quality
description: "Monitor frying oil quality: pull SAP test results, compare thresholds, alert quality team."
inputParameters:
- name: plant_code
in: body
type: string
description: "The Frito-Lay plant code."
- name: production_line
in: body
type: string
description: "The production line ID."
steps:
- name: get-oil-test-results
type: call
call: sap.get-quality-test
with:
plant: "{{plant_code}}"
line: "{{production_line}}"
test_type: "oil_quality"
- name: create-quality-record
type: call
call: servicenow.create-task
with:
short_description: "Oil quality check: Plant {{plant_code}} Line {{production_line}}"
description: "FFA level: {{get-oil-test-results.ffa_level}}. Color index: {{get-oil-test-results.color_index}}."
category: "quality_monitoring"
assignment_group: "QA_FritoLay"
- name: alert-quality
type: call
call: msteams.send-message
with:
channel_id: "fritolay-quality"
text: "Oil Quality: Plant {{plant_code}}, Line {{production_line}}. FFA: {{get-oil-test-results.ffa_level}}. Color: {{get-oil-test-results.color_index}}. Status: {{get-oil-test-results.pass_fail}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_QUALITYTEST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: quality-tests
path: "/QualityTest(Plant='{{plant}}',Line='{{line}}',TestType='{{test_type}}')"
inputParameters:
- name: plant
in: path
- name: line
in: path
- name: test_type
in: path
operations:
- name: get-quality-test
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers a refresh of the executive KPI Power BI dataset and posts a confirmation to the CFO's Microsoft Teams channel when the refresh is complete.
naftiko: "0.5"
info:
label: "Power BI Executive KPI Refresh"
description: "Triggers a refresh of the executive KPI Power BI dataset and posts a confirmation to the CFO's Microsoft Teams channel when the refresh is complete."
tags:
- data
- analytics
- power-bi
- finance
- microsoft-teams
- executive-reporting
capability:
exposes:
- type: mcp
namespace: executive-bi
port: 8080
tools:
- name: refresh-executive-kpis
description: "Trigger a Power BI refresh for the executive KPI dashboard and post a refresh confirmation to the CFO's Teams channel."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the executive KPI dashboard."
- name: notify_upn
in: body
type: string
description: "The Teams UPN of the executive to notify upon refresh initiation."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-executive
type: call
call: msteams.send-message
with:
channel_id: "{{notify_upn}}"
text: "Executive KPI dashboard refresh initiated. Dataset {{dataset_id}} is updating. Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers a Power BI dataset refresh for the global sales dashboard and notifies the analytics team in Microsoft Teams upon completion.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the global sales dashboard and notifies the analytics team in Microsoft Teams upon completion."
tags:
- data
- analytics
- power-bi
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: refresh-sales-dashboard
description: "Trigger a Power BI dataset refresh for the PepsiCo global sales dashboard and post a Teams notification when the refresh is initiated."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the global sales dashboard."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to notify the analytics team."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-analytics
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Power BI sales dashboard refresh initiated. Dataset: {{dataset_id}}. Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls production order data from SAP, refreshes Power BI manufacturing dashboard, and posts a yield summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Production Yield Analysis and Report"
description: "Pulls production order data from SAP, refreshes Power BI manufacturing dashboard, and posts a yield summary to Microsoft Teams."
tags:
- manufacturing
- sap
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: manufacturing-analytics
port: 8080
tools:
- name: analyze-production-yield
description: "Analyze production yield: pull SAP data, refresh Power BI dashboard, post summary to Teams."
inputParameters:
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: production_date
in: body
type: string
description: "The production date in YYYY-MM-DD format."
- name: dataset_id
in: body
type: string
description: "The Power BI manufacturing dataset ID."
steps:
- name: get-production-orders
type: call
call: sap.get-production-orders-by-plant
with:
plant_code: "{{plant_code}}"
date: "{{production_date}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
- name: post-yield-summary
type: call
call: msteams.send-message
with:
channel_id: "manufacturing-ops"
text: "Yield Report for plant {{plant_code}} on {{production_date}}: Orders: {{get-production-orders.count}}. Dashboard refreshed."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: production-orders
path: "/A_ProductionOrder_2?$filter=ProductionPlant eq '{{plant_code}}'"
inputParameters:
- name: plant_code
in: query
- name: date
in: query
operations:
- name: get-production-orders-by-plant
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Traces Quaker Oats ingredients by pulling batch records from SAP, checking supplier certifications in ServiceNow, and posting a traceability report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Quaker Oats Ingredient Traceability"
description: "Traces Quaker Oats ingredients by pulling batch records from SAP, checking supplier certifications in ServiceNow, and posting a traceability report to Microsoft Teams."
tags:
- manufacturing
- quality
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ingredient-trace
port: 8080
tools:
- name: trace-ingredients
description: "Trace Quaker ingredients: pull SAP batches, check certifications, post report."
inputParameters:
- name: batch_number
in: body
type: string
description: "The production batch number."
- name: material_number
in: body
type: string
description: "The SAP material number."
steps:
- name: get-batch-info
type: call
call: sap.get-batch
with:
material_number: "{{material_number}}"
batch_number: "{{batch_number}}"
- name: check-supplier-certs
type: call
call: servicenow.get-supplier-certifications
with:
supplier_id: "{{get-batch-info.supplier_id}}"
- name: post-trace-report
type: call
call: msteams.send-message
with:
channel_id: "quaker-quality"
text: "Ingredient Trace: Batch {{batch_number}}. Supplier: {{get-batch-info.supplier_name}}. Production: {{get-batch-info.production_date}}. Certifications: {{check-supplier-certs.cert_status}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')"
inputParameters:
- name: material_number
in: path
- name: batch_number
in: path
operations:
- name: get-batch
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: certifications
path: "/table/supplier_certification?sysparm_query=supplier_id={{supplier_id}}"
inputParameters:
- name: supplier_id
in: query
operations:
- name: get-supplier-certifications
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a quality issue is detected, places a batch on hold in SAP, creates a quality case in ServiceNow, and notifies QA and distribution teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Quality Hold and Recall Orchestrator"
description: "When a quality issue is detected, places a batch on hold in SAP, creates a quality case in ServiceNow, and notifies QA and distribution teams via Microsoft Teams."
tags:
- manufacturing
- quality
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-ops
port: 8080
tools:
- name: initiate-quality-hold
description: "Orchestrate quality hold: place batch on hold in SAP, create ServiceNow case, notify QA and distribution."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: batch_number
in: body
type: string
description: "The batch number to place on hold."
- name: reason
in: body
type: string
description: "The reason for the quality hold."
steps:
- name: get-batch-info
type: call
call: sap.get-batch
with:
material_number: "{{material_number}}"
batch_number: "{{batch_number}}"
- name: place-batch-hold
type: call
call: sap.update-batch-status
with:
material_number: "{{material_number}}"
batch_number: "{{batch_number}}"
status: "RESTRICTED"
- name: create-quality-case
type: call
call: servicenow.create-incident
with:
short_description: "Quality hold: Material {{material_number}} Batch {{batch_number}}"
description: "{{reason}}"
category: "quality_hold"
urgency: "1"
assignment_group: "Quality_Assurance"
- name: notify-teams
type: call
call: msteams.send-message
with:
channel_id: "quality-alerts"
text: "QUALITY HOLD: Material {{material_number}}, Batch {{batch_number}}. Reason: {{reason}}. Production date: {{get-batch-info.production_date}}. Case: {{create-quality-case.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')"
inputParameters:
- name: material_number
in: path
- name: batch_number
in: path
operations:
- name: get-batch
method: GET
- name: update-batch-status
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://pepsico.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: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes procurement approvals by validating SAP Ariba purchase requisitions, checking budget in SAP, and routing approval via Microsoft Power Automate.
naftiko: "0.5"
info:
label: "Raw Material Procurement Approval"
description: "Processes procurement approvals by validating SAP Ariba purchase requisitions, checking budget in SAP, and routing approval via Microsoft Power Automate."
tags:
- procurement
- supply-chain
- sap-ariba
- sap
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: process-procurement-approval
description: "Process procurement approval: validate Ariba PR, check SAP budget, route approval."
inputParameters:
- name: requisition_number
in: body
type: string
description: "The SAP Ariba purchase requisition number."
steps:
- name: get-requisition
type: call
call: ariba.get-purchase-requisition
with:
requisition_number: "{{requisition_number}}"
- name: check-budget
type: call
call: sap.check-budget-availability
with:
cost_center: "{{get-requisition.cost_center}}"
amount: "{{get-requisition.total_amount}}"
- name: route-approval
type: call
call: power-automate.trigger-flow
with:
flow_id: "procurement-approval"
requisition_number: "{{requisition_number}}"
amount: "{{get-requisition.total_amount}}"
budget_status: "{{check-budget.status}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisition_number}}"
inputParameters:
- name: requisition_number
in: path
operations:
- name: get-purchase-requisition
method: GET
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_BUDGET_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: budgets
path: "/BudgetAvailability(CostCenter='{{cost_center}}')"
inputParameters:
- name: cost_center
in: path
operations:
- name: check-budget-availability
method: GET
- type: http
namespace: power-automate
baseUri: "https://prod-pepsico.logic.azure.com"
authentication:
type: apiKey
header: "x-flow-key"
value: "$secrets.power_automate_key"
resources:
- name: flows
path: "/workflows/{{flow_id}}/triggers/manual/paths/invoke"
inputParameters:
- name: flow_id
in: path
operations:
- name: trigger-flow
method: POST
Tracks regulatory compliance documents by checking expiry dates in SharePoint, creating renewal tasks in ServiceNow, and alerting compliance via Microsoft Teams.
naftiko: "0.5"
info:
label: "Regulatory Compliance Document Tracker"
description: "Tracks regulatory compliance documents by checking expiry dates in SharePoint, creating renewal tasks in ServiceNow, and alerting compliance via Microsoft Teams."
tags:
- manufacturing
- sharepoint
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: regulatory-compliance
port: 8080
tools:
- name: track-compliance-documents
description: "Track compliance docs: check SharePoint expiry, create ServiceNow tasks, alert team."
inputParameters:
- name: document_category
in: body
type: string
description: "The compliance category: FDA, EPA, OSHA."
- name: plant_code
in: body
type: string
description: "The plant code."
steps:
- name: get-documents
type: call
call: sharepoint.get-compliance-docs
with:
site_id: "regulatory"
category: "{{document_category}}"
plant: "{{plant_code}}"
- name: create-renewal-tasks
type: call
call: servicenow.create-task
with:
short_description: "Compliance renewal: {{document_category}} for {{plant_code}}"
description: "Expiring: {{get-documents.expiring_count}}. Next expiry: {{get-documents.next_expiry_date}}."
category: "regulatory_compliance"
assignment_group: "Legal_Compliance"
- name: alert-compliance
type: call
call: msteams.send-message
with:
channel_id: "regulatory-compliance"
text: "Compliance Alert: {{document_category}} for plant {{plant_code}}. Expiring: {{get-documents.expiring_count}}. Next: {{get-documents.next_expiry_date}}."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: compliance-docs
path: "/sites/{{site_id}}/lists/{{category}}/items"
inputParameters:
- name: site_id
in: path
- name: category
in: path
operations:
- name: get-compliance-docs
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls trade promotion results from Salesforce, enriches with point-of-sale data from Circana, and refreshes the Power BI retail analytics dashboard.
naftiko: "0.5"
info:
label: "Retail Promotion Performance Sync"
description: "Pulls trade promotion results from Salesforce, enriches with point-of-sale data from Circana, and refreshes the Power BI retail analytics dashboard."
tags:
- marketing
- salesforce
- brand-management
- power-bi
- distribution
capability:
exposes:
- type: mcp
namespace: trade-marketing
port: 8080
tools:
- name: sync-promotion-performance
description: "Sync retail promotion performance: pull Salesforce data, enrich with Circana POS, refresh Power BI."
inputParameters:
- name: promotion_id
in: body
type: string
description: "The Salesforce promotion record ID."
- name: dataset_id
in: body
type: string
description: "The Power BI retail dataset ID."
steps:
- name: get-promotion
type: call
call: salesforce.get-promotion
with:
promotion_id: "{{promotion_id}}"
- name: get-pos-data
type: call
call: circana.get-pos-lift
with:
brand: "{{get-promotion.brand}}"
start_date: "{{get-promotion.start_date}}"
end_date: "{{get-promotion.end_date}}"
- name: refresh-dashboard
type: call
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: promotions
path: "/sobjects/Promotion__c/{{promotion_id}}"
inputParameters:
- name: promotion_id
in: path
operations:
- name: get-promotion
method: GET
- type: http
namespace: circana
baseUri: "https://api.circana.com/v2"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: pos-lift
path: "/pos/lift?brand={{brand}}&start={{start_date}}&end={{end_date}}"
inputParameters:
- name: brand
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-pos-lift
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Audits retail shelf compliance by pulling store audit data from Salesforce, comparing against planogram standards, and posting a report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Retail Shelf Compliance Audit"
description: "Audits retail shelf compliance by pulling store audit data from Salesforce, comparing against planogram standards, and posting a report to Microsoft Teams."
tags:
- distribution
- brand-management
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: retail-compliance
port: 8080
tools:
- name: audit-shelf-compliance
description: "Audit shelf compliance: pull Salesforce audit data, compare standards, post report."
inputParameters:
- name: store_account_id
in: body
type: string
description: "The Salesforce store account ID."
- name: audit_date
in: body
type: string
description: "The audit date in YYYY-MM-DD format."
steps:
- name: get-audit-record
type: call
call: salesforce.get-audit-record
with:
account_id: "{{store_account_id}}"
audit_date: "{{audit_date}}"
- name: get-planogram
type: call
call: salesforce.get-planogram
with:
store_type: "{{get-audit-record.store_type}}"
- name: post-compliance-report
type: call
call: msteams.send-message
with:
channel_id: "retail-operations"
text: "Shelf Compliance: {{get-audit-record.store_name}} on {{audit_date}}. Score: {{get-audit-record.compliance_score}}%. Planogram: {{get-audit-record.planogram_match}}%."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: audits
path: "/sobjects/Store_Audit__c"
operations:
- name: get-audit-record
method: GET
- name: planograms
path: "/sobjects/Planogram__c"
operations:
- name: get-planogram
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a Salesforce account record by account ID, returning account name, industry, annual revenue, and owner.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves a Salesforce account record by account ID, returning account name, industry, annual revenue, and owner."
tags:
- sales
- salesforce
- account-management
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-account
description: "Look up a Salesforce account by ID. Returns account name, industry, annual revenue, and account owner."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: salesforce.get-account
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: industry
type: string
mapping: "$.Industry"
- name: annual_revenue
type: string
mapping: "$.AnnualRevenue"
- name: owner
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Retrieves key account metrics from Salesforce for a major consumer account and posts an account health digest to the key account manager's Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Consumer Account Health Digest"
description: "Retrieves key account metrics from Salesforce for a major consumer account and posts an account health digest to the key account manager's Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- key-account
- reporting
capability:
exposes:
- type: mcp
namespace: kam-ops
port: 8080
tools:
- name: digest-key-account-health
description: "Given a Salesforce account ID and key account manager's Teams UPN, fetch open opportunities, last activity, and revenue metrics and post an account health digest."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the key consumer account."
- name: kam_teams_upn
in: body
type: string
description: "The Teams UPN of the key account manager."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{kam_teams_upn}}"
text: "Key Account Health: {{get-account.Name}} | Annual Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCases}} | Last Activity: {{get-account.LastActivityDate}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a new Salesforce account and contact for an onboarded distributor, then opens a ServiceNow onboarding task for the commercial operations team.
naftiko: "0.5"
info:
label: "Salesforce Distributor Onboarding"
description: "Creates a new Salesforce account and contact for an onboarded distributor, then opens a ServiceNow onboarding task for the commercial operations team."
tags:
- sales
- crm
- salesforce
- servicenow
- onboarding
- distributor
capability:
exposes:
- type: mcp
namespace: distributor-onboarding
port: 8080
tools:
- name: onboard-distributor
description: "Given distributor company name, primary contact, and region, create a Salesforce account and contact, then open a ServiceNow commercial onboarding task."
inputParameters:
- name: company_name
in: body
type: string
description: "The distributor's legal company name."
- name: contact_name
in: body
type: string
description: "The primary contact's full name at the distributor."
- name: contact_email
in: body
type: string
description: "The primary contact's email address."
- name: region
in: body
type: string
description: "The sales region for the distributor (e.g., 'NA', 'LATAM', 'EMEA')."
steps:
- name: create-account
type: call
call: salesforce.create-account
with:
name: "{{company_name}}"
type: "Distributor"
region: "{{region}}"
- name: create-contact
type: call
call: salesforce.create-contact
with:
account_id: "{{create-account.id}}"
name: "{{contact_name}}"
email: "{{contact_email}}"
- name: open-onboarding-task
type: call
call: servicenow.create-incident
with:
short_description: "Distributor onboarding: {{company_name}} — {{region}}"
category: "commercial_onboarding"
description: "Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}})."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- name: contacts
path: "/sobjects/Contact"
operations:
- name: create-contact
method: POST
- type: http
namespace: servicenow
baseUri: "https://pepsico.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
Syncs trade promotion opportunity data from Salesforce to the planning team's Power BI dataset for near-real-time revenue reporting.
naftiko: "0.5"
info:
label: "Salesforce Trade Promotion Opportunity Sync"
description: "Syncs trade promotion opportunity data from Salesforce to the planning team's Power BI dataset for near-real-time revenue reporting."
tags:
- sales
- crm
- salesforce
- power-bi
- reporting
- trade-promotion
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: sync-trade-promotion-data
description: "Query Salesforce for trade promotion opportunities updated in the past 24 hours and push the results to the Power BI dataset for revenue planning."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to push updated opportunity data into."
- name: table_name
in: body
type: string
description: "The Power BI table name within the dataset (e.g., 'TradeOpportunities')."
steps:
- name: query-opportunities
type: call
call: salesforce.query-records
with:
q: "SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE RecordType.Name = 'Trade Promotion' AND LastModifiedDate = LAST_N_DAYS:1"
- name: push-to-powerbi
type: call
call: powerbi.push-rows
with:
dataset_id: "{{dataset_id}}"
table_name: "{{table_name}}"
rows: "{{query-opportunities.records}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-records
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: rows
path: "/datasets/{{dataset_id}}/tables/{{table_name}}/rows"
inputParameters:
- name: dataset_id
in: path
- name: table_name
in: path
operations:
- name: push-rows
method: POST
Retrieves a pending SAP Ariba purchase requisition and submits it for approval, then notifies the requester via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Purchase Requisition Approval"
description: "Retrieves a pending SAP Ariba purchase requisition and submits it for approval, then notifies the requester via Microsoft Teams."
tags:
- procurement
- sap-ariba
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: approve-requisition
description: "Given an SAP Ariba requisition ID, fetch its details and submit the approval action, then notify the requester in Teams."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The SAP Ariba purchase requisition ID."
- name: approver_comment
in: body
type: string
description: "Optional comment to attach to the approval action."
- name: requester_teams_upn
in: body
type: string
description: "The Teams UPN of the requisition requester."
steps:
- name: get-requisition
type: call
call: ariba.get-requisition
with:
requisition_id: "{{requisition_id}}"
- name: submit-approval
type: call
call: ariba.approve-requisition
with:
requisition_id: "{{requisition_id}}"
comment: "{{approver_comment}}"
- name: notify-requester
type: call
call: msteams.send-message
with:
channel_id: "{{requester_teams_upn}}"
text: "Your requisition {{requisition_id}} ({{get-requisition.description}}, ${{get-requisition.total}}) has been approved. Ariba status: {{submit-approval.status}}."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/purchase-requisitions/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- name: approve-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Orchestrates new supplier onboarding by creating a vendor in SAP Ariba, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding Orchestrator"
description: "Orchestrates new supplier onboarding by creating a vendor in SAP Ariba, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams."
tags:
- procurement
- sap-ariba
- sharepoint
- microsoft-teams
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement-onboarding
port: 8080
tools:
- name: onboard-supplier
description: "Orchestrate supplier onboarding: create SAP Ariba vendor, set up SharePoint workspace, notify procurement."
inputParameters:
- name: vendor_name
in: body
type: string
description: "The supplier company name."
- name: vendor_country
in: body
type: string
description: "The supplier country code."
- name: category
in: body
type: string
description: "The procurement category."
steps:
- name: create-ariba-vendor
type: call
call: ariba.create-supplier
with:
name: "{{vendor_name}}"
country: "{{vendor_country}}"
category: "{{category}}"
- name: create-contract-workspace
type: call
call: sharepoint.create-folder
with:
site_id: "procurement"
folder_path: "Vendors/{{vendor_name}}"
- name: notify-procurement
type: call
call: msteams.send-message
with:
channel_id: "procurement-ops"
text: "New supplier onboarded: {{vendor_name}} ({{vendor_country}}). Ariba ID: {{create-ariba-vendor.supplier_id}}. Category: {{category}}. SharePoint workspace created."
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: create-supplier
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folders
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves batch details for a material from SAP, returning batch number, production date, shelf life expiry, and batch status for snack and beverage traceability.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Retrieves batch details for a material from SAP, returning batch number, production date, shelf life expiry, and batch status for snack and beverage traceability."
tags:
- manufacturing
- sap
- quality
- traceability
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: get-batch-details
description: "Look up batch traceability information in SAP. Returns production date, expiry date, and batch status."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: batch_number
in: body
type: string
description: "The SAP batch number."
call: sap.get-batch
with:
material_number: "{{material_number}}"
batch_number: "{{batch_number}}"
outputParameters:
- name: production_date
type: string
mapping: "$.d.MfgDate"
- name: expiry_date
type: string
mapping: "$.d.ShelfLifeExpirationDate"
- name: batch_status
type: string
mapping: "$.d.BatchStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/A_Batch(Material='{{material_number}}',Batch='{{batch_number}}')"
inputParameters:
- name: material_number
in: path
- name: batch_number
in: path
operations:
- name: get-batch
method: GET
Retrieves a SAP billing document by number, returning billing type, payer, net value, and billing date.
naftiko: "0.5"
info:
label: "SAP Billing Document Lookup"
description: "Retrieves a SAP billing document by number, returning billing type, payer, net value, and billing date."
tags:
- finance
- sap
- billing
capability:
exposes:
- type: mcp
namespace: billing
port: 8080
tools:
- name: get-billing-document
description: "Look up a SAP billing document. Returns billing type, payer, net value, and billing date."
inputParameters:
- name: billing_document
in: body
type: string
description: "The SAP billing document number."
call: sap.get-billing-doc
with:
billing_document: "{{billing_document}}"
outputParameters:
- name: billing_type
type: string
mapping: "$.d.BillingDocumentType"
- name: payer
type: string
mapping: "$.d.PayerParty"
- name: net_value
type: string
mapping: "$.d.TotalNetAmount"
- name: billing_date
type: string
mapping: "$.d.BillingDocumentDate"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: billing-documents
path: "/A_BillingDocument('{{billing_document}}')"
inputParameters:
- name: billing_document
in: path
operations:
- name: get-billing-doc
method: GET
Retrieves a pending SAP Concur expense report and approves it, notifying the submitter via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "Retrieves a pending SAP Concur expense report and approves it, notifying the submitter via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: approve-expense-report
description: "Given a SAP Concur expense report ID and approver comment, fetch the report, approve it, and notify the submitter via Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID to approve."
- name: approver_comment
in: body
type: string
description: "A comment to attach to the approval action."
steps:
- name: get-report
type: call
call: concur.get-report
with:
report_id: "{{report_id}}"
- name: approve-report
type: call
call: concur.approve-report
with:
report_id: "{{report_id}}"
comment: "{{approver_comment}}"
- name: notify-submitter
type: call
call: msteams.send-message
with:
channel_id: "{{get-report.submitter_email}}"
text: "Your expense report '{{get-report.name}}' (${{get-report.total}}) has been approved. SAP Concur status updated."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- name: approve-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a SAP outbound delivery document by delivery number, returning ship-to party, planned goods issue date, and delivery status.
naftiko: "0.5"
info:
label: "SAP Delivery Document Lookup"
description: "Retrieves a SAP outbound delivery document by delivery number, returning ship-to party, planned goods issue date, and delivery status."
tags:
- distribution
- sap
- logistics
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: get-delivery-document
description: "Look up a SAP outbound delivery by number. Returns ship-to party, goods issue date, and status."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
call: sap.get-delivery
with:
delivery_number: "{{delivery_number}}"
outputParameters:
- name: ship_to_party
type: string
mapping: "$.d.ShipToParty"
- name: planned_goods_issue_date
type: string
mapping: "$.d.PlannedGoodsIssueDate"
- name: delivery_status
type: string
mapping: "$.d.OverallSDProcessStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
Reconciles goods movements by pulling SAP data, validating against warehouse records, and creating discrepancy reports in ServiceNow.
naftiko: "0.5"
info:
label: "SAP Goods Movement Reconciliation"
description: "Reconciles goods movements by pulling SAP data, validating against warehouse records, and creating discrepancy reports in ServiceNow."
tags:
- supply-chain
- sap
- servicenow
- manufacturing
capability:
exposes:
- type: mcp
namespace: goods-movement
port: 8080
tools:
- name: reconcile-goods-movements
description: "Reconcile SAP goods movements: pull data, validate warehouse, log discrepancies."
inputParameters:
- name: plant_code
in: body
type: string
description: "The SAP plant code."
- name: movement_date
in: body
type: string
description: "The date in YYYY-MM-DD format."
steps:
- name: get-goods-movements
type: call
call: sap.get-goods-movements
with:
plant: "{{plant_code}}"
date: "{{movement_date}}"
- name: get-warehouse-records
type: call
call: sap.get-warehouse-inventory
with:
plant: "{{plant_code}}"
date: "{{movement_date}}"
- name: log-discrepancies
type: call
call: servicenow.create-incident
with:
short_description: "Goods movement discrepancy: {{plant_code}} on {{movement_date}}"
description: "Movements: {{get-goods-movements.count}}. Warehouse: {{get-warehouse-records.count}}."
category: "inventory_reconciliation"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: goods-movements
path: "/A_MaterialDocumentHeader?$filter=Plant eq '{{plant}}'"
inputParameters:
- name: plant
in: query
- name: date
in: query
operations:
- name: get-goods-movements
method: GET
- name: warehouse
path: "/WarehouseInventory(Plant='{{plant}}')"
inputParameters:
- name: plant
in: path
operations:
- name: get-warehouse-inventory
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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
Queries SAP HANA for real-time sales data by product group, returning total revenue, units sold, and top-selling SKU.
naftiko: "0.5"
info:
label: "SAP HANA Real-Time Sales Query"
description: "Queries SAP HANA for real-time sales data by product group, returning total revenue, units sold, and top-selling SKU."
tags:
- analytics
- sap-hana
- sales
capability:
exposes:
- type: mcp
namespace: real-time-analytics
port: 8080
tools:
- name: get-real-time-sales
description: "Query SAP HANA for real-time sales by product group. Returns total revenue, units sold, and top SKU."
inputParameters:
- name: product_group
in: body
type: string
description: "The product group code, e.g. SNACKS, BEVERAGES."
- name: date
in: body
type: string
description: "The date in YYYY-MM-DD format."
call: sap-hana.get-sales-summary
with:
product_group: "{{product_group}}"
date: "{{date}}"
outputParameters:
- name: total_revenue
type: string
mapping: "$.results[0].total_revenue"
- name: units_sold
type: string
mapping: "$.results[0].units_sold"
- name: top_sku
type: string
mapping: "$.results[0].top_sku"
consumes:
- type: http
namespace: sap-hana
baseUri: "https://pepsico-hana.sap.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_hana_token"
resources:
- name: sales-summary
path: "/sales/summary?product_group={{product_group}}&date={{date}}"
inputParameters:
- name: product_group
in: query
- name: date
in: query
operations:
- name: get-sales-summary
method: GET
Looks up a SAP vendor invoice by document number and returns its posting status, payment due date, and amount for accounts payable tracking.
naftiko: "0.5"
info:
label: "SAP Invoice Processing Status"
description: "Looks up a SAP vendor invoice by document number and returns its posting status, payment due date, and amount for accounts payable tracking."
tags:
- finance
- accounts-payable
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: ap-lookup
port: 8080
tools:
- name: get-invoice-status
description: "Given a SAP invoice document number and fiscal year, return the invoice posting status, payment due date, gross amount, and vendor."
inputParameters:
- name: document_number
in: body
type: string
description: "The SAP accounts payable document number."
- name: fiscal_year
in: body
type: string
description: "The fiscal year of the invoice document (e.g., '2025')."
call: sap.get-invoice
with:
document_number: "{{document_number}}"
fiscal_year: "{{fiscal_year}}"
outputParameters:
- name: posting_status
type: string
mapping: "$.d.PostingStatus"
- name: payment_due_date
type: string
mapping: "$.d.PaymentDueDate"
- name: gross_amount
type: string
mapping: "$.d.GrossAmount"
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice(DocumentNumber='{{document_number}}',FiscalYear='{{fiscal_year}}')"
inputParameters:
- name: document_number
in: path
- name: fiscal_year
in: path
operations:
- name: get-invoice
method: GET
Retrieves the current stock level for a material from SAP S/4HANA, returning plant, storage location, and available quantity.
naftiko: "0.5"
info:
label: "SAP Material Stock Level Check"
description: "Retrieves the current stock level for a material from SAP S/4HANA, returning plant, storage location, and available quantity."
tags:
- supply-chain
- sap
- inventory
capability:
exposes:
- type: mcp
namespace: inventory
port: 8080
tools:
- name: get-material-stock
description: "Look up current stock levels for a material in SAP S/4HANA. Returns plant, storage location, unrestricted stock, and unit of measure."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
call: sap.get-material-stock
with:
material_number: "{{material_number}}"
outputParameters:
- name: plant
type: string
mapping: "$.d.Plant"
- name: storage_location
type: string
mapping: "$.d.StorageLocation"
- name: available_stock
type: string
mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
- name: unit
type: string
mapping: "$.d.MaterialBaseUnit"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material-stock
method: GET
Checks the status of SAP financial period-end close activities and posts a completion summary to the finance leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Period-End Close Status Monitor"
description: "Checks the status of SAP financial period-end close activities and posts a completion summary to the finance leadership Microsoft Teams channel."
tags:
- finance
- period-close
- sap
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: monitor-period-close
description: "Given a fiscal period and company code, check the SAP period-end close task status and post a completion percentage digest to the finance Teams channel."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The SAP fiscal period to monitor (e.g., '006/2026' for June 2026)."
- name: company_code
in: body
type: string
description: "The SAP company code (e.g., 'US01' for PepsiCo US)."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the finance close status report."
steps:
- name: get-close-status
type: call
call: sap.get-close-tasks
with:
fiscal_period: "{{fiscal_period}}"
company_code: "{{company_code}}"
- name: post-status
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Period Close Status {{fiscal_period}} ({{company_code}}): {{get-close-status.completed}}/{{get-close-status.total}} tasks complete ({{get-close-status.completion_pct}}%). Open blockers: {{get-close-status.blockers}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/FCO_PI_CLOSE_COCKPIT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: close-tasks
path: "/ClosingTaskSet"
inputParameters:
- name: fiscal_period
in: query
- name: company_code
in: query
operations:
- name: get-close-tasks
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a SAP plant maintenance order by order number, returning equipment, functional location, priority, and system status.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Order Lookup"
description: "Retrieves a SAP plant maintenance order by order number, returning equipment, functional location, priority, and system status."
tags:
- manufacturing
- sap
- maintenance
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: get-maintenance-order
description: "Look up a SAP plant maintenance order. Returns equipment ID, functional location, priority, and status."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP maintenance order number."
call: sap.get-maintenance-order
with:
order_number: "{{order_number}}"
outputParameters:
- name: equipment
type: string
mapping: "$.d.Equipment"
- name: functional_location
type: string
mapping: "$.d.FunctionalLocation"
- name: priority
type: string
mapping: "$.d.MaintenanceOrderPriority"
- name: status
type: string
mapping: "$.d.MaintenanceOrderSystemStatus"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: maintenance-orders
path: "/MaintenanceOrder('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-maintenance-order
method: GET
Retrieves the status of a SAP production order including planned quantity, confirmed quantity, and system status for Frito-Lay and beverage manufacturing.
naftiko: "0.5"
info:
label: "SAP Production Order Status"
description: "Retrieves the status of a SAP production order including planned quantity, confirmed quantity, and system status for Frito-Lay and beverage manufacturing."
tags:
- manufacturing
- sap
- production
capability:
exposes:
- type: mcp
namespace: manufacturing
port: 8080
tools:
- name: get-production-order
description: "Look up a SAP production order by order number. Returns order type, status, planned quantity, and confirmed quantity."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: sap.get-production-order
with:
order_number: "{{order_number}}"
outputParameters:
- name: order_type
type: string
mapping: "$.d.ManufacturingOrderType"
- name: status
type: string
mapping: "$.d.SystemStatus"
- name: planned_qty
type: string
mapping: "$.d.MfgOrderPlannedTotalQty"
- name: confirmed_qty
type: string
mapping: "$.d.MfgOrderConfirmedYieldQty"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: production-orders
path: "/A_ProductionOrder_2('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-production-order
method: GET
Retrieves a SAP S/4HANA purchase order by PO number and returns header status, vendor, line items, and total value. Use when an agent needs to verify procurement status.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Retrieves a SAP S/4HANA purchase order by PO number and returns header status, vendor, line items, and total value. Use when an agent needs to verify procurement status."
tags:
- finance
- procurement
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: erp-lookup
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO header status, supplier name, total amount, currency, and open line item count."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (e.g., '4500012345')."
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_amount
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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 a SAP quality inspection lot by number, returning material, plant, inspection result, and usage decision.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Lot Lookup"
description: "Retrieves a SAP quality inspection lot by number, returning material, plant, inspection result, and usage decision."
tags:
- manufacturing
- sap
- quality
capability:
exposes:
- type: mcp
namespace: quality-management
port: 8080
tools:
- name: get-inspection-lot
description: "Look up a SAP quality inspection lot. Returns material, plant, inspection result, and usage decision."
inputParameters:
- name: inspection_lot
in: body
type: string
description: "The SAP inspection lot number."
call: sap.get-inspection-lot
with:
inspection_lot: "{{inspection_lot}}"
outputParameters:
- name: material
type: string
mapping: "$.d.Material"
- name: plant
type: string
mapping: "$.d.Plant"
- name: inspection_result
type: string
mapping: "$.d.InspectionResult"
- name: usage_decision
type: string
mapping: "$.d.UsageDecision"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: inspection-lots
path: "/A_InspectionLot('{{inspection_lot}}')"
inputParameters:
- name: inspection_lot
in: path
operations:
- name: get-inspection-lot
method: GET
Verifies a goods receipt posting in SAP S/4HANA for a given purchase order and returns the material document number and posting status.
naftiko: "0.5"
info:
label: "SAP S/4HANA Goods Receipt Verification"
description: "Verifies a goods receipt posting in SAP S/4HANA for a given purchase order and returns the material document number and posting status."
tags:
- supply-chain
- sap
- goods-receipt
- lookup
capability:
exposes:
- type: mcp
namespace: supply-chain-ops
port: 8080
tools:
- name: verify-goods-receipt
description: "Given a SAP purchase order number, query the materials management module for posted goods receipts and return the material document number and posting date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number to verify goods receipt against."
call: sap.get-goods-receipt
with:
po_number: "{{po_number}}"
outputParameters:
- name: material_document
type: string
mapping: "$.d.results[0].MaterialDocument"
- name: posting_date
type: string
mapping: "$.d.results[0].PostingDate"
- name: quantity
type: string
mapping: "$.d.results[0].QuantityInPurchaseOrderUnit"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-documents
path: "/A_MaterialDocumentItem"
inputParameters:
- name: po_number
in: query
operations:
- name: get-goods-receipt
method: GET
Retrieves vendor master data from SAP by vendor ID, returning company name, country, payment terms, and purchasing group.
naftiko: "0.5"
info:
label: "SAP Vendor Master Data Lookup"
description: "Retrieves vendor master data from SAP by vendor ID, returning company name, country, payment terms, and purchasing group."
tags:
- procurement
- sap
- vendor-management
capability:
exposes:
- type: mcp
namespace: vendor-management
port: 8080
tools:
- name: get-vendor
description: "Look up SAP vendor master data by vendor ID. Returns company name, country, payment terms."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
call: sap.get-vendor
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.BusinessPartnerFullName"
- name: country
type: string
mapping: "$.d.Country"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_BusinessPartner('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Synchronizes seasonal demand plans by pulling historical data from Snowflake, adjusting SAP MRP parameters, and notifying planners via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Demand Planning Sync"
description: "Synchronizes seasonal demand plans by pulling historical data from Snowflake, adjusting SAP MRP parameters, and notifying planners via Microsoft Teams."
tags:
- supply-chain
- manufacturing
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: seasonal-planning
port: 8080
tools:
- name: sync-seasonal-demand
description: "Sync seasonal demand: pull Snowflake history, adjust SAP MRP, notify planners."
inputParameters:
- name: product_group
in: body
type: string
description: "The product group."
- name: season
in: body
type: string
description: "The season: spring, summer, fall, winter."
steps:
- name: get-historical-sales
type: call
call: snowflake.get-seasonal-sales
with:
product_group: "{{product_group}}"
season: "{{season}}"
- name: update-mrp-parameters
type: call
call: sap.update-mrp-forecast
with:
product_group: "{{product_group}}"
forecast_quantity: "{{get-historical-sales.projected_demand}}"
- name: notify-planners
type: call
call: msteams.send-message
with:
channel_id: "demand-planning"
text: "Seasonal demand for {{product_group}} ({{season}}): Avg: {{get-historical-sales.avg_volume}}. Projected: {{get-historical-sales.projected_demand}}. MRP updated."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pepsico.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: seasonal-sales
path: "/statements"
operations:
- name: get-seasonal-sales
method: POST
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MRP_FORECAST_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: mrp-forecast
path: "/MRPForecast"
operations:
- name: update-mrp-forecast
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Submits a ServiceNow change request for a planned infrastructure or application change and notifies the change advisory board via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Request"
description: "Submits a ServiceNow change request for a planned infrastructure or application change and notifies the change advisory board via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: change-ops
port: 8080
tools:
- name: submit-change-request
description: "Given a change description, affected system, planned start, and CAB Teams channel, create a ServiceNow change request and notify the change advisory board in Teams."
inputParameters:
- name: change_description
in: body
type: string
description: "Description of the change including scope, justification, and rollback plan."
- name: affected_system
in: body
type: string
description: "The PepsiCo system or service being changed."
- name: planned_start
in: body
type: string
description: "Planned change start datetime in ISO 8601 format."
- name: cab_channel_id
in: body
type: string
description: "Teams channel ID for the change advisory board notification."
steps:
- name: create-change
type: call
call: servicenow.create-change
with:
short_description: "Change: {{affected_system}} — {{change_description}}"
planned_start: "{{planned_start}}"
category: "application"
- name: notify-cab
type: call
call: msteams.send-message
with:
channel_id: "{{cab_channel_id}}"
text: "Change Request Submitted: {{affected_system}} | CHG: {{create-change.number}} | Planned: {{planned_start}} | Scope: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current status of a ServiceNow incident by incident number, returning state, priority, assigned group, and resolution notes.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current status of a ServiceNow incident by incident number, returning state, priority, assigned group, and resolution notes."
tags:
- it-operations
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-status
description: "Look up a ServiceNow incident by number. Returns current state, priority, assignment group, and short description."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assignment_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves metadata for a document from a SharePoint document library, returning file name, modified date, modified by, and file size.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves metadata for a document from a SharePoint document library, returning file name, modified date, modified by, and file size."
tags:
- collaboration
- sharepoint
- document-management
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: get-document-metadata
description: "Retrieve document metadata from SharePoint. Returns file name, last modified date, modified by, and file size."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_path
in: body
type: string
description: "The path to the file."
call: sharepoint.get-file
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: modified_date
type: string
mapping: "$.lastModifiedDateTime"
- name: modified_by
type: string
mapping: "$.lastModifiedBy.user.displayName"
- name: file_size
type: string
mapping: "$.size"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Orchestrates a snack brand campaign launch by creating the campaign in Salesforce, configuring Google Analytics tracking, and posting the announcement to Microsoft Teams.
naftiko: "0.5"
info:
label: "Snack Brand Marketing Campaign Launch"
description: "Orchestrates a snack brand campaign launch by creating the campaign in Salesforce, configuring Google Analytics tracking, and posting the announcement to Microsoft Teams."
tags:
- marketing
- brand-management
- salesforce
- google-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: launch-snack-campaign
description: "Orchestrate snack brand campaign launch across Salesforce, Google Analytics, and Teams."
inputParameters:
- name: campaign_name
in: body
type: string
description: "The campaign name."
- name: brand
in: body
type: string
description: "The PepsiCo snack brand, e.g. Lay's, Doritos, Cheetos."
- name: start_date
in: body
type: string
description: "Campaign start date in YYYY-MM-DD format."
- name: budget
in: body
type: string
description: "Campaign budget in USD."
steps:
- name: create-sf-campaign
type: call
call: salesforce.create-campaign
with:
name: "{{campaign_name}}"
brand: "{{brand}}"
start_date: "{{start_date}}"
budgeted_cost: "{{budget}}"
- name: setup-ga-tracking
type: call
call: ga.create-custom-dimension
with:
campaign_id: "{{create-sf-campaign.id}}"
campaign_name: "{{campaign_name}}"
- name: announce-launch
type: call
call: msteams.send-message
with:
channel_id: "snack-marketing"
text: "New campaign launched: {{campaign_name}} for {{brand}}. Salesforce ID: {{create-sf-campaign.id}}. Budget: ${{budget}}. Start: {{start_date}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: ga
baseUri: "https://analyticsadmin.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: custom-dimensions
path: "/properties/pepsico/customDimensions"
operations:
- name: create-custom-dimension
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Schedules snack production by checking raw material availability in SAP, creating production orders, and notifying the Frito-Lay plant via Microsoft Teams.
naftiko: "0.5"
info:
label: "Snack Production Scheduling"
description: "Schedules snack production by checking raw material availability in SAP, creating production orders, and notifying the Frito-Lay plant via Microsoft Teams."
tags:
- manufacturing
- supply-chain
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: production-scheduling
port: 8080
tools:
- name: schedule-snack-production
description: "Schedule snack production: check SAP materials, create order, notify plant."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: plant_code
in: body
type: string
description: "The Frito-Lay plant code."
- name: quantity
in: body
type: string
description: "Quantity to produce."
- name: production_date
in: body
type: string
description: "Target date."
steps:
- name: check-materials
type: call
call: sap.check-material-availability
with:
material_number: "{{material_number}}"
plant: "{{plant_code}}"
quantity: "{{quantity}}"
- name: create-order
type: call
call: sap.create-production-order
with:
material_number: "{{material_number}}"
plant: "{{plant_code}}"
quantity: "{{quantity}}"
start_date: "{{production_date}}"
- name: notify-plant
type: call
call: msteams.send-message
with:
channel_id: "fritolay-plant-{{plant_code}}"
text: "Production scheduled: {{material_number}}. Qty: {{quantity}}. Date: {{production_date}}. Order: {{create-order.order_number}}. Material status: {{check-materials.availability_status}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: availability
path: "/MaterialAvailability(Material='{{material_number}}',Plant='{{plant}}')"
inputParameters:
- name: material_number
in: path
- name: plant
in: path
operations:
- name: check-material-availability
method: GET
- name: production-orders
path: "/A_ProductionOrder_2"
operations:
- name: create-production-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages snack seasoning formulation changes by updating the SAP recipe master, creating a change request in ServiceNow, and notifying R&D and manufacturing via Microsoft Teams.
naftiko: "0.5"
info:
label: "Snack Seasoning Formulation Change"
description: "Manages snack seasoning formulation changes by updating the SAP recipe master, creating a change request in ServiceNow, and notifying R&D and manufacturing via Microsoft Teams."
tags:
- manufacturing
- brand-management
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: formulation
port: 8080
tools:
- name: manage-formulation-change
description: "Manage seasoning formulation change: update SAP recipe, create ServiceNow change request, notify teams."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number for the seasoning."
- name: change_description
in: body
type: string
description: "Description of the formulation change."
- name: effective_date
in: body
type: string
description: "Effective date in YYYY-MM-DD format."
steps:
- name: get-current-recipe
type: call
call: sap.get-recipe-master
with:
material_number: "{{material_number}}"
- name: create-change-request
type: call
call: servicenow.create-change-request
with:
short_description: "Seasoning formulation change: {{material_number}}"
description: "{{change_description}}. Current: {{get-current-recipe.description}}. Effective: {{effective_date}}."
category: "formulation_change"
assignment_group: "RnD_Formulation"
- name: notify-stakeholders
type: call
call: msteams.send-message
with:
channel_id: "rd-formulation"
text: "Formulation Change: Material {{material_number}}. Change: {{change_description}}. Effective: {{effective_date}}. CR: {{create-change-request.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/RecipeMaster('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-recipe-master
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the status of a Snowflake data pipeline task, returning execution state, rows processed, and error messages.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Status"
description: "Checks the status of a Snowflake data pipeline task, returning execution state, rows processed, and error messages."
tags:
- analytics
- snowflake
- data-pipeline
capability:
exposes:
- type: mcp
namespace: data-platform
port: 8080
tools:
- name: get-pipeline-status
description: "Check Snowflake data pipeline task status. Returns execution state, rows loaded, and any error messages."
inputParameters:
- name: task_name
in: body
type: string
description: "The Snowflake task name."
call: snowflake.get-task-status
with:
task_name: "{{task_name}}"
outputParameters:
- name: state
type: string
mapping: "$.data[0].state"
- name: rows_loaded
type: string
mapping: "$.data[0].rows_loaded"
- name: error_message
type: string
mapping: "$.data[0].error_message"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pepsico.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: tasks
path: "/statements"
operations:
- name: get-task-status
method: POST
Monitors Snowflake sales analytics pipelines, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.
naftiko: "0.5"
info:
label: "Snowflake Sales Analytics Pipeline Monitor"
description: "Monitors Snowflake sales analytics pipelines, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected."
tags:
- analytics
- snowflake
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-sales-pipeline
description: "Monitor Snowflake sales pipeline: check status, verify Datadog metrics, create ServiceNow incident on failure."
inputParameters:
- name: task_name
in: body
type: string
description: "The Snowflake task name."
steps:
- name: get-task-status
type: call
call: snowflake.get-task-status
with:
task_name: "{{task_name}}"
- name: check-datadog-metrics
type: call
call: datadog.get-pipeline-metrics
with:
pipeline_name: "{{task_name}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Sales pipeline alert: {{task_name}}"
description: "State: {{get-task-status.state}}. Rows loaded: {{get-task-status.rows_loaded}}. Error: {{get-task-status.error_message}}."
category: "data_pipeline"
assignment_group: "Data_Engineering"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pepsico.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: tasks
path: "/statements"
operations:
- name: get-task-status
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
header: "DD-API-KEY"
value: "$secrets.datadog_api_key"
resources:
- name: pipeline-metrics
path: "/metrics/query?query=pipeline:{{pipeline_name}}"
inputParameters:
- name: pipeline_name
in: query
operations:
- name: get-pipeline-metrics
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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
Monitors brand sentiment by pulling social data from HubSpot, cross-referencing Google Analytics traffic, and alerting brand management via Microsoft Teams.
naftiko: "0.5"
info:
label: "Social Media Sentiment Alert"
description: "Monitors brand sentiment by pulling social data from HubSpot, cross-referencing Google Analytics traffic, and alerting brand management via Microsoft Teams."
tags:
- marketing
- brand-management
- hubspot
- google-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: check-brand-sentiment
description: "Check brand sentiment: pull HubSpot social data, cross-reference GA, alert brand team."
inputParameters:
- name: brand_name
in: body
type: string
description: "The brand, e.g. Lay's, Pepsi, Gatorade."
- name: date_range
in: body
type: string
description: "Date range."
steps:
- name: get-social-sentiment
type: call
call: hubspot.get-social-mentions
with:
brand: "{{brand_name}}"
date_range: "{{date_range}}"
- name: get-web-traffic
type: call
call: ga.get-brand-traffic
with:
brand_segment: "{{brand_name}}"
date_range: "{{date_range}}"
- name: alert-brand-team
type: call
call: msteams.send-message
with:
channel_id: "brand-{{brand_name}}"
text: "Sentiment for {{brand_name}}: Mentions: {{get-social-sentiment.mention_count}}. Score: {{get-social-sentiment.sentiment_score}}. Traffic: {{get-web-traffic.page_views}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: social-mentions
path: "/objects/social_mentions/search"
operations:
- name: get-social-mentions
method: POST
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/reports:batchGet"
operations:
- name: get-brand-traffic
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries SAP S/4HANA for materials below their reorder point and posts a restocking alert digest to the supply chain operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Supply Chain Inventory Alert"
description: "Queries SAP S/4HANA for materials below their reorder point and posts a restocking alert digest to the supply chain operations Microsoft Teams channel."
tags:
- supply-chain
- sap
- inventory
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: supply-chain-reporting
port: 8080
tools:
- name: alert-low-inventory
description: "Query SAP for materials at or below their safety stock level within a given plant and post a restocking digest to the supply chain Teams channel."
inputParameters:
- name: plant_code
in: body
type: string
description: "The SAP plant code to check inventory levels for (e.g., '1000')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the supply chain alert."
steps:
- name: get-low-stock
type: call
call: sap.get-low-stock-materials
with:
plant: "{{plant_code}}"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Inventory Alert — Plant {{plant_code}}: {{get-low-stock.count}} materials below safety stock. Critical items: {{get-low-stock.critical_materials}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod"
inputParameters:
- name: plant
in: query
operations:
- name: get-low-stock-materials
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a shipment delay is detected, retrieves delivery details from SAP, updates the Salesforce opportunity, and escalates to the logistics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supply Chain Shipment Delay Escalation"
description: "When a shipment delay is detected, retrieves delivery details from SAP, updates the Salesforce opportunity, and escalates to the logistics team via Microsoft Teams."
tags:
- supply-chain
- sap
- salesforce
- microsoft-teams
- distribution
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: escalate-shipment-delay
description: "Orchestrate shipment delay escalation: pull SAP delivery, update Salesforce, notify logistics team."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number."
- name: opportunity_id
in: body
type: string
description: "The related Salesforce opportunity ID."
steps:
- name: get-delivery
type: call
call: sap.get-delivery
with:
delivery_number: "{{delivery_number}}"
- name: update-opportunity
type: call
call: salesforce.update-opportunity
with:
opportunity_id: "{{opportunity_id}}"
delivery_status: "Delayed"
notes: "Shipment {{delivery_number}} delayed. Original GI date: {{get-delivery.planned_goods_issue_date}}"
- name: notify-logistics
type: call
call: msteams.send-message
with:
channel_id: "logistics-alerts"
text: "Shipment delay: Delivery {{delivery_number}} to {{get-delivery.ship_to_party}} delayed. Salesforce opportunity {{opportunity_id}} updated."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-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: "/A_OutbDeliveryHeader('{{delivery_number}}')"
inputParameters:
- name: delivery_number
in: path
operations:
- name: get-delivery
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.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: update-opportunity
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Aggregates sustainability metrics from SAP plant data, publishes a consolidated ESG report to SharePoint, and notifies the sustainability team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Sustainability Reporting Aggregator"
description: "Aggregates sustainability metrics from SAP plant data, publishes a consolidated ESG report to SharePoint, and notifies the sustainability team via Microsoft Teams."
tags:
- manufacturing
- sap
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sustainability
port: 8080
tools:
- name: aggregate-sustainability-report
description: "Aggregate sustainability data from SAP, publish to SharePoint, and notify team."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: reporting_period
in: body
type: string
description: "The reporting period, e.g. 2026-Q1."
steps:
- name: get-energy-data
type: call
call: sap.get-plant-energy-consumption
with:
plant: "{{plant_code}}"
period: "{{reporting_period}}"
- name: get-water-usage
type: call
call: sap.get-plant-water-usage
with:
plant: "{{plant_code}}"
period: "{{reporting_period}}"
- name: upload-report
type: call
call: sharepoint.upload-file
with:
site_id: "sustainability"
folder_path: "Reports/{{reporting_period}}"
file_name: "plant-{{plant_code}}-sustainability.json"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Sustainability report for plant {{plant_code}} ({{reporting_period}}): Energy: {{get-energy-data.total_kwh}} kWh. Water: {{get-water-usage.total_liters}} liters."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: energy
path: "/PlantEnergyConsumption(Plant='{{plant}}',Period='{{period}}')"
inputParameters:
- name: plant
in: path
- name: period
in: path
operations:
- name: get-plant-energy-consumption
method: GET
- name: water
path: "/PlantWaterUsage(Plant='{{plant}}',Period='{{period}}')"
inputParameters:
- name: plant
in: path
- name: period
in: path
operations:
- name: get-plant-water-usage
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Calculates trade promotion ROI by pulling spend from SAP, incremental sales from Circana, and posting analysis to Salesforce and Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Promotion ROI Calculator"
description: "Calculates trade promotion ROI by pulling spend from SAP, incremental sales from Circana, and posting analysis to Salesforce and Microsoft Teams."
tags:
- marketing
- finance
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-promotion-roi
port: 8080
tools:
- name: calculate-promotion-roi
description: "Calculate trade promotion ROI: pull SAP spend, Circana lift, post to Salesforce and Teams."
inputParameters:
- name: promotion_id
in: body
type: string
description: "The Salesforce promotion record ID."
- name: cost_center
in: body
type: string
description: "The SAP cost center."
steps:
- name: get-promotion-spend
type: call
call: sap.get-cost-center-actuals
with:
cost_center: "{{cost_center}}"
- name: get-sales-lift
type: call
call: circana.get-promotion-lift
with:
promotion_id: "{{promotion_id}}"
- name: update-sf-promotion
type: call
call: salesforce.update-promotion
with:
promotion_id: "{{promotion_id}}"
total_spend: "{{get-promotion-spend.total_actual}}"
roi_percentage: "{{get-sales-lift.roi}}"
- name: post-roi-report
type: call
call: msteams.send-message
with:
channel_id: "trade-marketing"
text: "Promotion ROI: {{promotion_id}}. Spend: ${{get-promotion-spend.total_actual}}. ROI: {{get-sales-lift.roi}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenter('{{cost_center}}')/to_Actuals"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center-actuals
method: GET
- type: http
namespace: circana
baseUri: "https://api.circana.com/v2"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: promotion-lift
path: "/promotions/{{promotion_id}}/lift"
inputParameters:
- name: promotion_id
in: path
operations:
- name: get-promotion-lift
method: GET
- type: http
namespace: salesforce
baseUri: "https://pepsico.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: promotions
path: "/sobjects/Promotion__c/{{promotion_id}}"
inputParameters:
- name: promotion_id
in: path
operations:
- name: update-promotion
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors weather impacts on Tropicana orange supply by checking SAP inventory levels, assessing supplier risk, and alerting supply chain planners via Microsoft Teams.
naftiko: "0.5"
info:
label: "Tropicana Supply Chain Weather Alert"
description: "Monitors weather impacts on Tropicana orange supply by checking SAP inventory levels, assessing supplier risk, and alerting supply chain planners via Microsoft Teams."
tags:
- supply-chain
- manufacturing
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: weather-risk
port: 8080
tools:
- name: assess-weather-impact
description: "Assess weather impact on Tropicana supply: check SAP inventory, assess risk, alert planners."
inputParameters:
- name: region
in: body
type: string
description: "The growing region, e.g. Florida, Brazil."
- name: severity
in: body
type: string
description: "Weather event severity: low, medium, high."
steps:
- name: check-citrus-inventory
type: call
call: sap.get-material-stock
with:
material_number: "CITRUS-CONCENTRATE"
plant: "TROPICANA-MAIN"
- name: create-risk-assessment
type: call
call: servicenow.create-task
with:
short_description: "Weather risk: {{region}} - {{severity}}"
description: "Current citrus concentrate stock: {{check-citrus-inventory.available_stock}} {{check-citrus-inventory.unit}}. Weather severity: {{severity}}."
category: "supply_chain_risk"
assignment_group: "Tropicana_Supply_Chain"
- name: alert-planners
type: call
call: msteams.send-message
with:
channel_id: "tropicana-supply"
text: "WEATHER ALERT: {{region}} ({{severity}}). Citrus stock: {{check-citrus-inventory.available_stock}} {{check-citrus-inventory.unit}}. Risk assessment: {{create-risk-assessment.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')"
inputParameters:
- name: material_number
in: path
- name: plant
in: path
operations:
- name: get-material-stock
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Reconciles vendor payments by pulling invoice data from SAP, matching against Concur expense records, and logging discrepancies in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Payment Reconciliation"
description: "Reconciles vendor payments by pulling invoice data from SAP, matching against Concur expense records, and logging discrepancies in ServiceNow."
tags:
- finance
- sap
- sap-concur
- servicenow
- procurement
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: reconcile-vendor-payment
description: "Reconcile vendor payments across SAP invoices, Concur expenses, and ServiceNow."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
steps:
- name: get-sap-invoice
type: call
call: sap.get-invoice
with:
invoice_number: "{{invoice_number}}"
- name: get-concur-expense
type: call
call: concur.get-expense-report
with:
vendor_id: "{{vendor_id}}"
invoice_reference: "{{invoice_number}}"
- name: log-discrepancy
type: call
call: servicenow.create-incident
with:
short_description: "Payment reconciliation: Vendor {{vendor_id}} Invoice {{invoice_number}}"
description: "SAP amount: {{get-sap-invoice.total_amount}}. Concur expense: {{get-concur-expense.total_amount}}."
category: "finance_reconciliation"
assignment_group: "Accounts_Payable"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports?vendorId={{vendor_id}}&invoiceRef={{invoice_reference}}"
inputParameters:
- name: vendor_id
in: query
- name: invoice_reference
in: query
operations:
- name: get-expense-report
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.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
Rebalances warehouse inventory by checking stock levels across plants in SAP, creating stock transfer orders, and logging the rebalance in ServiceNow.
naftiko: "0.5"
info:
label: "Warehouse Inventory Rebalance"
description: "Rebalances warehouse inventory by checking stock levels across plants in SAP, creating stock transfer orders, and logging the rebalance in ServiceNow."
tags:
- supply-chain
- distribution
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: warehouse-ops
port: 8080
tools:
- name: rebalance-inventory
description: "Orchestrate inventory rebalance: check multi-plant stock, create transfer orders, log in ServiceNow."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: source_plant
in: body
type: string
description: "Source plant code."
- name: target_plant
in: body
type: string
description: "Target plant code."
- name: quantity
in: body
type: string
description: "Quantity to transfer."
steps:
- name: check-source-stock
type: call
call: sap.get-material-stock
with:
material_number: "{{material_number}}"
plant: "{{source_plant}}"
- name: create-transfer-order
type: call
call: sap.create-stock-transfer
with:
material_number: "{{material_number}}"
source_plant: "{{source_plant}}"
target_plant: "{{target_plant}}"
quantity: "{{quantity}}"
- name: log-rebalance
type: call
call: servicenow.create-incident
with:
short_description: "Inventory rebalance: {{material_number}} from {{source_plant}} to {{target_plant}}"
description: "Transferred {{quantity}} units. Transfer order: {{create-transfer-order.transfer_order_number}}"
category: "warehouse_operations"
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: material-stock
path: "/A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')"
inputParameters:
- name: material_number
in: path
- name: plant
in: path
operations:
- name: get-material-stock
method: GET
- name: stock-transfers
path: "/A_StockTransferOrder"
operations:
- name: create-stock-transfer
method: POST
- type: http
namespace: servicenow
baseUri: "https://pepsico.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
Monitors plant water usage compliance by pulling SAP consumption data, comparing against limits, and alerting via Microsoft Teams and ServiceNow.
naftiko: "0.5"
info:
label: "Water Usage Compliance Monitor"
description: "Monitors plant water usage compliance by pulling SAP consumption data, comparing against limits, and alerting via Microsoft Teams and ServiceNow."
tags:
- manufacturing
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: environmental
port: 8080
tools:
- name: monitor-water-compliance
description: "Monitor water compliance: pull SAP data, compare limits, alert team."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code."
- name: period
in: body
type: string
description: "The monitoring period."
steps:
- name: get-water-usage
type: call
call: sap.get-plant-water-usage
with:
plant: "{{plant_code}}"
period: "{{period}}"
- name: create-compliance-record
type: call
call: servicenow.create-task
with:
short_description: "Water compliance: Plant {{plant_code}} - {{period}}"
description: "Usage: {{get-water-usage.total_liters}}L. Limit: {{get-water-usage.permit_limit}}L."
category: "environmental_compliance"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "environmental"
text: "Water Usage: Plant {{plant_code}} ({{period}}). Usage: {{get-water-usage.total_liters}}L. Permit: {{get-water-usage.permit_limit}}L."
consumes:
- type: http
namespace: sap
baseUri: "https://pepsico-s4.sap.com/sap/opu/odata/sap/API_PLANT_METRICS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: water
path: "/PlantWaterUsage(Plant='{{plant}}',Period='{{period}}')"
inputParameters:
- name: plant
in: path
- name: period
in: path
operations:
- name: get-plant-water-usage
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the compensation band and pay grade for a given job profile from Workday for use in offer letter generation and budget planning.
naftiko: "0.5"
info:
label: "Workday Compensation Band Lookup"
description: "Retrieves the compensation band and pay grade for a given job profile from Workday for use in offer letter generation and budget planning."
tags:
- hr
- compensation
- workday
- lookup
capability:
exposes:
- type: mcp
namespace: hr-comp
port: 8080
tools:
- name: get-compensation-band
description: "Given a Workday job profile ID, return the compensation grade, pay range minimum and maximum, and currency for use in offer generation or headcount budgeting."
inputParameters:
- name: job_profile_id
in: body
type: string
description: "The Workday job profile ID to retrieve compensation data for."
call: workday.get-comp-grade
with:
job_profile_id: "{{job_profile_id}}"
outputParameters:
- name: grade
type: string
mapping: "$.compensationGrade.descriptor"
- name: pay_min
type: string
mapping: "$.compensationGradeProfile.minimumSalary"
- name: pay_max
type: string
mapping: "$.compensationGradeProfile.maximumSalary"
- name: currency
type: string
mapping: "$.compensationGradeProfile.currency"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation-grades
path: "/pepsico/compensationGrades/{{job_profile_id}}"
inputParameters:
- name: job_profile_id
in: path
operations:
- name: get-comp-grade
method: GET
Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager information."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee-profile
description: "Look up a PepsiCo employee profile in Workday. Returns full name, department, job title, and manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.descriptor"
- name: department
type: string
mapping: "$.worker.primaryPosition.department"
- name: job_title
type: string
mapping: "$.worker.primaryPosition.jobTitle"
- name: manager
type: string
mapping: "$.worker.primaryPosition.manager.descriptor"
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: "/pepsico/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Exports current active headcount from Workday grouped by business unit and cost center, then posts a summary to the HR Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot by Business Unit"
description: "Exports current active headcount from Workday grouped by business unit and cost center, then posts a summary to the HR Microsoft Teams channel."
tags:
- hr
- workforce-planning
- workday
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Retrieve current active headcount from Workday by business unit and post a formatted summary to the HR leadership Teams channel."
inputParameters:
- name: as_of_date
in: body
type: string
description: "The snapshot date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the HR summary."
steps:
- name: export-headcount
type: call
call: workday.list-workers
with:
status: "active"
as_of_date: "{{as_of_date}}"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "PepsiCo Headcount as of {{as_of_date}}: {{export-headcount.total}} active employees across {{export-headcount.bu_count}} business units."
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: "/pepsico/workers"
inputParameters:
- name: status
in: query
- name: as_of_date
in: query
operations:
- name: list-workers
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Initiates a performance review cycle in Workday for a given business unit and notifies all managers via Microsoft Teams to complete their reviews.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Trigger"
description: "Initiates a performance review cycle in Workday for a given business unit and notifies all managers via Microsoft Teams to complete their reviews."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: trigger-review-cycle
description: "Given a business unit code and review period, initiate a Workday performance review cycle and send a Teams notification to all managers in the BU to begin employee reviews."
inputParameters:
- name: business_unit
in: body
type: string
description: "The PepsiCo business unit code for the review cycle (e.g., 'PBNA', 'FLNA')."
- name: review_period
in: body
type: string
description: "The performance review period label (e.g., 'Q2-2026', 'Annual-2025')."
- name: due_date
in: body
type: string
description: "The review completion deadline in YYYY-MM-DD format."
- name: manager_channel_id
in: body
type: string
description: "Teams channel ID for the manager notification."
steps:
- name: initiate-review
type: call
call: workday.create-review-cycle
with:
business_unit: "{{business_unit}}"
review_period: "{{review_period}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "{{manager_channel_id}}"
text: "Performance review cycle '{{review_period}}' has been initiated for {{business_unit}}. Please complete all reviews by {{due_date}}. Workday cycle ID: {{initiate-review.cycle_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: review-cycles
path: "/pepsico/performanceReviews"
operations:
- name: create-review-cycle
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks workforce training compliance by pulling Workday training records, verifying certifications, and creating non-compliance tasks in ServiceNow.
naftiko: "0.5"
info:
label: "Workforce Training Compliance Check"
description: "Checks workforce training compliance by pulling Workday training records, verifying certifications, and creating non-compliance tasks in ServiceNow."
tags:
- hr
- manufacturing
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: training-compliance
port: 8080
tools:
- name: check-training-compliance
description: "Check training compliance: pull Workday records, verify certifications, create ServiceNow tasks."
inputParameters:
- name: department
in: body
type: string
description: "The department to check."
- name: plant_code
in: body
type: string
description: "The plant code."
steps:
- name: get-training-records
type: call
call: workday.get-training-records
with:
department: "{{department}}"
location: "{{plant_code}}"
- name: create-compliance-tasks
type: call
call: servicenow.create-task
with:
short_description: "Training compliance gap: {{department}} at {{plant_code}}"
description: "Overdue: {{get-training-records.overdue_count}}. Expiring: {{get-training-records.expiring_count}}."
category: "training_compliance"
assignment_group: "HR_Training"
- name: notify-hr
type: call
call: msteams.send-message
with:
channel_id: "hr-compliance"
text: "Training Compliance: {{department}} at {{plant_code}}. Total: {{get-training-records.total_employees}}. Compliant: {{get-training-records.compliant_count}}. Overdue: {{get-training-records.overdue_count}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/pepsico/training/records?department={{department}}&location={{location}}"
inputParameters:
- name: department
in: query
- name: location
in: query
operations:
- name: get-training-records
method: GET
- type: http
namespace: servicenow
baseUri: "https://pepsico.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST