Burger King Capabilities
Naftiko 0.5 capability definitions for Burger King - 100 capabilities showing integration workflows and service orchestrations.
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