Bloomingdales Capabilities

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

Sort
Expand

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