Bloomingdales Capabilities
Naftiko 0.5 capability definitions for Bloomingdales - 100 capabilities showing integration workflows and service orchestrations.
Retrieves Adobe Analytics report data for e-commerce conversion and revenue tracking.
naftiko: "0.5"
info:
label: "Adobe Analytics E-Commerce Tracking"
description: "Retrieves Adobe Analytics report data for e-commerce conversion and revenue tracking."
tags:
- analytics
- adobe-analytics
- e-commerce
capability:
exposes:
- type: mcp
namespace: adobe-analytics
port: 8080
tools:
- name: get-analytics-report
description: "Retrieve an Adobe Analytics report."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "Adobe Analytics report suite ID."
- name: date_range
in: body
type: string
description: "Date range for the report."
call: "adobe.get-report"
with:
rsid: "{{report_suite_id}}"
dateRange: "{{date_range}}"
consumes:
- type: http
namespace: adobe
baseUri: "https://analytics.adobe.io/api/bloomingdales"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/reports"
operations:
- name: get-report
method: POST
Sends a promotional SMS blast to a customer segment via Adobe Campaign.
naftiko: "0.5"
info:
label: "Adobe Campaign SMS Blast"
description: "Sends a promotional SMS blast to a customer segment via Adobe Campaign."
tags:
- marketing
- adobe-campaign
- sms
capability:
exposes:
- type: mcp
namespace: campaign-sms
port: 8080
tools:
- name: send-sms-blast
description: "Send an SMS campaign to a target audience segment."
inputParameters:
- name: segment_id
in: body
type: string
description: "Adobe Campaign audience segment ID."
call: "adobe-campaign.send-sms"
with:
segment_id: "{{segment_id}}"
consumes:
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bloomingdales/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: sms-deliveries
path: "/smsDeliveries/{{segment_id}}/send"
inputParameters:
- name: segment_id
in: path
operations:
- name: send-sms
method: POST
Retrieves the latest build status for Bloomingdale's e-commerce platform pipelines.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status"
description: "Retrieves the latest build status for Bloomingdale's e-commerce platform pipelines."
tags:
- ci
- azure-devops
- e-commerce
capability:
exposes:
- type: mcp
namespace: devops-builds
port: 8080
tools:
- name: get-build-status
description: "Look up the latest Azure DevOps build."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline definition ID."
call: "azuredevops.get-latest-build"
with:
definition_id: "{{pipeline_id}}"
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com/bloomingdales/_apis/build"
authentication:
type: bearer
token: "$secrets.azuredevops_pat"
resources:
- name: builds
path: "/builds?definitions={{definition_id}}&$top=1&statusFilter=completed"
inputParameters:
- name: definition_id
in: query
operations:
- name: get-latest-build
method: GET
Retrieves pod status from an Azure Kubernetes Service cluster.
naftiko: "0.5"
info:
label: "Azure Kubernetes Pod Status"
description: "Retrieves pod status from an Azure Kubernetes Service cluster."
tags:
- infrastructure
- azure-kubernetes-service
- containers
capability:
exposes:
- type: mcp
namespace: aks-status
port: 8080
tools:
- name: get-pod-status
description: "List pod statuses for a namespace in AKS."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace."
call: "aks.list-pods"
with:
namespace: "{{namespace}}"
consumes:
- type: http
namespace: aks
baseUri: "https://bloomingdales-aks.hcp.eastus.azmk8s.io"
authentication:
type: bearer
token: "$secrets.aks_token"
resources:
- name: pods
path: "/api/v1/namespaces/{{namespace}}/pods"
inputParameters:
- name: namespace
in: path
operations:
- name: list-pods
method: GET
Executes a KQL query against Azure Log Analytics workspace for operational insights.
naftiko: "0.5"
info:
label: "Azure Log Analytics Query"
description: "Executes a KQL query against Azure Log Analytics workspace for operational insights."
tags:
- monitoring
- azure-log-analytics
- operations
capability:
exposes:
- type: mcp
namespace: log-analytics
port: 8080
tools:
- name: run-kql-query
description: "Execute a KQL query in Azure Log Analytics."
inputParameters:
- name: kql_query
in: body
type: string
description: "KQL query string to execute."
call: "azure-logs.run-query"
with:
query: "{{kql_query}}"
consumes:
- type: http
namespace: azure-logs
baseUri: "https://api.loganalytics.io/v1/workspaces"
authentication:
type: bearer
token: "$secrets.azure_log_analytics_token"
resources:
- name: queries
path: "/bloomingdales-workspace/query"
operations:
- name: run-query
method: POST
Invokes an Azure ML endpoint for merchandise demand forecasting, returning predicted units and confidence interval.
naftiko: "0.5"
info:
label: "Azure Machine Learning Demand Forecast"
description: "Invokes an Azure ML endpoint for merchandise demand forecasting, returning predicted units and confidence interval."
tags:
- machine-learning
- azure-machine-learning
- forecasting
- retail
capability:
exposes:
- type: mcp
namespace: demand-forecast
port: 8080
tools:
- name: forecast-demand
description: "Score demand forecast using Azure ML."
inputParameters:
- name: item_number
in: body
type: string
description: "The merchandise item number."
- name: store_code
in: body
type: string
description: "The store location."
- name: forecast_days
in: body
type: integer
description: "Number of days to forecast."
call: "azureml.score-demand"
with:
item: "{{item_number}}"
store: "{{store_code}}"
days: "{{forecast_days}}"
outputParameters:
- name: predicted_units
type: integer
mapping: "$.predictions[0].units"
- name: confidence
type: string
mapping: "$.predictions[0].confidence"
consumes:
- type: http
namespace: azureml
baseUri: "https://bloomingdales-ml.eastus.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: score-demand
method: POST
Invokes an Azure ML endpoint for personalized product recommendations.
naftiko: "0.5"
info:
label: "Azure Machine Learning Product Recommendation"
description: "Invokes an Azure ML endpoint for personalized product recommendations."
tags:
- machine-learning
- azure-machine-learning
- personalization
- retail
capability:
exposes:
- type: mcp
namespace: product-reco
port: 8080
tools:
- name: get-recommendations
description: "Get product recommendations for a customer."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer identifier."
- name: num_items
in: body
type: integer
description: "Number of recommendations."
call: "azureml.score-recommendations"
with:
customer_id: "{{customer_id}}"
num_items: "{{num_items}}"
consumes:
- type: http
namespace: azureml
baseUri: "https://bloomingdales-ml.eastus.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: score-recommendations
method: POST
Assigns a Pluralsight training course, creates a Jira tracking task, provisions SharePoint training materials, and notifies the beauty team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Beauty Counter Training Pipeline"
description: "Assigns a Pluralsight training course, creates a Jira tracking task, provisions SharePoint training materials, and notifies the beauty team via Microsoft Teams."
tags:
- training
- pluralsight
- jira
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: beauty-training
port: 8080
tools:
- name: assign-beauty-training
description: "Orchestrate beauty counter associate training across LMS, project tracking, and collaboration."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: brand_name
in: body
type: string
description: "Beauty brand for training."
- name: store_code
in: body
type: string
description: "Store location code."
steps:
- name: assign-course
type: call
call: "pluralsight.assign-course"
with:
user_id: "{{employee_id}}"
course_id: "beauty_{{brand_name}}_certification"
- name: create-task
type: call
call: "jira.create-issue"
with:
project_key: "TRN"
summary: "Beauty training: {{brand_name}} for employee {{employee_id}}"
issue_type: "Task"
description: "Complete {{brand_name}} certification by assigned deadline."
- name: share-materials
type: call
call: "sharepoint.create-folder"
with:
site_id: "beauty_training"
folder_path: "{{brand_name}}/{{employee_id}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "beauty_store_{{store_code}}"
text: "New beauty training assigned: {{brand_name}} certification for employee {{employee_id}}. Jira: {{create-task.key}}. Materials: {{share-materials.url}}."
consumes:
- type: http
namespace: pluralsight
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: assignments
path: "/course-assignments"
operations:
- name: assign-course
method: POST
- type: http
namespace: jira
baseUri: "https://bloomingdales.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: 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 product details from BigCommerce for e-commerce catalog management.
naftiko: "0.5"
info:
label: "BigCommerce Product Catalog Lookup"
description: "Retrieves product details from BigCommerce for e-commerce catalog management."
tags:
- e-commerce
- bigcommerce
- catalog
capability:
exposes:
- type: mcp
namespace: product-catalog
port: 8080
tools:
- name: get-product
description: "Look up a BigCommerce product by ID."
inputParameters:
- name: product_id
in: body
type: string
description: "BigCommerce product ID."
call: "bigcommerce.get-product"
with:
product_id: "{{product_id}}"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products/{{product_id}}"
inputParameters:
- name: product_id
in: path
operations:
- name: get-product
method: GET
Retrieves visual merchandising assets from Box for store display planning.
naftiko: "0.5"
info:
label: "Box Visual Assets Retrieval"
description: "Retrieves visual merchandising assets from Box for store display planning."
tags:
- collaboration
- box
- visual-assets
capability:
exposes:
- type: mcp
namespace: visual-assets
port: 8080
tools:
- name: get-box-file
description: "Look up a Box file by ID."
inputParameters:
- name: file_id
in: body
type: string
description: "The Box file ID."
call: "box.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: integer
mapping: "$.size"
- 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
method: GET
Pulls market share data from Circana, loads it into Teradata, generates a Power BI competitive dashboard, and emails insights to the strategy team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Circana Competitive Analysis Pipeline"
description: "Pulls market share data from Circana, loads it into Teradata, generates a Power BI competitive dashboard, and emails insights to the strategy team via Microsoft Outlook."
tags:
- analytics
- circana
- teradata
- power-bi
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: competitive-analysis
port: 8080
tools:
- name: run-competitive-analysis
description: "Orchestrate competitive market analysis across data provider, warehouse, BI, and email."
inputParameters:
- name: category
in: body
type: string
description: "Product category for analysis."
- name: time_period
in: body
type: string
description: "Time period for the analysis."
steps:
- name: get-market-data
type: call
call: "circana.get-market-share"
with:
category: "{{category}}"
period: "{{time_period}}"
- name: load-data
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO COMPETITIVE_DATA (category, period, market_share, loaded_at) VALUES ('{{category}}', '{{time_period}}', {{get-market-data.share_percent}}, CURRENT_TIMESTAMP)"
database: "ANALYTICS_DB"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "competitive_dashboard"
- name: email-insights
type: call
call: "outlook.send-email"
with:
to: "strategy-team@bloomingdales.com"
subject: "Competitive Analysis: {{category}} ({{time_period}})"
body: "Market share for {{category}}: {{get-market-data.share_percent}}%. Dashboard has been updated."
consumes:
- type: http
namespace: circana
baseUri: "https://api.circana.com/v2"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: market-share
path: "/market-share"
operations:
- name: get-market-share
method: GET
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
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
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves Cisco network device status for in-store Wi-Fi and POS network infrastructure.
naftiko: "0.5"
info:
label: "Cisco Store Network Device Status"
description: "Retrieves Cisco network device status for in-store Wi-Fi and POS network infrastructure."
tags:
- networking
- cisco
- retail
capability:
exposes:
- type: mcp
namespace: store-network
port: 8080
tools:
- name: get-network-device
description: "Look up Cisco device status."
inputParameters:
- name: device_id
in: body
type: string
description: "The Cisco DNA Center device ID."
call: "cisco.get-device"
with:
device_id: "{{device_id}}"
outputParameters:
- name: hostname
type: string
mapping: "$.response.hostname"
- name: uptime
type: string
mapping: "$.response.upTime"
- name: reachability
type: string
mapping: "$.response.reachabilityStatus"
consumes:
- type: http
namespace: cisco
baseUri: "https://bloomingdales-dnac.macys.com/dna/intent/api/v1"
authentication:
type: bearer
token: "$secrets.cisco_dnac_token"
resources:
- name: devices
path: "/network-device/{{device_id}}"
inputParameters:
- name: device_id
in: path
operations:
- name: get-device
method: GET
Retrieves Cloudflare analytics for the Bloomingdale's e-commerce CDN.
naftiko: "0.5"
info:
label: "Cloudflare CDN Performance"
description: "Retrieves Cloudflare analytics for the Bloomingdale's e-commerce CDN."
tags:
- networking
- cloudflare
- cdn
capability:
exposes:
- type: mcp
namespace: cdn-analytics
port: 8080
tools:
- name: get-cdn-analytics
description: "Retrieve Cloudflare zone analytics."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone ID."
call: "cloudflare.get-analytics"
with:
zone_id: "{{zone_id}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: analytics
path: "/zones/{{zone_id}}/analytics/dashboard"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-analytics
method: GET
Retrieves DNS records from Cloudflare for a specified domain zone.
naftiko: "0.5"
info:
label: "Cloudflare DNS Record Lookup"
description: "Retrieves DNS records from Cloudflare for a specified domain zone."
tags:
- infrastructure
- cloudflare
- dns
capability:
exposes:
- type: mcp
namespace: dns-management
port: 8080
tools:
- name: get-dns-records
description: "Look up DNS records for a Cloudflare zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone identifier."
call: "cloudflare.list-dns-records"
with:
zone_id: "{{zone_id}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: dns-records
path: "/zones/{{zone_id}}/dns_records"
inputParameters:
- name: zone_id
in: path
operations:
- name: list-dns-records
method: GET
Synchronizes inventory counts between Oracle EBS, BigCommerce online store, and Square POS by reconciling stock levels across all channels.
naftiko: "0.5"
info:
label: "Cross-Channel Inventory Sync Pipeline"
description: "Synchronizes inventory counts between Oracle EBS, BigCommerce online store, and Square POS by reconciling stock levels across all channels."
tags:
- inventory
- oracle-e-business-suite
- bigcommerce
- square
capability:
exposes:
- type: mcp
namespace: inventory-sync
port: 8080
tools:
- name: sync-inventory
description: "Reconcile and synchronize inventory across Oracle EBS, BigCommerce, and Square."
inputParameters:
- name: sku
in: body
type: string
description: "Product SKU to synchronize."
steps:
- name: get-erp-stock
type: call
call: "oracle-ebs.get-item-quantity"
with:
item_number: "{{sku}}"
- name: update-online
type: call
call: "bigcommerce.update-inventory"
with:
sku: "{{sku}}"
inventory_level: "{{get-erp-stock.available_quantity}}"
- name: update-pos
type: call
call: "square.update-inventory"
with:
sku: "{{sku}}"
quantity: "{{get-erp-stock.available_quantity}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: items
path: "/inventory/items/{{item_number}}/quantities"
inputParameters:
- name: item_number
in: path
operations:
- name: get-item-quantity
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: inventory
path: "/catalog/products/inventory"
operations:
- name: update-inventory
method: PUT
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: inventory
path: "/inventory/changes/batch-create"
operations:
- name: update-inventory
method: POST
Checks Salesforce for customer birthday, generates a gift card code in Oracle EBS, sends a birthday email via MailChimp, and logs the reward in Teradata.
naftiko: "0.5"
info:
label: "Customer Birthday Rewards Pipeline"
description: "Checks Salesforce for customer birthday, generates a gift card code in Oracle EBS, sends a birthday email via MailChimp, and logs the reward in Teradata."
tags:
- loyalty
- salesforce
- oracle-e-business-suite
- mailchimp
- teradata
capability:
exposes:
- type: mcp
namespace: birthday-rewards
port: 8080
tools:
- name: send-birthday-reward
description: "Orchestrate customer birthday reward across CRM, ERP, email, and analytics."
inputParameters:
- name: customer_id
in: body
type: string
description: "Salesforce customer contact ID."
steps:
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{customer_id}}"
- name: generate-gift-card
type: call
call: "oracle-ebs.create-gift-card"
with:
amount: "25"
recipient_name: "{{get-customer.first_name}} {{get-customer.last_name}}"
- name: send-email
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-customer.email}}"
template: "birthday_reward"
merge_vars: "{\"FIRST_NAME\": \"{{get-customer.first_name}}\", \"GIFT_CARD_CODE\": \"{{generate-gift-card.code}}\"}"
- name: log-reward
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO BIRTHDAY_REWARDS (customer_id, gift_card_code, sent_at) VALUES ('{{customer_id}}', '{{generate-gift-card.code}}', CURRENT_TIMESTAMP)"
database: "LOYALTY_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: gift-cards
path: "/gift-cards"
operations:
- name: create-gift-card
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
Takes a customer complaint from Salesforce, generates a refund in Oracle EBS, sends an apology email via MailChimp, and logs resolution in Teradata.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Pipeline"
description: "Takes a customer complaint from Salesforce, generates a refund in Oracle EBS, sends an apology email via MailChimp, and logs resolution in Teradata."
tags:
- customer-service
- salesforce
- oracle-e-business-suite
- mailchimp
- teradata
capability:
exposes:
- type: mcp
namespace: complaint-resolution
port: 8080
tools:
- name: resolve-complaint
description: "Orchestrate complaint resolution across CRM, ERP, email, and analytics."
inputParameters:
- name: case_id
in: body
type: string
description: "Salesforce case ID."
- name: refund_amount
in: body
type: string
description: "Refund amount to issue."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: issue-refund
type: call
call: "oracle-ebs.create-credit-memo"
with:
customer_id: "{{get-case.customer_id}}"
amount: "{{refund_amount}}"
reason: "{{get-case.subject}}"
- name: send-apology
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-case.contact_email}}"
template: "complaint_resolution"
merge_vars: "{\"FIRST_NAME\": \"{{get-case.contact_name}}\", \"REFUND\": \"{{refund_amount}}\", \"CASE_NUM\": \"{{case_id}}\"}"
- name: log-resolution
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO COMPLAINT_RESOLUTIONS (case_id, refund_amount, resolution_type, resolved_at) VALUES ('{{case_id}}', {{refund_amount}}, 'refund', CURRENT_TIMESTAMP)"
database: "CUSTOMER_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: credit-memos
path: "/receivables/credit-memos"
operations:
- name: create-credit-memo
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
When a loyalty customer makes a purchase, updates their Salesforce profile, sends a thank-you email via MailChimp, and logs the engagement in Teradata.
naftiko: "0.5"
info:
label: "Customer Loyalty Engagement Pipeline"
description: "When a loyalty customer makes a purchase, updates their Salesforce profile, sends a thank-you email via MailChimp, and logs the engagement in Teradata."
tags:
- loyalty
- salesforce
- mailchimp
- teradata
capability:
exposes:
- type: mcp
namespace: loyalty-engagement
port: 8080
tools:
- name: process-loyalty-purchase
description: "Given a customer ID and purchase details, update loyalty records and send engagement communications."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Salesforce customer contact ID."
- name: purchase_amount
in: body
type: string
description: "Purchase amount."
- name: store_code
in: body
type: string
description: "Store location code."
steps:
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{customer_id}}"
- name: update-loyalty
type: call
call: "salesforce.update-contact"
with:
contact_id: "{{customer_id}}"
last_purchase_amount: "{{purchase_amount}}"
last_purchase_store: "{{store_code}}"
- name: send-thank-you
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-customer.email}}"
template: "loyalty_thank_you"
merge_vars: "{\"FIRST_NAME\": \"{{get-customer.name}}\", \"AMOUNT\": \"{{purchase_amount}}\", \"POINTS\": \"{{get-customer.loyalty_points}}\"}"
- name: log-engagement
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO LOYALTY_ENGAGEMENTS (customer_id, purchase_amount, store_code, engagement_type, created_at) VALUES ('{{customer_id}}', {{purchase_amount}}, '{{store_code}}', 'purchase', CURRENT_TIMESTAMP)"
database: "LOYALTY_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- name: update-contact
method: PATCH
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
When a return is initiated, looks up the order in Oracle EBS, processes the refund via Square, creates a ServiceNow case, and updates the Salesforce customer record.
naftiko: "0.5"
info:
label: "Customer Return Processing Pipeline"
description: "When a return is initiated, looks up the order in Oracle EBS, processes the refund via Square, creates a ServiceNow case, and updates the Salesforce customer record."
tags:
- returns
- oracle-e-business-suite
- square
- servicenow
- salesforce
capability:
exposes:
- type: mcp
namespace: return-processing
port: 8080
tools:
- name: process-return
description: "Given an order ID and return reason, process the return across Oracle EBS, Square, ServiceNow, and Salesforce."
inputParameters:
- name: order_id
in: body
type: string
description: "The original order ID."
- name: return_reason
in: body
type: string
description: "Reason for the return."
- name: refund_amount
in: body
type: string
description: "The refund amount in cents."
- name: payment_id
in: body
type: string
description: "The original Square payment ID."
steps:
- name: get-order
type: call
call: "oracle-ebs.get-order"
with:
order_id: "{{order_id}}"
- name: process-refund
type: call
call: "square.create-refund"
with:
payment_id: "{{payment_id}}"
amount: "{{refund_amount}}"
reason: "{{return_reason}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Return processed: Order {{order_id}}"
category: "customer_returns"
description: "Return for order {{order_id}}. Reason: {{return_reason}}. Refund: ${{refund_amount}}. Square refund: {{process-refund.refund_id}}."
- name: update-customer
type: call
call: "salesforce.update-contact"
with:
contact_id: "{{get-order.customer_id}}"
last_return_date: "today"
last_return_reason: "{{return_reason}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: refunds
path: "/refunds"
operations:
- name: create-refund
method: POST
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: update-contact
method: PATCH
Aggregates daily sales from Oracle EBS, refreshes the Power BI dashboard, uploads the report to SharePoint, and emails executives via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Daily Sales Report Pipeline"
description: "Aggregates daily sales from Oracle EBS, refreshes the Power BI dashboard, uploads the report to SharePoint, and emails executives via Microsoft Outlook."
tags:
- reporting
- sales
- oracle-e-business-suite
- power-bi
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: generate-daily-sales-report
description: "Given a date, aggregate sales data and distribute reports."
inputParameters:
- name: report_date
in: body
type: string
description: "Report date (YYYY-MM-DD)."
- name: bi_dataset_id
in: body
type: string
description: "Power BI dataset ID."
- name: bi_group_id
in: body
type: string
description: "Power BI workspace ID."
- name: exec_emails
in: body
type: string
description: "Comma-separated executive email addresses."
steps:
- name: get-sales-data
type: call
call: "oracle-ebs.get-daily-sales"
with:
date: "{{report_date}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
group_id: "{{bi_group_id}}"
dataset_id: "{{bi_dataset_id}}"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "sales_reports_site"
folder_path: "DailyReports"
file_name: "daily_sales_{{report_date}}.pdf"
- name: email-executives
type: call
call: "outlook.send-mail"
with:
to: "{{exec_emails}}"
subject: "Daily Sales Report: {{report_date}}"
body: "Sales for {{report_date}}: Total revenue ${{get-sales-data.total_revenue}}. Transactions: {{get-sales-data.total_transactions}}. Dashboard refreshed. Report: {{upload-report.url}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: sales
path: "/sales/daily?date={{date}}"
inputParameters:
- name: date
in: query
operations:
- name: get-daily-sales
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
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
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
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-mail
method: POST
Queries Datadog for p99 API latency metrics on the e-commerce platform.
naftiko: "0.5"
info:
label: "Datadog API Latency Check"
description: "Queries Datadog for p99 API latency metrics on the e-commerce platform."
tags:
- monitoring
- datadog
- latency
capability:
exposes:
- type: mcp
namespace: api-latency
port: 8080
tools:
- name: get-api-latency
description: "Retrieve p99 latency metrics for a given API endpoint."
inputParameters:
- name: endpoint_name
in: body
type: string
description: "API endpoint name to query."
call: "datadog.query-metrics"
with:
query: "p99:api.latency{endpoint:{{endpoint_name}}}"
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
Pulls ad metrics from Google Analytics and Facebook, combines them in Teradata, and distributes a report via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Digital Ad Performance Reporting Pipeline"
description: "Pulls ad metrics from Google Analytics and Facebook, combines them in Teradata, and distributes a report via Microsoft Outlook."
tags:
- marketing
- google-analytics
- facebook
- teradata
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: ad-reporting
port: 8080
tools:
- name: generate-ad-report
description: "Aggregate digital ad performance data across channels and distribute reports."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Campaign identifier."
- name: date_range
in: body
type: string
description: "Date range for the report."
steps:
- name: get-google-metrics
type: call
call: "google-analytics.get-report"
with:
view_id: "bloomingdales"
campaign_id: "{{campaign_id}}"
- name: get-facebook-metrics
type: call
call: "facebook.get-ad-insights"
with:
campaign_id: "{{campaign_id}}"
- name: store-combined
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO AD_PERFORMANCE (campaign_id, google_clicks, fb_clicks, reported_at) VALUES ('{{campaign_id}}', {{get-google-metrics.clicks}}, {{get-facebook-metrics.clicks}}, CURRENT_TIMESTAMP)"
database: "MARKETING_DB"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "marketing-team@bloomingdales.com"
subject: "Ad Performance Report: {{campaign_id}}"
body: "Google: {{get-google-metrics.clicks}} clicks. Facebook: {{get-facebook-metrics.clicks}} clicks."
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
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: ad-insights
path: "/act_bloomingdales/insights"
operations:
- name: get-ad-insights
method: GET
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves Dynatrace real user monitoring data for the Bloomingdale's e-commerce site.
naftiko: "0.5"
info:
label: "Dynatrace Website Performance"
description: "Retrieves Dynatrace real user monitoring data for the Bloomingdale's e-commerce site."
tags:
- monitoring
- dynatrace
- e-commerce
capability:
exposes:
- type: mcp
namespace: rum-monitoring
port: 8080
tools:
- name: get-rum-metrics
description: "Look up Dynatrace RUM metrics by application."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace application entity ID."
call: "dynatrace.get-entity"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://bloomingdales.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-entity
method: GET
Detects abandoned carts in BigCommerce, enriches customer data from Salesforce, sends recovery email via MailChimp, and logs the event in Google Analytics.
naftiko: "0.5"
info:
label: "Email Abandoned Cart Recovery Pipeline"
description: "Detects abandoned carts in BigCommerce, enriches customer data from Salesforce, sends recovery email via MailChimp, and logs the event in Google Analytics."
tags:
- e-commerce
- bigcommerce
- salesforce
- mailchimp
- google-analytics
capability:
exposes:
- type: mcp
namespace: cart-recovery
port: 8080
tools:
- name: recover-abandoned-cart
description: "Orchestrate abandoned cart recovery across e-commerce, CRM, email, and analytics."
inputParameters:
- name: cart_id
in: body
type: string
description: "BigCommerce abandoned cart ID."
steps:
- name: get-cart
type: call
call: "bigcommerce.get-cart"
with:
cart_id: "{{cart_id}}"
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
email: "{{get-cart.customer_email}}"
- name: send-recovery-email
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-cart.customer_email}}"
template: "abandoned_cart"
merge_vars: "{\"FIRST_NAME\": \"{{get-customer.first_name}}\", \"CART_TOTAL\": \"{{get-cart.total}}\", \"CART_URL\": \"{{get-cart.recovery_url}}\"}"
- name: track-event
type: call
call: "google-analytics.send-event"
with:
category: "cart_recovery"
action: "email_sent"
label: "{{cart_id}}"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: carts
path: "/carts/{{cart_id}}"
inputParameters:
- name: cart_id
in: path
operations:
- name: get-cart
method: GET
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: get-contact
method: GET
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: google-analytics
baseUri: "https://www.google-analytics.com"
authentication:
type: apiKey
key: "$secrets.ga_measurement_id"
resources:
- name: events
path: "/mp/collect"
operations:
- name: send-event
method: POST
Pulls employee data from Workday, retrieves sales metrics from Teradata, generates a review document in SharePoint, and sends a calendar invite via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Employee Performance Review Pipeline"
description: "Pulls employee data from Workday, retrieves sales metrics from Teradata, generates a review document in SharePoint, and sends a calendar invite via Microsoft Outlook."
tags:
- hr
- workday
- teradata
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: performance-reviews
port: 8080
tools:
- name: prepare-review
description: "Orchestrate performance review preparation across HCM, analytics, collaboration, and calendar."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: review_period
in: body
type: string
description: "Review period."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: get-sales-metrics
type: call
call: "teradata.execute-query"
with:
query: "SELECT total_sales, avg_transaction, customer_satisfaction FROM EMPLOYEE_PERFORMANCE WHERE employee_id='{{employee_id}}' AND period='{{review_period}}'"
database: "HR_DB"
- name: create-review-doc
type: call
call: "sharepoint.create-file"
with:
site_id: "hr_reviews"
folder_path: "Reviews/{{review_period}}/{{get-employee.full_name}}"
- name: schedule-review
type: call
call: "outlook.create-event"
with:
subject: "Performance Review: {{get-employee.full_name}} - {{review_period}}"
attendees: "{{get-employee.manager_email}},{{get-employee.email}}"
duration: 30
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: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-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}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-file
method: PUT
- 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
Creates a Facebook page post for product promotions and brand engagement.
naftiko: "0.5"
info:
label: "Facebook Product Promotion Post"
description: "Creates a Facebook page post for product promotions and brand engagement."
tags:
- marketing
- facebook
- promotion
capability:
exposes:
- type: mcp
namespace: social-facebook
port: 8080
tools:
- name: create-promo-post
description: "Create a Facebook promotion post."
inputParameters:
- name: message
in: body
type: string
description: "The post message."
- name: link
in: body
type: string
description: "Product page link."
call: "facebook.create-post"
with:
message: "{{message}}"
link: "{{link}}"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
When a gift card transaction is flagged, pulls transaction details from Mastercard, creates a ServiceNow security incident, and alerts the loss prevention team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Gift Card Fraud Detection Pipeline"
description: "When a gift card transaction is flagged, pulls transaction details from Mastercard, creates a ServiceNow security incident, and alerts the loss prevention team via Microsoft Teams."
tags:
- security
- fraud
- mastercard
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fraud-detection
port: 8080
tools:
- name: investigate-gift-card
description: "Orchestrate gift card fraud investigation across payment and incident systems."
inputParameters:
- name: transaction_id
in: body
type: string
description: "Mastercard transaction ID."
- name: card_number_last4
in: body
type: string
description: "Last four digits of the gift card."
steps:
- name: get-transaction
type: call
call: "mastercard.get-transaction"
with:
transaction_id: "{{transaction_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Gift card fraud alert: {{card_number_last4}}"
priority: "2"
category: "security"
description: "Suspicious gift card transaction {{transaction_id}}. Amount: ${{get-transaction.amount}}. Location: {{get-transaction.merchant_name}}."
- name: alert-lp-team
type: call
call: "msteams.send-message"
with:
channel_id: "loss_prevention"
text: "FRAUD ALERT: Gift card ending {{card_number_last4}}. Amount: ${{get-transaction.amount}}. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: mastercard
baseUri: "https://api.mastercard.com/transaction/v1"
authentication:
type: bearer
token: "$secrets.mastercard_token"
resources:
- name: transactions
path: "/transactions/{{transaction_id}}"
inputParameters:
- name: transaction_id
in: path
operations:
- name: get-transaction
method: GET
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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
When a GitHub pull request is merged, triggers an Azure DevOps build, creates a ServiceNow change request, and notifies the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Deployment Approval Pipeline"
description: "When a GitHub pull request is merged, triggers an Azure DevOps build, creates a ServiceNow change request, and notifies the engineering team via Microsoft Teams."
tags:
- devops
- github
- azure-devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: deployment-approval
port: 8080
tools:
- name: process-deployment
description: "Orchestrate deployment approval across source control, CI/CD, ITSM, and communication."
inputParameters:
- name: repo_name
in: body
type: string
description: "GitHub repository name."
- name: pr_number
in: body
type: string
description: "Pull request number."
steps:
- name: get-pr
type: call
call: "github.get-pull-request"
with:
repo: "{{repo_name}}"
pr_number: "{{pr_number}}"
- name: trigger-build
type: call
call: "azure-devops.run-pipeline"
with:
project: "bloomingdales-ecommerce"
pipeline_id: "production_deploy"
branch: "{{get-pr.merge_commit_sha}}"
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Deploy: {{repo_name}} PR #{{pr_number}}"
description: "{{get-pr.title}}: {{get-pr.body}}"
type: "standard"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "engineering"
text: "Deployment started: {{repo_name}} PR #{{pr_number}} - {{get-pr.title}}. Build: {{trigger-build.build_id}}. Change: {{create-change.number}}."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com/repos/bloomingdales"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pull-requests
path: "/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull-request
method: GET
- type: http
namespace: azure-devops
baseUri: "https://dev.azure.com/bloomingdales"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: pipelines
path: "/{{project}}/_apis/pipelines/{{pipeline_id}}/runs"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.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 GitHub repository metadata for Bloomingdale's e-commerce platform projects.
naftiko: "0.5"
info:
label: "GitHub E-Commerce Repository Status"
description: "Retrieves GitHub repository metadata for Bloomingdale's e-commerce platform projects."
tags:
- development
- github
- e-commerce
capability:
exposes:
- type: mcp
namespace: dev-repos
port: 8080
tools:
- name: get-repo-info
description: "Look up a GitHub repository."
inputParameters:
- name: repo_name
in: body
type: string
description: "Repository name (owner/repo)."
call: "github.get-repo"
with:
repo_name: "{{repo_name}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo_name}}"
inputParameters:
- name: repo_name
in: path
operations:
- name: get-repo
method: GET
Retrieves Google Analytics traffic metrics for the Bloomingdale's e-commerce website.
naftiko: "0.5"
info:
label: "Google Analytics Store Website Traffic"
description: "Retrieves Google Analytics traffic metrics for the Bloomingdale's e-commerce website."
tags:
- marketing
- google-analytics
- e-commerce
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic-report
description: "Retrieve GA4 traffic metrics for a date range."
inputParameters:
- name: property_id
in: body
type: string
description: "The GA4 property ID."
- name: start_date
in: body
type: string
description: "Start date (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "End date (YYYY-MM-DD)."
call: "ga.run-report"
with:
property_id: "{{property_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Downloads a marketing asset file from Google Drive by file ID.
naftiko: "0.5"
info:
label: "Google Drive Asset Download"
description: "Downloads a marketing asset file from Google Drive by file ID."
tags:
- marketing
- google-drive
- assets
capability:
exposes:
- type: mcp
namespace: drive-assets
port: 8080
tools:
- name: download-asset
description: "Download a file from Google Drive by file ID."
inputParameters:
- name: file_id
in: body
type: string
description: "Google Drive file ID."
call: "google-drive.get-file"
with:
file_id: "{{file_id}}"
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}}?alt=media"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Retrieves Google Optimize experiment results for e-commerce website optimization.
naftiko: "0.5"
info:
label: "Google Optimize A/B Test Results"
description: "Retrieves Google Optimize experiment results for e-commerce website optimization."
tags:
- marketing
- google-optimize
- experimentation
capability:
exposes:
- type: mcp
namespace: web-experimentation
port: 8080
tools:
- name: get-experiment-results
description: "Look up Google Optimize experiment results."
inputParameters:
- name: experiment_id
in: body
type: string
description: "The experiment ID."
- name: profile_id
in: body
type: string
description: "The GA profile ID."
call: "optimize.get-experiment"
with:
experiment_id: "{{experiment_id}}"
profile_id: "{{profile_id}}"
consumes:
- type: http
namespace: optimize
baseUri: "https://www.googleapis.com/analytics/v3/management"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: experiments
path: "/accounts/bloomingdales/webproperties/{{profile_id}}/profiles/1/experiments/{{experiment_id}}"
inputParameters:
- name: experiment_id
in: path
- name: profile_id
in: path
operations:
- name: get-experiment
method: GET
Creates a Google Optimize A/B test, updates the Google Tag Manager container, logs the experiment in Salesforce, and notifies the product team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Optimize Experiment Launch Pipeline"
description: "Creates a Google Optimize A/B test, updates the Google Tag Manager container, logs the experiment in Salesforce, and notifies the product team via Microsoft Teams."
tags:
- experimentation
- google-optimize
- google-tag-manager
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ab-testing
port: 8080
tools:
- name: launch-experiment
description: "Orchestrate A/B test launch across experimentation, tag management, CRM, and communication."
inputParameters:
- name: experiment_name
in: body
type: string
description: "Experiment name."
- name: page_url
in: body
type: string
description: "Target page URL for the experiment."
steps:
- name: create-experiment
type: call
call: "google-optimize.create-experiment"
with:
name: "{{experiment_name}}"
url: "{{page_url}}"
- name: update-gtm
type: call
call: "google-tag-manager.create-tag"
with:
container_id: "bloomingdales_web"
tag_name: "experiment_{{experiment_name}}"
- name: log-experiment
type: call
call: "salesforce.create-record"
with:
object: "Experiment__c"
name: "{{experiment_name}}"
status: "Active"
- name: notify-product
type: call
call: "msteams.send-message"
with:
channel_id: "product_experimentation"
text: "New A/B test launched: {{experiment_name}} on {{page_url}}. GTM tag deployed."
consumes:
- type: http
namespace: google-optimize
baseUri: "https://www.googleapis.com/analytics/v3"
authentication:
type: bearer
token: "$secrets.google_optimize_token"
resources:
- name: experiments
path: "/management/accounts/bloomingdales/webproperties/UA-XXXX/profiles/YYYY/experiments"
operations:
- name: create-experiment
method: POST
- type: http
namespace: google-tag-manager
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.gtm_token"
resources:
- name: tags
path: "/accounts/bloomingdales/containers/{{container_id}}/workspaces/default/tags"
inputParameters:
- name: container_id
in: path
operations:
- name: create-tag
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects/{{object}}"
inputParameters:
- name: object
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 the latest published version of a Google Tag Manager container for e-commerce tracking.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Version"
description: "Retrieves the latest published version of a Google Tag Manager container for e-commerce tracking."
tags:
- marketing
- google-tag-manager
- analytics
capability:
exposes:
- type: mcp
namespace: tag-management
port: 8080
tools:
- name: get-container-version
description: "Look up the latest GTM container version."
inputParameters:
- name: account_id
in: body
type: string
description: "The GTM account ID."
- name: container_id
in: body
type: string
description: "The GTM container ID."
call: "gtm.get-latest-version"
with:
account_id: "{{account_id}}"
container_id: "{{container_id}}"
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_tagmanager_token"
resources:
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/version_headers"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: get-latest-version
method: GET
Launches a holiday marketing campaign by creating a Salesforce campaign, sending a MailChimp email blast, posting to Facebook and Instagram, and updating the Google Tag Manager container.
naftiko: "0.5"
info:
label: "Holiday Campaign Orchestrator"
description: "Launches a holiday marketing campaign by creating a Salesforce campaign, sending a MailChimp email blast, posting to Facebook and Instagram, and updating the Google Tag Manager container."
tags:
- marketing
- salesforce
- mailchimp
- facebook
- instagram
- google-tag-manager
capability:
exposes:
- type: mcp
namespace: holiday-campaigns
port: 8080
tools:
- name: launch-holiday-campaign
description: "Orchestrate a multichannel holiday marketing campaign."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Holiday campaign name."
- name: discount_percent
in: body
type: string
description: "Discount percentage."
- name: start_date
in: body
type: string
description: "Campaign start date."
steps:
- name: create-campaign
type: call
call: "salesforce.create-campaign"
with:
name: "{{campaign_name}}"
type: "Holiday"
start_date: "{{start_date}}"
- name: send-email
type: call
call: "mailchimp.send-campaign"
with:
list_id: "holiday_subscribers"
subject: "{{campaign_name}} - {{discount_percent}}% Off!"
template: "holiday_promo"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
page_id: "bloomingdales"
message: "{{campaign_name}} is here! Enjoy {{discount_percent}}% off. Shop now!"
- name: post-instagram
type: call
call: "instagram.create-post"
with:
caption: "{{campaign_name}} starts now! {{discount_percent}}% off everything. #bloomingdales #holiday"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: send-campaign
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"
inputParameters:
- name: page_id
in: path
operations:
- name: create-post
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/bloomingdales/media"
operations:
- name: create-post
method: POST
Retrieves the current deal stage and value for a HubSpot deal.
naftiko: "0.5"
info:
label: "HubSpot Deal Stage Lookup"
description: "Retrieves the current deal stage and value for a HubSpot deal."
tags:
- sales
- hubspot
- deals
capability:
exposes:
- type: mcp
namespace: deal-management
port: 8080
tools:
- name: get-deal-stage
description: "Look up a HubSpot deal by deal ID."
inputParameters:
- name: deal_id
in: body
type: string
description: "HubSpot deal ID."
call: "hubspot.get-deal"
with:
deal_id: "{{deal_id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals/{{deal_id}}"
inputParameters:
- name: deal_id
in: path
operations:
- name: get-deal
method: GET
Retrieves a HubSpot contact by email for retail marketing campaigns.
naftiko: "0.5"
info:
label: "HubSpot Marketing Contact Lookup"
description: "Retrieves a HubSpot contact by email for retail marketing campaigns."
tags:
- marketing
- hubspot
- contacts
capability:
exposes:
- type: mcp
namespace: marketing-crm
port: 8080
tools:
- name: get-contact
description: "Look up a HubSpot contact by email."
inputParameters:
- name: email
in: body
type: string
description: "Contact email."
call: "hubspot.get-contact-by-email"
with:
email: "{{email}}"
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-by-email
method: GET
Creates a job posting on Indeed for retail store positions.
naftiko: "0.5"
info:
label: "Indeed Job Posting"
description: "Creates a job posting on Indeed for retail store positions."
tags:
- hr
- recruitment
- indeed
- retail
capability:
exposes:
- type: mcp
namespace: hr-recruitment
port: 8080
tools:
- name: create-job-posting
description: "Create an Indeed job posting."
inputParameters:
- name: title
in: body
type: string
description: "Job title."
- name: location
in: body
type: string
description: "Job location."
- name: description
in: body
type: string
description: "Job description."
call: "indeed.create-posting"
with:
title: "{{title}}"
location: "{{location}}"
description: "{{description}}"
consumes:
- type: http
namespace: indeed
baseUri: "https://apis.indeed.com/v2"
authentication:
type: bearer
token: "$secrets.indeed_token"
resources:
- name: postings
path: "/jobs"
operations:
- name: create-posting
method: POST
Creates an Instagram shopping post for product promotion and social commerce.
naftiko: "0.5"
info:
label: "Instagram Shopping Post"
description: "Creates an Instagram shopping post for product promotion and social commerce."
tags:
- marketing
- instagram
- social-commerce
capability:
exposes:
- type: mcp
namespace: social-commerce
port: 8080
tools:
- name: create-shopping-post
description: "Create an Instagram shopping post."
inputParameters:
- name: image_url
in: body
type: string
description: "Product image URL."
- name: caption
in: body
type: string
description: "Post caption."
call: "instagram.create-media"
with:
image_url: "{{image_url}}"
caption: "{{caption}}"
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-media
method: POST
When inventory falls below threshold, checks Oracle EBS stock levels, creates a restock PO, logs in ServiceNow, and alerts the store operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Inventory Restock Alert Pipeline"
description: "When inventory falls below threshold, checks Oracle EBS stock levels, creates a restock PO, logs in ServiceNow, and alerts the store operations team via Microsoft Teams."
tags:
- inventory
- restock
- oracle-e-business-suite
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: inventory-alerts
port: 8080
tools:
- name: trigger-restock-alert
description: "Given an item and store, check inventory and initiate restock if below threshold."
inputParameters:
- name: item_number
in: body
type: string
description: "The item number."
- name: store_code
in: body
type: string
description: "The store location code."
- name: threshold
in: body
type: integer
description: "Minimum stock threshold."
- name: ops_channel
in: body
type: string
description: "Microsoft Teams channel for store ops."
steps:
- name: check-stock
type: call
call: "oracle-ebs.get-inventory"
with:
item_number: "{{item_number}}"
store_code: "{{store_code}}"
- name: create-restock-po
type: call
call: "oracle-ebs.create-purchase-order"
with:
item_number: "{{item_number}}"
quantity: "{{threshold}}"
store_code: "{{store_code}}"
- name: log-restock
type: call
call: "servicenow.create-incident"
with:
short_description: "Restock alert: {{item_number}} at {{store_code}}"
category: "inventory_restock"
description: "Current stock: {{check-stock.on_hand_qty}}. Threshold: {{threshold}}. PO: {{create-restock-po.po_number}}."
- name: alert-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{ops_channel}}"
text: "RESTOCK ALERT: {{item_number}} at {{store_code}}. Current: {{check-stock.on_hand_qty}}. PO {{create-restock-po.po_number}} created. ServiceNow: {{log-restock.number}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: inventory
path: "/inventory?item={{item_number}}&location={{store_code}}"
inputParameters:
- name: item_number
in: query
- name: store_code
in: query
operations:
- name: get-inventory
method: GET
- name: purchase-orders
path: "/purchase-orders"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: post-channel-message
method: POST
Retrieves a Jira issue for store operations task management.
naftiko: "0.5"
info:
label: "Jira Store Operations Task"
description: "Retrieves a Jira issue for store operations task management."
tags:
- project-management
- jira
- retail
capability:
exposes:
- type: mcp
namespace: store-tasks
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://bloomingdales.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
Creates a LinkedIn company page post for Bloomingdale's brand awareness and recruitment.
naftiko: "0.5"
info:
label: "LinkedIn Brand Content Post"
description: "Creates a LinkedIn company page post for Bloomingdale's brand awareness and recruitment."
tags:
- marketing
- linkedin
- brand
capability:
exposes:
- type: mcp
namespace: social-linkedin
port: 8080
tools:
- name: create-linkedin-post
description: "Create a LinkedIn company page post."
inputParameters:
- name: text
in: body
type: string
description: "The post text."
call: "linkedin.create-post"
with:
text: "{{text}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
Posts a job opening to LinkedIn, creates a tracking ticket in Jira, logs the recruitment campaign in Workday, and notifies HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Recruiting Pipeline"
description: "Posts a job opening to LinkedIn, creates a tracking ticket in Jira, logs the recruitment campaign in Workday, and notifies HR via Microsoft Teams."
tags:
- hr
- linkedin
- jira
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: launch-recruiting-campaign
description: "Orchestrate a recruiting campaign across social, project tracking, HCM, and communication."
inputParameters:
- name: job_title
in: body
type: string
description: "Job title to post."
- name: department
in: body
type: string
description: "Department name."
- name: store_code
in: body
type: string
description: "Store location code."
steps:
- name: post-job
type: call
call: "linkedin.create-job-posting"
with:
title: "{{job_title}}"
company: "Bloomingdale's"
location: "Store {{store_code}}"
- name: create-tracker
type: call
call: "jira.create-issue"
with:
project_key: "HR"
summary: "Recruiting: {{job_title}} - Store {{store_code}}"
issue_type: "Task"
- name: log-requisition
type: call
call: "workday.create-requisition"
with:
title: "{{job_title}}"
department: "{{department}}"
location: "{{store_code}}"
- name: notify-hr
type: call
call: "msteams.send-message"
with:
channel_id: "hr_recruiting"
text: "New recruiting campaign: {{job_title}} at store {{store_code}}. LinkedIn: {{post-job.id}}. Jira: {{create-tracker.key}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/simpleJobPostings"
operations:
- name: create-job-posting
method: POST
- type: http
namespace: jira
baseUri: "https://bloomingdales.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: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_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
When a customer reaches a new loyalty tier, updates Salesforce, sends congratulations via MailChimp, and logs the upgrade in Teradata.
naftiko: "0.5"
info:
label: "Loyalty Rewards Tier Upgrade Pipeline"
description: "When a customer reaches a new loyalty tier, updates Salesforce, sends congratulations via MailChimp, and logs the upgrade in Teradata."
tags:
- loyalty
- salesforce
- mailchimp
- teradata
capability:
exposes:
- type: mcp
namespace: loyalty-tier
port: 8080
tools:
- name: process-tier-upgrade
description: "Orchestrate loyalty tier upgrade across CRM, email, and analytics."
inputParameters:
- name: customer_id
in: body
type: string
description: "Salesforce customer contact ID."
- name: new_tier
in: body
type: string
description: "New loyalty tier name."
steps:
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{customer_id}}"
- name: update-salesforce
type: call
call: "salesforce.update-contact"
with:
contact_id: "{{customer_id}}"
loyalty_tier: "{{new_tier}}"
- name: send-congratulations
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-customer.email}}"
template: "tier_upgrade"
merge_vars: "{\"FIRST_NAME\": \"{{get-customer.first_name}}\", \"NEW_TIER\": \"{{new_tier}}\"}"
- name: log-upgrade
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO TIER_UPGRADES (customer_id, new_tier, upgraded_at) VALUES ('{{customer_id}}', '{{new_tier}}', CURRENT_TIMESTAMP)"
database: "LOYALTY_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- name: update-contact
method: PATCH
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
Retrieves MailChimp email campaign performance metrics, returning open rate, click rate, and total recipients.
naftiko: "0.5"
info:
label: "MailChimp Campaign Performance Lookup"
description: "Retrieves MailChimp email campaign performance metrics, returning open rate, click rate, and total recipients."
tags:
- marketing
- mailchimp
- email-campaign
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: get-campaign-report
description: "Look up MailChimp campaign metrics by campaign ID."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The MailChimp campaign ID."
call: "mailchimp.get-campaign-report"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: open_rate
type: string
mapping: "$.opens.open_rate"
- name: click_rate
type: string
mapping: "$.clicks.click_rate"
- name: total_recipients
type: integer
mapping: "$.emails_sent"
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-report
method: GET
Identifies inactive subscribers in MailChimp, enriches with Salesforce purchase history, sends a winback offer, and logs the campaign in Teradata.
naftiko: "0.5"
info:
label: "MailChimp Subscriber Winback Pipeline"
description: "Identifies inactive subscribers in MailChimp, enriches with Salesforce purchase history, sends a winback offer, and logs the campaign in Teradata."
tags:
- marketing
- mailchimp
- salesforce
- teradata
capability:
exposes:
- type: mcp
namespace: subscriber-winback
port: 8080
tools:
- name: run-winback-campaign
description: "Orchestrate subscriber winback across email, CRM, and analytics."
inputParameters:
- name: subscriber_email
in: body
type: string
description: "Subscriber email address."
- name: offer_code
in: body
type: string
description: "Promotional offer code."
steps:
- name: get-purchase-history
type: call
call: "salesforce.get-purchases"
with:
email: "{{subscriber_email}}"
- name: send-winback
type: call
call: "mailchimp.send-transactional"
with:
email: "{{subscriber_email}}"
template: "winback_offer"
merge_vars: "{\"OFFER_CODE\": \"{{offer_code}}\", \"LAST_PURCHASE\": \"{{get-purchase-history.last_purchase_date}}\"}"
- name: log-campaign
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO WINBACK_CAMPAIGNS (email, offer_code, sent_at) VALUES ('{{subscriber_email}}', '{{offer_code}}', CURRENT_TIMESTAMP)"
database: "MARKETING_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: purchases
path: "/sobjects/Order"
operations:
- name: get-purchases
method: GET
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
Retrieves chargeback details from Mastercard by case number.
naftiko: "0.5"
info:
label: "Mastercard Chargeback Lookup"
description: "Retrieves chargeback details from Mastercard by case number."
tags:
- payments
- mastercard
- chargebacks
capability:
exposes:
- type: mcp
namespace: chargeback-management
port: 8080
tools:
- name: get-chargeback
description: "Look up a Mastercard chargeback by case number."
inputParameters:
- name: case_number
in: body
type: string
description: "Mastercard chargeback case number."
call: "mastercard.get-chargeback"
with:
case_number: "{{case_number}}"
consumes:
- type: http
namespace: mastercard
baseUri: "https://api.mastercard.com/dispute/v1"
authentication:
type: bearer
token: "$secrets.mastercard_token"
resources:
- name: chargebacks
path: "/chargebacks/{{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-chargeback
method: GET
Retrieves Mastercard payment transaction details for order verification and fraud checks.
naftiko: "0.5"
info:
label: "Mastercard Payment Transaction Lookup"
description: "Retrieves Mastercard payment transaction details for order verification and fraud checks."
tags:
- payments
- mastercard
- retail
capability:
exposes:
- type: mcp
namespace: payment-processing
port: 8080
tools:
- name: get-transaction
description: "Look up a Mastercard transaction by reference."
inputParameters:
- name: transaction_ref
in: body
type: string
description: "The transaction reference number."
call: "mastercard.get-transaction"
with:
transaction_ref: "{{transaction_ref}}"
consumes:
- type: http
namespace: mastercard
baseUri: "https://sandbox.api.mastercard.com/v1"
authentication:
type: oauth
consumer_key: "$secrets.mastercard_consumer_key"
signing_key: "$secrets.mastercard_signing_key"
resources:
- name: transactions
path: "/transactions/{{transaction_ref}}"
inputParameters:
- name: transaction_ref
in: path
operations:
- name: get-transaction
method: GET
Sends an email via Microsoft Outlook for retail operations communications.
naftiko: "0.5"
info:
label: "Microsoft Outlook Email Notification"
description: "Sends an email via Microsoft Outlook for retail operations communications."
tags:
- communication
- microsoft-outlook
- email
capability:
exposes:
- type: mcp
namespace: email-comms
port: 8080
tools:
- name: send-email
description: "Send an email via Microsoft Outlook."
inputParameters:
- name: to
in: body
type: string
description: "Recipient email."
- name: subject
in: body
type: string
description: "Subject line."
- name: body
in: body
type: string
description: "Email body."
call: "outlook.send-mail"
with:
to: "{{to}}"
subject: "{{subject}}"
body: "{{body}}"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0/me"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/sendMail"
operations:
- name: send-mail
method: POST
Sends a message to a Microsoft Teams channel for store operations notifications.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message"
description: "Sends a message to a Microsoft Teams channel for store operations notifications."
tags:
- collaboration
- microsoft-teams
- notification
capability:
exposes:
- type: mcp
namespace: team-comms
port: 8080
tools:
- name: send-channel-message
description: "Post a message to a Microsoft Teams channel."
inputParameters:
- name: team_id
in: body
type: string
description: "The Teams team ID."
- name: channel_id
in: body
type: string
description: "The channel ID."
- name: message
in: body
type: string
description: "Message text."
call: "msteams.post-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "{{message}}"
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/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new product is added to BigCommerce, creates marketing assets in Box, schedules a Facebook promotion, and notifies the merchandising team in Microsoft Teams.
naftiko: "0.5"
info:
label: "New Product Launch Pipeline"
description: "When a new product is added to BigCommerce, creates marketing assets in Box, schedules a Facebook promotion, and notifies the merchandising team in Microsoft Teams."
tags:
- product-launch
- bigcommerce
- box
- facebook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-launch
port: 8080
tools:
- name: launch-new-product
description: "Orchestrate new product launch across marketing, social, and merchandising systems."
inputParameters:
- name: product_id
in: body
type: string
description: "BigCommerce product ID."
- name: launch_date
in: body
type: string
description: "Launch date in YYYY-MM-DD."
steps:
- name: get-product
type: call
call: "bigcommerce.get-product"
with:
product_id: "{{product_id}}"
- name: create-asset-folder
type: call
call: "box.create-folder"
with:
parent_id: "marketing_assets"
name: "{{get-product.name}}_{{launch_date}}"
- name: create-fb-post
type: call
call: "facebook.create-post"
with:
page_id: "bloomingdales"
message: "Introducing {{get-product.name}}! Starting at ${{get-product.price}}. Available {{launch_date}}."
scheduled_publish_time: "{{launch_date}}T10:00:00"
- name: notify-merch-team
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising"
text: "New product launch: {{get-product.name}} ({{product_id}}) on {{launch_date}}. Assets: {{create-asset-folder.url}}. FB post: {{create-fb-post.id}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products/{{product_id}}"
inputParameters:
- name: product_id
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: folders
path: "/folders"
operations:
- name: create-folder
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"
inputParameters:
- name: page_id
in: path
operations:
- name: create-post
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 New Relic application performance metrics for the Bloomingdale's e-commerce platform.
naftiko: "0.5"
info:
label: "New Relic E-Commerce APM"
description: "Retrieves New Relic application performance metrics for the Bloomingdale's e-commerce platform."
tags:
- monitoring
- new-relic
- e-commerce
capability:
exposes:
- type: mcp
namespace: apm-monitoring
port: 8080
tools:
- name: get-app-performance
description: "Look up New Relic APM metrics."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic application ID."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
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
When an online order is placed, checks store inventory via Oracle EBS, creates a fulfillment task in ServiceNow, updates the Salesforce order record, and notifies the store team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Omnichannel Order Fulfillment Pipeline"
description: "When an online order is placed, checks store inventory via Oracle EBS, creates a fulfillment task in ServiceNow, updates the Salesforce order record, and notifies the store team via Microsoft Teams."
tags:
- e-commerce
- fulfillment
- oracle-e-business-suite
- servicenow
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-fulfillment
port: 8080
tools:
- name: process-online-order
description: "Given an order ID, orchestrate fulfillment across Oracle EBS, ServiceNow, Salesforce, and Microsoft Teams."
inputParameters:
- name: order_id
in: body
type: string
description: "The e-commerce order ID."
- name: item_number
in: body
type: string
description: "The item number to fulfill."
- name: store_code
in: body
type: string
description: "Preferred fulfillment store code."
- name: store_channel
in: body
type: string
description: "Microsoft Teams channel for the store team."
steps:
- name: check-inventory
type: call
call: "oracle-ebs.get-inventory"
with:
item_number: "{{item_number}}"
store_code: "{{store_code}}"
- name: create-fulfillment-task
type: call
call: "servicenow.create-task"
with:
short_description: "Fulfill order {{order_id}} at {{store_code}}"
category: "store_fulfillment"
description: "Item: {{item_number}}. Available qty: {{check-inventory.available_qty}}. Order: {{order_id}}."
- name: update-salesforce
type: call
call: "salesforce.update-order"
with:
order_id: "{{order_id}}"
status: "Fulfillment_In_Progress"
fulfillment_store: "{{store_code}}"
- name: notify-store
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{store_channel}}"
text: "New fulfillment: Order {{order_id}}, Item {{item_number}} at {{store_code}}. Inventory: {{check-inventory.available_qty}} available. Task: {{create-fulfillment-task.number}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: inventory
path: "/inventory?item={{item_number}}&location={{store_code}}"
inputParameters:
- name: item_number
in: query
- name: store_code
in: query
operations:
- name: get-inventory
method: GET
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: orders
path: "/sobjects/Order/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: update-order
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: post-channel-message
method: POST
Retrieves a point-in-time inventory snapshot from Oracle Cloud for a specific warehouse.
naftiko: "0.5"
info:
label: "Oracle Cloud Inventory Snapshot"
description: "Retrieves a point-in-time inventory snapshot from Oracle Cloud for a specific warehouse."
tags:
- inventory
- oracle-cloud
- warehouse
capability:
exposes:
- type: mcp
namespace: inventory-snapshot
port: 8080
tools:
- name: get-inventory-snapshot
description: "Retrieve current inventory levels from Oracle Cloud."
inputParameters:
- name: warehouse_id
in: body
type: string
description: "Oracle Cloud warehouse identifier."
call: "oracle-cloud.get-inventory"
with:
warehouse_id: "{{warehouse_id}}"
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://bloomingdales.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: inventory
path: "/inventoryBalances?q=WarehouseId={{warehouse_id}}"
inputParameters:
- name: warehouse_id
in: query
operations:
- name: get-inventory
method: GET
Retrieves inventory levels from Oracle E-Business Suite for a given item and store location.
naftiko: "0.5"
info:
label: "Oracle EBS Inventory Lookup"
description: "Retrieves inventory levels from Oracle E-Business Suite for a given item and store location."
tags:
- inventory
- oracle-e-business-suite
- retail
capability:
exposes:
- type: mcp
namespace: inventory-management
port: 8080
tools:
- name: get-inventory-level
description: "Look up Oracle EBS inventory for an item at a store."
inputParameters:
- name: item_number
in: body
type: string
description: "The Oracle item number."
- name: store_code
in: body
type: string
description: "The store location code."
call: "oracle-ebs.get-inventory"
with:
item_number: "{{item_number}}"
store_code: "{{store_code}}"
outputParameters:
- name: on_hand_qty
type: integer
mapping: "$.onHandQuantity"
- name: available_qty
type: integer
mapping: "$.availableQuantity"
- name: reserved_qty
type: integer
mapping: "$.reservedQuantity"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: inventory
path: "/inventory?item={{item_number}}&location={{store_code}}"
inputParameters:
- name: item_number
in: query
- name: store_code
in: query
operations:
- name: get-inventory
method: GET
Retrieves the current firewall policy status and active threat count from Palo Alto Networks.
naftiko: "0.5"
info:
label: "Palo Alto Firewall Status"
description: "Retrieves the current firewall policy status and active threat count from Palo Alto Networks."
tags:
- security
- palo-alto-networks
- firewall
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: get-firewall-status
description: "Look up Palo Alto firewall status by device name."
inputParameters:
- name: device_name
in: body
type: string
description: "Palo Alto firewall device name."
call: "paloalto.get-device-status"
with:
device_name: "{{device_name}}"
consumes:
- type: http
namespace: paloalto
baseUri: "https://panorama.bloomingdales.com/restapi/v10.1"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
resources:
- name: devices
path: "/Devices/{{device_name}}/status"
inputParameters:
- name: device_name
in: path
operations:
- name: get-device-status
method: GET
Books a personal shopping appointment by checking availability in Salesforce, creating a calendar event via Microsoft Outlook, and sending a confirmation via WhatsApp.
naftiko: "0.5"
info:
label: "Personal Shopper Appointment Pipeline"
description: "Books a personal shopping appointment by checking availability in Salesforce, creating a calendar event via Microsoft Outlook, and sending a confirmation via WhatsApp."
tags:
- customer-service
- salesforce
- microsoft-outlook
- whatsapp
capability:
exposes:
- type: mcp
namespace: personal-shopping
port: 8080
tools:
- name: book-appointment
description: "Book a personal shopper appointment across CRM, calendar, and messaging."
inputParameters:
- name: customer_id
in: body
type: string
description: "Salesforce customer ID."
- name: preferred_date
in: body
type: string
description: "Preferred appointment date."
- name: store_code
in: body
type: string
description: "Store location code."
steps:
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{customer_id}}"
- name: check-availability
type: call
call: "salesforce.get-availability"
with:
store_code: "{{store_code}}"
date: "{{preferred_date}}"
- name: create-event
type: call
call: "outlook.create-event"
with:
subject: "Personal Shopping: {{get-customer.first_name}} {{get-customer.last_name}}"
start_time: "{{check-availability.next_slot}}"
duration: 60
location: "Store {{store_code}}"
- name: send-confirmation
type: call
call: "whatsapp.send-message"
with:
phone: "{{get-customer.phone}}"
message: "Hi {{get-customer.first_name}}, your personal shopping appointment is confirmed for {{check-availability.next_slot}} at store {{store_code}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- name: get-availability
method: GET
- 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
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/bloomingdales_wa/messages"
operations:
- name: send-message
method: POST
Runs a Teradata data extract, refreshes the Power BI executive dashboard, and emails the refreshed report link via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Power BI Executive Dashboard Refresh Pipeline"
description: "Runs a Teradata data extract, refreshes the Power BI executive dashboard, and emails the refreshed report link via Microsoft Outlook."
tags:
- analytics
- teradata
- power-bi
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: exec-dashboard
port: 8080
tools:
- name: refresh-exec-dashboard
description: "Orchestrate executive dashboard refresh across data warehouse, BI, and email."
inputParameters:
- name: report_date
in: body
type: string
description: "Report date in YYYY-MM-DD."
steps:
- name: extract-data
type: call
call: "teradata.execute-query"
with:
query: "CALL REFRESH_EXEC_DASHBOARD_STAGING('{{report_date}}')"
database: "EXECUTIVE_DB"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "exec_daily_dashboard"
- name: email-link
type: call
call: "outlook.send-email"
with:
to: "executive-team@bloomingdales.com"
subject: "Executive Dashboard Updated - {{report_date}}"
body: "The executive dashboard has been refreshed with data as of {{report_date}}."
consumes:
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
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
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a Power BI dataset refresh for retail sales performance dashboards.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for retail sales performance dashboards."
tags:
- analytics
- power-bi
- reporting
- retail
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-sales-dashboard
description: "Trigger a Power BI dataset refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
- name: group_id
in: body
type: string
description: "The Power BI workspace ID."
call: "powerbi.refresh-dataset"
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
consumes:
- 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 product reviews from BigCommerce, runs sentiment analysis via Azure ML, updates the product record in Salesforce, and sends a summary to the merchandising team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Product Review Analysis Pipeline"
description: "Pulls product reviews from BigCommerce, runs sentiment analysis via Azure ML, updates the product record in Salesforce, and sends a summary to the merchandising team via Microsoft Teams."
tags:
- analytics
- bigcommerce
- azure-machine-learning
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: review-analysis
port: 8080
tools:
- name: analyze-reviews
description: "Orchestrate product review sentiment analysis across e-commerce, ML, CRM, and communication."
inputParameters:
- name: product_id
in: body
type: string
description: "BigCommerce product ID."
steps:
- name: get-reviews
type: call
call: "bigcommerce.get-reviews"
with:
product_id: "{{product_id}}"
- name: analyze-sentiment
type: call
call: "azure-ml.score-endpoint"
with:
endpoint: "sentiment_analysis"
input_data: "{{get-reviews.reviews}}"
- name: update-product
type: call
call: "salesforce.update-product"
with:
product_id: "{{product_id}}"
sentiment_score: "{{analyze-sentiment.average_score}}"
- name: notify-merch
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising"
text: "Review analysis for product {{product_id}}: Average sentiment {{analyze-sentiment.average_score}}/5. Total reviews: {{get-reviews.count}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: reviews
path: "/catalog/products/{{product_id}}/reviews"
inputParameters:
- name: product_id
in: path
operations:
- name: get-reviews
method: GET
- type: http
namespace: azure-ml
baseUri: "https://bloomingdales-ml.api.azureml.ms"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: endpoints
path: "/score/{{endpoint}}"
inputParameters:
- name: endpoint
in: path
operations:
- name: score-endpoint
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: products
path: "/sobjects/Product2/{{product_id}}"
inputParameters:
- name: product_id
in: path
operations:
- name: update-product
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 a Salesforce campaign by ID for marketing performance tracking.
naftiko: "0.5"
info:
label: "Salesforce Campaign Performance"
description: "Retrieves a Salesforce campaign by ID for marketing performance tracking."
tags:
- marketing
- salesforce
- campaign
capability:
exposes:
- type: mcp
namespace: campaign-tracking
port: 8080
tools:
- name: get-campaign
description: "Look up a Salesforce campaign."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Salesforce campaign ID."
call: "salesforce.get-campaign"
with:
campaign_id: "{{campaign_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
Retrieves a Salesforce customer profile by ID, returning name, loyalty tier, lifetime spend, and preferred store.
naftiko: "0.5"
info:
label: "Salesforce Customer Profile Lookup"
description: "Retrieves a Salesforce customer profile by ID, returning name, loyalty tier, lifetime spend, and preferred store."
tags:
- sales
- salesforce
- customer
- retail
capability:
exposes:
- type: mcp
namespace: customer-crm
port: 8080
tools:
- name: get-customer-profile
description: "Look up a Salesforce customer profile by ID."
inputParameters:
- name: contact_id
in: body
type: string
description: "The Salesforce contact ID."
call: "salesforce.get-contact"
with:
contact_id: "{{contact_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: loyalty_tier
type: string
mapping: "$.Loyalty_Tier__c"
- name: lifetime_spend
type: string
mapping: "$.Lifetime_Spend__c"
- name: preferred_store
type: string
mapping: "$.Preferred_Store__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
Retrieves a customer service case from Salesforce Lightning by case number.
naftiko: "0.5"
info:
label: "Salesforce Lightning Case Lookup"
description: "Retrieves a customer service case from Salesforce Lightning by case number."
tags:
- customer-service
- salesforce-lightning
- case-management
capability:
exposes:
- type: mcp
namespace: customer-cases
port: 8080
tools:
- name: get-case
description: "Look up a Salesforce case by case number."
inputParameters:
- name: case_number
in: body
type: string
description: "Salesforce case number."
call: "salesforce.get-case"
with:
case_number: "{{case_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_number}}"
inputParameters:
- name: case_number
in: path
operations:
- name: get-case
method: GET
Executes a report query against SAP BW for retail merchandise analysis and category performance.
naftiko: "0.5"
info:
label: "SAP BW Retail Analytics Query"
description: "Executes a report query against SAP BW for retail merchandise analysis and category performance."
tags:
- analytics
- sap-bw
- reporting
- retail
capability:
exposes:
- type: mcp
namespace: bw-reporting
port: 8080
tools:
- name: run-bw-query
description: "Execute a SAP BW query for retail analytics."
inputParameters:
- name: query_name
in: body
type: string
description: "The SAP BW query name."
- name: store_code
in: body
type: string
description: "Store filter parameter."
- name: period
in: body
type: string
description: "Reporting period."
call: "sap-bw.execute-query"
with:
query: "{{query_name}}"
store: "{{store_code}}"
period: "{{period}}"
consumes:
- type: http
namespace: sap-bw
baseUri: "https://bloomingdales-bw.sap.com/sap/opu/odata/sap/API_BW_QUERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: queries
path: "/QueryResults?queryName={{query}}&store={{store}}&period={{period}}"
inputParameters:
- name: query
in: query
- name: store
in: query
- name: period
in: query
operations:
- name: execute-query
method: GET
Executes a query against the SAP BW retail sales info cube.
naftiko: "0.5"
info:
label: "SAP BW Sales Cube Query"
description: "Executes a query against the SAP BW retail sales info cube."
tags:
- analytics
- sap-bw
- sales
capability:
exposes:
- type: mcp
namespace: bw-analytics
port: 8080
tools:
- name: query-sales-cube
description: "Run a query against the SAP BW sales cube."
inputParameters:
- name: query_name
in: body
type: string
description: "SAP BW query technical name."
call: "sap-bw.execute-query"
with:
query_name: "{{query_name}}"
consumes:
- type: http
namespace: sap-bw
baseUri: "https://sap-bw.bloomingdales.com/sap/bw/ina"
authentication:
type: basic
username: "$secrets.sap_bw_user"
password: "$secrets.sap_bw_password"
resources:
- name: queries
path: "/GetResponse"
operations:
- name: execute-query
method: POST
Launches a seasonal promotion by creating a MailChimp campaign, posting to Facebook and Instagram, updating the Salesforce promotion record, and notifying the marketing team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Promotion Launch Pipeline"
description: "Launches a seasonal promotion by creating a MailChimp campaign, posting to Facebook and Instagram, updating the Salesforce promotion record, and notifying the marketing team via Microsoft Teams."
tags:
- marketing
- promotions
- mailchimp
- facebook
- instagram
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: promo-launch
port: 8080
tools:
- name: launch-seasonal-promotion
description: "Given promotion details, orchestrate launch across email, social, CRM, and internal channels."
inputParameters:
- name: promo_name
in: body
type: string
description: "The promotion name."
- name: discount_pct
in: body
type: string
description: "Discount percentage."
- name: start_date
in: body
type: string
description: "Promotion start date."
- name: end_date
in: body
type: string
description: "Promotion end date."
- name: marketing_channel
in: body
type: string
description: "Microsoft Teams marketing channel."
steps:
- name: create-email-campaign
type: call
call: "mailchimp.create-campaign"
with:
subject: "{{promo_name}} - {{discount_pct}}% Off at Bloomingdale's"
from_name: "Bloomingdale's"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "{{promo_name}}! Enjoy {{discount_pct}}% off select items. {{start_date}} through {{end_date}}. Shop now at bloomingdales.com"
- name: post-instagram
type: call
call: "instagram.create-media"
with:
caption: "{{promo_name}} is here! {{discount_pct}}% off. Shop the sale at bloomingdales.com #Bloomingdales #Sale"
- name: notify-marketing
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{marketing_channel}}"
text: "Promotion launched: {{promo_name}} ({{discount_pct}}% off). Email campaign: {{create-email-campaign.id}}. Social posts live."
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-media
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: post-channel-message
method: POST
Pulls headcount requirements from Teradata analytics, creates job postings on Indeed, generates schedules in Workday, and notifies store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Staff Scheduling Pipeline"
description: "Pulls headcount requirements from Teradata analytics, creates job postings on Indeed, generates schedules in Workday, and notifies store managers via Microsoft Teams."
tags:
- hr
- teradata
- indeed
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: seasonal-staffing
port: 8080
tools:
- name: plan-seasonal-staff
description: "Orchestrate seasonal staffing across analytics, recruiting, HCM, and communication."
inputParameters:
- name: store_code
in: body
type: string
description: "Store location code."
- name: season
in: body
type: string
description: "Season name."
steps:
- name: get-requirements
type: call
call: "teradata.execute-query"
with:
query: "SELECT positions_needed, department FROM SEASONAL_REQUIREMENTS WHERE store_code='{{store_code}}' AND season='{{season}}'"
database: "HR_DB"
- name: create-posting
type: call
call: "indeed.create-job"
with:
title: "Seasonal {{season}} Associate - Store {{store_code}}"
description: "Join Bloomingdale's for the {{season}} season!"
location: "Store {{store_code}}"
- name: create-schedule
type: call
call: "workday.create-schedule"
with:
store_code: "{{store_code}}"
season: "{{season}}"
headcount: "{{get-requirements.positions_needed}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
channel_id: "store_{{store_code}}"
text: "Seasonal staffing for {{season}}: {{get-requirements.positions_needed}} positions needed. Job posted on Indeed. Schedule template created in Workday."
consumes:
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
- type: http
namespace: indeed
baseUri: "https://apis.indeed.com/v2"
authentication:
type: bearer
token: "$secrets.indeed_token"
resources:
- name: jobs
path: "/jobs"
operations:
- name: create-job
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/schedules"
operations:
- name: create-schedule
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 change request record from ServiceNow by change number.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lookup"
description: "Retrieves a change request record from ServiceNow by change number."
tags:
- operations
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: get-change-request
description: "Look up a ServiceNow change request by number."
inputParameters:
- name: change_number
in: body
type: string
description: "ServiceNow change request number."
call: "servicenow.get-change"
with:
change_number: "{{change_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request?sysparm_query=number={{change_number}}"
inputParameters:
- name: change_number
in: query
operations:
- name: get-change
method: GET
Retrieves a ServiceNow incident by number for store operations support.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number for store operations support."
tags:
- itsm
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: itsm-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: short_description
type: string
mapping: "$.result.short_description"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Retrieves metadata for a SharePoint document for store operations documentation.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves metadata for a SharePoint document for store operations documentation."
tags:
- collaboration
- sharepoint
- documents
capability:
exposes:
- type: mcp
namespace: doc-management
port: 8080
tools:
- name: get-document
description: "Look up a SharePoint document."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_path
in: body
type: string
description: "Path to the file."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: size
type: integer
mapping: "$.size"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Schedules an Instagram post, a Twitter announcement, and a LinkedIn update for an influencer collaboration, then logs the campaign in Salesforce.
naftiko: "0.5"
info:
label: "Social Media Influencer Campaign Pipeline"
description: "Schedules an Instagram post, a Twitter announcement, and a LinkedIn update for an influencer collaboration, then logs the campaign in Salesforce."
tags:
- marketing
- instagram
- twitter
- linkedin
- salesforce
capability:
exposes:
- type: mcp
namespace: influencer-campaigns
port: 8080
tools:
- name: launch-influencer-campaign
description: "Orchestrate an influencer marketing campaign across social platforms and CRM."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Marketing campaign name."
- name: influencer_handle
in: body
type: string
description: "Influencer social media handle."
- name: product_name
in: body
type: string
description: "Featured product name."
steps:
- name: post-instagram
type: call
call: "instagram.create-post"
with:
caption: "Loving the new {{product_name}} from @bloomingdales! #{{campaign_name}} #sponsored"
- name: post-twitter
type: call
call: "twitter.create-tweet"
with:
text: "Excited to partner with @Bloomingdales on the new {{product_name}}! #{{campaign_name}}"
- name: post-linkedin
type: call
call: "linkedin.create-post"
with:
text: "Thrilled to announce our collaboration with {{influencer_handle}} featuring {{product_name}}. #{{campaign_name}}"
- name: log-campaign
type: call
call: "salesforce.create-campaign"
with:
name: "{{campaign_name}}"
type: "Influencer"
status: "Active"
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/bloomingdales/media"
operations:
- name: create-post
method: POST
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
Retrieves network node performance from SolarWinds for store IT infrastructure monitoring.
naftiko: "0.5"
info:
label: "SolarWinds Store Network Monitoring"
description: "Retrieves network node performance from SolarWinds for store IT infrastructure monitoring."
tags:
- monitoring
- solarwinds
- networking
- retail
capability:
exposes:
- type: mcp
namespace: network-monitoring
port: 8080
tools:
- name: get-node-status
description: "Look up SolarWinds node status by node ID."
inputParameters:
- name: node_id
in: body
type: string
description: "The SolarWinds node ID."
call: "solarwinds.get-node"
with:
node_id: "{{node_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status"
- name: cpu_load
type: string
mapping: "$.CPULoad"
- name: response_time
type: string
mapping: "$.ResponseTime"
consumes:
- type: http
namespace: solarwinds
baseUri: "https://bloomingdales-solarwinds.macys.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query?query=SELECT+Status,CPULoad,ResponseTime+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}"
inputParameters:
- name: node_id
in: query
operations:
- name: get-node
method: GET
Exports an architecture diagram from Sparx Enterprise Architect, uploads it to SharePoint, creates a review task in Jira, and notifies the architecture team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Sparx Architecture Review Pipeline"
description: "Exports an architecture diagram from Sparx Enterprise Architect, uploads it to SharePoint, creates a review task in Jira, and notifies the architecture team via Microsoft Teams."
tags:
- architecture
- sparx-enterprise-architect
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: architecture-review
port: 8080
tools:
- name: initiate-review
description: "Orchestrate architecture diagram review across modeling, document storage, and project tracking."
inputParameters:
- name: model_id
in: body
type: string
description: "Sparx EA model GUID."
- name: diagram_name
in: body
type: string
description: "Diagram name."
steps:
- name: export-diagram
type: call
call: "sparx-ea.export-diagram"
with:
model_id: "{{model_id}}"
diagram_name: "{{diagram_name}}"
- name: upload-to-sharepoint
type: call
call: "sharepoint.upload-file"
with:
site_id: "enterprise_architecture"
folder_path: "Diagrams/Reviews"
file_name: "{{diagram_name}}.png"
- name: create-review-task
type: call
call: "jira.create-issue"
with:
project_key: "ARCH"
summary: "Review: {{diagram_name}}"
issue_type: "Task"
description: "Architecture diagram review. Document: {{upload-to-sharepoint.url}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "architecture"
text: "Architecture review requested: {{diagram_name}}. Document: {{upload-to-sharepoint.url}}. Jira: {{create-review-task.key}}."
consumes:
- type: http
namespace: sparx-ea
baseUri: "https://sparx.bloomingdales.com/api/v1"
authentication:
type: bearer
token: "$secrets.sparx_ea_token"
resources:
- name: diagrams
path: "/models/{{model_id}}/diagrams/{{diagram_name}}/export"
inputParameters:
- name: model_id
in: path
- name: diagram_name
in: path
operations:
- name: export-diagram
method: GET
- 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
- type: http
namespace: jira
baseUri: "https://bloomingdales.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 a Sparx EA model package for retail systems architecture documentation.
naftiko: "0.5"
info:
label: "Sparx Enterprise Architect Retail Model"
description: "Retrieves a Sparx EA model package for retail systems architecture documentation."
tags:
- architecture
- sparx-enterprise-architect
- retail
capability:
exposes:
- type: mcp
namespace: ea-models
port: 8080
tools:
- name: get-ea-package
description: "Look up a Sparx EA model package."
inputParameters:
- name: package_id
in: body
type: string
description: "EA package GUID."
call: "sparxea.get-package"
with:
package_id: "{{package_id}}"
consumes:
- type: http
namespace: sparxea
baseUri: "https://bloomingdales-ea.macys.com/api/v1"
authentication:
type: bearer
token: "$secrets.sparxea_token"
resources:
- name: packages
path: "/packages/{{package_id}}"
inputParameters:
- name: package_id
in: path
operations:
- name: get-package
method: GET
Retrieves the daily settlement report from Square POS for a store location.
naftiko: "0.5"
info:
label: "Square Daily Settlement"
description: "Retrieves the daily settlement report from Square POS for a store location."
tags:
- payments
- square
- settlement
capability:
exposes:
- type: mcp
namespace: pos-settlements
port: 8080
tools:
- name: get-daily-settlement
description: "Retrieve Square daily settlement for a location."
inputParameters:
- name: location_id
in: body
type: string
description: "Square location ID."
- name: settlement_date
in: body
type: string
description: "Settlement date in YYYY-MM-DD format."
call: "square.get-settlement"
with:
location_id: "{{location_id}}"
date: "{{settlement_date}}"
consumes:
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: settlements
path: "/locations/{{location_id}}/settlements"
inputParameters:
- name: location_id
in: path
operations:
- name: get-settlement
method: GET
Retrieves a Square POS transaction by payment ID for in-store sales reconciliation.
naftiko: "0.5"
info:
label: "Square POS Transaction Lookup"
description: "Retrieves a Square POS transaction by payment ID for in-store sales reconciliation."
tags:
- payments
- square
- pos
- retail
capability:
exposes:
- type: mcp
namespace: pos-transactions
port: 8080
tools:
- name: get-payment
description: "Look up a Square payment by ID."
inputParameters:
- name: payment_id
in: body
type: string
description: "The Square payment ID."
call: "square.get-payment"
with:
payment_id: "{{payment_id}}"
outputParameters:
- name: amount
type: string
mapping: "$.payment.amount_money.amount"
- name: status
type: string
mapping: "$.payment.status"
- name: created_at
type: string
mapping: "$.payment.created_at"
consumes:
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: payments
path: "/payments/{{payment_id}}"
inputParameters:
- name: payment_id
in: path
operations:
- name: get-payment
method: GET
Runs end-of-day closing procedures by pulling Square POS totals, reconciling with Oracle EBS, and posting the closing report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Closing Checklist Pipeline"
description: "Runs end-of-day closing procedures by pulling Square POS totals, reconciling with Oracle EBS, and posting the closing report to Microsoft Teams."
tags:
- operations
- square
- oracle-e-business-suite
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-closing
port: 8080
tools:
- name: run-closing-checklist
description: "Execute store closing procedures across POS, ERP, and team communication."
inputParameters:
- name: store_code
in: body
type: string
description: "Store location code."
- name: closing_date
in: body
type: string
description: "Closing date in YYYY-MM-DD."
steps:
- name: get-pos-totals
type: call
call: "square.get-daily-totals"
with:
location_id: "{{store_code}}"
date: "{{closing_date}}"
- name: get-erp-totals
type: call
call: "oracle-ebs.get-daily-sales"
with:
org_id: "{{store_code}}"
date: "{{closing_date}}"
- name: post-report
type: call
call: "msteams.send-message"
with:
channel_id: "store_{{store_code}}"
text: "Closing report for {{closing_date}}: POS total: ${{get-pos-totals.gross_sales}}, ERP total: ${{get-erp-totals.total_revenue}}."
consumes:
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: transactions
path: "/locations/{{location_id}}/transactions"
inputParameters:
- name: location_id
in: path
operations:
- name: get-daily-totals
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: sales
path: "/sales/daily-summary"
operations:
- name: get-daily-sales
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
On new store employee creation in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Store Employee Onboarding Orchestrator"
description: "On new store employee creation in Oracle E-Business Suite, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- retail
- oracle-e-business-suite
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-store-onboarding
description: "Given an Oracle EBS employee ID and store location, orchestrate the full onboarding sequence."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Oracle EBS employee ID."
- name: store_location
in: body
type: string
description: "The store location code."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "oracle-ebs.get-employee"
with:
employee_id: "{{employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New store hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "Store_Ops_{{store_location}}"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} at {{store_location}}."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "store_onboarding_site"
folder_path: "StoreOnboarding/{{get-employee.full_name}}_{{store_location}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Bloomingdale's {{store_location}}, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Documents: {{provision-folder.url}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: employees
path: "/employees/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Checks SolarWinds network status, Cisco device health, and New Relic APM for a store, then posts a unified health report to Microsoft Teams.
naftiko: "0.5"
info:
label: "Store IT Infrastructure Health Pipeline"
description: "Checks SolarWinds network status, Cisco device health, and New Relic APM for a store, then posts a unified health report to Microsoft Teams."
tags:
- infrastructure
- solarwinds
- cisco
- new-relic
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-it-health
port: 8080
tools:
- name: check-store-health
description: "Aggregate IT health metrics from network, device, and APM systems for a store."
inputParameters:
- name: store_code
in: body
type: string
description: "Store location code."
steps:
- name: check-network
type: call
call: "solarwinds.get-node-status"
with:
node_name: "store_{{store_code}}"
- name: check-devices
type: call
call: "cisco.get-device-status"
with:
location: "{{store_code}}"
- name: check-apm
type: call
call: "newrelic.get-app-health"
with:
app_name: "store_{{store_code}}_pos"
- name: post-report
type: call
call: "msteams.send-message"
with:
channel_id: "it_ops"
text: "Store {{store_code}} Health: Network: {{check-network.status}}, Devices: {{check-devices.healthy_count}}/{{check-devices.total_count}} up, POS APM: {{check-apm.health_status}}."
consumes:
- type: http
namespace: solarwinds
baseUri: "https://solarwinds.bloomingdales.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query"
operations:
- name: get-node-status
method: GET
- type: http
namespace: cisco
baseUri: "https://cisco-dnac.bloomingdales.com/dna/intent/api/v1"
authentication:
type: bearer
token: "$secrets.cisco_token"
resources:
- name: devices
path: "/network-device?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-device-status
method: GET
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications.json?filter[name]={{app_name}}"
inputParameters:
- name: app_name
in: query
operations:
- name: get-app-health
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
Provisions a new store by creating a Jira project, configuring SolarWinds monitoring, creating a Square POS location, and notifying the retail ops team via Zoom.
naftiko: "0.5"
info:
label: "Store Opening Preparation Pipeline"
description: "Provisions a new store by creating a Jira project, configuring SolarWinds monitoring, creating a Square POS location, and notifying the retail ops team via Zoom."
tags:
- operations
- jira
- solarwinds
- square
- zoom
capability:
exposes:
- type: mcp
namespace: store-opening
port: 8080
tools:
- name: prepare-store-opening
description: "Orchestrate new store opening tasks across project management, monitoring, POS, and communication."
inputParameters:
- name: store_name
in: body
type: string
description: "New store name."
- name: store_address
in: body
type: string
description: "Store physical address."
- name: opening_date
in: body
type: string
description: "Planned opening date."
steps:
- name: create-project
type: call
call: "jira.create-project"
with:
name: "Store Opening: {{store_name}}"
key: "SO"
description: "Store opening at {{store_address}} planned for {{opening_date}}."
- name: add-monitoring
type: call
call: "solarwinds.add-node"
with:
node_name: "{{store_name}}"
ip_address: "auto"
location: "{{store_address}}"
- name: create-pos-location
type: call
call: "square.create-location"
with:
name: "{{store_name}}"
address: "{{store_address}}"
- name: schedule-kickoff
type: call
call: "zoom.create-meeting"
with:
topic: "Store Opening Kickoff: {{store_name}}"
start_time: "{{opening_date}}T09:00:00"
duration: 60
consumes:
- type: http
namespace: jira
baseUri: "https://bloomingdales.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project"
operations:
- name: create-project
method: POST
- type: http
namespace: solarwinds
baseUri: "https://solarwinds.bloomingdales.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Create/Orion.Nodes"
operations:
- name: add-node
method: POST
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: locations
path: "/locations"
operations:
- name: create-location
method: POST
- 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
Checks Dynatrace for POS system health at a specific store, returning application status, response time, and error rate.
naftiko: "0.5"
info:
label: "Store POS System Health Check"
description: "Checks Dynatrace for POS system health at a specific store, returning application status, response time, and error rate."
tags:
- monitoring
- dynatrace
- pos
- retail
capability:
exposes:
- type: mcp
namespace: pos-monitoring
port: 8080
tools:
- name: check-pos-health
description: "Look up Dynatrace application health for store POS systems."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Dynatrace application entity ID."
call: "dynatrace.get-entity"
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: display_name
type: string
mapping: "$.displayName"
- name: health_state
type: string
mapping: "$.properties.healthState"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://bloomingdales.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-entity
method: GET
When a security incident is reported, creates a ServiceNow ticket, logs evidence in Box, and alerts loss prevention via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Security Incident Pipeline"
description: "When a security incident is reported, creates a ServiceNow ticket, logs evidence in Box, and alerts loss prevention via Microsoft Teams."
tags:
- security
- servicenow
- box
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-security
port: 8080
tools:
- name: report-security-incident
description: "Create a store security incident workflow across ticketing, evidence storage, and notifications."
inputParameters:
- name: store_code
in: body
type: string
description: "Store location code."
- name: incident_type
in: body
type: string
description: "Type of security incident."
- name: description
in: body
type: string
description: "Incident description."
steps:
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Security: {{incident_type}} at store {{store_code}}"
priority: "2"
category: "loss_prevention"
description: "{{description}}"
- name: create-evidence-folder
type: call
call: "box.create-folder"
with:
parent_id: "security_evidence"
name: "{{create-ticket.number}}_{{store_code}}"
- name: alert-lp
type: call
call: "msteams.send-message"
with:
channel_id: "loss_prevention"
text: "SECURITY INCIDENT: {{incident_type}} at store {{store_code}}. Ticket: {{create-ticket.number}}. Evidence folder: {{create-evidence-folder.url}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: folders
path: "/folders"
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
Reconciles supplier payments between Oracle EBS and Mastercard settlement data, logs discrepancies in Jira, and notifies the finance team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Supplier Payment Reconciliation Pipeline"
description: "Reconciles supplier payments between Oracle EBS and Mastercard settlement data, logs discrepancies in Jira, and notifies the finance team via Microsoft Outlook."
tags:
- finance
- oracle-e-business-suite
- mastercard
- jira
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: payment-reconciliation
port: 8080
tools:
- name: reconcile-payments
description: "Reconcile supplier payments across ERP and payment processor, flagging discrepancies."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Oracle EBS vendor ID."
- name: settlement_date
in: body
type: string
description: "Settlement date to reconcile."
steps:
- name: get-erp-payments
type: call
call: "oracle-ebs.get-payments"
with:
vendor_id: "{{vendor_id}}"
date: "{{settlement_date}}"
- name: get-settlements
type: call
call: "mastercard.get-settlements"
with:
merchant_id: "bloomingdales"
date: "{{settlement_date}}"
- name: create-discrepancy-ticket
type: call
call: "jira.create-issue"
with:
project_key: "FIN"
summary: "Payment reconciliation: Vendor {{vendor_id}} on {{settlement_date}}"
issue_type: "Task"
description: "ERP total: ${{get-erp-payments.total}}. Settlement total: ${{get-settlements.total}}."
- name: notify-finance
type: call
call: "outlook.send-email"
with:
to: "finance-team@bloomingdales.com"
subject: "Payment Reconciliation: Vendor {{vendor_id}}"
body: "Reconciliation for {{settlement_date}} complete. ERP: ${{get-erp-payments.total}}, Settlement: ${{get-settlements.total}}. Jira: {{create-discrepancy-ticket.key}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: payments
path: "/payables/payments"
operations:
- name: get-payments
method: GET
- type: http
namespace: mastercard
baseUri: "https://api.mastercard.com/settlement/v1"
authentication:
type: bearer
token: "$secrets.mastercard_token"
resources:
- name: settlements
path: "/settlements"
operations:
- name: get-settlements
method: GET
- type: http
namespace: jira
baseUri: "https://bloomingdales.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: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Executes a SQL query against the Bloomingdale's Teradata warehouse for retail sales and customer analytics.
naftiko: "0.5"
info:
label: "Teradata Retail Analytics Query"
description: "Executes a SQL query against the Bloomingdale's Teradata warehouse for retail sales and customer analytics."
tags:
- data
- analytics
- teradata
- retail
capability:
exposes:
- type: mcp
namespace: retail-analytics
port: 8080
tools:
- name: run-teradata-query
description: "Execute a SQL query against the Teradata warehouse."
inputParameters:
- name: sql_statement
in: body
type: string
description: "The SQL statement."
- name: database_name
in: body
type: string
description: "The target Teradata database."
call: "teradata.execute-query"
with:
query: "{{sql_statement}}"
database: "{{database_name}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
Monitors Twitter mentions, runs sentiment analysis via Azure ML, creates a Salesforce case for negative mentions, and alerts customer service via Microsoft Teams.
naftiko: "0.5"
info:
label: "Twitter Customer Sentiment Alert Pipeline"
description: "Monitors Twitter mentions, runs sentiment analysis via Azure ML, creates a Salesforce case for negative mentions, and alerts customer service via Microsoft Teams."
tags:
- customer-service
- twitter
- azure-machine-learning
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: twitter-sentiment
port: 8080
tools:
- name: process-twitter-mention
description: "Orchestrate Twitter mention triage across social, ML, CRM, and team communication."
inputParameters:
- name: tweet_id
in: body
type: string
description: "Twitter tweet ID."
steps:
- name: get-tweet
type: call
call: "twitter.get-tweet"
with:
tweet_id: "{{tweet_id}}"
- name: analyze-sentiment
type: call
call: "azure-ml.score-endpoint"
with:
endpoint: "sentiment_analysis"
input_data: "{{get-tweet.text}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Twitter mention: @{{get-tweet.author}} ({{analyze-sentiment.label}})"
description: "Tweet: {{get-tweet.text}}. Sentiment: {{analyze-sentiment.score}}."
priority: "High"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "customer_service"
text: "Negative tweet from @{{get-tweet.author}}: {{get-tweet.text}}. Sentiment: {{analyze-sentiment.score}}. Case: {{create-case.id}}."
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_token"
resources:
- name: tweets
path: "/tweets/{{tweet_id}}"
inputParameters:
- name: tweet_id
in: path
operations:
- name: get-tweet
method: GET
- type: http
namespace: azure-ml
baseUri: "https://bloomingdales-ml.api.azureml.ms"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: endpoints
path: "/score/{{endpoint}}"
inputParameters:
- name: endpoint
in: path
operations:
- name: score-endpoint
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Posts a Twitter reply for customer service interactions from the official Bloomingdale's account.
naftiko: "0.5"
info:
label: "Twitter Customer Service Response"
description: "Posts a Twitter reply for customer service interactions from the official Bloomingdale's account."
tags:
- customer-service
- twitter
- social-media
capability:
exposes:
- type: mcp
namespace: social-cs
port: 8080
tools:
- name: reply-to-tweet
description: "Post a Twitter reply."
inputParameters:
- name: text
in: body
type: string
description: "Reply text."
- name: in_reply_to
in: body
type: string
description: "Tweet ID to reply to."
call: "twitter.create-tweet"
with:
text: "{{text}}"
reply_to: "{{in_reply_to}}"
consumes:
- 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
When a new vendor is approved in Oracle EBS, creates a Salesforce account, provisions a SharePoint collaboration site, and sends welcome email via MailChimp.
naftiko: "0.5"
info:
label: "Vendor Onboarding Pipeline"
description: "When a new vendor is approved in Oracle EBS, creates a Salesforce account, provisions a SharePoint collaboration site, and sends welcome email via MailChimp."
tags:
- procurement
- oracle-e-business-suite
- salesforce
- sharepoint
- mailchimp
capability:
exposes:
- type: mcp
namespace: vendor-onboarding
port: 8080
tools:
- name: onboard-vendor
description: "Orchestrate new vendor onboarding across ERP, CRM, and collaboration platforms."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Oracle EBS vendor ID."
- name: vendor_email
in: body
type: string
description: "Primary vendor contact email."
steps:
- name: get-vendor
type: call
call: "oracle-ebs.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: create-account
type: call
call: "salesforce.create-account"
with:
name: "{{get-vendor.vendor_name}}"
type: "Vendor"
vendor_number: "{{vendor_id}}"
- name: create-site
type: call
call: "sharepoint.create-folder"
with:
site_id: "vendor_portal"
folder_path: "Vendors/{{get-vendor.vendor_name}}"
- name: send-welcome
type: call
call: "mailchimp.send-transactional"
with:
email: "{{vendor_email}}"
template: "vendor_welcome"
merge_vars: "{\"VENDOR_NAME\": \"{{get-vendor.vendor_name}}\", \"PORTAL_URL\": \"{{create-site.url}}\"}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: vendors
path: "/vendors/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- 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: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
When a buyer creates a purchase order for new merchandise, submits it to Oracle EBS, creates a ServiceNow tracking ticket, and notifies the buying team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Purchase Order Pipeline"
description: "When a buyer creates a purchase order for new merchandise, submits it to Oracle EBS, creates a ServiceNow tracking ticket, and notifies the buying team via Microsoft Teams."
tags:
- procurement
- oracle-e-business-suite
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: merchandise-procurement
port: 8080
tools:
- name: submit-purchase-order
description: "Given vendor and merchandise details, create a PO in Oracle EBS and track across systems."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The Oracle EBS vendor ID."
- name: item_number
in: body
type: string
description: "The merchandise item number."
- name: quantity
in: body
type: integer
description: "Order quantity."
- name: buying_channel
in: body
type: string
description: "Microsoft Teams channel for the buying team."
steps:
- name: create-po
type: call
call: "oracle-ebs.create-purchase-order"
with:
vendor_id: "{{vendor_id}}"
item_number: "{{item_number}}"
quantity: "{{quantity}}"
- name: create-tracking
type: call
call: "servicenow.create-incident"
with:
short_description: "PO {{create-po.po_number}} for item {{item_number}}"
category: "procurement"
description: "Purchase order created for vendor {{vendor_id}}. Item: {{item_number}}. Qty: {{quantity}}."
- name: notify-buyers
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{buying_channel}}"
text: "New PO created: {{create-po.po_number}}. Item: {{item_number}}. Qty: {{quantity}}. Vendor: {{vendor_id}}. Tracking: {{create-tracking.number}}."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://bloomingdales-ebs.oraclecloud.com/webservices/rest/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: purchase-orders
path: "/purchase-orders"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: post-channel-message
method: POST
Identifies VIP customers from Salesforce, sends a personalized invitation via MailChimp, and logs the outreach in Teradata.
naftiko: "0.5"
info:
label: "VIP Customer Outreach Pipeline"
description: "Identifies VIP customers from Salesforce, sends a personalized invitation via MailChimp, and logs the outreach in Teradata."
tags:
- marketing
- salesforce
- mailchimp
- teradata
capability:
exposes:
- type: mcp
namespace: vip-outreach
port: 8080
tools:
- name: execute-vip-outreach
description: "Orchestrate VIP customer outreach across CRM, email, and analytics."
inputParameters:
- name: customer_id
in: body
type: string
description: "Salesforce VIP customer ID."
- name: event_name
in: body
type: string
description: "Exclusive event name."
steps:
- name: get-customer
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{customer_id}}"
- name: send-invitation
type: call
call: "mailchimp.send-transactional"
with:
email: "{{get-customer.email}}"
template: "vip_invitation"
merge_vars: "{\"FIRST_NAME\": \"{{get-customer.first_name}}\", \"EVENT\": \"{{event_name}}\"}"
- name: log-outreach
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO VIP_OUTREACH (customer_id, event_name, created_at) VALUES ('{{customer_id}}', '{{event_name}}', CURRENT_TIMESTAMP)"
database: "MARKETING_DB"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mandrill_api_key"
resources:
- name: messages
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
When new visual merchandising guidelines are approved, uploads them to SharePoint, creates Salesforce campaign records, and notifies all store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Visual Merchandising Pipeline"
description: "When new visual merchandising guidelines are approved, uploads them to SharePoint, creates Salesforce campaign records, and notifies all store managers via Microsoft Teams."
tags:
- merchandising
- sharepoint
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: visual-merch
port: 8080
tools:
- name: distribute-merchandising-guidelines
description: "Given merchandising guidelines, distribute to stores via SharePoint, Salesforce, and Microsoft Teams."
inputParameters:
- name: guideline_name
in: body
type: string
description: "Name of the merchandising guideline."
- name: season
in: body
type: string
description: "Season (e.g., Spring 2026)."
- name: store_managers_channel
in: body
type: string
description: "Microsoft Teams channel for store managers."
steps:
- name: upload-guidelines
type: call
call: "sharepoint.upload-file"
with:
site_id: "visual_merchandising_site"
folder_path: "Guidelines/{{season}}"
file_name: "{{guideline_name}}.pdf"
- name: create-campaign
type: call
call: "salesforce.create-campaign"
with:
name: "{{season}} Visual Merchandising: {{guideline_name}}"
status: "Active"
type: "In-Store"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{store_managers_channel}}"
text: "New visual merchandising guidelines: {{guideline_name}} for {{season}}. Download: {{upload-guidelines.url}}. Campaign: {{create-campaign.id}}."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
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
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign"
operations:
- name: create-campaign
method: POST
- type: http
namespace: 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: post-channel-message
method: POST
When Dynatrace detects a website outage, creates a P1 ServiceNow incident, posts a Cloudflare maintenance page, and notifies the e-commerce team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Website Outage Response Pipeline"
description: "When Dynatrace detects a website outage, creates a P1 ServiceNow incident, posts a Cloudflare maintenance page, and notifies the e-commerce team via Microsoft Teams."
tags:
- incident-response
- dynatrace
- servicenow
- cloudflare
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: outage-response
port: 8080
tools:
- name: handle-outage
description: "Orchestrate website outage response across monitoring, incident, and CDN systems."
inputParameters:
- name: alert_id
in: body
type: string
description: "Dynatrace alert ID."
- name: affected_url
in: body
type: string
description: "Affected website URL."
steps:
- name: get-alert
type: call
call: "dynatrace.get-alert"
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Website outage: {{affected_url}}"
priority: "1"
category: "e-commerce"
description: "Dynatrace alert {{alert_id}}: {{get-alert.title}}. Impact: {{get-alert.impact_level}}."
- name: enable-maintenance-page
type: call
call: "cloudflare.create-page-rule"
with:
zone_id: "bloomingdales_zone"
url_pattern: "{{affected_url}}/*"
action: "forwarding_url"
destination: "https://bloomingdales.com/maintenance.html"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "ecommerce_ops"
text: "OUTAGE: {{affected_url}} is down. Dynatrace: {{get-alert.title}}. ServiceNow: {{create-incident.number}}. Maintenance page enabled."
consumes:
- type: http
namespace: dynatrace
baseUri: "https://bloomingdales.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: alerts
path: "/problems/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: servicenow
baseUri: "https://bloomingdales.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: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: page-rules
path: "/zones/{{zone_id}}/pagerules"
inputParameters:
- name: zone_id
in: path
operations:
- name: create-page-rule
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 Azure ML demand forecast, pulls current inventory from Oracle EBS, calculates optimal markdowns, and updates prices in BigCommerce.
naftiko: "0.5"
info:
label: "Weekly Markdown Optimization Pipeline"
description: "Runs Azure ML demand forecast, pulls current inventory from Oracle EBS, calculates optimal markdowns, and updates prices in BigCommerce."
tags:
- pricing
- azure-machine-learning
- oracle-e-business-suite
- bigcommerce
capability:
exposes:
- type: mcp
namespace: markdown-optimization
port: 8080
tools:
- name: optimize-markdowns
description: "Run weekly markdown optimization across demand forecasting, inventory, and e-commerce."
inputParameters:
- name: category_id
in: body
type: string
description: "Product category ID."
- name: markdown_budget
in: body
type: string
description: "Available markdown budget."
steps:
- name: run-forecast
type: call
call: "azure-ml.run-pipeline"
with:
pipeline_id: "demand_forecast_v3"
parameters: "{\"category_id\": \"{{category_id}}\", \"horizon_days\": 14}"
- name: get-inventory
type: call
call: "oracle-ebs.get-inventory"
with:
category_id: "{{category_id}}"
- name: update-prices
type: call
call: "bigcommerce.batch-update-prices"
with:
category_id: "{{category_id}}"
forecast_data: "{{run-forecast.output}}"
inventory_data: "{{get-inventory.items}}"
budget: "{{markdown_budget}}"
consumes:
- type: http
namespace: azure-ml
baseUri: "https://bloomingdales-ml.api.azureml.ms"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_id}}/run"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: oracle-ebs
baseUri: "https://erp.bloomingdales.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: inventory
path: "/inventory?category_id={{category_id}}"
inputParameters:
- name: category_id
in: query
operations:
- name: get-inventory
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products"
operations:
- name: batch-update-prices
method: PUT
Sends a WhatsApp message to customers for order status and delivery notifications.
naftiko: "0.5"
info:
label: "WhatsApp Customer Notification"
description: "Sends a WhatsApp message to customers for order status and delivery notifications."
tags:
- customer-service
- whatsapp
- notification
capability:
exposes:
- type: mcp
namespace: customer-messaging
port: 8080
tools:
- name: send-whatsapp-message
description: "Send a WhatsApp message to a customer."
inputParameters:
- name: phone_number
in: body
type: string
description: "Customer phone number."
- name: message
in: body
type: string
description: "Message text."
call: "whatsapp.send-message"
with:
to: "{{phone_number}}"
text: "{{message}}"
consumes:
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/me/messages"
operations:
- name: send-message
method: POST
When a customer requests order status via WhatsApp, looks up the order in BigCommerce and replies with a tracking update.
naftiko: "0.5"
info:
label: "WhatsApp Order Tracking Pipeline"
description: "When a customer requests order status via WhatsApp, looks up the order in BigCommerce and replies with a tracking update."
tags:
- customer-service
- whatsapp
- bigcommerce
capability:
exposes:
- type: mcp
namespace: order-tracking
port: 8080
tools:
- name: track-order-whatsapp
description: "Look up order status and reply to customer via WhatsApp."
inputParameters:
- name: order_id
in: body
type: string
description: "BigCommerce order ID."
- name: customer_phone
in: body
type: string
description: "Customer WhatsApp phone number."
steps:
- name: get-order
type: call
call: "bigcommerce.get-order"
with:
order_id: "{{order_id}}"
- name: send-status
type: call
call: "whatsapp.send-message"
with:
phone: "{{customer_phone}}"
message: "Your order #{{order_id}} status: {{get-order.status}}. Tracking: {{get-order.tracking_number}}. Estimated delivery: {{get-order.estimated_delivery}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bloomingdales/v2"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/bloomingdales_wa/messages"
operations:
- name: send-message
method: POST
Retrieves employee details from Workday for store management.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Retrieves employee details from Workday for store management."
tags:
- hr
- workday
- employee
capability:
exposes:
- type: mcp
namespace: hr-directory
port: 8080
tools:
- name: get-employee
description: "Look up an employee in Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Retrieves an employee time-off balance from Workday HCM.
naftiko: "0.5"
info:
label: "Workday Time-Off Balance"
description: "Retrieves an employee time-off balance from Workday HCM."
tags:
- hr
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-timeoff
port: 8080
tools:
- name: get-time-off-balance
description: "Look up employee time-off balance by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
call: "workday.get-time-off"
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/absenceManagement/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/workers/{{worker_id}}/timeOffBalances"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-time-off
method: GET
Uploads a brand video to the Bloomingdale's YouTube channel for fashion and lifestyle content marketing.
naftiko: "0.5"
info:
label: "YouTube Brand Content Upload"
description: "Uploads a brand video to the Bloomingdale's YouTube channel for fashion and lifestyle content marketing."
tags:
- marketing
- youtube
- brand-content
capability:
exposes:
- type: mcp
namespace: video-marketing
port: 8080
tools:
- name: upload-brand-video
description: "Upload a video to the Bloomingdale's YouTube channel."
inputParameters:
- name: title
in: body
type: string
description: "Video title."
- name: description
in: body
type: string
description: "Video description."
call: "youtube.upload-video"
with:
title: "{{title}}"
description: "{{description}}"
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/upload/youtube/v3"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: videos
path: "/videos?part=snippet,status"
operations:
- name: upload-video
method: POST
Pulls video analytics from YouTube, logs metrics in Teradata, updates the campaign in Salesforce, and sends a performance report via Microsoft Outlook.
naftiko: "0.5"
info:
label: "YouTube Video Performance Pipeline"
description: "Pulls video analytics from YouTube, logs metrics in Teradata, updates the campaign in Salesforce, and sends a performance report via Microsoft Outlook."
tags:
- marketing
- youtube
- teradata
- salesforce
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: video-analytics
port: 8080
tools:
- name: report-video-performance
description: "Orchestrate YouTube video performance reporting across analytics, data warehouse, CRM, and email."
inputParameters:
- name: video_id
in: body
type: string
description: "YouTube video ID."
- name: campaign_id
in: body
type: string
description: "Salesforce campaign ID."
steps:
- name: get-analytics
type: call
call: "youtube.get-video-stats"
with:
video_id: "{{video_id}}"
- name: log-metrics
type: call
call: "teradata.execute-query"
with:
query: "INSERT INTO VIDEO_METRICS (video_id, views, likes, shares, logged_at) VALUES ('{{video_id}}', {{get-analytics.views}}, {{get-analytics.likes}}, {{get-analytics.shares}}, CURRENT_TIMESTAMP)"
database: "MARKETING_DB"
- name: update-campaign
type: call
call: "salesforce.update-campaign"
with:
campaign_id: "{{campaign_id}}"
video_views: "{{get-analytics.views}}"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "marketing-team@bloomingdales.com"
subject: "YouTube Performance: {{video_id}}"
body: "Views: {{get-analytics.views}}, Likes: {{get-analytics.likes}}, Shares: {{get-analytics.shares}}."
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/youtube/v3"
authentication:
type: apiKey
key: "$secrets.youtube_api_key"
resources:
- name: videos
path: "/videos?part=statistics&id={{video_id}}"
inputParameters:
- name: video_id
in: query
operations:
- name: get-video-stats
method: GET
- type: http
namespace: teradata
baseUri: "https://bloomingdales-td.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://bloomingdales.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/sobjects/Campaign/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: update-campaign
method: PATCH
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Creates a Zoom meeting for store manager coordination calls.
naftiko: "0.5"
info:
label: "Zoom Store Manager Meeting"
description: "Creates a Zoom meeting for store manager coordination calls."
tags:
- collaboration
- zoom
- meetings
capability:
exposes:
- type: mcp
namespace: meeting-scheduler
port: 8080
tools:
- name: create-zoom-meeting
description: "Create a Zoom meeting."
inputParameters:
- name: topic
in: body
type: string
description: "Meeting topic."
- name: duration
in: body
type: integer
description: "Duration in minutes."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601."
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
duration: "{{duration}}"
start_time: "{{start_time}}"
outputParameters:
- name: join_url
type: string
mapping: "$.join_url"
- name: meeting_id
type: string
mapping: "$.id"
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
Creates a Zoom webinar, sends invitations via Microsoft Outlook, posts announcement on Microsoft Teams, and creates a follow-up task in Jira.
naftiko: "0.5"
info:
label: "Zoom Town Hall Scheduling Pipeline"
description: "Creates a Zoom webinar, sends invitations via Microsoft Outlook, posts announcement on Microsoft Teams, and creates a follow-up task in Jira."
tags:
- communications
- zoom
- microsoft-outlook
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: town-hall
port: 8080
tools:
- name: schedule-town-hall
description: "Orchestrate company town hall scheduling across webinar, email, chat, and project tracking."
inputParameters:
- name: topic
in: body
type: string
description: "Town hall topic."
- name: date
in: body
type: string
description: "Event date."
steps:
- name: create-webinar
type: call
call: "zoom.create-webinar"
with:
topic: "{{topic}}"
start_time: "{{date}}T14:00:00"
duration: 60
- name: send-invitations
type: call
call: "outlook.send-email"
with:
to: "all-employees@bloomingdales.com"
subject: "Town Hall: {{topic}} - {{date}}"
body: "Join us for a town hall on {{topic}}. Zoom link: {{create-webinar.join_url}}"
- name: announce-teams
type: call
call: "msteams.send-message"
with:
channel_id: "company_announcements"
text: "Town Hall: {{topic}} on {{date}} at 2:00 PM. Join: {{create-webinar.join_url}}"
- name: create-followup
type: call
call: "jira.create-issue"
with:
project_key: "COMM"
summary: "Post town hall: {{topic}} - send recording"
issue_type: "Task"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: webinars
path: "/users/me/webinars"
operations:
- name: create-webinar
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- 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://bloomingdales.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