Burger King Capabilities

Naftiko 0.5 capability definitions for Burger King - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Creates and sends a push notification campaign in Adobe Campaign for BK app users about limited-time offers.

naftiko: "0.5"
info:
  label: "Adobe Campaign Promo Push Notification"
  description: "Creates and sends a push notification campaign in Adobe Campaign for BK app users about limited-time offers."
  tags:
    - marketing
    - push-notifications
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: push-campaigns
      port: 8080
      tools:
        - name: send-push-campaign
          description: "Create and deliver a push notification campaign via Adobe Campaign."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Campaign name."
            - name: message_title
              in: body
              type: string
              description: "Push notification title."
            - name: message_body
              in: body
              type: string
              description: "Push notification body text."
            - name: target_segment
              in: body
              type: string
              description: "Adobe Campaign audience segment ID."
          call: "adobe-campaign.create-delivery"
          with:
            name: "{{campaign_name}}"
            channel: "push"
            title: "{{message_title}}"
            body: "{{message_body}}"
            segment_id: "{{target_segment}}"
          outputParameters:
            - name: delivery_id
              type: string
              mapping: "$.PKey"
            - name: status
              type: string
              mapping: "$.state"
  consumes:
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/burgerking/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/profileAndServicesExt/delivery"
          operations:
            - name: create-delivery
              method: POST

Triggers an Alteryx Server workflow that produces weekly sales forecasts per restaurant and writes output to Snowflake.

naftiko: "0.5"
info:
  label: "Alteryx Workflow Runner for Sales Forecasting"
  description: "Triggers an Alteryx Server workflow that produces weekly sales forecasts per restaurant and writes output to Snowflake."
  tags:
    - analytics
    - forecasting
    - alteryx
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: sales-forecasting
      port: 8080
      tools:
        - name: run-forecast-workflow
          description: "Trigger the Alteryx sales forecasting workflow and load results into Snowflake."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Region to forecast."
            - name: forecast_weeks
              in: body
              type: integer
              description: "Number of weeks to forecast ahead."
          steps:
            - name: trigger-workflow
              type: call
              call: "alteryx.run-workflow"
              with:
                workflow_id: "sales_forecast_v3"
                parameters: "{\"region\": \"{{region}}\", \"weeks\": {{forecast_weeks}}}"
            - name: load-results
              type: call
              call: "snowflake.run-query"
              with:
                query: "CALL load_forecast_results('{{region}}', {{forecast_weeks}})"
  consumes:
    - type: http
      namespace: alteryx
      baseUri: "https://alteryx.burgerking.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.alteryx_token"
      resources:
        - name: workflows
          path: "/workflows/{{workflow_id}}/jobs"
          inputParameters:
            - name: workflow_id
              in: path
          operations:
            - name: run-workflow
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Checks the invocation metrics and error rates of critical AWS Lambda functions powering BK's ordering API.

naftiko: "0.5"
info:
  label: "AWS Lambda Function Health Checker"
  description: "Checks the invocation metrics and error rates of critical AWS Lambda functions powering BK's ordering API."
  tags:
    - devops
    - serverless
    - aws-lambda
    - cloudwatch
capability:
  exposes:
    - type: mcp
      namespace: lambda-health
      port: 8080
      tools:
        - name: check-lambda-health
          description: "Retrieve CloudWatch metrics for a Lambda function including invocations, errors, and duration."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "AWS Lambda function name."
            - name: period_minutes
              in: body
              type: integer
              description: "Lookback period in minutes."
          steps:
            - name: get-invocations
              type: call
              call: "cloudwatch.get-metric"
              with:
                namespace: "AWS/Lambda"
                metric_name: "Invocations"
                dimensions: "[{\"Name\": \"FunctionName\", \"Value\": \"{{function_name}}\"}]"
                period: "{{period_minutes}}"
            - name: get-errors
              type: call
              call: "cloudwatch.get-metric"
              with:
                namespace: "AWS/Lambda"
                metric_name: "Errors"
                dimensions: "[{\"Name\": \"FunctionName\", \"Value\": \"{{function_name}}\"}]"
                period: "{{period_minutes}}"
  consumes:
    - type: http
      namespace: cloudwatch
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: aws-sig-v4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: metrics
          path: "/"
          operations:
            - name: get-metric
              method: POST

Retrieves the latest mobile app build status from Azure DevOps, returning build number, status, and source branch.

naftiko: "0.5"
info:
  label: "Azure DevOps Mobile App Build Status"
  description: "Retrieves the latest mobile app build status from Azure DevOps, returning build number, status, and source branch."
  tags:
    - engineering
    - mobile-app
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: mobile-app-builds
      port: 8080
      tools:
        - name: get-mobile-build-status
          description: "Get the latest mobile app build status from Azure DevOps."
          inputParameters:
            - name: definition_id
              in: body
              type: string
              description: "Build definition ID."
          call: "azdevops.get-latest-build"
          with:
            definition_id: "{{definition_id}}"
          outputParameters:
            - name: build_number
              type: string
              mapping: "$.value[0].buildNumber"
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: source_branch
              type: string
              mapping: "$.value[0].sourceBranch"
  consumes:
    - type: http
      namespace: azdevops
      baseUri: "https://dev.azure.com/burgerking"
      authentication:
        type: basic
        username: "$secrets.azdevops_user"
        password: "$secrets.azdevops_pat"
      resources:
        - name: builds
          path: "/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: definition_id
              in: query
          operations:
            - name: get-latest-build
              method: GET

Checks the latest build pipeline status in Azure DevOps for BK's mobile app and returns build health.

naftiko: "0.5"
info:
  label: "Azure DevOps Pipeline Status"
  description: "Checks the latest build pipeline status in Azure DevOps for BK's mobile app and returns build health."
  tags:
    - devops
    - ci-cd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: cicd-status
      port: 8080
      tools:
        - name: get-pipeline-status
          description: "Get the latest pipeline run status from Azure DevOps."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline definition ID."
          call: "azuredevops.get-pipeline-runs"
          with:
            project: "{{project}}"
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: run_id
              type: integer
              mapping: "$.value[0].id"
            - name: status
              type: string
              mapping: "$.value[0].state"
            - name: result
              type: string
              mapping: "$.value[0].result"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/burgerking"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azuredevops_pat"
      resources:
        - name: pipeline-runs
          path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs"
          inputParameters:
            - name: project
              in: path
            - name: pipeline_id
              in: path
          operations:
            - name: get-pipeline-runs
              method: GET

Retrieves an order from BigCommerce for BK's merchandise store and returns shipping and payment status.

naftiko: "0.5"
info:
  label: "BigCommerce Order Status Lookup"
  description: "Retrieves an order from BigCommerce for BK's merchandise store and returns shipping and payment status."
  tags:
    - e-commerce
    - orders
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: merch-orders
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up a BigCommerce merchandise order by order ID."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "BigCommerce order number."
          call: "bigcommerce.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: payment_status
              type: string
              mapping: "$.payment_status"
            - name: total
              type: string
              mapping: "$.total_inc_tax"
            - name: date_created
              type: string
              mapping: "$.date_created"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v2"
      authentication:
        type: apiKey
        key: "$secrets.bigcommerce_access_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

When a new document is uploaded to Box, creates a Jira review task and notifies the approver via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Box Document Approval Workflow"
  description: "When a new document is uploaded to Box, creates a Jira review task and notifies the approver via Microsoft Teams."
  tags:
    - document-management
    - approvals
    - box
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: doc-approvals
      port: 8080
      tools:
        - name: initiate-doc-review
          description: "Start a document review workflow when a file is uploaded to Box."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "Box file ID."
            - name: reviewer_email
              in: body
              type: string
              description: "Email of the assigned reviewer."
            - name: due_date
              in: body
              type: string
              description: "Review due date in YYYY-MM-DD."
          steps:
            - name: get-file-info
              type: call
              call: "box.get-file"
              with:
                file_id: "{{file_id}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "DOCREV"
                issue_type: "Task"
                summary: "Review: {{get-file-info.name}}"
                description: "Please review the document: {{get-file-info.shared_link.url}}. Due by {{due_date}}."
                assignee: "{{reviewer_email}}"
            - name: notify-reviewer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{reviewer_email}}"
                text: "You have a new document to review: {{get-file-info.name}}. Jira ticket: {{create-review-task.key}}. Due: {{due_date}}."
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves franchise agreement document metadata from Box by file ID, returning file name, version, and shared link.

naftiko: "0.5"
info:
  label: "Box Franchise Agreement Lookup"
  description: "Retrieves franchise agreement document metadata from Box by file ID, returning file name, version, and shared link."
  tags:
    - legal
    - franchise-agreements
    - box
capability:
  exposes:
    - type: mcp
      namespace: franchise-documents
      port: 8080
      tools:
        - name: get-franchise-agreement
          description: "Retrieve franchise agreement metadata from Box by file ID."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "The Box file ID."
          call: "box.get-file-info"
          with:
            file_id: "{{file_id}}"
          outputParameters:
            - name: file_name
              type: string
              mapping: "$.name"
            - name: version
              type: string
              mapping: "$.file_version.id"
            - name: shared_link
              type: string
              mapping: "$.shared_link.url"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file-info
              method: GET

Retrieves brand template designs from Canva for restaurant-level promotional materials.

naftiko: "0.5"
info:
  label: "Canva Brand Asset Generator"
  description: "Retrieves brand template designs from Canva for restaurant-level promotional materials."
  tags:
    - design
    - branding
    - canva
capability:
  exposes:
    - type: mcp
      namespace: brand-design
      port: 8080
      tools:
        - name: get-brand-templates
          description: "Fetch available brand templates from Canva for BK marketing materials."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Template category (e.g., menu-boards, window-signs, social-posts)."
          call: "canva.list-designs"
          with:
            folder_id: "bk_brand_templates"
            category: "{{category}}"
          outputParameters:
            - name: templates
              type: array
              mapping: "$.data"
            - name: total
              type: integer
              mapping: "$.total"
  consumes:
    - type: http
      namespace: canva
      baseUri: "https://api.canva.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.canva_token"
      resources:
        - name: designs
          path: "/designs"
          operations:
            - name: list-designs
              method: GET

Receives a catering order from Salesforce, creates a production schedule in the POS system via ServiceNow, and confirms with the customer via WhatsApp.

naftiko: "0.5"
info:
  label: "Catering Order Fulfillment Pipeline"
  description: "Receives a catering order from Salesforce, creates a production schedule in the POS system via ServiceNow, and confirms with the customer via WhatsApp."
  tags:
    - operations
    - catering
    - salesforce
    - servicenow
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: catering-fulfillment
      port: 8080
      tools:
        - name: fulfill-catering-order
          description: "Process catering order, create production schedule, and confirm."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "Salesforce catering order ID."
            - name: restaurant_id
              in: body
              type: string
              description: "Fulfilling restaurant location ID."
          steps:
            - name: get-order
              type: call
              call: "salesforce.get-catering-order"
              with:
                order_id: "{{order_id}}"
            - name: create-schedule
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_catering_schedule"
                short_description: "Catering — {{order_id}} — {{restaurant_id}}"
                description: "Customer: {{get-order.customer_name}}. Items: {{get-order.item_count}}. Delivery: {{get-order.delivery_date}} {{get-order.delivery_time}}."
            - name: confirm-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone_number: "{{get-order.customer_phone}}"
                message: "Your Burger King catering order {{order_id}} is confirmed for {{get-order.delivery_date}} at {{get-order.delivery_time}}. Total: ${{get-order.total_amount}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: orders
          path: "/sobjects/Catering_Order__c/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-catering-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Queries Circana (formerly IRI) market data to retrieve QSR category market share metrics for competitive benchmarking.

naftiko: "0.5"
info:
  label: "Circana Market Share Retriever"
  description: "Queries Circana (formerly IRI) market data to retrieve QSR category market share metrics for competitive benchmarking."
  tags:
    - analytics
    - market-research
    - circana
capability:
  exposes:
    - type: mcp
      namespace: market-intelligence
      port: 8080
      tools:
        - name: get-market-share
          description: "Retrieve QSR category market share data from Circana."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Product category (e.g., flame-grilled-burgers, chicken-sandwiches)."
            - name: time_period
              in: body
              type: string
              description: "Time period (e.g., L4W, L13W, L52W)."
            - name: geography
              in: body
              type: string
              description: "Market geography (e.g., Total_US, US_Northeast)."
          call: "circana.get-market-data"
          with:
            category: "{{category}}"
            period: "{{time_period}}"
            geo: "{{geography}}"
          outputParameters:
            - name: bk_share
              type: number
              mapping: "$.brands.burger_king.share"
            - name: category_volume
              type: number
              mapping: "$.category.total_volume"
            - name: share_change
              type: number
              mapping: "$.brands.burger_king.share_change"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: market-data
          path: "/market/qsr"
          operations:
            - name: get-market-data
              method: GET

Receives AWS CloudWatch alarms for BK infrastructure and forwards critical alerts to a Microsoft Teams channel and creates ServiceNow incidents.

naftiko: "0.5"
info:
  label: "CloudWatch Infrastructure Alert Forwarder"
  description: "Receives AWS CloudWatch alarms for BK infrastructure and forwards critical alerts to a Microsoft Teams channel and creates ServiceNow incidents."
  tags:
    - devops
    - alerting
    - cloudwatch
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-alerting
      port: 8080
      tools:
        - name: forward-cloudwatch-alarm
          description: "Forward a CloudWatch alarm to Teams and create a ServiceNow incident if severity is critical."
          inputParameters:
            - name: alarm_name
              in: body
              type: string
              description: "CloudWatch alarm name."
            - name: alarm_description
              in: body
              type: string
              description: "Alarm description and metric details."
            - name: severity
              in: body
              type: string
              description: "Alarm severity (critical, warning, info)."
          steps:
            - name: notify-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "infra_alerts"
                text: "AWS ALARM [{{severity}}]: {{alarm_name}} - {{alarm_description}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "CloudWatch Alarm: {{alarm_name}}"
                category: "infrastructure"
                urgency: "{{severity}}"
                description: "{{alarm_description}}"
  consumes:
    - 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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Searches Burger King's Confluence knowledge base for brand standards documents by keyword, returning page title, URL, and last modified date.

naftiko: "0.5"
info:
  label: "Confluence Brand Standards Lookup"
  description: "Searches Burger King's Confluence knowledge base for brand standards documents by keyword, returning page title, URL, and last modified date."
  tags:
    - brand-management
    - knowledge-base
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: brand-standards
      port: 8080
      tools:
        - name: search-brand-standards
          description: "Search Confluence for brand standards documents matching a keyword."
          inputParameters:
            - name: search_term
              in: body
              type: string
              description: "Keyword or phrase to search for."
          call: "confluence.search-content"
          with:
            cql: "label = 'brand-standards' AND text ~ '{{search_term}}'"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
            - name: total_count
              type: number
              mapping: "$.totalSize"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://burgerking.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content/search"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search-content
              method: GET

Publishes operational procedures and training content to Confluence and notifies restaurant managers via Teams.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Publisher"
  description: "Publishes operational procedures and training content to Confluence and notifies restaurant managers via Teams."
  tags:
    - knowledge-management
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: publish-procedure
          description: "Create or update an operational procedure page in Confluence and notify relevant teams."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
            - name: title
              in: body
              type: string
              description: "Page title."
            - name: content
              in: body
              type: string
              description: "Page content in storage format."
            - name: notify_channel
              in: body
              type: string
              description: "Teams channel to notify."
          steps:
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{space_key}}"
                title: "{{title}}"
                body: "{{content}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{notify_channel}}"
                text: "New procedure published: {{title}}. View at {{create-page.url}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://burgerking.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Detects scheduling conflicts from Workday, creates resolution tasks in ServiceNow, and notifies the restaurant manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Crew Scheduling Conflict Resolver"
  description: "Detects scheduling conflicts from Workday, creates resolution tasks in ServiceNow, and notifies the restaurant manager via Microsoft Teams."
  tags:
    - operations
    - scheduling
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: scheduling-conflicts
      port: 8080
      tools:
        - name: resolve-scheduling-conflict
          description: "Detect scheduling conflicts and create resolution tasks."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: shift_date
              in: body
              type: string
              description: "Shift date in YYYY-MM-DD."
          steps:
            - name: get-conflicts
              type: call
              call: "workday.get-schedule-conflicts"
              with:
                location: "{{restaurant_id}}"
                date: "{{shift_date}}"
            - name: create-resolution
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_schedule_conflict"
                short_description: "Schedule conflict — {{restaurant_id}} — {{shift_date}}"
                description: "{{get-conflicts.conflict_count}} conflicts detected for {{shift_date}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_{{restaurant_id}}"
                text: "Schedule conflict alert: {{get-conflicts.conflict_count}} conflicts on {{shift_date}}. Resolution ticket: {{create-resolution.number}}. Please review and reassign shifts."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://bk.workday.com/api/scheduling/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: conflicts
          path: "/schedule_conflicts?location={{location}}&date={{date}}"
          inputParameters:
            - name: location
              in: query
            - name: date
              in: query
          operations:
            - name: get-schedule-conflicts
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates customer feedback from HubSpot, runs sentiment analysis in Databricks, and updates the guest experience dashboard in Power BI.

naftiko: "0.5"
info:
  label: "Customer Feedback Sentiment Pipeline"
  description: "Aggregates customer feedback from HubSpot, runs sentiment analysis in Databricks, and updates the guest experience dashboard in Power BI."
  tags:
    - customer-experience
    - sentiment-analysis
    - hubspot
    - databricks
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: feedback-sentiment
      port: 8080
      tools:
        - name: analyze-customer-sentiment
          description: "Aggregate feedback, analyze sentiment, and refresh dashboard."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: period
              in: body
              type: string
              description: "Analysis period (e.g., last-30-days)."
          steps:
            - name: get-feedback
              type: call
              call: "hubspot.get-feedback"
              with:
                restaurant_id: "{{restaurant_id}}"
                period: "{{period}}"
            - name: run-sentiment
              type: call
              call: "databricks.run-job"
              with:
                job_id: "sentiment_analysis"
                restaurant_id: "{{restaurant_id}}"
                feedback_count: "{{get-feedback.total_count}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "guest_experience"
                dataset_id: "sentiment_scores"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: feedback
          path: "/objects/feedback_submissions/search"
          operations:
            - name: get-feedback
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://bk.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              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: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Pulls daily sales data from Snowflake, compares against targets in Databricks, and sends a performance digest to regional managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Daily Sales Digest Pipeline"
  description: "Pulls daily sales data from Snowflake, compares against targets in Databricks, and sends a performance digest to regional managers via Microsoft Teams."
  tags:
    - operations
    - sales-analytics
    - snowflake
    - databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: daily-sales-digest
      port: 8080
      tools:
        - name: generate-daily-sales-digest
          description: "Generate daily sales digest from Snowflake and Databricks."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Regional market identifier."
            - name: date
              in: body
              type: string
              description: "Report date in YYYY-MM-DD."
          steps:
            - name: get-sales-data
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT SUM(revenue), COUNT(*) FROM daily_sales WHERE region='{{region}}' AND sale_date='{{date}}'"
            - name: run-comparison
              type: call
              call: "databricks.run-job"
              with:
                job_id: "daily_sales_vs_target"
                region: "{{region}}"
                date: "{{date}}"
            - name: send-digest
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "regional_{{region}}"
                text: "Daily Sales Digest — {{region}} — {{date}}: Revenue ${{get-sales-data.total_revenue}}, Transactions: {{get-sales-data.transaction_count}}, vs Target: {{run-comparison.pct_to_target}}%"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://bk.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Runs a promotional uplift analysis notebook in Databricks, comparing sales during a promotion versus baseline, and stores results in Snowflake.

naftiko: "0.5"
info:
  label: "Databricks Promotional Uplift Analysis"
  description: "Runs a promotional uplift analysis notebook in Databricks, comparing sales during a promotion versus baseline, and stores results in Snowflake."
  tags:
    - analytics
    - promotions
    - databricks
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: promo-analytics
      port: 8080
      tools:
        - name: run-uplift-analysis
          description: "Trigger a Databricks notebook to calculate promotional sales uplift and load results to Snowflake."
          inputParameters:
            - name: promo_id
              in: body
              type: string
              description: "Promotion identifier."
            - name: start_date
              in: body
              type: string
              description: "Promotion start date."
            - name: end_date
              in: body
              type: string
              description: "Promotion end date."
          steps:
            - name: run-notebook
              type: call
              call: "databricks.run-notebook"
              with:
                notebook_path: "/Shared/promo_uplift_analysis"
                parameters: "{\"promo_id\": \"{{promo_id}}\", \"start_date\": \"{{start_date}}\", \"end_date\": \"{{end_date}}\"}"
            - name: store-results
              type: call
              call: "snowflake.run-query"
              with:
                query: "INSERT INTO promo_analysis_results SELECT * FROM staging_promo_results WHERE promo_id='{{promo_id}}'"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://burgerking.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/submit"
          operations:
            - name: run-notebook
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Queries Datadog for point-of-sale system health metrics at a specified restaurant, returning uptime percentage and error rates.

naftiko: "0.5"
info:
  label: "Datadog POS System Health Check"
  description: "Queries Datadog for point-of-sale system health metrics at a specified restaurant, returning uptime percentage and error rates."
  tags:
    - operations
    - pos-system
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: pos-monitoring
      port: 8080
      tools:
        - name: check-pos-health
          description: "Query Datadog for POS system health metrics by restaurant ID."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: time_range
              in: body
              type: string
              description: "Time window (e.g., 1h, 24h)."
          call: "datadog.query-metrics"
          with:
            query: "avg:pos.uptime{restaurant_id:{{restaurant_id}}}"
            from: "now-{{time_range}}"
            to: "now"
          outputParameters:
            - name: uptime_pct
              type: number
              mapping: "$.series[0].pointlist[-1][1]"
            - name: error_rate
              type: number
              mapping: "$.series[0].pointlist[-1][2]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: query-metrics
              method: GET

Pulls delivery partner metrics from Snowflake, compares against SLAs in Salesforce, and sends a weekly performance digest via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Delivery Partner Performance Digest"
  description: "Pulls delivery partner metrics from Snowflake, compares against SLAs in Salesforce, and sends a weekly performance digest via Microsoft Teams."
  tags:
    - operations
    - delivery
    - snowflake
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: delivery-performance
      port: 8080
      tools:
        - name: generate-delivery-digest
          description: "Generate delivery partner performance digest."
          inputParameters:
            - name: partner_id
              in: body
              type: string
              description: "Delivery partner identifier."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., last-7-days)."
          steps:
            - name: get-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT AVG(delivery_time_mins), COUNT(*), SUM(CASE WHEN on_time THEN 1 ELSE 0 END)/COUNT(*)*100 FROM deliveries WHERE partner_id='{{partner_id}}'"
            - name: get-sla
              type: call
              call: "salesforce.get-partner-sla"
              with:
                partner_id: "{{partner_id}}"
            - name: send-digest
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "delivery_ops"
                text: "Delivery Partner {{partner_id}} — {{period}}: Avg delivery {{get-metrics.avg_time}} mins, On-time {{get-metrics.on_time_pct}}% (SLA: {{get-sla.target_pct}}%), Total orders: {{get-metrics.order_count}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: partners
          path: "/sobjects/Delivery_Partner__c/{{partner_id}}"
          inputParameters:
            - name: partner_id
              in: path
          operations:
            - name: get-partner-sla
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Identifies abandoned digital orders from Snowflake analytics, triggers recovery campaigns in Adobe Campaign, and tracks results in Google Analytics.

naftiko: "0.5"
info:
  label: "Digital Order Abandonment Recovery Pipeline"
  description: "Identifies abandoned digital orders from Snowflake analytics, triggers recovery campaigns in Adobe Campaign, and tracks results in Google Analytics."
  tags:
    - marketing
    - order-recovery
    - snowflake
    - adobe-campaign
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: order-recovery
      port: 8080
      tools:
        - name: recover-abandoned-orders
          description: "Identify abandoned orders and trigger recovery campaigns."
          inputParameters:
            - name: date
              in: body
              type: string
              description: "Date to analyze in YYYY-MM-DD."
            - name: threshold_minutes
              in: body
              type: integer
              description: "Minutes after which an order is considered abandoned."
          steps:
            - name: get-abandoned-orders
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT customer_email, cart_value FROM abandoned_orders WHERE order_date='{{date}}' AND abandon_minutes>{{threshold_minutes}}"
            - name: trigger-campaign
              type: call
              call: "adobe-campaign.create-delivery"
              with:
                label: "Cart Recovery — {{date}}"
                audience: "{{get-abandoned-orders.customer_count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://bk-campaign.adobe.io/campaign/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST

Retrieves a digital order from the ordering platform, checks fulfillment status in the POS system via Datadog, and sends customer updates via WhatsApp.

naftiko: "0.5"
info:
  label: "Digital Order Fulfillment Tracker"
  description: "Retrieves a digital order from the ordering platform, checks fulfillment status in the POS system via Datadog, and sends customer updates via WhatsApp."
  tags:
    - operations
    - digital-ordering
    - datadog
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: track-digital-order
          description: "Track a digital order from placement through fulfillment and notify customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The digital order ID."
            - name: customer_phone
              in: body
              type: string
              description: "Customer phone number for notifications."
          steps:
            - name: get-order-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:order.fulfillment_time{order_id:{{order_id}}}"
                from: "now-1h"
                to: "now"
            - name: notify-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{customer_phone}}"
                text: "Your Burger King order #{{order_id}} is being prepared. Estimated ready time: {{get-order-metrics.avg_value}} minutes."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Retrieves real-time drive-thru performance metrics from Datadog and sends alerts to Microsoft Teams when average wait times exceed thresholds.

naftiko: "0.5"
info:
  label: "Drive-Thru Wait Time Monitor"
  description: "Retrieves real-time drive-thru performance metrics from Datadog and sends alerts to Microsoft Teams when average wait times exceed thresholds."
  tags:
    - operations
    - drive-thru
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: drivethru-monitoring
      port: 8080
      tools:
        - name: check-wait-times
          description: "Query Datadog for drive-thru wait times and alert Teams if thresholds are exceeded."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: threshold_seconds
              in: body
              type: integer
              description: "Alert threshold in seconds for average wait time."
          steps:
            - name: get-metrics
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:drivethru.wait_time{restaurant_id:{{restaurant_id}}}.rollup(avg, 900)"
                from: "now-1h"
                to: "now"
            - name: send-alert
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ops_alerts"
                text: "Drive-Thru Alert: Restaurant {{restaurant_id}} average wait time is {{get-metrics.avg_value}}s (threshold: {{threshold_seconds}}s). Immediate attention required."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Dynatrace for performance anomalies in BK's digital ordering services and returns problem details.

naftiko: "0.5"
info:
  label: "Dynatrace Performance Anomaly Detector"
  description: "Queries Dynatrace for performance anomalies in BK's digital ordering services and returns problem details."
  tags:
    - monitoring
    - performance
    - dynatrace
capability:
  exposes:
    - type: mcp
      namespace: performance-monitoring
      port: 8080
      tools:
        - name: get-anomalies
          description: "Retrieve open performance problems from Dynatrace."
          inputParameters:
            - name: time_range
              in: body
              type: string
              description: "Time range (e.g., last2hours, last24hours)."
          call: "dynatrace.get-problems"
          with:
            relativeTime: "{{time_range}}"
            status: "OPEN"
          outputParameters:
            - name: problems
              type: array
              mapping: "$.result"
            - name: total_count
              type: integer
              mapping: "$.totalCount"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://bk.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: problems
          path: "/problems"
          operations:
            - name: get-problems
              method: GET

Creates a MailChimp email campaign targeting customers segmented by location and purchase history from Salesforce.

naftiko: "0.5"
info:
  label: "Email Marketing Campaign Builder"
  description: "Creates a MailChimp email campaign targeting customers segmented by location and purchase history from Salesforce."
  tags:
    - marketing
    - email
    - mailchimp
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: build-email-campaign
          description: "Query Salesforce for customer segments and create a targeted MailChimp email campaign."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Name of the email campaign."
            - name: segment_criteria
              in: body
              type: string
              description: "SOQL WHERE clause for customer segmentation."
            - name: template_id
              in: body
              type: string
              description: "MailChimp template ID to use."
            - name: subject_line
              in: body
              type: string
              description: "Email subject line."
          steps:
            - name: fetch-contacts
              type: call
              call: "salesforce.query"
              with:
                q: "SELECT Email, FirstName, Region__c FROM Contact WHERE {{segment_criteria}}"
            - name: create-campaign
              type: call
              call: "mailchimp.create-campaign"
              with:
                type: "regular"
                recipients_list_id: "bk_customers"
                subject_line: "{{subject_line}}"
                template_id: "{{template_id}}"
                from_name: "Burger King"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{create-campaign.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST

Creates a new employee record in Workday, provisions system access via ServiceNow, and assigns training in Pluralsight.

naftiko: "0.5"
info:
  label: "Employee Onboarding Checklist Workflow"
  description: "Creates a new employee record in Workday, provisions system access via ServiceNow, and assigns training in Pluralsight."
  tags:
    - human-resources
    - onboarding
    - workday
    - servicenow
    - pluralsight
capability:
  exposes:
    - type: mcp
      namespace: employee-onboarding
      port: 8080
      tools:
        - name: onboard-employee
          description: "Create employee record, provision access, and assign training."
          inputParameters:
            - name: employee_name
              in: body
              type: string
              description: "New employee full name."
            - name: position
              in: body
              type: string
              description: "Position title."
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
          steps:
            - name: create-worker
              type: call
              call: "workday.create-worker"
              with:
                name: "{{employee_name}}"
                position: "{{position}}"
                location: "{{restaurant_id}}"
            - name: provision-access
              type: call
              call: "servicenow.create-record"
              with:
                table: "sc_req_item"
                short_description: "System access — {{employee_name}} — {{restaurant_id}}"
                description: "Provision POS and system access for {{employee_name}}, position: {{position}}."
            - name: assign-training
              type: call
              call: "pluralsight.assign-plan"
              with:
                user_email: "{{create-worker.email}}"
                plan_id: "bk_onboarding_{{position}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://bk.workday.com/api/staffing/v3"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          operations:
            - name: create-worker
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: assignments
          path: "/plans/{{plan_id}}/assignments"
          inputParameters:
            - name: plan_id
              in: path
          operations:
            - name: assign-plan
              method: POST

Creates a warranty claim in ServiceNow for restaurant equipment, retrieves warranty status from SAP, and notifies the vendor via email.

naftiko: "0.5"
info:
  label: "Equipment Warranty Claim Workflow"
  description: "Creates a warranty claim in ServiceNow for restaurant equipment, retrieves warranty status from SAP, and notifies the vendor via email."
  tags:
    - operations
    - equipment
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warranty-claims
      port: 8080
      tools:
        - name: submit-warranty-claim
          description: "Create warranty claim and verify equipment warranty status."
          inputParameters:
            - name: equipment_id
              in: body
              type: string
              description: "Equipment asset ID."
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: issue_description
              in: body
              type: string
              description: "Description of the equipment issue."
          steps:
            - name: check-warranty
              type: call
              call: "sap.get-equipment-warranty"
              with:
                equipment_id: "{{equipment_id}}"
            - name: create-claim
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_warranty_claim"
                short_description: "Warranty claim — {{equipment_id}} — {{restaurant_id}}"
                description: "Issue: {{issue_description}}. Warranty status: {{check-warranty.status}}. Expiry: {{check-warranty.expiry_date}}."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "equipment_support"
                text: "Warranty claim filed: Equipment {{equipment_id}} at restaurant {{restaurant_id}}. Warranty: {{check-warranty.status}}. Claim: {{create-claim.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-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-warranty
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Exports design assets from a Figma file and uploads them to the BK marketing asset library in Amazon S3.

naftiko: "0.5"
info:
  label: "Figma Design Asset Exporter"
  description: "Exports design assets from a Figma file and uploads them to the BK marketing asset library in Amazon S3."
  tags:
    - design
    - marketing
    - figma
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: design-assets
      port: 8080
      tools:
        - name: export-figma-assets
          description: "Export images from a Figma file and upload to S3 for the marketing team."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "Figma file key."
            - name: node_ids
              in: body
              type: string
              description: "Comma-separated Figma node IDs to export."
            - name: s3_prefix
              in: body
              type: string
              description: "S3 key prefix for uploaded assets."
          steps:
            - name: get-images
              type: call
              call: "figma.get-images"
              with:
                file_key: "{{file_key}}"
                ids: "{{node_ids}}"
                format: "png"
                scale: 2
            - name: upload-to-s3
              type: call
              call: "s3.put-object"
              with:
                bucket: "bk-marketing-assets"
                key: "{{s3_prefix}}/{{get-images.filename}}"
                body: "{{get-images.image_data}}"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: images
          path: "/images/{{file_key}}"
          inputParameters:
            - name: file_key
              in: path
          operations:
            - name: get-images
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://bk-marketing-assets.s3.amazonaws.com"
      authentication:
        type: aws-sig-v4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: objects
          path: "/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: put-object
              method: PUT

Pulls food cost data from SAP, compares against budgets in Snowflake, and sends variance alerts to restaurant managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Food Cost Variance Alert Pipeline"
  description: "Pulls food cost data from SAP, compares against budgets in Snowflake, and sends variance alerts to restaurant managers via Microsoft Teams."
  tags:
    - finance
    - food-cost
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-cost-monitoring
      port: 8080
      tools:
        - name: check-food-cost-variance
          description: "Compare food costs against budget and alert on variances."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-03)."
          steps:
            - name: get-actual-costs
              type: call
              call: "sap.get-cost-report"
              with:
                restaurant_id: "{{restaurant_id}}"
                period: "{{period}}"
            - name: get-budget
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT budget_amount FROM food_cost_budget WHERE restaurant_id='{{restaurant_id}}' AND period='{{period}}'"
            - name: send-alert
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_{{restaurant_id}}"
                text: "Food Cost Alert — Restaurant {{restaurant_id}} — {{period}}: Actual ${{get-actual-costs.total_cost}} vs Budget ${{get-budget.budget_amount}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-reports
          path: "/A_CostCenter('{{restaurant_id}}')/to_CostElements"
          inputParameters:
            - name: restaurant_id
              in: path
          operations:
            - name: get-cost-report
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls actual food costs from SAP, compares against budgeted costs in Snowflake, and sends variance alerts to finance via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Food Cost Variance Analysis Pipeline"
  description: "Pulls actual food costs from SAP, compares against budgeted costs in Snowflake, and sends variance alerts to finance via Microsoft Teams."
  tags:
    - finance
    - food-cost
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: food-cost-analysis
      port: 8080
      tools:
        - name: analyze-food-cost-variance
          description: "Compare actual vs budgeted food costs and alert on variances."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-03)."
          steps:
            - name: get-actual-costs
              type: call
              call: "sap.get-cost-data"
              with:
                location: "{{restaurant_id}}"
                period: "{{period}}"
            - name: get-budget
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT budget_amount FROM food_cost_budget WHERE restaurant_id='{{restaurant_id}}' AND period='{{period}}'"
            - name: send-variance-alert
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance_ops"
                text: "Food cost variance alert: Restaurant {{restaurant_id}}, Period {{period}}. Actual: ${{get-actual-costs.total_cost}}, Budget: ${{get-budget.budget_amount}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: costs
          path: "/A_CostCenter?$filter=CostCenter eq '{{location}}'"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-cost-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a food safety incident is logged in ServiceNow, notifies the regional quality team via Microsoft Teams and creates a Jira ticket for corrective action tracking.

naftiko: "0.5"
info:
  label: "Food Safety Incident Reporter"
  description: "When a food safety incident is logged in ServiceNow, notifies the regional quality team via Microsoft Teams and creates a Jira ticket for corrective action tracking."
  tags:
    - food-safety
    - compliance
    - servicenow
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: food-safety
      port: 8080
      tools:
        - name: report-food-safety-incident
          description: "Log a food safety incident and orchestrate notifications and corrective action tracking across ServiceNow, Teams, and Jira."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "The restaurant location ID."
            - name: incident_type
              in: body
              type: string
              description: "Type of food safety incident (e.g., temperature_violation, contamination, allergen_exposure)."
            - name: description
              in: body
              type: string
              description: "Detailed description of the incident."
            - name: severity
              in: body
              type: string
              description: "Severity level (critical, high, medium, low)."
          steps:
            - name: create-snow-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Food Safety: {{incident_type}} at Restaurant {{restaurant_id}}"
                category: "food_safety"
                urgency: "{{severity}}"
                description: "{{description}}"
            - name: notify-quality-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "food_safety_alerts"
                text: "FOOD SAFETY ALERT at Restaurant {{restaurant_id}}: {{incident_type}} ({{severity}}). ServiceNow: {{create-snow-incident.number}}. Details: {{description}}"
            - name: create-corrective-action
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FSQA"
                issue_type: "Task"
                summary: "Corrective Action: {{incident_type}} at Restaurant {{restaurant_id}}"
                description: "Follow-up corrective action for ServiceNow incident {{create-snow-incident.number}}. {{description}}"
                priority: "{{severity}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Pulls franchise audit results from ServiceNow, cross-references with brand standards in Confluence, and sends a compliance summary to the franchisee via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Franchise Compliance Audit Pipeline"
  description: "Pulls franchise audit results from ServiceNow, cross-references with brand standards in Confluence, and sends a compliance summary to the franchisee via Microsoft Teams."
  tags:
    - franchise-management
    - compliance
    - servicenow
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: franchise-compliance
      port: 8080
      tools:
        - name: run-compliance-audit
          description: "Pull audit results, cross-reference standards, and notify franchisee."
          inputParameters:
            - name: franchisee_id
              in: body
              type: string
              description: "Franchisee account ID."
            - name: audit_id
              in: body
              type: string
              description: "ServiceNow audit record ID."
          steps:
            - name: get-audit-results
              type: call
              call: "servicenow.get-record"
              with:
                table: "x_bk_franchise_audit"
                sys_id: "{{audit_id}}"
            - name: get-standards
              type: call
              call: "confluence.search-content"
              with:
                cql: "label = 'brand-standards' AND label = 'compliance'"
            - name: notify-franchisee
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "franchise_{{franchisee_id}}"
                text: "Compliance audit complete for franchisee {{franchisee_id}}. Score: {{get-audit-results.score}}/100. Findings: {{get-audit-results.finding_count}}. Review details in ServiceNow."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}/{{sys_id}}"
          inputParameters:
            - name: table
              in: path
            - name: sys_id
              in: path
          operations:
            - name: get-record
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://burgerking.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content/search"
          inputParameters:
            - name: cql
              in: query
          operations:
            - name: search-content
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves franchise audit scores from Salesforce, creates corrective action tasks in ServiceNow, and notifies the franchise operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Franchise Compliance Audit Workflow"
  description: "Retrieves franchise audit scores from Salesforce, creates corrective action tasks in ServiceNow, and notifies the franchise operations team via Microsoft Teams."
  tags:
    - franchise-management
    - compliance
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: franchise-audit
      port: 8080
      tools:
        - name: process-franchise-audit
          description: "Process franchise audit results and create corrective actions."
          inputParameters:
            - name: franchise_id
              in: body
              type: string
              description: "Franchisee account ID."
            - name: audit_date
              in: body
              type: string
              description: "Audit date in YYYY-MM-DD."
          steps:
            - name: get-audit-results
              type: call
              call: "salesforce.get-audit"
              with:
                franchise_id: "{{franchise_id}}"
                audit_date: "{{audit_date}}"
            - name: create-corrective-actions
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_corrective_action"
                short_description: "Compliance audit — Franchise {{franchise_id}} — {{audit_date}}"
                description: "Audit score: {{get-audit-results.score}}. Findings: {{get-audit-results.finding_count}}."
                priority: "{{get-audit-results.priority}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "franchise_operations"
                text: "Audit completed for franchise {{franchise_id}}: Score {{get-audit-results.score}}/100. {{get-audit-results.finding_count}} findings. Corrective action: {{create-corrective-actions.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: audits
          path: "/sobjects/Franchise_Audit__c/{{franchise_id}}"
          inputParameters:
            - name: franchise_id
              in: path
          operations:
            - name: get-audit
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves franchise agreement details from Box, updates the renewal status in Salesforce, and notifies the legal team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Franchise Renewal Processing Workflow"
  description: "Retrieves franchise agreement details from Box, updates the renewal status in Salesforce, and notifies the legal team via Microsoft Teams."
  tags:
    - legal
    - franchise-renewal
    - box
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: franchise-renewal
      port: 8080
      tools:
        - name: process-franchise-renewal
          description: "Retrieve agreement, update renewal status, and notify legal."
          inputParameters:
            - name: franchise_id
              in: body
              type: string
              description: "Franchisee account ID."
            - name: agreement_file_id
              in: body
              type: string
              description: "Box file ID for the franchise agreement."
          steps:
            - name: get-agreement
              type: call
              call: "box.get-file-info"
              with:
                file_id: "{{agreement_file_id}}"
            - name: update-renewal
              type: call
              call: "salesforce.update-account"
              with:
                account_id: "{{franchise_id}}"
                renewal_status: "In Progress"
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "legal_franchise"
                text: "Franchise renewal initiated: {{franchise_id}}. Agreement: {{get-agreement.name}}. Status updated to In Progress."
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file-info
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Snowflake for franchise-level sales data and pushes formatted reports to SharePoint for regional managers to review.

naftiko: "0.5"
info:
  label: "Franchise Sales Report Generator"
  description: "Queries Snowflake for franchise-level sales data and pushes formatted reports to SharePoint for regional managers to review."
  tags:
    - sales
    - franchise
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: franchise-reporting
      port: 8080
      tools:
        - name: generate-franchise-report
          description: "Pull franchise sales data from Snowflake and upload a formatted report to SharePoint."
          inputParameters:
            - name: franchise_id
              in: body
              type: string
              description: "The franchise group identifier."
            - name: month
              in: body
              type: string
              description: "Report month in YYYY-MM format."
          steps:
            - name: fetch-sales
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT restaurant_id, SUM(revenue) as total_revenue, COUNT(DISTINCT transaction_id) as transactions FROM pos_sales WHERE franchise_id='{{franchise_id}}' AND DATE_TRUNC('month', sale_date)='{{month}}-01' GROUP BY restaurant_id ORDER BY total_revenue DESC"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "franchise_reports"
                folder_path: "Monthly/{{franchise_id}}/{{month}}"
                file_name: "sales_report_{{franchise_id}}_{{month}}.csv"
                content: "{{fetch-sales.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{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

Pulls market data from Circana, combines with demographic data from Snowflake, and generates territory expansion recommendations in Google Sheets.

naftiko: "0.5"
info:
  label: "Franchise Territory Expansion Analysis"
  description: "Pulls market data from Circana, combines with demographic data from Snowflake, and generates territory expansion recommendations in Google Sheets."
  tags:
    - franchise-development
    - market-analysis
    - circana
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: territory-expansion
      port: 8080
      tools:
        - name: analyze-territory-expansion
          description: "Analyze market data for franchise territory expansion."
          inputParameters:
            - name: target_market
              in: body
              type: string
              description: "Target market area identifier."
            - name: radius_miles
              in: body
              type: number
              description: "Analysis radius in miles."
          steps:
            - name: get-market-data
              type: call
              call: "circana.get-market-data"
              with:
                market: "{{target_market}}"
            - name: get-demographics
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT population, median_income, qsr_penetration FROM demographics WHERE market='{{target_market}}'"
            - name: create-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Territory Expansion — {{target_market}}"
                data: "Market: {{target_market}}, Population: {{get-demographics.population}}, QSR penetration: {{get-demographics.qsr_penetration}}%"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: market-data
          path: "/market-data?market={{market}}"
          inputParameters:
            - name: market
              in: query
          operations:
            - name: get-market-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST

Triggers a GitHub Actions deployment workflow for the BK mobile app and reports status back to Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Actions Deployment Trigger"
  description: "Triggers a GitHub Actions deployment workflow for the BK mobile app and reports status back to Microsoft Teams."
  tags:
    - devops
    - deployment
    - github-actions
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: app-deployment
      port: 8080
      tools:
        - name: trigger-deployment
          description: "Trigger a GitHub Actions workflow for deploying the BK app and notify Teams of the result."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository name (org/repo)."
            - name: workflow_id
              in: body
              type: string
              description: "Workflow file name or ID."
            - name: environment
              in: body
              type: string
              description: "Target environment (staging, production)."
          steps:
            - name: dispatch-workflow
              type: call
              call: "github.dispatch-workflow"
              with:
                owner_repo: "{{repo}}"
                workflow_id: "{{workflow_id}}"
                ref: "main"
                inputs: "{\"environment\": \"{{environment}}\"}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "deployments"
                text: "Deployment triggered for {{repo}} to {{environment}}. Workflow: {{workflow_id}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-dispatches
          path: "/repos/{{owner_repo}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: owner_repo
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: dispatch-workflow
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the latest GitHub Actions deployment workflow run status for the Burger King web ordering platform.

naftiko: "0.5"
info:
  label: "GitHub Actions Web Deployment Status"
  description: "Retrieves the latest GitHub Actions deployment workflow run status for the Burger King web ordering platform."
  tags:
    - engineering
    - deployment
    - github-actions
capability:
  exposes:
    - type: mcp
      namespace: web-deployment
      port: 8080
      tools:
        - name: get-deployment-status
          description: "Get the latest GitHub Actions deployment workflow run status."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repository in owner/repo format."
            - name: workflow_id
              in: body
              type: string
              description: "Workflow file name or ID."
          call: "github.get-workflow-runs"
          with:
            repo: "{{repo}}"
            workflow_id: "{{workflow_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.workflow_runs[0].status"
            - name: conclusion
              type: string
              mapping: "$.workflow_runs[0].conclusion"
            - name: run_number
              type: number
              mapping: "$.workflow_runs[0].run_number"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/workflows/{{workflow_id}}/runs?per_page=1"
          inputParameters:
            - name: repo
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: get-workflow-runs
              method: GET

Retrieves website traffic metrics from Google Analytics for the BK.com digital ordering platform and returns key KPIs.

naftiko: "0.5"
info:
  label: "Google Analytics Traffic Reporter"
  description: "Retrieves website traffic metrics from Google Analytics for the BK.com digital ordering platform and returns key KPIs."
  tags:
    - digital
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-web-traffic
          description: "Fetch Google Analytics traffic metrics for BK.com including sessions, conversion rate, and bounce rate."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "google-analytics.get-report"
          with:
            view_id: "bk_web_property"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
            metrics: "sessions,transactions,bounceRate"
          outputParameters:
            - name: sessions
              type: integer
              mapping: "$.reports[0].data.totals[0].values[0]"
            - name: transactions
              type: integer
              mapping: "$.reports[0].data.totals[0].values[1]"
            - name: bounce_rate
              type: string
              mapping: "$.reports[0].data.totals[0].values[2]"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-report
              method: POST

Moves newly uploaded training documents in Google Drive to the correct restaurant folder based on metadata and notifies the training coordinator.

naftiko: "0.5"
info:
  label: "Google Drive Training Document Organizer"
  description: "Moves newly uploaded training documents in Google Drive to the correct restaurant folder based on metadata and notifies the training coordinator."
  tags:
    - training
    - document-management
    - google-drive
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: training-docs
      port: 8080
      tools:
        - name: organize-training-doc
          description: "Move a training document to the correct Google Drive folder and notify the training coordinator."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "Google Drive file ID."
            - name: restaurant_id
              in: body
              type: string
              description: "Target restaurant ID."
            - name: coordinator_email
              in: body
              type: string
              description: "Training coordinator email."
          steps:
            - name: move-file
              type: call
              call: "google-drive.move-file"
              with:
                file_id: "{{file_id}}"
                target_folder: "training_{{restaurant_id}}"
            - name: notify-coordinator
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{coordinator_email}}"
                text: "New training document added for Restaurant {{restaurant_id}}: {{move-file.name}}. View at {{move-file.webViewLink}}."
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: move-file
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Synchronizes restaurant location data from the internal database to Google Maps Business Profile for accurate store finder results.

naftiko: "0.5"
info:
  label: "Google Maps Store Locator Data Sync"
  description: "Synchronizes restaurant location data from the internal database to Google Maps Business Profile for accurate store finder results."
  tags:
    - digital
    - store-locator
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: store-data
      port: 8080
      tools:
        - name: sync-store-location
          description: "Update a restaurant's Google Business Profile with current address, hours, and phone number."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: address
              in: body
              type: string
              description: "Full street address."
            - name: phone
              in: body
              type: string
              description: "Restaurant phone number."
            - name: hours
              in: body
              type: string
              description: "Operating hours JSON string."
          call: "googlemaps.update-location"
          with:
            location_id: "{{restaurant_id}}"
            address: "{{address}}"
            phone: "{{phone}}"
            hours: "{{hours}}"
          outputParameters:
            - name: update_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: googlemaps
      baseUri: "https://mybusinessbusinessinformation.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_maps_token"
      resources:
        - name: locations
          path: "/locations/{{location_id}}"
          inputParameters:
            - name: location_id
              in: path
          operations:
            - name: update-location
              method: PATCH

Exports a financial summary from Snowflake to a Google Sheet for executive review.

naftiko: "0.5"
info:
  label: "Google Sheets Financial Summary Exporter"
  description: "Exports a financial summary from Snowflake to a Google Sheet for executive review."
  tags:
    - finance
    - reporting
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: export-financial-summary
          description: "Run a financial summary query in Snowflake and write results to a Google Sheet."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Fiscal quarter (e.g., Q1-2026)."
            - name: spreadsheet_id
              in: body
              type: string
              description: "Google Sheets spreadsheet ID."
          steps:
            - name: run-query
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT region, SUM(revenue) as revenue, SUM(cogs) as cogs, SUM(revenue)-SUM(cogs) as gross_profit FROM financials WHERE fiscal_quarter='{{quarter}}' GROUP BY region"
            - name: write-sheet
              type: call
              call: "google-sheets.update-values"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Summary!A1"
                values: "{{run-query.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-values
              method: PUT

Records health inspection findings in ServiceNow, creates corrective action tasks in Jira, and notifies the food safety team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Health Inspection Response Workflow"
  description: "Records health inspection findings in ServiceNow, creates corrective action tasks in Jira, and notifies the food safety team via Microsoft Teams."
  tags:
    - food-safety
    - health-inspection
    - servicenow
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: health-inspection
      port: 8080
      tools:
        - name: process-health-inspection
          description: "Record inspection findings, create corrective actions, and notify team."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: inspection_date
              in: body
              type: string
              description: "Inspection date in YYYY-MM-DD."
            - name: findings_summary
              in: body
              type: string
              description: "Summary of inspection findings."
          steps:
            - name: create-inspection-record
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_health_inspection"
                short_description: "Health inspection — Restaurant {{restaurant_id}} — {{inspection_date}}"
                description: "{{findings_summary}}"
            - name: create-corrective-actions
              type: call
              call: "jira.create-issue"
              with:
                project: "FS"
                issuetype: "Task"
                summary: "Corrective actions — Restaurant {{restaurant_id}} — {{inspection_date}}"
                description: "Findings: {{findings_summary}}. ServiceNow: {{create-inspection-record.number}}"
            - name: notify-food-safety
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "food_safety"
                text: "Health inspection completed: Restaurant {{restaurant_id}} on {{inspection_date}}. Findings: {{findings_summary}}. Corrective actions: {{create-corrective-actions.key}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls customer feedback surveys from HubSpot and stores aggregated satisfaction scores in Snowflake for trend analysis.

naftiko: "0.5"
info:
  label: "HubSpot Customer Feedback Aggregator"
  description: "Pulls customer feedback surveys from HubSpot and stores aggregated satisfaction scores in Snowflake for trend analysis."
  tags:
    - customer-experience
    - feedback
    - hubspot
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-feedback
      port: 8080
      tools:
        - name: aggregate-feedback
          description: "Fetch customer satisfaction surveys from HubSpot and load aggregated scores into Snowflake."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "HubSpot survey ID."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD."
          steps:
            - name: get-responses
              type: call
              call: "hubspot.get-survey-responses"
              with:
                survey_id: "{{survey_id}}"
                submitted_after: "{{date_from}}"
            - name: load-to-snowflake
              type: call
              call: "snowflake.run-query"
              with:
                query: "INSERT INTO customer_feedback (survey_id, avg_score, response_count, period) VALUES ('{{survey_id}}', {{get-responses.avg_score}}, {{get-responses.count}}, '{{date_from}}')"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: surveys
          path: "/feedback/v1/surveys/{{survey_id}}/responses"
          inputParameters:
            - name: survey_id
              in: path
          operations:
            - name: get-survey-responses
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Looks up a prospective franchisee lead in HubSpot by email, returning name, company, lifecycle stage, and territory interest.

naftiko: "0.5"
info:
  label: "HubSpot Franchisee Lead Lookup"
  description: "Looks up a prospective franchisee lead in HubSpot by email, returning name, company, lifecycle stage, and territory interest."
  tags:
    - franchise-development
    - lead-management
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: franchise-leads
      port: 8080
      tools:
        - name: get-franchisee-lead
          description: "Look up a HubSpot franchisee lead by email address."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The lead email address."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.properties.firstname"
            - 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: path
          operations:
            - name: get-contact
              method: GET

Monitors DynamoDB inventory levels and triggers a Coupa requisition when stock falls below minimum thresholds, notifying supply chain via Teams.

naftiko: "0.5"
info:
  label: "Inventory Reorder Alert"
  description: "Monitors DynamoDB inventory levels and triggers a Coupa requisition when stock falls below minimum thresholds, notifying supply chain via Teams."
  tags:
    - supply-chain
    - inventory
    - dynamodb
    - coupa
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: inventory-management
      port: 8080
      tools:
        - name: check-and-reorder
          description: "Check inventory levels in DynamoDB, create Coupa requisitions for low-stock items, and notify the supply chain team."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: category
              in: body
              type: string
              description: "Inventory category (e.g., proteins, produce, packaging)."
          steps:
            - name: check-levels
              type: call
              call: "dynamodb.query-items"
              with:
                table_name: "bk_inventory"
                key_condition: "restaurant_id = :rid AND category = :cat"
                expression_values: "{\":rid\": \"{{restaurant_id}}\", \":cat\": \"{{category}}\"}"
            - name: create-requisition
              type: call
              call: "coupa.create-requisition"
              with:
                supplier_id: "{{check-levels.preferred_supplier_id}}"
                items: "{{check-levels.low_stock_items}}"
                ship_to: "restaurant_{{restaurant_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply_chain_ops"
                text: "Reorder triggered for Restaurant {{restaurant_id}} ({{category}}). Coupa requisition: {{create-requisition.id}}. Items: {{check-levels.low_stock_items_summary}}."
  consumes:
    - type: http
      namespace: dynamodb
      baseUri: "https://dynamodb.us-east-1.amazonaws.com"
      authentication:
        type: aws-sig-v4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: items
          path: "/"
          operations:
            - name: query-items
              method: POST
    - type: http
      namespace: coupa
      baseUri: "https://burgerking.coupahost.com/api"
      authentication:
        type: bearer
        token: "$secrets.coupa_api_token"
      resources:
        - name: requisitions
          path: "/requisitions"
          operations:
            - name: create-requisition
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a critical IT incident from ServiceNow, creates a war room in Microsoft Teams, and pages the on-call team via Datadog.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Workflow"
  description: "Retrieves a critical IT incident from ServiceNow, creates a war room in Microsoft Teams, and pages the on-call team via Datadog."
  tags:
    - it-operations
    - incident-management
    - servicenow
    - microsoft-teams
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Escalate critical IT incident with war room and on-call paging."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number."
            - name: severity
              in: body
              type: string
              description: "Incident severity (P1, P2, P3)."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                number: "{{incident_number}}"
            - name: create-war-room
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "it_war_room"
                text: "{{severity}} INCIDENT: {{incident_number}} — {{get-incident.short_description}}. Affected: {{get-incident.affected_restaurants}}. Join war room immediately."
            - name: page-oncall
              type: call
              call: "datadog.create-event"
              with:
                title: "{{severity}} Escalation — {{incident_number}}"
                text: "{{get-incident.short_description}}"
                alert_type: "error"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.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={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST

Retrieves the status of a marketing campaign task in Jira by issue key, returning summary, status, assignee, and due date.

naftiko: "0.5"
info:
  label: "Jira Marketing Campaign Tracker"
  description: "Retrieves the status of a marketing campaign task in Jira by issue key, returning summary, status, assignee, and due date."
  tags:
    - marketing
    - campaign-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: campaign-tracking
      port: 8080
      tools:
        - name: get-campaign-task
          description: "Get a Jira marketing campaign task by issue key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g., MKT-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: due_date
              type: string
              mapping: "$.fields.duedate"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Retrieves current sprint status from Jira for the BK digital team and returns story point completion metrics.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Tracker"
  description: "Retrieves current sprint status from Jira for the BK digital team and returns story point completion metrics."
  tags:
    - development
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: dev-tracking
      port: 8080
      tools:
        - name: get-sprint-progress
          description: "Fetch current sprint progress from Jira for a given board including velocity and completion metrics."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "Jira board ID."
          call: "jira.get-active-sprint"
          with:
            board_id: "{{board_id}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.values[0].name"
            - name: start_date
              type: string
              mapping: "$.values[0].startDate"
            - name: end_date
              type: string
              mapping: "$.values[0].endDate"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/board/{{board_id}}/sprint"
          inputParameters:
            - name: board_id
              in: path
          operations:
            - name: get-active-sprint
              method: GET

Creates an LTO campaign in Adobe Campaign, updates menu configurations in the POS system via ServiceNow, and notifies marketing via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Limited Time Offer Launch Workflow"
  description: "Creates an LTO campaign in Adobe Campaign, updates menu configurations in the POS system via ServiceNow, and notifies marketing via Microsoft Teams."
  tags:
    - marketing
    - lto
    - adobe-campaign
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lto-launch
      port: 8080
      tools:
        - name: launch-lto-campaign
          description: "Create LTO campaign, update POS menu, and notify marketing."
          inputParameters:
            - name: offer_name
              in: body
              type: string
              description: "Name of the limited time offer."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date in YYYY-MM-DD."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date in YYYY-MM-DD."
          steps:
            - name: create-campaign
              type: call
              call: "adobe-campaign.create-delivery"
              with:
                label: "LTO — {{offer_name}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: create-pos-change
              type: call
              call: "servicenow.create-record"
              with:
                table: "change_request"
                short_description: "POS Menu Update — {{offer_name}}"
                description: "Add LTO: {{offer_name}} from {{start_date}} to {{end_date}}."
                category: "menu_update"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing_campaigns"
                text: "LTO Launch: {{offer_name}} from {{start_date}} to {{end_date}}. Campaign: {{create-campaign.delivery_id}}. POS change: {{create-pos-change.number}}."
  consumes:
    - type: http
      namespace: adobe-campaign
      baseUri: "https://bk-campaign.adobe.io/campaign/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Publishes employer brand content on the BK LinkedIn company page to attract talent.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Post Publisher"
  description: "Publishes employer brand content on the BK LinkedIn company page to attract talent."
  tags:
    - hr
    - employer-branding
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: employer-brand
      port: 8080
      tools:
        - name: publish-linkedin-post
          description: "Create a post on the Burger King LinkedIn company page."
          inputParameters:
            - name: text
              in: body
              type: string
              description: "Post text content."
            - name: media_url
              in: body
              type: string
              description: "Optional media URL to attach."
          call: "linkedin.create-post"
          with:
            author: "urn:li:organization:{{bk_org_id}}"
            text: "{{text}}"
            media_url: "{{media_url}}"
          outputParameters:
            - name: post_id
              type: string
              mapping: "$.id"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: ugcPosts
          path: "/ugcPosts"
          operations:
            - name: create-post
              method: POST

Retrieves loyalty member reward balance from Salesforce, validates redemption, and sends confirmation via WhatsApp.

naftiko: "0.5"
info:
  label: "Loyalty Program Reward Fulfillment Pipeline"
  description: "Retrieves loyalty member reward balance from Salesforce, validates redemption, and sends confirmation via WhatsApp."
  tags:
    - marketing
    - loyalty
    - salesforce
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: loyalty-rewards
      port: 8080
      tools:
        - name: fulfill-reward
          description: "Validate loyalty reward redemption and send confirmation."
          inputParameters:
            - name: member_id
              in: body
              type: string
              description: "Loyalty member ID."
            - name: reward_code
              in: body
              type: string
              description: "Reward code to redeem."
          steps:
            - name: get-member
              type: call
              call: "salesforce.get-loyalty-member"
              with:
                member_id: "{{member_id}}"
            - name: send-confirmation
              type: call
              call: "whatsapp.send-message"
              with:
                phone_number: "{{get-member.phone}}"
                message: "Your Burger King reward {{reward_code}} has been redeemed! Points balance: {{get-member.points_balance}}. Enjoy your meal!"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty
          path: "/sobjects/Loyalty_Member__c/{{member_id}}"
          inputParameters:
            - name: member_id
              in: path
          operations:
            - name: get-loyalty-member
              method: GET
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-message
              method: POST

Pulls campaign spend from Google Analytics, correlates with sales lift in Snowflake, and generates an ROI report in Google Sheets.

naftiko: "0.5"
info:
  label: "Marketing ROI Analysis Pipeline"
  description: "Pulls campaign spend from Google Analytics, correlates with sales lift in Snowflake, and generates an ROI report in Google Sheets."
  tags:
    - marketing
    - roi-analysis
    - google-analytics
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: marketing-roi
      port: 8080
      tools:
        - name: analyze-marketing-roi
          description: "Correlate campaign spend with sales lift and generate ROI report."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "Marketing campaign identifier."
            - name: period
              in: body
              type: string
              description: "Analysis period (e.g., last-30-days)."
          steps:
            - name: get-campaign-data
              type: call
              call: "google-analytics.get-campaign-metrics"
              with:
                campaign_id: "{{campaign_id}}"
                period: "{{period}}"
            - name: get-sales-lift
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT SUM(incremental_revenue) FROM campaign_attribution WHERE campaign_id='{{campaign_id}}'"
            - name: create-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Marketing ROI — Campaign {{campaign_id}} — {{period}}"
                data: "Spend: ${{get-campaign-data.total_spend}}, Sales lift: ${{get-sales-lift.incremental_revenue}}, ROI: {{get-sales-lift.roi_pct}}%"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          operations:
            - name: get-campaign-metrics
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST

Checks the health and transaction processing status of BK's Mastercard payment gateway integration.

naftiko: "0.5"
info:
  label: "Mastercard Payment Gateway Status"
  description: "Checks the health and transaction processing status of BK's Mastercard payment gateway integration."
  tags:
    - payments
    - gateway
    - mastercard
capability:
  exposes:
    - type: mcp
      namespace: payment-gateway
      port: 8080
      tools:
        - name: check-gateway-health
          description: "Query Mastercard gateway status and recent transaction success rates."
          inputParameters:
            - name: merchant_id
              in: body
              type: string
              description: "Mastercard merchant ID."
          call: "mastercard.get-gateway-status"
          with:
            merchant_id: "{{merchant_id}}"
          outputParameters:
            - name: gateway_status
              type: string
              mapping: "$.status"
            - name: success_rate
              type: number
              mapping: "$.metrics.success_rate"
            - name: avg_response_time
              type: number
              mapping: "$.metrics.avg_response_ms"
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/merchant"
      authentication:
        type: oauth1
        consumer_key: "$secrets.mastercard_consumer_key"
        signing_key: "$secrets.mastercard_signing_key"
      resources:
        - name: gateway
          path: "/v1/gateway/{{merchant_id}}/status"
          inputParameters:
            - name: merchant_id
              in: path
          operations:
            - name: get-gateway-status
              method: GET

Pulls daily menu item sales from the POS data warehouse in Snowflake, enriches with Google Analytics web traffic data, and pushes a consolidated report to Power BI for franchise operators.

naftiko: "0.5"
info:
  label: "Menu Item Performance Dashboard"
  description: "Pulls daily menu item sales from the POS data warehouse in Snowflake, enriches with Google Analytics web traffic data, and pushes a consolidated report to Power BI for franchise operators."
  tags:
    - analytics
    - menu
    - snowflake
    - google-analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: menu-analytics
      port: 8080
      tools:
        - name: refresh-menu-dashboard
          description: "Pull latest menu item sales from Snowflake, merge with Google Analytics traffic, and refresh the Power BI dataset."
          inputParameters:
            - name: date_range_start
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: date_range_end
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
            - name: region
              in: body
              type: string
              description: "Geographic region filter (e.g., US-East, US-West)."
          steps:
            - name: fetch-sales
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT menu_item, SUM(quantity) as units, SUM(revenue) as revenue FROM pos_sales WHERE sale_date BETWEEN '{{date_range_start}}' AND '{{date_range_end}}' AND region='{{region}}' GROUP BY menu_item"
            - name: fetch-traffic
              type: call
              call: "google-analytics.get-report"
              with:
                view_id: "bk_web_property"
                start_date: "{{date_range_start}}"
                end_date: "{{date_range_end}}"
                metrics: "sessions,pageviews"
                dimensions: "pagePath"
                filters: "ga:pagePath=~/menu/"
            - name: push-to-powerbi
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "bk_menu_performance"
                table_name: "menu_sales"
                rows: "{{fetch-sales.results}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://burgerking.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-report
              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: refresh-dataset
              method: POST

Retrieves updated nutritional data from the product database in SAP, updates the website via the CMS, and notifies the marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Menu Nutritional Update Workflow"
  description: "Retrieves updated nutritional data from the product database in SAP, updates the website via the CMS, and notifies the marketing team via Microsoft Teams."
  tags:
    - operations
    - menu-management
    - sap
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nutritional-updates
      port: 8080
      tools:
        - name: update-nutritional-info
          description: "Update menu nutritional data across systems."
          inputParameters:
            - name: product_code
              in: body
              type: string
              description: "Menu item product code."
            - name: effective_date
              in: body
              type: string
              description: "Effective date for the update."
          steps:
            - name: get-nutritional-data
              type: call
              call: "sap.get-product-nutrition"
              with:
                product_code: "{{product_code}}"
            - name: update-knowledge-base
              type: call
              call: "confluence.update-page"
              with:
                page_id: "nutrition_{{product_code}}"
                content: "Updated nutritional info for {{product_code}}: Calories: {{get-nutritional-data.calories}}, Fat: {{get-nutritional-data.fat}}g, Protein: {{get-nutritional-data.protein}}g."
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "menu_management"
                text: "Nutritional update: {{product_code}} effective {{effective_date}}. Calories: {{get-nutritional-data.calories}}. Please update all marketing materials."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/A_Product('{{product_code}}')"
          inputParameters:
            - name: product_code
              in: path
          operations:
            - name: get-product-nutrition
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://burgerking.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Updates menu item prices in SAP, syncs changes to the digital ordering platform via the API, and notifies regional managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Menu Price Update Orchestrator"
  description: "Updates menu item prices in SAP, syncs changes to the digital ordering platform via the API, and notifies regional managers via Microsoft Teams."
  tags:
    - operations
    - menu-management
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: menu-pricing
      port: 8080
      tools:
        - name: update-menu-prices
          description: "Update menu prices in SAP, sync to digital platform, and notify managers."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Regional market identifier."
            - name: menu_item_id
              in: body
              type: string
              description: "SAP menu item material number."
            - name: new_price
              in: body
              type: number
              description: "New price amount."
          steps:
            - name: update-sap-price
              type: call
              call: "sap.update-pricing"
              with:
                material_number: "{{menu_item_id}}"
                price: "{{new_price}}"
                region: "{{region}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "regional_ops_{{region}}"
                text: "Menu price update: Item {{menu_item_id}} updated to ${{new_price}} for region {{region}}. Effective immediately."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pricing
          path: "/A_ProductValuation"
          operations:
            - name: update-pricing
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Power Automate flow for automated restaurant opening checklists.

naftiko: "0.5"
info:
  label: "Microsoft Power Automate Flow Trigger"
  description: "Triggers a Power Automate flow for automated restaurant opening checklists."
  tags:
    - operations
    - automation
    - microsoft-power-automate
capability:
  exposes:
    - type: mcp
      namespace: flow-automation
      port: 8080
      tools:
        - name: trigger-opening-checklist
          description: "Trigger a Power Automate flow that runs the daily restaurant opening checklist."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: manager_email
              in: body
              type: string
              description: "Email of the shift manager."
          call: "power-automate.trigger-flow"
          with:
            flow_id: "daily_opening_checklist"
            inputs: "{\"restaurant_id\": \"{{restaurant_id}}\", \"manager_email\": \"{{manager_email}}\"}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.id"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: power-automate
      baseUri: "https://flow.microsoft.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.power_automate_token"
      resources:
        - name: flows
          path: "/flows/{{flow_id}}/triggers/manual/run"
          inputParameters:
            - name: flow_id
              in: path
          operations:
            - name: trigger-flow
              method: POST

Retrieves crash reports from New Relic, creates a bug ticket in Jira, and alerts the mobile engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Mobile App Crash Investigation Pipeline"
  description: "Retrieves crash reports from New Relic, creates a bug ticket in Jira, and alerts the mobile engineering team via Microsoft Teams."
  tags:
    - engineering
    - mobile-app
    - new-relic
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mobile-crash-investigation
      port: 8080
      tools:
        - name: investigate-mobile-crash
          description: "Retrieve crash reports, create bug ticket, and alert engineering."
          inputParameters:
            - name: app_version
              in: body
              type: string
              description: "Mobile app version."
            - name: crash_group_id
              in: body
              type: string
              description: "Crash group identifier from New Relic."
          steps:
            - name: get-crash-details
              type: call
              call: "newrelic.get-crash-report"
              with:
                crash_group_id: "{{crash_group_id}}"
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project: "MOB"
                issuetype: "Bug"
                summary: "App crash — v{{app_version}} — {{get-crash-details.exception_name}}"
                description: "Crash group: {{crash_group_id}}. Occurrences: {{get-crash-details.occurrence_count}}. Exception: {{get-crash-details.exception_message}}."
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "mobile_engineering"
                text: "Mobile crash alert: v{{app_version}} — {{get-crash-details.exception_name}}. {{get-crash-details.occurrence_count}} occurrences. Bug: {{create-bug.key}}"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: crash-reports
          path: "/mobile_applications/crashes/{{crash_group_id}}"
          inputParameters:
            - name: crash_group_id
              in: path
          operations:
            - name: get-crash-report
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves mystery shopper scores from Salesforce, creates improvement action items in Jira, and sends results to the operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Mystery Shopper Results Pipeline"
  description: "Retrieves mystery shopper scores from Salesforce, creates improvement action items in Jira, and sends results to the operations team via Microsoft Teams."
  tags:
    - operations
    - mystery-shopper
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mystery-shopper
      port: 8080
      tools:
        - name: process-mystery-shopper
          description: "Process mystery shopper results and create improvement actions."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: visit_date
              in: body
              type: string
              description: "Visit date in YYYY-MM-DD."
          steps:
            - name: get-results
              type: call
              call: "salesforce.get-shopper-results"
              with:
                restaurant_id: "{{restaurant_id}}"
                visit_date: "{{visit_date}}"
            - name: create-actions
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                issuetype: "Task"
                summary: "Mystery shopper follow-up — {{restaurant_id}} — {{visit_date}}"
                description: "Score: {{get-results.overall_score}}/100. Areas for improvement: {{get-results.improvement_areas}}."
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ops_{{restaurant_id}}"
                text: "Mystery shopper results: {{restaurant_id}} on {{visit_date}}. Score: {{get-results.overall_score}}/100. Action items: {{create-actions.key}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: shopper-results
          path: "/query?q=SELECT+Id,Score__c+FROM+Mystery_Shopper__c+WHERE+Restaurant__c='{{restaurant_id}}'"
          inputParameters:
            - name: restaurant_id
              in: query
          operations:
            - name: get-shopper-results
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries New Relic for application performance metrics of BK's digital ordering services and returns error rates and response times.

naftiko: "0.5"
info:
  label: "New Relic Application Health Check"
  description: "Queries New Relic for application performance metrics of BK's digital ordering services and returns error rates and response times."
  tags:
    - devops
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: app-monitoring
      port: 8080
      tools:
        - name: check-app-health
          description: "Fetch application health metrics from New Relic for BK's digital ordering platform."
          inputParameters:
            - name: app_name
              in: body
              type: string
              description: "New Relic application name."
          call: "newrelic.get-app-metrics"
          with:
            app_name: "{{app_name}}"
          outputParameters:
            - name: error_rate
              type: number
              mapping: "$.application.application_summary.error_rate"
            - name: response_time
              type: number
              mapping: "$.application.application_summary.response_time"
            - name: throughput
              type: number
              mapping: "$.application.application_summary.throughput"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications.json"
          operations:
            - name: get-app-metrics
              method: GET

Queries New Relic for the health status of the online ordering API, returning error rate, throughput, and average response time.

naftiko: "0.5"
info:
  label: "New Relic Order API Health Check"
  description: "Queries New Relic for the health status of the online ordering API, returning error rate, throughput, and average response time."
  tags:
    - engineering
    - api-monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: order-api-health
      port: 8080
      tools:
        - name: check-order-api-health
          description: "Get New Relic health metrics for the online ordering API."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: error_rate
              type: number
              mapping: "$.application_summary.error_rate"
            - name: throughput
              type: number
              mapping: "$.application_summary.throughput"
            - name: response_time
              type: number
              mapping: "$.application_summary.response_time"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Creates a new restaurant opening project in Jira, provisions the location in SAP, and sends the opening checklist to the development team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Restaurant Opening Checklist Orchestrator"
  description: "Creates a new restaurant opening project in Jira, provisions the location in SAP, and sends the opening checklist to the development team via Microsoft Teams."
  tags:
    - franchise-development
    - restaurant-opening
    - jira
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: restaurant-opening
      port: 8080
      tools:
        - name: initiate-restaurant-opening
          description: "Create opening project, provision in SAP, and distribute checklist."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "New restaurant location ID."
            - name: franchisee_id
              in: body
              type: string
              description: "Franchisee account ID."
            - name: target_open_date
              in: body
              type: string
              description: "Target opening date in YYYY-MM-DD."
          steps:
            - name: create-project
              type: call
              call: "jira.create-issue"
              with:
                project: "NRO"
                issuetype: "Epic"
                summary: "New Restaurant Opening — {{restaurant_id}} — {{target_open_date}}"
                description: "Franchisee: {{franchisee_id}}. Target open: {{target_open_date}}."
            - name: provision-location
              type: call
              call: "sap.create-cost-center"
              with:
                cost_center: "{{restaurant_id}}"
                description: "Restaurant {{restaurant_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_development"
                text: "New restaurant opening initiated: {{restaurant_id}} for franchisee {{franchisee_id}}. Target: {{target_open_date}}. Jira: {{create-project.key}}. SAP cost center provisioned."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-centers
          path: "/A_CostCenter"
          operations:
            - name: create-cost-center
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Creates a new restaurant record in Salesforce, provisions cost centers in SAP, and creates a project plan in Jira for the opening timeline.

naftiko: "0.5"
info:
  label: "New Restaurant Opening Orchestrator"
  description: "Creates a new restaurant record in Salesforce, provisions cost centers in SAP, and creates a project plan in Jira for the opening timeline."
  tags:
    - franchise-management
    - restaurant-opening
    - salesforce
    - sap
    - jira
capability:
  exposes:
    - type: mcp
      namespace: restaurant-opening
      port: 8080
      tools:
        - name: orchestrate-restaurant-opening
          description: "Create records in Salesforce and SAP, and set up Jira project for new restaurant."
          inputParameters:
            - name: franchisee_id
              in: body
              type: string
              description: "Franchisee account ID."
            - name: location_address
              in: body
              type: string
              description: "New restaurant address."
            - name: target_open_date
              in: body
              type: string
              description: "Target opening date in YYYY-MM-DD."
          steps:
            - name: create-sf-record
              type: call
              call: "salesforce.create-restaurant"
              with:
                franchisee_id: "{{franchisee_id}}"
                address: "{{location_address}}"
                target_date: "{{target_open_date}}"
            - name: create-cost-center
              type: call
              call: "sap.create-cost-center"
              with:
                name: "BK-{{create-sf-record.restaurant_number}}"
                responsible: "{{franchisee_id}}"
            - name: create-project
              type: call
              call: "jira.create-issue"
              with:
                project: "NRO"
                issuetype: "Epic"
                summary: "New Restaurant Opening — {{location_address}} — {{target_open_date}}"
                description: "Franchisee: {{franchisee_id}}. Restaurant: {{create-sf-record.restaurant_number}}. Target open: {{target_open_date}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: restaurants
          path: "/sobjects/Restaurant__c"
          operations:
            - name: create-restaurant
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-centers
          path: "/A_CostCenter"
          operations:
            - name: create-cost-center
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Queries Oracle E-Business Suite for franchise royalty payment status by franchisee ID and period, returning amount due, paid, and balance.

naftiko: "0.5"
info:
  label: "Oracle EBS Franchise Royalty Lookup"
  description: "Queries Oracle E-Business Suite for franchise royalty payment status by franchisee ID and period, returning amount due, paid, and balance."
  tags:
    - finance
    - royalty
    - oracle
    - oracle-e-business-suite
capability:
  exposes:
    - type: mcp
      namespace: royalty-management
      port: 8080
      tools:
        - name: get-royalty-status
          description: "Look up franchise royalty payment status by franchisee and period."
          inputParameters:
            - name: franchisee_id
              in: body
              type: string
              description: "The franchisee identifier."
            - name: period
              in: body
              type: string
              description: "Billing period (e.g., 2026-03)."
          call: "oracle.get-royalty"
          with:
            franchisee_id: "{{franchisee_id}}"
            period: "{{period}}"
          outputParameters:
            - name: amount_due
              type: number
              mapping: "$.AmountDue"
            - name: amount_paid
              type: number
              mapping: "$.AmountPaid"
            - name: balance
              type: number
              mapping: "$.Balance"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://bk-ebs.oracle.com/webservices/rest/royalty"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: royalties
          path: "/royalties?franchisee={{franchisee_id}}&period={{period}}"
          inputParameters:
            - name: franchisee_id
              in: query
            - name: period
              in: query
          operations:
            - name: get-royalty
              method: GET

Queries Oracle E-Business Suite for vendor payment status and returns pending and processed payment details.

naftiko: "0.5"
info:
  label: "Oracle EBS Vendor Payment Status"
  description: "Queries Oracle E-Business Suite for vendor payment status and returns pending and processed payment details."
  tags:
    - finance
    - payments
    - oracle-ebs
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up vendor payment status in Oracle E-Business Suite."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Oracle vendor ID."
            - name: payment_batch
              in: body
              type: string
              description: "Payment batch number."
          call: "oracle-ebs.get-payments"
          with:
            vendor_id: "{{vendor_id}}"
            batch: "{{payment_batch}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.payment_status"
            - name: amount
              type: string
              mapping: "$.payment_amount"
            - name: payment_date
              type: string
              mapping: "$.payment_date"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://erp.burgerking.com/webservices/rest/ap_payments"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: payments
          path: "/v1/payments"
          operations:
            - name: get-payments
              method: GET

Checks an employee's benefits enrollment status in PeopleSoft and returns plan details and effective dates.

naftiko: "0.5"
info:
  label: "PeopleSoft Benefits Enrollment Status"
  description: "Checks an employee's benefits enrollment status in PeopleSoft and returns plan details and effective dates."
  tags:
    - hr
    - benefits
    - peoplesoft
capability:
  exposes:
    - type: mcp
      namespace: hr-benefits
      port: 8080
      tools:
        - name: get-benefits-status
          description: "Retrieve an employee's current benefits enrollment from PeopleSoft."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "PeopleSoft employee ID."
          call: "peoplesoft.get-benefits"
          with:
            emplid: "{{employee_id}}"
          outputParameters:
            - name: medical_plan
              type: string
              mapping: "$.benefits.medical.plan_type"
            - name: dental_plan
              type: string
              mapping: "$.benefits.dental.plan_type"
            - name: effective_date
              type: string
              mapping: "$.benefits.effective_date"
            - name: status
              type: string
              mapping: "$.benefits.enrollment_status"
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://hr.burgerking.com/psftapi"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: benefits
          path: "/benefits/v1/employees/{{emplid}}"
          inputParameters:
            - name: emplid
              in: path
          operations:
            - name: get-benefits
              method: GET

Assigns Pluralsight learning paths to new technology hires and tracks completion progress.

naftiko: "0.5"
info:
  label: "Pluralsight Training Assignment Manager"
  description: "Assigns Pluralsight learning paths to new technology hires and tracks completion progress."
  tags:
    - learning
    - training
    - pluralsight
capability:
  exposes:
    - type: mcp
      namespace: learning-management
      port: 8080
      tools:
        - name: assign-learning-path
          description: "Assign a Pluralsight learning path to an employee and return the assignment details."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "Employee email address."
            - name: path_id
              in: body
              type: string
              description: "Pluralsight learning path ID."
            - name: due_date
              in: body
              type: string
              description: "Assignment due date in YYYY-MM-DD."
          call: "pluralsight.assign-path"
          with:
            email: "{{user_email}}"
            path_id: "{{path_id}}"
            due_date: "{{due_date}}"
          outputParameters:
            - name: assignment_id
              type: string
              mapping: "$.id"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: assignments
          path: "/learning-paths/{{path_id}}/assignments"
          inputParameters:
            - name: path_id
              in: path
          operations:
            - name: assign-path
              method: POST

Triggers a Postman collection run to validate BK's public API endpoints and returns test results.

naftiko: "0.5"
info:
  label: "Postman API Test Suite Runner"
  description: "Triggers a Postman collection run to validate BK's public API endpoints and returns test results."
  tags:
    - qa
    - api-testing
    - postman
capability:
  exposes:
    - type: mcp
      namespace: api-testing
      port: 8080
      tools:
        - name: run-api-tests
          description: "Run a Postman collection and return test results."
          inputParameters:
            - name: collection_id
              in: body
              type: string
              description: "Postman collection UID."
            - name: environment_id
              in: body
              type: string
              description: "Postman environment UID."
          call: "postman.run-collection"
          with:
            collection: "{{collection_id}}"
            environment: "{{environment_id}}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.run.id"
            - name: status
              type: string
              mapping: "$.run.status"
            - name: total_tests
              type: integer
              mapping: "$.run.stats.tests.total"
            - name: failed_tests
              type: integer
              mapping: "$.run.stats.tests.failed"
  consumes:
    - type: http
      namespace: postman
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apiKey
        key: "$secrets.postman_api_key"
      resources:
        - name: collection-runs
          path: "/monitors/{{collection_id}}/run"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: run-collection
              method: POST

Checks the last refresh status of a Power BI franchise performance dataset, returning refresh type, status, and completion time.

naftiko: "0.5"
info:
  label: "Power BI Franchise Dashboard Status"
  description: "Checks the last refresh status of a Power BI franchise performance dataset, returning refresh type, status, and completion time."
  tags:
    - analytics
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: franchise-reporting
      port: 8080
      tools:
        - name: get-dashboard-refresh-status
          description: "Get the last refresh status for a franchise Power BI dataset."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Power BI workspace ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh-history"
          with:
            group_id: "{{group_id}}"
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_type
              type: string
              mapping: "$.value[0].refreshType"
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: end_time
              type: string
              mapping: "$.value[0].endTime"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Triggers a refresh of a specific Power BI dataset and returns the refresh status.

naftiko: "0.5"
info:
  label: "Power BI Report Refresh Trigger"
  description: "Triggers a refresh of a specific Power BI dataset and returns the refresh status."
  tags:
    - analytics
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-powerbi-dataset
          description: "Trigger a Power BI dataset refresh and return the current status."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID."
          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: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Pulls pricing data from SAP, runs elasticity analysis in Databricks, and updates pricing recommendations in Google Sheets.

naftiko: "0.5"
info:
  label: "Price Optimization Analysis Pipeline"
  description: "Pulls pricing data from SAP, runs elasticity analysis in Databricks, and updates pricing recommendations in Google Sheets."
  tags:
    - finance
    - pricing
    - sap
    - databricks
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: price-optimization
      port: 8080
      tools:
        - name: analyze-pricing
          description: "Analyze menu item pricing and generate optimization recommendations."
          inputParameters:
            - name: menu_category
              in: body
              type: string
              description: "Menu category (e.g., burgers, sides, beverages)."
            - name: region
              in: body
              type: string
              description: "Regional market identifier."
          steps:
            - name: get-pricing-data
              type: call
              call: "sap.get-pricing"
              with:
                category: "{{menu_category}}"
                region: "{{region}}"
            - name: run-analysis
              type: call
              call: "databricks.run-job"
              with:
                job_id: "price_elasticity"
                category: "{{menu_category}}"
                region: "{{region}}"
            - name: create-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Price Optimization — {{menu_category}} — {{region}}"
                data: "Category: {{menu_category}}, Region: {{region}}, Items analyzed: {{get-pricing-data.item_count}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pricing
          path: "/A_Product?$filter=ProductGroup eq '{{category}}'"
          inputParameters:
            - name: category
              in: query
          operations:
            - name: get-pricing
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://bk.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST

Generates unique promotional coupon codes, stores them in DynamoDB, and distributes via MailChimp email to targeted customer segments.

naftiko: "0.5"
info:
  label: "Promotional Coupon Code Generator"
  description: "Generates unique promotional coupon codes, stores them in DynamoDB, and distributes via MailChimp email to targeted customer segments."
  tags:
    - marketing
    - promotions
    - dynamodb
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: promo-coupons
      port: 8080
      tools:
        - name: generate-and-distribute-coupons
          description: "Create promotional coupon codes, store in DynamoDB, and send to customers via MailChimp."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Promotional campaign name."
            - name: discount_type
              in: body
              type: string
              description: "Discount type (percentage, fixed, bogo)."
            - name: discount_value
              in: body
              type: string
              description: "Discount value."
            - name: target_list_id
              in: body
              type: string
              description: "MailChimp list segment ID."
          steps:
            - name: store-coupons
              type: call
              call: "dynamodb.put-item"
              with:
                table_name: "bk_promo_codes"
                item: "{\"campaign\": \"{{campaign_name}}\", \"discount_type\": \"{{discount_type}}\", \"discount_value\": \"{{discount_value}}\", \"status\": \"active\"}"
            - name: send-emails
              type: call
              call: "mailchimp.create-campaign"
              with:
                type: "regular"
                recipients_list_id: "{{target_list_id}}"
                subject_line: "Your exclusive BK deal: {{campaign_name}}"
                from_name: "Burger King"
            - name: launch-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{send-emails.id}}"
  consumes:
    - type: http
      namespace: dynamodb
      baseUri: "https://dynamodb.us-east-1.amazonaws.com"
      authentication:
        type: aws-sig-v4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: items
          path: "/"
          operations:
            - name: put-item
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST

Pulls labor cost data from Workday, compares against budgets in SAP, and publishes regional reports to Power BI.

naftiko: "0.5"
info:
  label: "Regional Labor Cost Report Pipeline"
  description: "Pulls labor cost data from Workday, compares against budgets in SAP, and publishes regional reports to Power BI."
  tags:
    - finance
    - labor-cost
    - workday
    - sap
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: labor-cost-reporting
      port: 8080
      tools:
        - name: generate-labor-cost-report
          description: "Generate regional labor cost report from Workday and SAP."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Regional market identifier."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-03)."
          steps:
            - name: get-labor-costs
              type: call
              call: "workday.get-labor-costs"
              with:
                region: "{{region}}"
                period: "{{period}}"
            - name: get-budget
              type: call
              call: "sap.get-labor-budget"
              with:
                region: "{{region}}"
                period: "{{period}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "finance_dashboards"
                dataset_id: "labor_cost_{{region}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://bk.workday.com/api/compensation/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: labor-costs
          path: "/labor_costs?region={{region}}&period={{period}}"
          inputParameters:
            - name: region
              in: query
            - name: period
              in: query
          operations:
            - name: get-labor-costs
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: budgets
          path: "/A_CostCenter?$filter=Region eq '{{region}}'"
          inputParameters:
            - name: region
              in: query
          operations:
            - name: get-labor-budget
              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: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a Microsoft Teams welcome message to the restaurant manager.

naftiko: "0.5"
info:
  label: "Restaurant Crew Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a Microsoft Teams welcome message to the restaurant manager."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-crew-onboarding
          description: "Given a Workday employee ID and restaurant location, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new crew member."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: restaurant_id
              in: body
              type: string
              description: "The BK restaurant number."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Crew onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "Restaurant_Ops"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} at restaurant {{restaurant_id}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "bk_onboarding_site"
                folder_path: "CrewDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_{{restaurant_id}}"
                text: "Welcome to BK, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Training docs are at {{provision-folder.url}}."
  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: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              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: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves energy usage data from Datadog IoT sensors, compares against baselines in Snowflake, and alerts facilities via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Restaurant Energy Usage Monitoring Pipeline"
  description: "Retrieves energy usage data from Datadog IoT sensors, compares against baselines in Snowflake, and alerts facilities via Microsoft Teams."
  tags:
    - operations
    - energy-management
    - datadog
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: energy-monitoring
      port: 8080
      tools:
        - name: monitor-energy-usage
          description: "Monitor restaurant energy usage and alert on anomalies."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: threshold_pct
              in: body
              type: number
              description: "Alert threshold as percentage above baseline."
          steps:
            - name: get-energy-data
              type: call
              call: "datadog.query-metrics"
              with:
                query: "avg:energy.kwh{restaurant_id:{{restaurant_id}}}.rollup(sum, 3600)"
                from: "now-24h"
                to: "now"
            - name: get-baseline
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT avg_daily_kwh FROM energy_baselines WHERE restaurant_id='{{restaurant_id}}'"
            - name: send-alert
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "facilities_management"
                text: "Energy Alert: Restaurant {{restaurant_id}} — Current: {{get-energy-data.total_kwh}} kWh, Baseline: {{get-baseline.avg_daily_kwh}} kWh. Threshold: {{threshold_pct}}% above baseline."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries ServiceNow for upcoming equipment maintenance windows and creates calendar events in Microsoft Outlook for restaurant managers.

naftiko: "0.5"
info:
  label: "Restaurant Equipment Maintenance Scheduler"
  description: "Queries ServiceNow for upcoming equipment maintenance windows and creates calendar events in Microsoft Outlook for restaurant managers."
  tags:
    - operations
    - maintenance
    - servicenow
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: equipment-maintenance
      port: 8080
      tools:
        - name: schedule-maintenance
          description: "Fetch upcoming maintenance tasks from ServiceNow and create Outlook calendar reminders for restaurant managers."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "The restaurant location ID."
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to look for scheduled maintenance."
          steps:
            - name: get-maintenance-tasks
              type: call
              call: "servicenow.get-change-requests"
              with:
                query: "assignment_group=Restaurant_{{restaurant_id}}^state=scheduled^start_date>=javascript:gs.daysAgo(0)^start_date<=javascript:gs.daysAgo(-{{days_ahead}})"
            - name: create-calendar-events
              type: call
              call: "outlook.create-event"
              with:
                subject: "Equipment Maintenance: {{get-maintenance-tasks.short_description}}"
                start_time: "{{get-maintenance-tasks.start_date}}"
                end_time: "{{get-maintenance-tasks.end_date}}"
                attendees: "manager_{{restaurant_id}}@burgerking.com"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.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: get-change-requests
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/users/{{attendees}}/events"
          inputParameters:
            - name: attendees
              in: path
          operations:
            - name: create-event
              method: POST

Creates a remodel project in Jira, tracks budget in SAP, and updates the franchise development team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Restaurant Remodel Project Tracker"
  description: "Creates a remodel project in Jira, tracks budget in SAP, and updates the franchise development team via Microsoft Teams."
  tags:
    - franchise-development
    - remodel
    - jira
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: remodel-tracking
      port: 8080
      tools:
        - name: track-remodel-project
          description: "Create remodel project, track budget, and notify team."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: remodel_type
              in: body
              type: string
              description: "Type of remodel (interior, exterior, full)."
            - name: budget
              in: body
              type: number
              description: "Approved budget amount."
          steps:
            - name: create-project
              type: call
              call: "jira.create-issue"
              with:
                project: "REM"
                issuetype: "Epic"
                summary: "Remodel — {{restaurant_id}} — {{remodel_type}}"
                description: "Restaurant: {{restaurant_id}}. Type: {{remodel_type}}. Budget: ${{budget}}."
            - name: create-budget
              type: call
              call: "sap.create-internal-order"
              with:
                description: "Remodel {{restaurant_id}} — {{remodel_type}}"
                budget: "{{budget}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "franchise_development"
                text: "Remodel project created: {{restaurant_id}} — {{remodel_type}}. Budget: ${{budget}}. Jira: {{create-project.key}}. SAP order: {{create-budget.order_number}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://burgerking.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_INTERNAL_ORDER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/A_InternalOrder"
          operations:
            - name: create-internal-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls approved shift schedules from Workday and posts them to the restaurant's Microsoft Teams channel so crew members can view their upcoming shifts.

naftiko: "0.5"
info:
  label: "Restaurant Shift Schedule Publisher"
  description: "Pulls approved shift schedules from Workday and posts them to the restaurant's Microsoft Teams channel so crew members can view their upcoming shifts."
  tags:
    - operations
    - scheduling
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shift-scheduling
      port: 8080
      tools:
        - name: publish-shift-schedule
          description: "Retrieve shift schedules from Workday and post to the restaurant Teams channel."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: week_start
              in: body
              type: string
              description: "Week start date in YYYY-MM-DD."
          steps:
            - name: get-schedules
              type: call
              call: "workday.get-schedules"
              with:
                location_id: "restaurant_{{restaurant_id}}"
                week_of: "{{week_start}}"
            - name: post-schedule
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_{{restaurant_id}}"
                text: "Shift schedule for week of {{week_start}} is now published. Total shifts: {{get-schedules.total_shifts}}. View details 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: schedules
          path: "/scheduling/schedules"
          operations:
            - name: get-schedules
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Looks up a franchisee account in Salesforce by account ID, returning franchisee name, territory, restaurant count, and contract status.

naftiko: "0.5"
info:
  label: "Salesforce Franchisee Account Lookup"
  description: "Looks up a franchisee account in Salesforce by account ID, returning franchisee name, territory, restaurant count, and contract status."
  tags:
    - franchise-management
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: franchisee-management
      port: 8080
      tools:
        - name: get-franchisee
          description: "Look up a Salesforce franchisee account by ID."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: franchisee_name
              type: string
              mapping: "$.Name"
            - name: territory
              type: string
              mapping: "$.Territory__c"
            - name: restaurant_count
              type: number
              mapping: "$.Restaurant_Count__c"
            - name: contract_status
              type: string
              mapping: "$.Contract_Status__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.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 new franchise inquiry lands in Salesforce, scores the lead, updates the opportunity stage, and notifies the franchise development team via Teams.

naftiko: "0.5"
info:
  label: "Salesforce Lead Qualification Pipeline"
  description: "When a new franchise inquiry lands in Salesforce, scores the lead, updates the opportunity stage, and notifies the franchise development team via Teams."
  tags:
    - franchise
    - sales
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: franchise-leads
      port: 8080
      tools:
        - name: qualify-franchise-lead
          description: "Score and route a new franchise inquiry from Salesforce, updating the opportunity and notifying the development team."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "Salesforce lead ID."
          steps:
            - name: get-lead
              type: call
              call: "salesforce.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: update-opportunity
              type: call
              call: "salesforce.update-lead"
              with:
                lead_id: "{{lead_id}}"
                status: "Qualified"
                rating: "{{get-lead.computed_score}}"
            - name: notify-dev-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "franchise_development"
                text: "New qualified franchise lead: {{get-lead.FirstName}} {{get-lead.LastName}} ({{get-lead.Company}}) in {{get-lead.City}}, {{get-lead.State}}. Score: {{get-lead.computed_score}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: get-lead
              method: GET
            - name: update-lead
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves supplier invoices from SAP and cross-references with Coupa purchase orders to flag discrepancies for the finance team.

naftiko: "0.5"
info:
  label: "SAP Invoice Reconciliation"
  description: "Retrieves supplier invoices from SAP and cross-references with Coupa purchase orders to flag discrepancies for the finance team."
  tags:
    - finance
    - reconciliation
    - sap
    - coupa
capability:
  exposes:
    - type: mcp
      namespace: finance-reconciliation
      port: 8080
      tools:
        - name: reconcile-invoices
          description: "Compare SAP invoices against Coupa POs and return a discrepancy report."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "SAP vendor number."
            - name: date_from
              in: body
              type: string
              description: "Start date for invoice lookup in YYYY-MM-DD."
            - name: date_to
              in: body
              type: string
              description: "End date for invoice lookup in YYYY-MM-DD."
          steps:
            - name: get-invoices
              type: call
              call: "sap.get-invoices"
              with:
                vendor_id: "{{vendor_id}}"
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: get-pos
              type: call
              call: "coupa.search-pos"
              with:
                supplier_id: "{{vendor_id}}"
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-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"
          operations:
            - name: get-invoices
              method: GET
    - type: http
      namespace: coupa
      baseUri: "https://burgerking.coupahost.com/api"
      authentication:
        type: bearer
        token: "$secrets.coupa_api_token"
      resources:
        - name: purchase-orders
          path: "/purchase_orders"
          operations:
            - name: search-pos
              method: GET

Retrieves cost center details from SAP for a specific restaurant location, returning cost center name, responsible manager, and budget allocation.

naftiko: "0.5"
info:
  label: "SAP Restaurant Cost Center Lookup"
  description: "Retrieves cost center details from SAP for a specific restaurant location, returning cost center name, responsible manager, and budget allocation."
  tags:
    - finance
    - cost-center
    - sap
capability:
  exposes:
    - type: mcp
      namespace: cost-center-management
      port: 8080
      tools:
        - name: get-cost-center
          description: "Look up a SAP cost center by restaurant location ID."
          inputParameters:
            - name: location_id
              in: body
              type: string
              description: "The restaurant location ID."
          call: "sap.get-cost-center"
          with:
            location_id: "{{location_id}}"
          outputParameters:
            - name: cost_center_name
              type: string
              mapping: "$.d.CostCenterName"
            - name: responsible_manager
              type: string
              mapping: "$.d.ResponsiblePerson"
            - name: budget
              type: number
              mapping: "$.d.BudgetAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-centers
          path: "/A_CostCenter('{{location_id}}')"
          inputParameters:
            - name: location_id
              in: path
          operations:
            - name: get-cost-center
              method: GET

Retrieves a franchise support ticket from ServiceNow by ticket number, returning description, status, assigned group, and priority.

naftiko: "0.5"
info:
  label: "ServiceNow Franchise Ticket Lookup"
  description: "Retrieves a franchise support ticket from ServiceNow by ticket number, returning description, status, assigned group, and priority."
  tags:
    - franchise-support
    - ticket-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: franchise-support
      port: 8080
      tools:
        - name: get-franchise-ticket
          description: "Look up a ServiceNow franchise support ticket by number."
          inputParameters:
            - name: ticket_number
              in: body
              type: string
              description: "The ServiceNow ticket number."
          call: "servicenow.get-incident"
          with:
            ticket_number: "{{ticket_number}}"
          outputParameters:
            - name: short_description
              type: string
              mapping: "$.result.short_description"
            - name: status
              type: string
              mapping: "$.result.state"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.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={{ticket_number}}"
          inputParameters:
            - name: ticket_number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves an IT incident from ServiceNow by number and returns its current state, assignee, and resolution notes.

naftiko: "0.5"
info:
  label: "ServiceNow IT Incident Lookup"
  description: "Retrieves an IT incident from ServiceNow by number and returns its current state, assignee, and resolution notes."
  tags:
    - it-support
    - incident-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number and return current details."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result[0].state"
            - name: assigned_to
              type: string
              mapping: "$.result[0].assigned_to.display_value"
            - name: short_description
              type: string
              mapping: "$.result[0].short_description"
            - name: resolution_notes
              type: string
              mapping: "$.result[0].close_notes"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Queries Snowflake for restaurant sales data by location and date range, returning total revenue, transaction count, and average ticket size.

naftiko: "0.5"
info:
  label: "Snowflake Sales Data Query"
  description: "Queries Snowflake for restaurant sales data by location and date range, returning total revenue, transaction count, and average ticket size."
  tags:
    - analytics
    - sales-data
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: query-sales-data
          description: "Query Snowflake for restaurant sales metrics by location and date range."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: date_from
              in: body
              type: string
              description: "Start date in YYYY-MM-DD."
            - name: date_to
              in: body
              type: string
              description: "End date in YYYY-MM-DD."
          call: "snowflake.execute-query"
          with:
            query: "SELECT SUM(revenue), COUNT(*), AVG(ticket_size) FROM sales WHERE restaurant_id='{{restaurant_id}}' AND sale_date BETWEEN '{{date_from}}' AND '{{date_to}}'"
          outputParameters:
            - name: total_revenue
              type: number
              mapping: "$.data[0][0]"
            - name: transaction_count
              type: number
              mapping: "$.data[0][1]"
            - name: avg_ticket_size
              type: number
              mapping: "$.data[0][2]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Creates a coordinated marketing campaign across Instagram, Facebook, and Twitter, then tracks initial engagement metrics via Adobe Analytics.

naftiko: "0.5"
info:
  label: "Social Media Campaign Launcher"
  description: "Creates a coordinated marketing campaign across Instagram, Facebook, and Twitter, then tracks initial engagement metrics via Adobe Analytics."
  tags:
    - marketing
    - social-media
    - instagram
    - facebook
    - twitter
    - adobe-analytics
capability:
  exposes:
    - type: mcp
      namespace: social-campaigns
      port: 8080
      tools:
        - name: launch-campaign
          description: "Create posts on Instagram, Facebook, and Twitter for a new menu promotion and set up Adobe Analytics tracking."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Name of the marketing campaign."
            - name: post_content
              in: body
              type: string
              description: "Text content for social posts."
            - name: image_url
              in: body
              type: string
              description: "URL of the campaign image asset."
            - name: promo_code
              in: body
              type: string
              description: "Promotional code to track conversions."
          steps:
            - name: post-instagram
              type: call
              call: "instagram.create-post"
              with:
                caption: "{{post_content}} Use code {{promo_code}}!"
                image_url: "{{image_url}}"
            - name: post-facebook
              type: call
              call: "facebook.create-post"
              with:
                message: "{{post_content}} Use code {{promo_code}}!"
                link: "https://www.bk.com/offers?promo={{promo_code}}"
            - name: post-twitter
              type: call
              call: "twitter.create-tweet"
              with:
                text: "{{post_content}} Use code {{promo_code}}! #BurgerKing #BKDeals"
            - name: setup-tracking
              type: call
              call: "adobe-analytics.create-segment"
              with:
                name: "{{campaign_name}}_tracking"
                filter: "evar5={{promo_code}}"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/{{ig_account_id}}/media"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: posts
          path: "/{{page_id}}/feed"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets
          path: "/tweets"
          operations:
            - name: create-tweet
              method: POST
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: segments
          path: "/{{company_id}}/segments"
          operations:
            - name: create-segment
              method: POST

Detects negative social media mentions from HubSpot, creates a crisis response ticket in ServiceNow, and alerts the PR team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Social Media Crisis Response Workflow"
  description: "Detects negative social media mentions from HubSpot, creates a crisis response ticket in ServiceNow, and alerts the PR team via Microsoft Teams."
  tags:
    - marketing
    - crisis-management
    - hubspot
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crisis-response
      port: 8080
      tools:
        - name: respond-to-social-crisis
          description: "Detect negative mentions, create response ticket, and alert PR."
          inputParameters:
            - name: mention_id
              in: body
              type: string
              description: "Social mention identifier."
            - name: platform
              in: body
              type: string
              description: "Social media platform (twitter, instagram, facebook)."
          steps:
            - name: get-mention
              type: call
              call: "hubspot.get-social-mention"
              with:
                mention_id: "{{mention_id}}"
            - name: create-response-ticket
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_crisis_response"
                short_description: "Social media crisis — {{platform}} — {{mention_id}}"
                description: "Platform: {{platform}}. Sentiment: {{get-mention.sentiment}}. Reach: {{get-mention.reach}}. Content: {{get-mention.content}}"
                priority: "1"
            - name: alert-pr
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "pr_crisis"
                text: "SOCIAL MEDIA ALERT: Negative mention on {{platform}}. Reach: {{get-mention.reach}}. Response ticket: {{create-response-ticket.number}}. Immediate action required."
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: social
          path: "/objects/social_mentions/{{mention_id}}"
          inputParameters:
            - name: mention_id
              in: path
          operations:
            - name: get-social-mention
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              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/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Syncs restaurant location data from SAP to Google Maps Platform and updates the store locator page via the CMS.

naftiko: "0.5"
info:
  label: "Store Locator Data Sync Pipeline"
  description: "Syncs restaurant location data from SAP to Google Maps Platform and updates the store locator page via the CMS."
  tags:
    - digital
    - store-locator
    - sap
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: store-locator-sync
      port: 8080
      tools:
        - name: sync-store-locator
          description: "Sync restaurant locations from SAP to Google Maps."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Regional market identifier."
          steps:
            - name: get-locations
              type: call
              call: "sap.get-restaurant-locations"
              with:
                region: "{{region}}"
            - name: update-maps
              type: call
              call: "google-maps.update-places"
              with:
                region: "{{region}}"
                location_count: "{{get-locations.total_count}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: locations
          path: "/A_BusinessPartnerAddress?$filter=Region eq '{{region}}'"
          inputParameters:
            - name: region
              in: query
          operations:
            - name: get-restaurant-locations
              method: GET
    - type: http
      namespace: google-maps
      baseUri: "https://mybusinessbusinessinformation.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_maps_token"
      resources:
        - name: locations
          path: "/accounts/bk/locations:batchUpdate"
          operations:
            - name: update-places
              method: POST

Looks up a Coupa purchase order and returns status, supplier, and delivery timeline for supply chain teams.

naftiko: "0.5"
info:
  label: "Supplier Purchase Order Tracker"
  description: "Looks up a Coupa purchase order and returns status, supplier, and delivery timeline for supply chain teams."
  tags:
    - procurement
    - supply-chain
    - coupa
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a Coupa purchase order by PO number. Returns status, supplier, total value, and expected delivery."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The Coupa purchase order number."
          call: "coupa.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: supplier
              type: string
              mapping: "$.supplier.name"
            - name: total_value
              type: string
              mapping: "$.total"
            - name: delivery_date
              type: string
              mapping: "$.need-by-date"
  consumes:
    - type: http
      namespace: coupa
      baseUri: "https://burgerking.coupahost.com/api"
      authentication:
        type: bearer
        token: "$secrets.coupa_api_token"
      resources:
        - name: purchase-orders
          path: "/purchase_orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Monitors supplier delivery status from SAP, checks inventory levels in Snowflake, and sends disruption alerts to the supply chain team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Pipeline"
  description: "Monitors supplier delivery status from SAP, checks inventory levels in Snowflake, and sends disruption alerts to the supply chain team via Microsoft Teams."
  tags:
    - supply-chain
    - disruption-management
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-alerts
      port: 8080
      tools:
        - name: check-supply-disruption
          description: "Monitor supplier deliveries and alert on disruptions."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "SAP supplier vendor number."
            - name: item_category
              in: body
              type: string
              description: "Product category (e.g., proteins, buns, produce)."
          steps:
            - name: get-delivery-status
              type: call
              call: "sap.get-delivery-schedule"
              with:
                supplier_id: "{{supplier_id}}"
                category: "{{item_category}}"
            - name: check-inventory
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT SUM(quantity_on_hand), AVG(days_of_supply) FROM inventory WHERE supplier_id='{{supplier_id}}' AND category='{{item_category}}'"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "supply_chain_ops"
                text: "Supply Alert — Supplier {{supplier_id}} ({{item_category}}): Delivery status {{get-delivery-status.status}}. Current inventory: {{check-inventory.quantity_on_hand}} units, {{check-inventory.days_of_supply}} days supply."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_INBOUND_DELIVERY"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/A_InboundDelivery?$filter=Vendor eq '{{supplier_id}}'"
          inputParameters:
            - name: supplier_id
              in: query
          operations:
            - name: get-delivery-schedule
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates a trusted ticket for embedding a Tableau dashboard in the BK intranet portal.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Embed Link Generator"
  description: "Generates a trusted ticket for embedding a Tableau dashboard in the BK intranet portal."
  tags:
    - analytics
    - visualization
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: data-visualization
      port: 8080
      tools:
        - name: get-tableau-embed
          description: "Generate a trusted ticket for a Tableau dashboard to embed in the intranet."
          inputParameters:
            - name: username
              in: body
              type: string
              description: "Tableau server username."
            - name: view_url
              in: body
              type: string
              description: "Tableau view URL path."
          call: "tableau.get-trusted-ticket"
          with:
            username: "{{username}}"
          outputParameters:
            - name: ticket
              type: string
              mapping: "$"
            - name: embed_url
              type: string
              mapping: "$.embed_url"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.burgerking.com"
      authentication:
        type: basic
        username: "$secrets.tableau_admin_user"
        password: "$secrets.tableau_admin_password"
      resources:
        - name: trusted
          path: "/trusted"
          operations:
            - name: get-trusted-ticket
              method: POST

Pulls vendor invoices from Oracle EBS, compares against purchase orders in SAP, and creates discrepancy tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Vendor Invoice Reconciliation Workflow"
  description: "Pulls vendor invoices from Oracle EBS, compares against purchase orders in SAP, and creates discrepancy tickets in ServiceNow."
  tags:
    - finance
    - invoice-reconciliation
    - oracle
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: invoice-reconciliation
      port: 8080
      tools:
        - name: reconcile-vendor-invoice
          description: "Compare vendor invoices with POs and flag discrepancies."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor identifier."
            - name: invoice_number
              in: body
              type: string
              description: "Invoice number."
          steps:
            - name: get-invoice
              type: call
              call: "oracle.get-invoice"
              with:
                vendor_id: "{{vendor_id}}"
                invoice_number: "{{invoice_number}}"
            - name: get-po
              type: call
              call: "sap.get-purchase-order"
              with:
                po_number: "{{get-invoice.po_reference}}"
            - name: create-discrepancy
              type: call
              call: "servicenow.create-record"
              with:
                table: "x_bk_invoice_discrepancy"
                short_description: "Invoice discrepancy — {{invoice_number}} — Vendor {{vendor_id}}"
                description: "Invoice amount: ${{get-invoice.amount}}. PO amount: ${{get-po.amount}}. Variance: ${{get-invoice.variance}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://bk-ebs.oracle.com/webservices/rest/invoices"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: invoices
          path: "/invoices?vendor={{vendor_id}}&number={{invoice_number}}"
          inputParameters:
            - name: vendor_id
              in: query
            - name: invoice_number
              in: query
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://bk-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_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-purchase-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://burgerking.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Collects food waste data from Snowflake, compares against targets, and sends weekly waste reduction reports to restaurant managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Waste Reduction Tracking Pipeline"
  description: "Collects food waste data from Snowflake, compares against targets, and sends weekly waste reduction reports to restaurant managers via Microsoft Teams."
  tags:
    - operations
    - sustainability
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: waste-tracking
      port: 8080
      tools:
        - name: track-waste-reduction
          description: "Track food waste and send reduction reports to managers."
          inputParameters:
            - name: restaurant_id
              in: body
              type: string
              description: "Restaurant location ID."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., last-7-days)."
          steps:
            - name: get-waste-data
              type: call
              call: "snowflake.execute-query"
              with:
                query: "SELECT SUM(waste_lbs), AVG(waste_pct) FROM food_waste WHERE restaurant_id='{{restaurant_id}}'"
            - name: send-report
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "restaurant_{{restaurant_id}}"
                text: "Waste Report — {{restaurant_id}} — {{period}}: Total waste {{get-waste-data.total_lbs}} lbs, Waste rate {{get-waste-data.avg_pct}}%. Target: 3.5%."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://bk.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Sends order confirmation and delivery status notifications to customers via WhatsApp Business API.

naftiko: "0.5"
info:
  label: "WhatsApp Customer Notification Sender"
  description: "Sends order confirmation and delivery status notifications to customers via WhatsApp Business API."
  tags:
    - customer-service
    - notifications
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: customer-notifications
      port: 8080
      tools:
        - name: send-order-notification
          description: "Send an order status notification to a customer via WhatsApp."
          inputParameters:
            - name: phone_number
              in: body
              type: string
              description: "Customer phone number in E.164 format."
            - name: order_id
              in: body
              type: string
              description: "Order ID."
            - name: status
              in: body
              type: string
              description: "Order status (confirmed, preparing, ready, delivered)."
          call: "whatsapp.send-message"
          with:
            to: "{{phone_number}}"
            template: "order_status_update"
            parameters: "[\"{{order_id}}\", \"{{status}}\"]"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.messages[0].id"
  consumes:
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0/{{phone_number_id}}"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Retrieves crew member details from Workday by employee ID, returning name, position, location, and hire date.

naftiko: "0.5"
info:
  label: "Workday Crew Member Lookup"
  description: "Retrieves crew member details from Workday by employee ID, returning name, position, location, and hire date."
  tags:
    - human-resources
    - crew-management
    - workday
capability:
  exposes:
    - type: mcp
      namespace: crew-management
      port: 8080
      tools:
        - name: get-crew-member
          description: "Look up a Workday crew member by employee ID."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-worker"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.Worker.Name"
            - name: position
              type: string
              mapping: "$.Worker.Position"
            - name: location
              type: string
              mapping: "$.Worker.Location"
            - name: hire_date
              type: string
              mapping: "$.Worker.HireDate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://bk.workday.com/api/staffing/v3"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET

Searches the Workday employee directory by name or department and returns employee details.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Searches the Workday employee directory by name or department and returns employee details."
  tags:
    - hr
    - directory
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: search-employees
          description: "Search for employees in Workday by name or department."
          inputParameters:
            - name: search_term
              in: body
              type: string
              description: "Employee name or department to search for."
          call: "workday.search-workers"
          with:
            search: "{{search_term}}"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.workers"
            - name: total_count
              type: integer
              mapping: "$.total"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          operations:
            - name: search-workers
              method: GET

Retrieves video performance analytics from BK's YouTube channel including views, engagement, and subscriber growth.

naftiko: "0.5"
info:
  label: "YouTube Brand Channel Analytics"
  description: "Retrieves video performance analytics from BK's YouTube channel including views, engagement, and subscriber growth."
  tags:
    - marketing
    - video
    - youtube
capability:
  exposes:
    - type: mcp
      namespace: video-analytics
      port: 8080
      tools:
        - name: get-channel-analytics
          description: "Fetch YouTube channel analytics for the Burger King brand channel."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD."
          call: "youtube.get-analytics"
          with:
            channel_id: "{{bk_channel_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
            metrics: "views,likes,subscribersGained"
          outputParameters:
            - name: total_views
              type: integer
              mapping: "$.rows[0][0]"
            - name: total_likes
              type: integer
              mapping: "$.rows[0][1]"
            - name: new_subscribers
              type: integer
              mapping: "$.rows[0][2]"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://youtubeanalytics.googleapis.com/v2"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: reports
          path: "/reports"
          operations:
            - name: get-analytics
              method: GET

Creates a Zoom meeting for quarterly franchise performance reviews and sends invites via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Zoom Meeting Scheduler for Franchise Reviews"
  description: "Creates a Zoom meeting for quarterly franchise performance reviews and sends invites via Microsoft Outlook."
  tags:
    - collaboration
    - meetings
    - zoom
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: meeting-scheduler
      port: 8080
      tools:
        - name: schedule-franchise-review
          description: "Create a Zoom meeting for a franchise quarterly review and send Outlook calendar invites."
          inputParameters:
            - name: franchise_name
              in: body
              type: string
              description: "Franchise group name."
            - name: date_time
              in: body
              type: string
              description: "Meeting date and time in ISO 8601 format."
            - name: attendees
              in: body
              type: string
              description: "Comma-separated list of attendee email addresses."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Quarterly Review: {{franchise_name}}"
                start_time: "{{date_time}}"
                duration: 60
                type: 2
            - name: send-invite
              type: call
              call: "outlook.create-event"
              with:
                subject: "Quarterly Review: {{franchise_name}}"
                start_time: "{{date_time}}"
                body: "Join Zoom Meeting: {{create-meeting.join_url}}"
                attendees: "{{attendees}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/me/events"
          operations:
            - name: create-event
              method: POST

Enriches a Salesforce lead with ZoomInfo company and contact data, then updates the lead record with firmographic details.

naftiko: "0.5"
info:
  label: "ZoomInfo Lead Enrichment Pipeline"
  description: "Enriches a Salesforce lead with ZoomInfo company and contact data, then updates the lead record with firmographic details."
  tags:
    - sales
    - lead-enrichment
    - zoominfo
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: lead-enrichment
      port: 8080
      tools:
        - name: enrich-lead
          description: "Fetch ZoomInfo data for a lead and update the Salesforce record with enriched firmographics."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "Salesforce lead ID."
            - name: company_name
              in: body
              type: string
              description: "Company name to look up in ZoomInfo."
          steps:
            - name: lookup-company
              type: call
              call: "zoominfo.search-company"
              with:
                company_name: "{{company_name}}"
            - name: update-lead
              type: call
              call: "salesforce.update-lead"
              with:
                lead_id: "{{lead_id}}"
                annual_revenue: "{{lookup-company.revenue}}"
                employee_count: "{{lookup-company.employee_count}}"
                industry: "{{lookup-company.industry}}"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/search/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://burgerking.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: update-lead
              method: PATCH