Coca-Cola Capabilities
Naftiko 0.5 capability definitions for Coca-Cola - 100 capabilities showing integration workflows and service orchestrations.
Monitors accounts receivable aging by pulling AR data from SAP, matching with Salesforce customer 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 customer 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, and alert collections team."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: aging_bucket
in: body
type: string
description: "The aging bucket to check: 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}}. Customer count: {{get-ar-aging.customer_count}}. Top overdue: {{get-ar-aging.top_customer}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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
Retrieves brand-level web analytics from Adobe Analytics, including page views, unique visitors, and average session duration.
naftiko: "0.5"
info:
label: "Adobe Analytics Brand Performance"
description: "Retrieves brand-level web analytics from Adobe Analytics, including page views, unique visitors, and average session duration."
tags:
- marketing
- adobe-analytics
- brand-management
capability:
exposes:
- type: mcp
namespace: brand-analytics
port: 8080
tools:
- name: get-brand-performance
description: "Fetch brand web performance metrics from Adobe Analytics. Returns page views, unique visitors, and average session duration."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "The Adobe Analytics report suite ID."
- name: brand_segment
in: body
type: string
description: "The brand segment filter, e.g. coca-cola-classic."
call: adobe.get-report
with:
report_suite_id: "{{report_suite_id}}"
brand_segment: "{{brand_segment}}"
outputParameters:
- name: page_views
type: string
mapping: "$.reportData.totals[0]"
- name: unique_visitors
type: string
mapping: "$.reportData.totals[1]"
- name: avg_session_duration
type: string
mapping: "$.reportData.totals[2]"
consumes:
- type: http
namespace: adobe
baseUri: "https://analytics.adobe.io/api/cocacola"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/reports"
operations:
- name: get-report
method: POST
Monitors Azure Databricks ETL pipeline runs, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected.
naftiko: "0.5"
info:
label: "Azure Databricks ETL Pipeline Monitor"
description: "Monitors Azure Databricks ETL pipeline runs, checks for failures in Datadog, and creates a ServiceNow incident if errors are detected."
tags:
- analytics
- azure-databricks
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-etl-pipeline
description: "Monitor Databricks ETL pipeline: check run status, verify Datadog metrics, and create ServiceNow incident on failure."
inputParameters:
- name: run_id
in: body
type: string
description: "The Databricks job run ID."
steps:
- name: get-run-status
type: call
call: databricks.get-run
with:
run_id: "{{run_id}}"
- name: check-datadog-metrics
type: call
call: datadog.get-pipeline-metrics
with:
pipeline_name: "{{get-run-status.job_name}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "ETL pipeline alert: {{get-run-status.job_name}} run {{run_id}}"
description: "Run status: {{get-run-status.state}}. Error rate: {{check-datadog-metrics.error_rate}}."
category: "data_pipeline"
assignment_group: "Data_Engineering"
consumes:
- type: http
namespace: databricks
baseUri: "https://adb-cocacola.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: runs
path: "/jobs/runs/get?run_id={{run_id}}"
inputParameters:
- name: run_id
in: query
operations:
- name: get-run
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: 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://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Retrieves the latest build status for a specified Azure DevOps pipeline, returning build result, duration, and triggered by.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status for a specified Azure DevOps pipeline, returning build result, duration, and triggered by."
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, duration, 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: duration
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/coca-cola"
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
When a bottling 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: "Bottling Line Downtime Response"
description: "When a bottling 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-bottling-downtime
description: "Orchestrate bottling line downtime response: check SAP equipment status, create ServiceNow ticket, and notify plant ops via Teams."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The SAP equipment ID for the bottling line."
- name: plant_code
in: body
type: string
description: "The plant code where the downtime occurred."
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: "Bottling line downtime: {{equipment_id}} at plant {{plant_code}}"
category: "plant_maintenance"
urgency: "1"
assignment_group: "Plant_Maintenance_{{plant_code}}"
- name: notify-plant-ops
type: call
call: msteams.send-message
with:
channel_id: "plant-ops-{{plant_code}}"
text: "ALERT: Bottling line {{equipment_id}} is down at plant {{plant_code}}. Equipment status: {{get-equipment-status.system_status}}. Maintenance ticket: {{create-maintenance-ticket.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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
Orchestrates a marketing campaign launch by creating the campaign in Salesforce, setting up tracking in Google Analytics, and posting the announcement to Microsoft Teams.
naftiko: "0.5"
info:
label: "Brand Marketing Campaign Launch"
description: "Orchestrates a marketing campaign launch by creating the campaign in Salesforce, setting up tracking in Google Analytics, 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-brand-campaign
description: "Orchestrate a brand campaign launch across Salesforce, Google Analytics, and Microsoft Teams."
inputParameters:
- name: campaign_name
in: body
type: string
description: "The name of the marketing campaign."
- name: brand
in: body
type: string
description: "The Coca-Cola brand, e.g. Coca-Cola Classic, Sprite, Fanta."
- 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: create-ga-property
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: "brand-marketing"
text: "New campaign launched: {{campaign_name}} for {{brand}}. Salesforce ID: {{create-sf-campaign.id}}. Budget: ${{budget}}. Start date: {{start_date}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://coca-cola.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/cocacola/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
Manages packaging changes by updating the SAP material master, creating a change request in ServiceNow, and notifying brand management and manufacturing via Microsoft Teams.
naftiko: "0.5"
info:
label: "Brand Packaging Change Management"
description: "Manages packaging changes by updating the SAP material master, creating a change request in ServiceNow, and notifying brand management and manufacturing 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 material, create ServiceNow change request, and 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 in YYYY-MM-DD format."
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 {{material_number}}"
description: "{{change_description}}. Current packaging: {{get-current-material.packaging_type}}. Effective: {{effective_date}}."
category: "packaging_change"
assignment_group: "Brand_Packaging"
- name: notify-stakeholders
type: call
call: msteams.send-message
with:
channel_id: "brand-packaging"
text: "Packaging Change: Material {{material_number}} ({{get-current-material.description}}). Change: {{change_description}}. Effective: {{effective_date}}. Change request: {{create-change-request.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 production reports from SAP, validating against contracted volumes in Salesforce, and sending a variance report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Co-Packer Production Monitoring"
description: "Monitors co-packer production by pulling production reports from SAP, validating against contracted volumes in Salesforce, and sending a variance report 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 production: pull SAP reports, validate against Salesforce contracts, and 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 record 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 for {{get-production-report.vendor_name}} ({{period}}): Produced: {{get-production-report.actual_volume}}. Contracted: {{get-contracted-volumes.contracted_volume}}. Variance: {{get-production-report.variance_percent}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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-production
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://coca-cola.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 temperature 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 temperature 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 response: pull SAP shipment data, create quality incident, and alert distribution team."
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}} recorded {{temperature_reading}}C. Destination: {{get-shipment.destination}}. ServiceNow: {{create-quality-incident.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 to procurement managers 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 to procurement managers 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 reminder: check SAP contract, create ServiceNow task, and 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 Reminder: {{get-contract.vendor_name}}"
body: "Contract {{contract_number}} with {{get-contract.vendor_name}} expires on {{get-contract.expiry_date}}. Value: ${{get-contract.total_value}}. ServiceNow task: {{create-renewal-task.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 compliance status 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 compliance status 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 trade compliance: check SAP export docs, verify customs, and 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 {{delivery_number}} to {{destination_country}}"
description: "Export docs status: {{get-export-docs.status}}. Customs classification: {{verify-customs.hs_code}}. Duty rate: {{verify-customs.duty_rate}}%."
category: "trade_compliance"
assignment_group: "Trade_Compliance"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 from Zendesk into a quality case by creating a SAP quality notification, linking to the Salesforce account, and notifying the quality team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Complaint to Quality Case"
description: "Converts a customer complaint from Zendesk into a quality case by creating a SAP quality notification, linking to the Salesforce account, and notifying the quality team via Microsoft Teams."
tags:
- customer-service
- quality
- zendesk
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-feedback
port: 8080
tools:
- name: convert-complaint-to-quality-case
description: "Convert Zendesk complaint to SAP quality case, link Salesforce account, and notify quality team."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-complaint
type: call
call: zendesk.get-ticket
with:
ticket_id: "{{ticket_id}}"
- name: create-quality-notification
type: call
call: sap.create-quality-notification
with:
notification_type: "customer_complaint"
description: "{{get-complaint.subject}}: {{get-complaint.description}}"
material: "{{get-complaint.product_sku}}"
- name: update-sf-account
type: call
call: salesforce.create-case
with:
account_id: "{{account_id}}"
subject: "Quality case: {{get-complaint.subject}}"
sap_notification: "{{create-quality-notification.notification_number}}"
- name: notify-quality
type: call
call: msteams.send-message
with:
channel_id: "quality-cases"
text: "New quality case from customer complaint. Zendesk: #{{ticket_id}}. SAP notification: {{create-quality-notification.notification_number}}. Salesforce case: {{update-sf-account.case_number}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://cocacola.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: sap
baseUri: "https://coca-cola-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: salesforce
baseUri: "https://coca-cola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
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 Datadog detects an infrastructure anomaly above a threshold, creates a ServiceNow incident and notifies the SRE team in Teams with metric context.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Anomaly Responder"
description: "When Datadog detects an infrastructure anomaly above a threshold, creates a ServiceNow incident and notifies the SRE team in Teams with metric context."
tags:
- observability
- datadog
- servicenow
- microsoft-teams
- monitoring
capability:
exposes:
- type: mcp
namespace: observability-ops
port: 8080
tools:
- name: handle-infra-anomaly
description: "Given a Datadog monitor ID and alert status, fetch monitor details, create a ServiceNow incident, and post context-rich alert to the SRE Teams channel. Use for infrastructure anomaly response automation."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the alert."
- name: alert_status
in: body
type: string
description: "The alert status: Alert, Warn, or No Data."
steps:
- name: get-monitor
type: call
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Datadog anomaly: {{get-monitor.name}}"
description: "Monitor ID: {{monitor_id}} | Status: {{alert_status}} | Query: {{get-monitor.query}}"
urgency: "1"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_sre_channel_id"
text: "Infra Anomaly: {{get-monitor.name}} | Status: {{alert_status}} | Incident: {{create-incident.number}}"
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: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Datadog Logs for error spikes in a specified service over the past hour and returns a ranked summary of the top error patterns.
naftiko: "0.5"
info:
label: "Datadog Log Anomaly Investigation"
description: "Queries Datadog Logs for error spikes in a specified service over the past hour and returns a ranked summary of the top error patterns."
tags:
- observability
- datadog
- logging
- incident-response
capability:
exposes:
- type: mcp
namespace: log-analysis
port: 8080
tools:
- name: get-error-log-summary
description: "Query Datadog Logs for the top error patterns in a given service over the past hour. Returns ranked error messages and counts for rapid incident triage."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name to query logs for, e.g. beverage-order-service."
call: datadog.search-logs
with:
query: "service:{{service_name}} status:error"
outputParameters:
- name: logs
type: array
mapping: "$.data"
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: logs
path: "/logs-queries/list"
inputParameters:
- name: query
in: query
operations:
- name: search-logs
method: GET
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, e.g. bottling-api."
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
Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability digest to the SRE Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Report"
description: "Retrieves SLO compliance status from Datadog for all production services and publishes a weekly reliability digest to the SRE Microsoft Teams channel."
tags:
- observability
- datadog
- slo
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: digest-slo-compliance
description: "Fetch all SLO status summaries from Datadog and post a weekly compliance report to the SRE Teams channel. Use for reliability governance and SLO review meetings."
steps:
- name: get-slos
type: call
call: datadog.list-slos
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_sre_channel_id"
text: "Weekly SLO Report: {{get-slos.total_count}} SLOs tracked across Coca-Cola production services."
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: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Converts demand forecasts into production plans by pulling forecast data from Salesforce, creating planned orders in SAP, and updating the Power BI demand planning dashboard.
naftiko: "0.5"
info:
label: "Demand Forecast to Production Plan"
description: "Converts demand forecasts into production plans by pulling forecast data from Salesforce, creating planned orders in SAP, and updating the Power BI demand planning 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 demand forecast to production plan: pull Salesforce forecast, create SAP planned orders, refresh dashboard."
inputParameters:
- name: forecast_id
in: body
type: string
description: "The Salesforce demand 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 planning 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://coca-cola.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://coca-cola-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 Google Analytics and SAP, then post variance report to Teams."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP cost center for marketing."
- name: campaign_id
in: body
type: string
description: "The Google Analytics campaign ID."
- name: period
in: body
type: string
description: "The fiscal period, e.g. 2026-03."
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 for {{period}}: GA Campaign Spend: ${{get-ga-spend.total_cost}}. SAP Cost Center Actuals: ${{get-sap-actuals.total_actual}}. Variance requires review."
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://coca-cola-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 credit limits in SAP, checking payment history in Salesforce, 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 credit limits in SAP, checking payment history in Salesforce, 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 payment history, and release or block sales 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 distributor 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}}"
credit_status: "{{get-credit-status.credit_status}}"
payment_score: "{{get-payment-history.payment_score}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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 with fulfillment details.
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 with fulfillment details."
tags:
- distribution
- sap
- salesforce
- supply-chain
capability:
exposes:
- type: mcp
namespace: distribution
port: 8080
tools:
- name: track-distributor-order
description: "Track a distributor order: pull SAP sales order, check delivery, and 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_status: "{{get-delivery-status.delivery_status}}"
last_delivery_date: "{{get-delivery-status.actual_goods_issue_date}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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
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 performance alert: get problem details, create ServiceNow incident, and notify SRE team."
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 degradation: {{get-problem-details.title}}"
description: "Impact: {{get-problem-details.impact_level}}. Root cause: {{get-problem-details.root_cause}}. Affected services: {{get-problem-details.affected_entities}}."
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}}. ServiceNow: {{create-incident.number}}."
consumes:
- type: http
namespace: dynatrace
baseUri: "https://cocacola.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://cocacola.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
Handles e-commerce order exceptions by pulling order details from BigCommerce, checking SAP inventory availability, and creating a Zendesk ticket for customer communication.
naftiko: "0.5"
info:
label: "E-Commerce Order Exception Handler"
description: "Handles e-commerce order exceptions by pulling order details from BigCommerce, checking SAP inventory availability, and creating a Zendesk ticket for customer communication."
tags:
- distribution
- bigcommerce
- sap
- zendesk
- customer-service
capability:
exposes:
- type: mcp
namespace: ecommerce
port: 8080
tools:
- name: handle-order-exception
description: "Orchestrate e-commerce order exception: pull BigCommerce order, check SAP stock, and create Zendesk ticket."
inputParameters:
- name: order_id
in: body
type: string
description: "The BigCommerce order ID."
steps:
- name: get-order
type: call
call: bigcommerce.get-order
with:
order_id: "{{order_id}}"
- name: check-stock
type: call
call: sap.get-material-stock
with:
material_number: "{{get-order.sku}}"
- name: create-support-ticket
type: call
call: zendesk.create-ticket
with:
subject: "Order exception: #{{order_id}}"
description: "Order {{order_id}} for {{get-order.customer_name}} requires attention. Product: {{get-order.product_name}}. Available stock: {{check-stock.available_stock}}."
requester_email: "{{get-order.customer_email}}"
priority: "high"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/cocacola/v2"
authentication:
type: apiKey
header: "X-Auth-Token"
value: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: sap
baseUri: "https://coca-cola-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
- type: http
namespace: zendesk
baseUri: "https://cocacola.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets"
operations:
- name: create-ticket
method: POST
When an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee termination is recorded in Workday, deactivates the Microsoft 365 account, closes open ServiceNow tickets, and notifies the HR team via Teams."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, deactivate the Microsoft 365 account, close open ServiceNow tickets assigned to the user, and notify the HR business partner via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The termination effective date in ISO 8601 format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: disable-account
type: call
call: msgraph.disable-user
with:
user_upn: "{{get-worker.work_email}}"
- name: close-tickets
type: call
call: servicenow.close-user-incidents
with:
caller_email: "{{get-worker.work_email}}"
- name: notify-hr
type: call
call: msteams-notify.send-message
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "Offboarding complete for {{get-worker.full_name}} (termination date: {{termination_date}}). M365 account disabled."
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: "/coca-cola/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: user-account
path: "/users/{{user_upn}}"
inputParameters:
- name: user_upn
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-incidents
method: PATCH
- type: http
namespace: msteams-notify
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
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 and manager 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 and manager 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 employee role change: update ServiceNow access, modify SharePoint permissions, and 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: "/coca-cola/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.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 optimization reports by pulling plant energy data from SAP, comparing with utility rate data, and publishing the report to SharePoint.
naftiko: "0.5"
info:
label: "Energy Cost Optimization Report"
description: "Generates energy cost optimization reports by pulling plant energy data from SAP, comparing with utility rate data, and publishing the report 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 utility rates, and 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, e.g. 2026-03."
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-optimization-{{plant_code}}.json"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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?$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: 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 management 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 management 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: "Orchestrate fleet maintenance: check SAP equipment, create ServiceNow work order, and 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 of maintenance: 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"
vehicle_id: "{{vehicle_id}}"
last_service_date: "{{get-vehicle-record.last_maintenance_date}}"
- 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://coca-cola-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://cocacola.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
Processes fountain equipment service requests by looking up the customer in Salesforce, creating a field service ticket in ServiceNow, and notifying the service technician via Microsoft Teams.
naftiko: "0.5"
info:
label: "Fountain Equipment Service Request"
description: "Processes fountain equipment service requests by looking up the customer in Salesforce, creating a field service ticket in ServiceNow, and notifying the service 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-request
description: "Process fountain service request: look up Salesforce customer, create ServiceNow ticket, notify technician."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce customer account ID."
- name: equipment_serial
in: body
type: string
description: "The fountain equipment serial number."
- name: issue_description
in: body
type: string
description: "Description of the service issue."
steps:
- name: get-customer
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: create-service-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-technician
type: call
call: msteams.send-message
with:
channel_id: "fountain-service"
text: "New fountain service request: {{get-customer.name}}. Equipment: {{equipment_serial}}. Issue: {{issue_description}}. Ticket: {{create-service-ticket.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://coca-cola.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://cocacola.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 a GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Pipeline Failure Alert"
description: "When a GitHub Actions workflow fails on a protected branch, opens a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel."
tags:
- devops
- cicd
- github
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions run ID and repository, retrieve failure details, open a ServiceNow incident, and alert the engineering Teams channel. Use when a protected-branch workflow fails."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repo
in: body
type: string
description: "The repository in owner/repo format, e.g. coca-cola/supply-chain-service."
- name: branch
in: body
type: string
description: "The branch name where the failure occurred."
steps:
- name: get-run
type: call
call: github.get-workflow-run
with:
owner: "coca-cola"
repo: "{{repo}}"
run_id: "{{run_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "CI/CD failure: {{repo}} / {{branch}}"
description: "GitHub Actions run {{run_id}} failed on branch {{branch}}. URL: {{get-run.html_url}}"
urgency: "2"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Pipeline Failure: {{repo}} | Branch: {{branch}} | Run: {{run_id}} | Incident: {{create-incident.number}} | Log: {{get-run.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-run
path: "/repos/{{owner}}/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches open pull requests from a GitHub repository and posts a daily review-pending summary to the engineering Teams channel to prompt timely code reviews.
naftiko: "0.5"
info:
label: "GitHub Pull Request Code Review Summary"
description: "Fetches open pull requests from a GitHub repository and posts a daily review-pending summary to the engineering Teams channel to prompt timely code reviews."
tags:
- devops
- github
- code-review
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-review
port: 8080
tools:
- name: digest-pending-prs
description: "List all open pull requests for a GitHub repository and post a summary of review-pending PRs to the designated Teams channel. Use for daily PR queue digest automation."
inputParameters:
- name: repo
in: body
type: string
description: "The repository in owner/repo format."
steps:
- name: list-prs
type: call
call: github.list-pull-requests
with:
owner: "coca-cola"
repo: "{{repo}}"
state: "open"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "PR Review Digest for {{repo}}: {{list-prs.total_count}} open PRs awaiting review."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/repos/{{owner}}/{{repo}}/pulls"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: state
in: query
operations:
- name: list-pull-requests
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks GitHub release deployments by checking release status, verifying Datadog health metrics post-deploy, and updating the ServiceNow change request.
naftiko: "0.5"
info:
label: "GitHub Release Deployment Tracker"
description: "Tracks GitHub release deployments by checking release status, verifying Datadog health metrics post-deploy, and updating the ServiceNow change request."
tags:
- devops
- github
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: deployment
port: 8080
tools:
- name: track-release-deployment
description: "Track release deployment: check GitHub release, verify Datadog metrics, and update ServiceNow change request."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository name."
- name: release_tag
in: body
type: string
description: "The release tag version."
- 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-post-deploy-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-post-deploy-health.error_rate}}. P99 latency: {{check-post-deploy-health.p99_latency}}ms."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/coca-cola/{{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://cocacola.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
Audits all repositories in the Coca-Cola GitHub organization for missing branch protection rules and reports non-compliant repositories to the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Repository Security Policy Audit"
description: "Audits all repositories in the Coca-Cola GitHub organization for missing branch protection rules and reports non-compliant repositories to the security team via Teams."
tags:
- security
- github
- devops
- compliance
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: audit-branch-protection
description: "List all repositories in the Coca-Cola GitHub organization and check each for branch protection rules on the default branch. Report non-compliant repos to the security Teams channel."
steps:
- name: list-repos
type: call
call: github.list-org-repos
with:
org: "coca-cola"
type: "private"
- name: post-audit-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Branch Protection Audit: {{list-repos.total_count}} private repositories reviewed for compliance."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: org-repos
path: "/orgs/{{org}}/repos"
inputParameters:
- name: org
in: path
- name: type
in: query
operations:
- name: list-org-repos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches open Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents for critical findings, and notifies the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Scan Triage"
description: "Fetches open Dependabot security alerts for a GitHub repository, creates ServiceNow security incidents for critical findings, and notifies the security team via Teams."
tags:
- security
- github
- servicenow
- devops
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: triage-security-alerts
description: "Retrieve open Dependabot security alerts for a GitHub repository, create ServiceNow security incidents for critical severity alerts, and notify the security team via Teams."
inputParameters:
- name: repo
in: body
type: string
description: "The repository in owner/repo format to scan for security alerts."
steps:
- name: get-alerts
type: call
call: github.list-dependabot-alerts
with:
owner: "coca-cola"
repo: "{{repo}}"
severity: "critical"
- name: create-security-incident
type: call
call: servicenow.create-incident
with:
short_description: "Critical Dependabot alerts in {{repo}}"
category: "security"
urgency: "1"
- name: notify-security-team
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_security_channel_id"
text: "Security Alert: {{get-alerts.total_count}} critical vulnerabilities in {{repo}}. Incident: {{create-security-incident.number}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{owner}}/{{repo}}/dependabot/alerts"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: severity
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions for a specified campaign.
naftiko: "0.5"
info:
label: "Google Analytics Campaign Metrics"
description: "Retrieves campaign performance metrics from Google Analytics including sessions, bounce rate, and conversions for a specified campaign."
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 data. Returns sessions, bounce rate, and goal completions for a given campaign."
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
Pulls current active headcount and salary band data from Workday and returns a structured summary grouped by cost center for finance planning.
naftiko: "0.5"
info:
label: "Headcount Snapshot by Cost Center"
description: "Pulls current active headcount and salary band data from Workday and returns a structured summary grouped by cost center for finance planning."
tags:
- hr
- finance
- reporting
- workday
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns active headcount grouped by cost center and employment type from Workday. Use for headcount planning, finance forecasting, or budget review."
call: workday.list-workers
outputParameters:
- name: workers
type: array
mapping: "$.data"
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-list
path: "/coca-cola/workers"
operations:
- name: list-workers
method: GET
Retrieves a HubSpot contact by email, returning name, company, lifecycle stage, and last activity date.
naftiko: "0.5"
info:
label: "HubSpot Contact Lookup"
description: "Retrieves a HubSpot contact by email, returning name, company, lifecycle stage, and last activity date."
tags:
- marketing
- hubspot
- contact-management
capability:
exposes:
- type: mcp
namespace: marketing-crm
port: 8080
tools:
- name: get-contact
description: "Look up a HubSpot contact by email address. Returns first name, last name, company, and lifecycle stage."
inputParameters:
- name: email
in: body
type: string
description: "The contact email address."
call: hubspot.get-contact
with:
email: "{{email}}"
outputParameters:
- name: first_name
type: string
mapping: "$.properties.firstname"
- name: last_name
type: string
mapping: "$.properties.lastname"
- name: company
type: string
mapping: "$.properties.company"
- name: lifecycle_stage
type: string
mapping: "$.properties.lifecyclestage"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{email}}?idProperty=email"
inputParameters:
- name: email
in: query
operations:
- name: get-contact
method: GET
Assesses ingredient supplier risk by pulling vendor data from SAP, checking compliance status in ServiceNow, and generating a risk report posted to Microsoft Teams.
naftiko: "0.5"
info:
label: "Ingredient Supplier Risk Assessment"
description: "Assesses ingredient supplier risk by pulling vendor data from SAP, checking compliance status in ServiceNow, and generating a risk report posted 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 ingredient supplier risk: pull SAP vendor data, check ServiceNow compliance, and 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 Assessment: {{get-vendor-data.vendor_name}} ({{vendor_id}}). Country: {{get-vendor-data.country}}. Payment terms: {{get-vendor-data.payment_terms}}. Compliance status: {{check-compliance.status}}. Last audit: {{check-compliance.last_audit_date}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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
Retrieves a vendor invoice from SAP, verifies it against the corresponding purchase order and goods receipt, and posts a match result back to SAP for payment approval.
naftiko: "0.5"
info:
label: "Invoice Processing and Three-Way Match"
description: "Retrieves a vendor invoice from SAP, verifies it against the corresponding purchase order and goods receipt, and posts a match result back to SAP for payment approval."
tags:
- finance
- procurement
- sap
- invoice-processing
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: process-invoice-match
description: "Given an invoice number, retrieve the invoice and linked PO from SAP S/4HANA, validate quantity and price, and update the invoice match status. Use for accounts payable automation and three-way match workflows."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP vendor invoice number (MIRO-style document number)."
steps:
- name: get-invoice
type: call
call: sap-fi.get-invoice
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: sap-mm.get-po
with:
po_number: "{{get-invoice.po_number}}"
- name: post-match-result
type: call
call: sap-fi.update-invoice-status
with:
invoice_number: "{{invoice_number}}"
match_status: "Matched"
consumes:
- type: http
namespace: sap-fi
baseUri: "https://coca-cola-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('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: update-invoice-status
method: PATCH
- type: http
namespace: sap-mm
baseUri: "https://coca-cola-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
Manages IT asset lifecycle by checking asset status in ServiceNow, verifying user assignment in Workday, and updating the asset tracking record.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Management"
description: "Manages IT asset lifecycle by checking asset status in ServiceNow, verifying user assignment in Workday, and updating the asset tracking record."
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 lifecycle: check ServiceNow asset, verify Workday user, and 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: update-asset-record
type: call
call: servicenow.update-asset
with:
asset_tag: "{{asset_tag}}"
assigned_user: "{{get-assigned-user.full_name}}"
department: "{{get-assigned-user.department}}"
- name: notify-it-ops
type: call
call: msteams.send-message
with:
channel_id: "it-asset-management"
text: "Asset {{asset_tag}} verified. Assigned to: {{get-assigned-user.full_name}} ({{get-assigned-user.department}}). Status: {{get-asset.status}}. Age: {{get-asset.age_months}} months."
consumes:
- type: http
namespace: servicenow
baseUri: "https://cocacola.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
- name: update-asset
method: PATCH
- 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: "/coca-cola/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
When a critical ServiceNow incident is raised, creates a Datadog event marker, pages the on-call engineer, and posts an alert to the IT-incidents Microsoft Teams channel.
naftiko: "0.5"
info:
label: "IT Incident Response Orchestrator"
description: "When a critical ServiceNow incident is raised, creates a Datadog event marker, pages the on-call engineer, and posts an alert to the IT-incidents Microsoft Teams channel."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: handle-critical-incident
description: "Given a ServiceNow incident number, retrieve incident details, create a Datadog event marker for correlation, and post an alert to the IT-incidents Teams channel. Use for critical P1/P2 incident bridges."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. INC0012345."
steps:
- name: get-incident
type: call
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
- name: create-datadog-event
type: call
call: datadog.create-event
with:
title: "ServiceNow Incident: {{incident_number}}"
text: "{{get-incident.short_description}} — Priority: {{get-incident.priority}}"
alert_type: "error"
- name: post-teams-alert
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_it_channel_id"
text: "CRITICAL INCIDENT {{incident_number}}: {{get-incident.short_description}} | Assigned: {{get-incident.assigned_to}} | Datadog event: {{create-datadog-event.event_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
- 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.msgraph_token"
resources:
- name: channel-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 campaign 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 Report: Impressions: {{get-linkedin-metrics.impressions}}. Clicks: {{get-linkedin-metrics.clicks}}. Applications: {{get-linkedin-metrics.conversions}}. Cost per application: ${{get-linkedin-metrics.cost_per_conversion}}."
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: "/coca-cola/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
Retrieves LinkedIn Sponsored Content campaign analytics for the past week and posts an engagement summary to the Marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Sponsored Campaign Performance Digest"
description: "Retrieves LinkedIn Sponsored Content campaign analytics for the past week and posts an engagement summary to the Marketing Microsoft Teams channel."
tags:
- marketing
- linkedin
- social
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-linkedin-campaigns
description: "Fetch LinkedIn Sponsored Content campaign performance metrics for the past 7 days and post an engagement digest to the Marketing Teams channel. Use for weekly social performance reviews."
inputParameters:
- name: account_id
in: body
type: string
description: "The LinkedIn ad account ID (numeric)."
steps:
- name: get-analytics
type: call
call: linkedin.get-campaign-analytics
with:
account_id: "{{account_id}}"
dateRange_start_day: "1"
dateRange_end_day: "7"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_marketing_channel_id"
text: "LinkedIn Campaign Digest: {{get-analytics.total_impressions}} impressions, {{get-analytics.total_clicks}} clicks this week for account {{account_id}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: ad-analytics
path: "/adAnalytics"
inputParameters:
- name: account_id
in: query
- name: dateRange_start_day
in: query
- name: dateRange_end_day
in: query
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Syncs email campaign results from MailChimp to Salesforce campaign records and posts a performance summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "MailChimp Email Campaign Results Sync"
description: "Syncs email campaign results from MailChimp to Salesforce campaign records 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-campaign-results
description: "Sync MailChimp campaign results to Salesforce and post performance 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-campaign-report
type: call
call: mailchimp.get-campaign-report
with:
campaign_id: "{{mailchimp_campaign_id}}"
- name: update-sf-campaign
type: call
call: salesforce.update-campaign
with:
campaign_id: "{{sf_campaign_id}}"
emails_sent: "{{get-campaign-report.emails_sent}}"
open_rate: "{{get-campaign-report.open_rate}}"
click_rate: "{{get-campaign-report.click_rate}}"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "marketing-campaigns"
text: "Email Campaign Report: {{get-campaign-report.campaign_title}}. Sent: {{get-campaign-report.emails_sent}}. Open rate: {{get-campaign-report.open_rate}}%. Click rate: {{get-campaign-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: campaign-reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-report
method: GET
- type: http
namespace: salesforce
baseUri: "https://coca-cola.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
Orchestrates the monthly financial close by checking SAP period-end status, validating Oracle Cloud journal balances, refreshing the Power BI finance dashboard, and notifying the finance team.
naftiko: "0.5"
info:
label: "Monthly Financial Close Orchestrator"
description: "Orchestrates the monthly financial close by checking SAP period-end status, validating Oracle Cloud journal balances, refreshing the Power BI finance dashboard, and notifying the finance team."
tags:
- finance
- sap
- oracle-cloud
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: run-monthly-close
description: "Orchestrate monthly financial close: check SAP period status, validate Oracle journals, refresh dashboard, and 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: validate-journals
type: call
call: oracle.get-journal-balance
with:
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}}. Oracle journal balance: {{validate-journals.balance_status}}. Dashboard refreshed."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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: oracle
baseUri: "https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: journal-balances
path: "/journalBalances?q=Period={{period}}"
inputParameters:
- name: period
in: query
operations:
- name: get-journal-balance
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, Adobe Analytics, and LinkedIn to create a unified campaign performance view in Salesforce.
naftiko: "0.5"
info:
label: "Multi-Channel Marketing Attribution"
description: "Aggregates marketing attribution data from Google Analytics, Adobe Analytics, and LinkedIn to create a unified campaign performance view in Salesforce."
tags:
- marketing
- google-analytics
- adobe-analytics
- linkedin
- salesforce
capability:
exposes:
- type: mcp
namespace: marketing-attribution
port: 8080
tools:
- name: aggregate-attribution
description: "Aggregate marketing attribution: pull GA, Adobe Analytics, and LinkedIn data, then 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 Google Analytics 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-adobe-attribution
type: call
call: adobe.get-campaign-attribution
with:
campaign_id: "{{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}}"
display_impressions: "{{get-adobe-attribution.impressions}}"
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: adobe
baseUri: "https://analytics.adobe.io/api/cocacola"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: attribution
path: "/attribution"
operations:
- name: get-campaign-attribution
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://coca-cola.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 record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "When a new hire record is created in Workday, opens a ServiceNow onboarding task, provisions a Microsoft 365 account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full new hire onboarding sequence across ServiceNow, Microsoft 365, and Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire, e.g. WD-00123."
- name: start_date
in: body
type: string
description: "The employee start date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: create-onboarding-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-worker.full_name}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding_Team"
- name: provision-m365
type: call
call: msgraph.create-user
with:
displayName: "{{get-worker.full_name}}"
mail: "{{get-worker.work_email}}"
department: "{{get-worker.department}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Welcome to Coca-Cola, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/coca-cola/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.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: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Validates new product launch readiness by checking SAP material master setup, Salesforce product catalog entry, and Adobe Analytics tracking configuration.
naftiko: "0.5"
info:
label: "New Product Launch Readiness Check"
description: "Validates new product launch readiness by checking SAP material master setup, Salesforce product catalog entry, and Adobe Analytics tracking configuration."
tags:
- brand-management
- manufacturing
- sap
- salesforce
- adobe-analytics
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: check-launch-readiness
description: "Validate new product launch readiness across SAP material master, Salesforce catalog, and Adobe Analytics tracking."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number for the new product."
- 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: adobe.get-tracking-config
with:
product_code: "{{material_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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: adobe
baseUri: "https://analytics.adobe.io/api/cocacola"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: tracking-config
path: "/tracking/product/{{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 for a given application.
naftiko: "0.5"
info:
label: "New Relic Application Health"
description: "Retrieves application health summary from New Relic, including response time, throughput, and error rate for a given application."
tags:
- it-operations
- new-relic
- monitoring
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-health
description: "Get the health summary of a New Relic application. 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
Retrieves all open job requisitions from Workday and publishes a digest to a Microsoft Teams HR channel for weekly staffing review.
naftiko: "0.5"
info:
label: "Open Job Requisition Report"
description: "Retrieves all open job requisitions from Workday and publishes a digest to a Microsoft Teams HR channel for weekly staffing review."
tags:
- hr
- recruiting
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-recruiting
port: 8080
tools:
- name: digest-open-requisitions
description: "Fetch all open job requisitions from Workday and post a summary digest to the HR staffing Microsoft Teams channel. Use for weekly recruiting pipeline reviews."
steps:
- name: get-requisitions
type: call
call: workday.list-job-requisitions
with:
status: "Open"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Weekly Open Requisitions: {{get-requisitions.total_count}} open roles across Coca-Cola."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/coca-cola/jobRequisitions"
inputParameters:
- name: status
in: query
operations:
- name: list-job-requisitions
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a journal entry from Oracle Cloud Financials by journal header ID, returning period, status, total debit, and total credit.
naftiko: "0.5"
info:
label: "Oracle Cloud Financial Journal Entry Lookup"
description: "Retrieves a journal entry from Oracle Cloud Financials by journal header ID, returning period, status, total debit, and total credit."
tags:
- finance
- oracle-cloud
- general-ledger
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-journal-entry
description: "Look up an Oracle Cloud Financials journal entry. Returns accounting period, status, total debit, and total credit amounts."
inputParameters:
- name: journal_header_id
in: body
type: string
description: "The Oracle Cloud journal header ID."
call: oracle.get-journal
with:
journal_header_id: "{{journal_header_id}}"
outputParameters:
- name: period
type: string
mapping: "$.AccountingPeriod"
- name: status
type: string
mapping: "$.Status"
- name: total_debit
type: string
mapping: "$.TotalDebitAmount"
- name: total_credit
type: string
mapping: "$.TotalCreditAmount"
consumes:
- type: http
namespace: oracle
baseUri: "https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: journals
path: "/journalHeaders/{{journal_header_id}}"
inputParameters:
- name: journal_header_id
in: path
operations:
- name: get-journal
method: GET
Detects packaging material shortages by checking SAP inventory levels, identifies affected production orders, and escalates to supply chain and manufacturing teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Packaging Material Shortage Alert"
description: "Detects packaging material shortages by checking SAP inventory levels, identifies affected production orders, and escalates to supply chain and manufacturing 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 response: check SAP inventory, identify affected orders, and notify supply chain team."
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}}. Available stock: {{check-stock.available_stock}} {{check-stock.unit}}. Affected production orders: {{get-affected-orders.count}}. Immediate procurement action required."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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
Reports a plant safety incident by recording it in ServiceNow, updating the SAP plant maintenance log, notifying safety officers via Microsoft Teams, and creating a Workday worker safety record.
naftiko: "0.5"
info:
label: "Plant Safety Incident Reporting"
description: "Reports a plant safety incident by recording it in ServiceNow, updating the SAP plant maintenance log, notifying safety officers via Microsoft Teams, and creating a Workday worker safety record."
tags:
- manufacturing
- servicenow
- sap
- microsoft-teams
- workday
capability:
exposes:
- type: mcp
namespace: safety
port: 8080
tools:
- name: report-safety-incident
description: "Orchestrate safety incident reporting: create ServiceNow record, update SAP maintenance log, notify safety team, and update Workday."
inputParameters:
- name: plant_code
in: body
type: string
description: "The plant code where the incident occurred."
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the involved employee."
- name: incident_description
in: body
type: string
description: "Description of the safety incident."
- name: severity
in: body
type: string
description: "Severity level: 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: update-maintenance-log
type: call
call: sap.create-notification
with:
plant: "{{plant_code}}"
notification_type: "safety"
description: "{{incident_description}}"
- 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}}. Involved: {{get-worker.full_name}}. ServiceNow: {{create-safety-record.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://cocacola.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sap
baseUri: "https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: notifications
path: "/MaintenanceNotification"
operations:
- name: create-notification
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: "/coca-cola/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 point-of-sale data by pulling retail POS data from Circana, updating Salesforce retail accounts, and refreshing the Power BI sales analytics dashboard.
naftiko: "0.5"
info:
label: "Point of Sale Data Integration"
description: "Integrates point-of-sale data by pulling retail POS data from Circana, updating Salesforce retail accounts, and refreshing the Power BI sales analytics 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 accounts, and refresh Power BI dashboard."
inputParameters:
- name: retailer_id
in: body
type: string
description: "The Circana retailer ID."
- name: sf_account_id
in: body
type: string
description: "The Salesforce retail account ID."
- name: dataset_id
in: body
type: string
description: "The Power BI sales 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://coca-cola.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
Triggers a refresh of the Coca-Cola bottling operations Power BI dataset and returns the refresh status.
naftiko: "0.5"
info:
label: "Power BI Bottling Dashboard Refresh"
description: "Triggers a refresh of the Coca-Cola bottling operations Power BI dataset and returns the refresh status."
tags:
- analytics
- power-bi
- manufacturing
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: refresh-bottling-dashboard
description: "Trigger a Power BI dataset refresh for the bottling operations dashboard. Returns refresh request ID and status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the bottling dashboard."
call: powerbi.trigger-refresh
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Triggers a scheduled refresh for a Power BI dataset and monitors refresh status, notifying the data analytics team via Teams when complete or failed.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Trigger"
description: "Triggers a scheduled refresh for a Power BI dataset and monitors refresh status, notifying the data analytics team via Teams when complete or failed."
tags:
- data
- analytics
- power-bi
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: data-analytics
port: 8080
tools:
- name: trigger-dataset-refresh
description: "Trigger a Power BI dataset refresh for the given dataset ID and post completion status to the analytics Teams channel. Use for scheduled BI report refresh automation."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: start-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_analytics_channel_id"
text: "Power BI dataset {{dataset_id}} refresh triggered successfully."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls production order data from SAP, calculates yield variance, refreshes the 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, calculates yield variance, refreshes the 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: "Orchestrate production yield analysis: pull SAP production data, refresh Power BI dashboard, and 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: "Production Yield Report for Plant {{plant_code}} on {{production_date}}: Total orders: {{get-production-orders.count}}. Dashboard refresh status: {{refresh-dashboard.status}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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}}' and MfgOrderPlannedStartDate eq datetime'{{date}}'"
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
When a quality issue is detected, places a batch on hold in SAP, creates a quality case in ServiceNow, and notifies the quality assurance 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 the quality assurance 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 a quality hold: place batch on hold in SAP, create ServiceNow case, and notify QA and distribution teams."
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}} placed on hold. Reason: {{reason}}. Production date: {{get-batch-info.production_date}}. ServiceNow case: {{create-quality-case.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 raw material procurement approvals by validating the SAP purchase requisition, checking budget availability in Oracle Cloud, and routing for approval via Microsoft Power Automate.
naftiko: "0.5"
info:
label: "Raw Material Procurement Approval"
description: "Processes raw material procurement approvals by validating the SAP purchase requisition, checking budget availability in Oracle Cloud, and routing for approval via Microsoft Power Automate."
tags:
- procurement
- supply-chain
- sap
- oracle-cloud
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: procurement-approval
port: 8080
tools:
- name: process-procurement-approval
description: "Orchestrate raw material procurement approval: validate SAP PR, check Oracle budget, and route approval."
inputParameters:
- name: requisition_number
in: body
type: string
description: "The SAP purchase requisition number."
steps:
- name: get-requisition
type: call
call: sap.get-purchase-requisition
with:
requisition_number: "{{requisition_number}}"
- name: check-budget
type: call
call: oracle.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: sap
baseUri: "https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: requisitions
path: "/A_PurchaseRequisition('{{requisition_number}}')"
inputParameters:
- name: requisition_number
in: path
operations:
- name: get-purchase-requisition
method: GET
- type: http
namespace: oracle
baseUri: "https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: budgets
path: "/budgetBalances?q=CostCenter={{cost_center}}"
inputParameters:
- name: cost_center
in: query
operations:
- name: check-budget-availability
method: GET
- type: http
namespace: power-automate
baseUri: "https://prod-cocacola.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 the legal and compliance team 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 the legal and compliance team 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 regulatory compliance docs: check SharePoint expiry dates, create ServiceNow tasks, and alert compliance team."
inputParameters:
- name: document_category
in: body
type: string
description: "The compliance document category, e.g. 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 document renewal: {{document_category}} for plant {{plant_code}}"
description: "Documents 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}} documents for plant {{plant_code}}. Expiring soon: {{get-documents.expiring_count}}. Next expiry: {{get-documents.next_expiry_date}}. Task: {{create-renewal-tasks.number}}."
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?$filter=Plant eq '{{plant}}'"
inputParameters:
- name: site_id
in: path
- name: category
in: path
- name: plant
in: query
operations:
- name: get-compliance-docs
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.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 updates 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 updates 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: "Orchestrate retail promotion performance sync: pull Salesforce promotion data, enrich with Circana POS data, and refresh Power BI dashboard."
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 analytics 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://coca-cola.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 compliance 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 compliance 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 retail shelf compliance: pull Salesforce audit data, compare with standards, and post report to Teams."
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 Audit: Store {{get-audit-record.store_name}} on {{audit_date}}. Compliance score: {{get-audit-record.compliance_score}}%. Planogram adherence: {{get-audit-record.planogram_match}}%. Action required: {{get-audit-record.action_items}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://coca-cola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: audits
path: "/sobjects/Store_Audit__c?q=AccountId='{{account_id}}' AND AuditDate='{{audit_date}}'"
inputParameters:
- name: account_id
in: query
- name: audit_date
in: query
operations:
- name: get-audit-record
method: GET
- name: planograms
path: "/sobjects/Planogram__c?q=StoreType='{{store_type}}'"
inputParameters:
- name: store_type
in: query
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
Optimizes route-to-market by analyzing Salesforce retail account data, checking SAP warehouse inventory, and generating optimized delivery routes posted to Microsoft Teams.
naftiko: "0.5"
info:
label: "Route to Market Optimization"
description: "Optimizes route-to-market by analyzing Salesforce retail account data, checking SAP warehouse inventory, and generating optimized delivery routes posted to Microsoft Teams."
tags:
- distribution
- supply-chain
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: route-optimization
port: 8080
tools:
- name: optimize-routes
description: "Optimize delivery routes: analyze Salesforce accounts, check SAP inventory, and post optimized 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 in YYYY-MM-DD format."
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: "distribution-{{region_code}}"
text: "Route optimization for {{region_code}} on {{delivery_date}}: Active accounts: {{get-retail-accounts.count}}. Warehouse stock: {{check-warehouse-stock.total_cases}} cases. Routes generated and ready for dispatch."
consumes:
- type: http
namespace: salesforce
baseUri: "https://coca-cola.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://coca-cola-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
Given a Salesforce account ID, retrieves account details, open opportunities, and recent service cases to produce a unified health summary for the account manager.
naftiko: "0.5"
info:
label: "Salesforce Account Health Check"
description: "Given a Salesforce account ID, retrieves account details, open opportunities, and recent service cases to produce a unified health summary for the account manager."
tags:
- sales
- crm
- salesforce
- customer-success
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-account-health
description: "Given a Salesforce account ID, retrieve the account profile, open opportunities, and recent service cases. Returns a consolidated health view for account review meetings."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce Account ID (18-character Salesforce ID)."
steps:
- name: get-account
type: call
call: salesforce-acct.get-account
with:
account_id: "{{account_id}}"
- name: get-opportunities
type: call
call: salesforce-opp.query-opportunities
with:
soql: "SELECT Id,Name,StageName,Amount FROM Opportunity WHERE AccountId='{{account_id}}' AND IsClosed=false"
- name: get-cases
type: call
call: salesforce-case.query-cases
with:
soql: "SELECT Id,Subject,Status,CreatedDate FROM Case WHERE AccountId='{{account_id}}' ORDER BY CreatedDate DESC LIMIT 5"
consumes:
- type: http
namespace: salesforce-acct
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: account
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: salesforce-opp
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: salesforce-case
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-cases
method: GET
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://coca-cola.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
When a Salesforce survey response scores below a detractor threshold, automatically creates a service case and assigns it to the customer success team.
naftiko: "0.5"
info:
label: "Salesforce Customer NPS Case Creation"
description: "When a Salesforce survey response scores below a detractor threshold, automatically creates a service case and assigns it to the customer success team."
tags:
- sales
- customer-success
- salesforce
- nps
capability:
exposes:
- type: mcp
namespace: customer-success
port: 8080
tools:
- name: handle-nps-detractor
description: "Given a Salesforce contact ID and NPS score below 7, create a service case and assign it to the customer success team for follow-up. Use for automated detractor response workflows."
inputParameters:
- name: contact_id
in: body
type: string
description: "The Salesforce Contact ID of the NPS survey respondent."
- name: nps_score
in: body
type: integer
description: "The NPS score (0–10) from the survey response."
- name: feedback
in: body
type: string
description: "Verbatim feedback provided by the respondent."
steps:
- name: get-contact
type: call
call: salesforce-contact.get-contact
with:
contact_id: "{{contact_id}}"
- name: create-case
type: call
call: salesforce-cases.create-case
with:
subject: "NPS Detractor Follow-up: {{get-contact.name}} (Score: {{nps_score}})"
description: "{{feedback}}"
contactId: "{{contact_id}}"
origin: "NPS Survey"
priority: "High"
consumes:
- type: http
namespace: salesforce-contact
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contact
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce-cases
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Converts a qualified Salesforce lead into an opportunity, creates an account if needed, and notifies the account owner via Teams.
naftiko: "0.5"
info:
label: "Salesforce Lead-to-Opportunity Conversion"
description: "Converts a qualified Salesforce lead into an opportunity, creates an account if needed, and notifies the account owner via Teams."
tags:
- sales
- crm
- salesforce
- lead-management
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: convert-lead
description: "Given a Salesforce lead ID, convert the lead to an opportunity and account in Salesforce, then notify the assigned sales rep via Teams. Use for automated lead qualification workflows."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce Lead ID to convert."
steps:
- name: get-lead
type: call
call: salesforce-lead.get-lead
with:
lead_id: "{{lead_id}}"
- name: convert-lead
type: call
call: salesforce-convert.convert-lead
with:
lead_id: "{{lead_id}}"
convertedStatus: "Qualified"
- name: notify-owner
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-lead.owner_email}}"
text: "Lead {{get-lead.name}} has been converted to an opportunity. Account: {{convert-lead.accountId}}"
consumes:
- type: http
namespace: salesforce-lead
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: salesforce-convert
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: lead-convert
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: convert-lead
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Salesforce for opportunities that have changed stage in the last 24 hours and logs the changes to a Power BI dataset for sales pipeline reporting.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Stage Sync"
description: "Queries Salesforce for opportunities that have changed stage in the last 24 hours and logs the changes to a Power BI dataset for sales pipeline reporting."
tags:
- sales
- crm
- salesforce
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: sync-opportunity-stages
description: "Fetch all Salesforce opportunities with stage changes in the last 24 hours and push the updated records to the Power BI sales pipeline dataset. Use for daily sales pipeline refresh."
steps:
- name: get-changed-opps
type: call
call: salesforce.query-opportunities
with:
soql: "SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE LastModifiedDate = LAST_N_DAYS:1"
- name: push-to-powerbi
type: call
call: powerbi.push-rows
with:
dataset_id: "$secrets.powerbi_pipeline_dataset_id"
table_name: "Opportunities"
rows: "{{get-changed-opps.records}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-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
Assembles a QBR data pack by pulling account health, open opportunities, and case volume from Salesforce, then posts a summary to the sales leadership Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Quarterly Business Review Pack Builder"
description: "Assembles a QBR data pack by pulling account health, open opportunities, and case volume from Salesforce, then posts a summary to the sales leadership Teams channel."
tags:
- sales
- salesforce
- reporting
- microsoft-teams
- qbr
capability:
exposes:
- type: mcp
namespace: sales-qbr
port: 8080
tools:
- name: build-qbr-pack
description: "Given a Salesforce account ID, compile a QBR data pack with account health metrics, pipeline, and case volume, then post a summary to the sales leadership Teams channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce Account ID for the QBR."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: get-pipeline
type: call
call: salesforce-pipeline.query-opportunities
with:
soql: "SELECT Id,Name,Amount,StageName FROM Opportunity WHERE AccountId='{{account_id}}' AND IsClosed=false"
- name: post-summary
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "QBR Pack ready for {{get-account.Name}}: {{get-pipeline.totalSize}} open opportunities compiled."
consumes:
- type: http
namespace: salesforce
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: account
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: salesforce-pipeline
baseUri: "https://cocacola.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: soql
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves batch details for a material from SAP S/4HANA, returning batch number, production date, shelf life expiry, and batch status.
naftiko: "0.5"
info:
label: "SAP Batch Traceability Lookup"
description: "Retrieves batch details for a material from SAP S/4HANA, returning batch number, production date, shelf life expiry, and batch status."
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 batch number, 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://coca-cola-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://coca-cola-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
Pulls actual vs. planned spending by cost center from SAP S/4HANA and posts a variance summary to the Finance Microsoft Teams channel for monthly close review.
naftiko: "0.5"
info:
label: "SAP Cost Center Budget Variance Report"
description: "Pulls actual vs. planned spending by cost center from SAP S/4HANA and posts a variance summary to the Finance Microsoft Teams channel for monthly close review."
tags:
- finance
- sap
- budgeting
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: digest-budget-variance
description: "Retrieve actual vs. planned cost center spending from SAP S/4HANA for the current fiscal period and post a variance digest to the Finance Teams channel. Use for monthly close reviews."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYYMM format, e.g. 202603."
steps:
- name: get-variance
type: call
call: sap.get-cost-center-variance
with:
fiscal_period: "{{fiscal_period}}"
- name: post-report
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_finance_channel_id"
text: "Budget Variance Report for period {{fiscal_period}} is ready. {{get-variance.total_cost_centers}} cost centers reviewed."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-center-variance
path: "/A_CostCenter"
inputParameters:
- name: fiscal_period
in: query
operations:
- name: get-cost-center-variance
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: 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 delivery number. Returns ship-to party, goods issue date, and overall status."
inputParameters:
- name: delivery_number
in: body
type: string
description: "The SAP delivery document number, e.g. 8000012345."
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://coca-cola-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 movement data from SAP, 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 movement data from SAP, 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 movement data, validate against warehouse, and 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 to reconcile 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 {{plant_code}} on {{movement_date}}"
description: "Total movements: {{get-goods-movements.count}}. Warehouse records: {{get-warehouse-records.count}}."
category: "inventory_reconciliation"
assignment_group: "Warehouse_Ops_{{plant_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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}}' and PostingDate eq datetime'{{date}}'"
inputParameters:
- name: plant
in: query
- name: date
in: query
operations:
- name: get-goods-movements
method: GET
- name: warehouse-inventory
path: "/WarehouseInventory(Plant='{{plant}}',Date='{{date}}')"
inputParameters:
- name: plant
in: path
- name: date
in: path
operations:
- name: get-warehouse-inventory
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.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
Records a goods receipt in SAP S/4HANA for a delivered purchase order line, updates inventory, and notifies the procurement team via Teams.
naftiko: "0.5"
info:
label: "SAP Goods Receipt Confirmation"
description: "Records a goods receipt in SAP S/4HANA for a delivered purchase order line, updates inventory, and notifies the procurement team via Teams."
tags:
- supply-chain
- sap
- procurement
- inventory
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: confirm-goods-receipt
description: "Given a SAP purchase order number and delivery quantity, post a goods receipt in SAP S/4HANA to update inventory and notify the procurement team via Teams."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number for the delivery."
- name: quantity
in: body
type: number
description: "The quantity delivered."
steps:
- name: post-gr
type: call
call: sap.post-goods-receipt
with:
po_number: "{{po_number}}"
quantity: "{{quantity}}"
- name: notify-procurement
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_procurement_channel_id"
text: "Goods receipt posted for PO {{po_number}}: {{quantity}} units received. GR Document: {{post-gr.material_document}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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_MaterialDocumentHeader"
operations:
- name: post-goods-receipt
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current stock level for a given material number 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 given material number 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, e.g. 000000000050001234."
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://coca-cola-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
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 current 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://coca-cola-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 manufacturing tracking.
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 manufacturing tracking."
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, e.g. 1000001234."
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.MfgOrderPlannedTotalQty"
- name: planned_qty
type: string
mapping: "$.d.MfgOrderPlannedTotalQty"
- name: confirmed_qty
type: string
mapping: "$.d.MfgOrderConfirmedYieldQty"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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
Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, total value, and open line items.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, total value, and open line items."
tags:
- finance
- procurement
- sap
- erp
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-purchase-order
description: "Look up a Coca-Cola SAP S/4HANA purchase order by PO number. Returns status, vendor name, total amount, and currency. Use for procurement tracking or invoice reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number, e.g. 4500001234."
call: sap.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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 inspection lot 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 inspection lot 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://coca-cola-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
Retrieves vendor master data from SAP S/4HANA by vendor ID, returning payment terms, bank details status, and contact information for supplier management.
naftiko: "0.5"
info:
label: "SAP Vendor Master Data Lookup"
description: "Retrieves vendor master data from SAP S/4HANA by vendor ID, returning payment terms, bank details status, and contact information for supplier management."
tags:
- procurement
- sap
- vendor-management
capability:
exposes:
- type: mcp
namespace: vendor-mgmt
port: 8080
tools:
- name: get-vendor
description: "Look up a SAP supplier/vendor record by vendor ID. Returns company name, payment terms, currency, and bank verification status. Use for supplier onboarding checks or payment processing."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor (supplier) ID, e.g. 1000012."
call: sap.get-vendor
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: company_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: currency
type: string
mapping: "$.d.Currency"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: suppliers
path: "/A_Supplier('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Synchronizes seasonal demand plans by pulling historical sales data from Teradata, adjusting SAP MRP parameters, and notifying supply chain planners via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Demand Planning Sync"
description: "Synchronizes seasonal demand plans by pulling historical sales data from Teradata, adjusting SAP MRP parameters, and notifying supply chain planners via Microsoft Teams."
tags:
- supply-chain
- manufacturing
- teradata
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: seasonal-planning
port: 8080
tools:
- name: sync-seasonal-demand
description: "Sync seasonal demand: pull Teradata sales history, adjust SAP MRP, and notify planners."
inputParameters:
- name: product_group
in: body
type: string
description: "The product group code."
- name: season
in: body
type: string
description: "The season: spring, summer, fall, winter."
steps:
- name: get-historical-sales
type: call
call: teradata.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 update for {{product_group}} ({{season}}): Historical avg: {{get-historical-sales.avg_volume}}. Projected demand: {{get-historical-sales.projected_demand}}. SAP MRP parameters updated."
consumes:
- type: http
namespace: teradata
baseUri: "https://coca-cola-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: seasonal-sales
path: "/queries/seasonal-sales?product_group={{product_group}}&season={{season}}"
inputParameters:
- name: product_group
in: query
- name: season
in: query
operations:
- name: get-seasonal-sales
method: GET
- type: http
namespace: sap
baseUri: "https://coca-cola-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
Creates a ServiceNow change request for a planned infrastructure change, routes it for manager approval, and notifies the requester via Teams when approved or rejected.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval"
description: "Creates a ServiceNow change request for a planned infrastructure change, routes it for manager approval, and notifies the requester via Teams when approved or rejected."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: create-change-request
description: "Given a change description, risk level, and planned start/end times, create a ServiceNow change request and notify the requester of submission via Teams."
inputParameters:
- name: description
in: body
type: string
description: "A description of the planned infrastructure change."
- name: risk
in: body
type: string
description: "Risk level: low, medium, or high."
- name: planned_start
in: body
type: string
description: "Planned change start time in ISO 8601 format."
- name: requester_upn
in: body
type: string
description: "UPN (email) of the person requesting the change."
steps:
- name: create-cr
type: call
call: servicenow.create-change
with:
description: "{{description}}"
risk: "{{risk}}"
start_date: "{{planned_start}}"
- name: notify-requester
type: call
call: msteams.send-message
with:
recipient_upn: "{{requester_upn}}"
text: "Your change request {{create-cr.number}} has been submitted and is pending approval."
consumes:
- type: http
namespace: servicenow
baseUri: "https://cocacola.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
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
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, e.g. INC0012345."
call: servicenow.get-incident
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assignment_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: short_description
type: string
mapping: "$.result.short_description"
consumes:
- type: http
namespace: servicenow
baseUri: "https://cocacola.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 in the document library."
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
Monitors brand sentiment by pulling social listening data from HubSpot, cross-referencing with Adobe Analytics web traffic, and alerting brand management via Microsoft Teams.
naftiko: "0.5"
info:
label: "Social Media Sentiment Alert"
description: "Monitors brand sentiment by pulling social listening data from HubSpot, cross-referencing with Adobe Analytics web traffic, and alerting brand management via Microsoft Teams."
tags:
- marketing
- brand-management
- hubspot
- adobe-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: brand-monitoring
port: 8080
tools:
- name: check-brand-sentiment
description: "Orchestrate brand sentiment check: pull HubSpot social data, cross-reference Adobe Analytics, and alert brand team."
inputParameters:
- name: brand_name
in: body
type: string
description: "The brand to monitor, e.g. Coca-Cola, Sprite."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD:YYYY-MM-DD format."
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: adobe.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: "Brand Sentiment Report for {{brand_name}}: Social mentions: {{get-social-sentiment.mention_count}}. Sentiment score: {{get-social-sentiment.sentiment_score}}. Web traffic: {{get-web-traffic.page_views}} 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: adobe
baseUri: "https://analytics.adobe.io/api/cocacola"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/reports"
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
Orchestrates new supplier onboarding by creating the vendor master in SAP, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Onboarding Orchestrator"
description: "Orchestrates new supplier onboarding by creating the vendor master in SAP, setting up a contract workspace in SharePoint, and notifying procurement via Microsoft Teams."
tags:
- procurement
- sap
- sharepoint
- microsoft-teams
- supply-chain
capability:
exposes:
- type: mcp
namespace: procurement-onboarding
port: 8080
tools:
- name: onboard-supplier
description: "Orchestrate supplier onboarding: create SAP vendor master, set up SharePoint workspace, and notify procurement team."
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, e.g. raw-materials, packaging."
steps:
- name: create-vendor
type: call
call: sap.create-vendor
with:
name: "{{vendor_name}}"
country: "{{vendor_country}}"
purchasing_group: "{{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}}). SAP Vendor ID: {{create-vendor.vendor_id}}. Category: {{category}}. Contract workspace created in SharePoint."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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"
operations:
- name: create-vendor
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
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 details, update Salesforce opportunity, and 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"
delivery_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 alert: Delivery {{delivery_number}} to {{get-delivery.ship_to_party}} is delayed. Salesforce opportunity {{opportunity_id}} updated."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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 by pulling energy consumption from SAP plant maintenance, water usage from environmental monitoring, and posting a consolidated ESG report to SharePoint.
naftiko: "0.5"
info:
label: "Sustainability Reporting Aggregator"
description: "Aggregates sustainability metrics by pulling energy consumption from SAP plant maintenance, water usage from environmental monitoring, and posting a consolidated ESG report to SharePoint."
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 and environmental monitoring, then publish report to SharePoint and Teams."
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-esg-team
type: call
call: msteams.send-message
with:
channel_id: "sustainability"
text: "Sustainability report for plant {{plant_code}} ({{reporting_period}}): Energy consumption: {{get-energy-data.total_kwh}} kWh. Water usage: {{get-water-usage.total_liters}} liters. Report uploaded to SharePoint."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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
Schedules syrup concentrate production by checking raw material availability in SAP, creating production orders, and notifying the bottling plant via Microsoft Teams.
naftiko: "0.5"
info:
label: "Syrup Concentrate Production Scheduling"
description: "Schedules syrup concentrate production by checking raw material availability in SAP, creating production orders, and notifying the bottling plant via Microsoft Teams."
tags:
- manufacturing
- supply-chain
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: production-scheduling
port: 8080
tools:
- name: schedule-concentrate-production
description: "Schedule concentrate production: check SAP raw materials, create production order, and notify bottling plant."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number for the concentrate."
- name: plant_code
in: body
type: string
description: "The manufacturing plant code."
- name: quantity
in: body
type: string
description: "The quantity to produce."
- name: production_date
in: body
type: string
description: "The target production date in YYYY-MM-DD format."
steps:
- name: check-raw-materials
type: call
call: sap.check-material-availability
with:
material_number: "{{material_number}}"
plant: "{{plant_code}}"
quantity: "{{quantity}}"
- name: create-production-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: "plant-{{plant_code}}-production"
text: "Concentrate production scheduled: Material {{material_number}}. Qty: {{quantity}}. Date: {{production_date}}. Order: {{create-production-order.order_number}}. Raw material status: {{check-raw-materials.availability_status}}."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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
Retrieves the status of a running Teradata query by session ID, returning query state, elapsed time, and CPU consumption.
naftiko: "0.5"
info:
label: "Teradata Warehouse Query Status"
description: "Retrieves the status of a running Teradata query by session ID, returning query state, elapsed time, and CPU consumption."
tags:
- analytics
- teradata
- data-warehouse
capability:
exposes:
- type: mcp
namespace: data-warehouse
port: 8080
tools:
- name: get-query-status
description: "Check the status of a Teradata query by session ID. Returns query state, elapsed time, and CPU seconds."
inputParameters:
- name: session_id
in: body
type: string
description: "The Teradata session ID."
call: teradata.get-query-status
with:
session_id: "{{session_id}}"
outputParameters:
- name: query_state
type: string
mapping: "$.queryState"
- name: elapsed_time
type: string
mapping: "$.elapsedTime"
- name: cpu_seconds
type: string
mapping: "$.cpuSeconds"
consumes:
- type: http
namespace: teradata
baseUri: "https://coca-cola-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries/{{session_id}}/status"
inputParameters:
- name: session_id
in: path
operations:
- name: get-query-status
method: GET
Calculates trade promotion ROI by pulling promotion spend from SAP, incremental sales from Circana, and posting the ROI analysis to Salesforce and Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Promotion ROI Calculator"
description: "Calculates trade promotion ROI by pulling promotion spend from SAP, incremental sales from Circana, and posting the ROI 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 sales lift, and post analysis 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 for promotion spend."
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}}"
incremental_volume: "{{get-sales-lift.incremental_volume}}"
roi_percentage: "{{get-sales-lift.roi}}"
- name: post-roi-report
type: call
call: msteams.send-message
with:
channel_id: "trade-marketing"
text: "Trade Promotion ROI: Promotion {{promotion_id}}. Spend: ${{get-promotion-spend.total_actual}}. Incremental volume: {{get-sales-lift.incremental_volume}}. ROI: {{get-sales-lift.roi}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://coca-cola.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
Optimizes vending machine refills by pulling telemetry data, checking regional inventory in SAP, and creating route-optimized refill tasks in ServiceNow.
naftiko: "0.5"
info:
label: "Vending Machine Refill Optimization"
description: "Optimizes vending machine refills by pulling telemetry data, checking regional inventory in SAP, 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 machine telemetry, check SAP inventory, and create ServiceNow refill tasks."
inputParameters:
- name: region_code
in: body
type: string
description: "The regional distribution code."
- name: threshold_percent
in: body
type: string
description: "The stock threshold percentage to trigger refill."
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 route: Region {{region_code}}"
description: "Machines below {{threshold_percent}}%: {{get-machine-telemetry.low_stock_count}}. Regional inventory: {{check-regional-inventory.available_cases}} cases available."
category: "vending_refill"
assignment_group: "Distribution_{{region_code}}"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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}}' and StockLevel lt {{threshold}}"
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://cocacola.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
Reconciles vendor payments by pulling invoice data from SAP, matching against Oracle Cloud payment 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 Oracle Cloud payment records, and logging discrepancies in ServiceNow."
tags:
- finance
- sap
- oracle-cloud
- servicenow
- procurement
capability:
exposes:
- type: mcp
namespace: finance-ops
port: 8080
tools:
- name: reconcile-vendor-payment
description: "Orchestrate vendor payment reconciliation across SAP invoices, Oracle Cloud payments, and ServiceNow for discrepancy tracking."
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-oracle-payment
type: call
call: oracle.get-payment
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}}. Oracle payment: {{get-oracle-payment.payment_amount}}."
category: "finance_reconciliation"
assignment_group: "Accounts_Payable"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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: oracle
baseUri: "https://coca-cola.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: payments
path: "/payments?q=VendorId={{vendor_id}};InvoiceNumber={{invoice_reference}}"
inputParameters:
- name: vendor_id
in: query
- name: invoice_reference
in: query
operations:
- name: get-payment
method: GET
- type: http
namespace: servicenow
baseUri: "https://cocacola.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 action 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 action 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 in SAP, create transfer orders, and log in ServiceNow."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: source_plant
in: body
type: string
description: "The source plant code."
- name: target_plant
in: body
type: string
description: "The target plant code."
- name: quantity
in: body
type: string
description: "The 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"
assignment_group: "Warehouse_Ops"
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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 consumption data from SAP, comparing against permitted limits, and alerting environmental compliance via Microsoft Teams and ServiceNow.
naftiko: "0.5"
info:
label: "Water Usage Compliance Monitor"
description: "Monitors plant water usage compliance by pulling consumption data from SAP, comparing against permitted limits, and alerting environmental compliance 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 usage compliance: pull SAP data, compare limits, and alert compliance 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 usage compliance: Plant {{plant_code}} - {{period}}"
description: "Usage: {{get-water-usage.total_liters}} liters. Permit limit: {{get-water-usage.permit_limit}} liters. Utilization: {{get-water-usage.utilization_percent}}%."
category: "environmental_compliance"
assignment_group: "Environmental_Compliance"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "environmental"
text: "Water Usage Report: Plant {{plant_code}} ({{period}}). Usage: {{get-water-usage.total_liters}}L. Permit: {{get-water-usage.permit_limit}}L. Utilization: {{get-water-usage.utilization_percent}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://coca-cola-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://cocacola.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
Submits a compensation change request for an employee in Workday, routes it for manager and HR approval, and notifies all parties via Teams when the action is complete.
naftiko: "0.5"
info:
label: "Workday Compensation Change Approval"
description: "Submits a compensation change request for an employee in Workday, routes it for manager and HR approval, and notifies all parties via Teams when the action is complete."
tags:
- hr
- compensation
- workday
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: hr-comp
port: 8080
tools:
- name: submit-comp-change
description: "Given a Workday employee ID, new base salary, and effective date, submit a compensation change request in Workday and notify the manager and HR partner via Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee receiving the compensation change."
- name: new_salary
in: body
type: number
description: "The new base salary amount in the employee's currency."
- name: effective_date
in: body
type: string
description: "Effective date for the compensation change in ISO 8601 format."
steps:
- name: get-worker
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: submit-change
type: call
call: workday.submit-comp-change
with:
worker_id: "{{employee_id}}"
new_salary: "{{new_salary}}"
effective_date: "{{effective_date}}"
- name: notify-manager
type: call
call: msteams.send-message
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "A compensation change for {{get-worker.full_name}} (effective {{effective_date}}) has been submitted and is pending your approval in Workday."
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: "/coca-cola/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- name: submit-comp-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
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 Coca-Cola employee profile in Workday by worker ID. Returns full name, department, job title, and manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID, e.g. WD-00456."
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: "/coca-cola/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Initiates a performance review cycle in Workday for a given employee population and notifies managers via Teams to complete evaluations by the deadline.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Kickoff"
description: "Initiates a performance review cycle in Workday for a given employee population and notifies managers via Teams to complete evaluations by the deadline."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: kickoff-review-cycle
description: "Start a performance review cycle in Workday for a defined employee group and post a notification to managers via Teams with the review deadline. Use for annual or mid-year performance cycle launches."
inputParameters:
- name: review_period
in: body
type: string
description: "The review period label, e.g. 2026-Annual."
- name: due_date
in: body
type: string
description: "Review completion deadline in ISO 8601 format."
steps:
- name: create-review-event
type: call
call: workday.create-review-event
with:
period: "{{review_period}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Performance review cycle {{review_period}} is open. Please complete evaluations by {{due_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: review-events
path: "/coca-cola/performanceReviews"
operations:
- name: create-review-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Workday for pending time-off requests older than 48 hours and sends a reminder to the responsible managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Time-Off Request Approval Reminder"
description: "Queries Workday for pending time-off requests older than 48 hours and sends a reminder to the responsible managers via Microsoft Teams."
tags:
- hr
- workday
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: hr-leave
port: 8080
tools:
- name: remind-pending-timeoff-approvals
description: "Fetch all Workday time-off requests that have been pending approval for more than 48 hours and send a reminder to each manager via Teams."
steps:
- name: get-pending-requests
type: call
call: workday.list-pending-timeoff
with:
status: "Awaiting_Approval"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "$secrets.teams_hr_channel_id"
text: "Reminder: {{get-pending-requests.total_count}} time-off requests are awaiting approval in Workday for more than 48 hours."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: timeoff-requests
path: "/coca-cola/timeOffRequests"
inputParameters:
- name: status
in: query
operations:
- name: list-pending-timeoff
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks workforce training compliance by pulling training records from Workday, verifying certifications against requirements, and creating non-compliance tasks in ServiceNow.
naftiko: "0.5"
info:
label: "Workforce Training Compliance Check"
description: "Checks workforce training compliance by pulling training records from Workday, verifying certifications against requirements, 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, and create ServiceNow tasks for gaps."
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 {{plant_code}}"
description: "Overdue trainings: {{get-training-records.overdue_count}}. Expiring certifications: {{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 Report for {{department}} at plant {{plant_code}}: Total employees: {{get-training-records.total_employees}}. Compliant: {{get-training-records.compliant_count}}. Overdue: {{get-training-records.overdue_count}}. ServiceNow task: {{create-compliance-tasks.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/coca-cola/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://cocacola.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 a Zendesk support ticket by ID, returning status, priority, requester, and subject for customer service tracking.
naftiko: "0.5"
info:
label: "Zendesk Ticket Status Lookup"
description: "Retrieves a Zendesk support ticket by ID, returning status, priority, requester, and subject for customer service tracking."
tags:
- customer-service
- zendesk
- support
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: get-ticket
description: "Look up a Zendesk support ticket by ID. Returns status, priority, requester name, and subject."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: zendesk.get-ticket
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
- name: requester
type: string
mapping: "$.ticket.requester.name"
- name: subject
type: string
mapping: "$.ticket.subject"
consumes:
- type: http
namespace: zendesk
baseUri: "https://cocacola.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET