Coca-Cola Capabilities

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

Sort
Expand

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