Wayfair Capabilities

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

Sort
Expand

Fetches experiment results from the internal experimentation platform, pulls conversion metrics from Google Analytics, computes statistical significance, and creates a summary Jira ticket for the product team.

naftiko: "0.5"
info:
  label: "A/B Test Results Analyzer"
  description: "Fetches experiment results from the internal experimentation platform, pulls conversion metrics from Google Analytics, computes statistical significance, and creates a summary Jira ticket for the product team."
  tags:
    - e-commerce
    - experimentation
    - google-analytics
    - jira
    - data-science
capability:
  exposes:
    - type: mcp
      namespace: experiment-analysis
      port: 8080
      tools:
        - name: analyze-experiment
          description: "Given an experiment ID, fetch results from the experimentation platform, pull GA conversion data, and create a Jira summary ticket."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "The internal experiment/A/B test ID."
            - name: primary_metric
              in: body
              type: string
              description: "The primary success metric to evaluate (e.g., conversion_rate, revenue_per_session)."
          steps:
            - name: get-experiment
              type: call
              call: "experimentation-api.get-experiment"
              with:
                experiment_id: "{{experiment_id}}"
            - name: get-ga-conversions
              type: call
              call: "ga.get-experiment-report"
              with:
                experiment_id: "{{experiment_id}}"
                metric: "{{primary_metric}}"
            - name: create-results-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "EXP"
                issue_type: "Story"
                summary: "Experiment Results: {{get-experiment.name}} — {{get-experiment.status}}"
                description: "Experiment: {{get-experiment.name}}\nVariants: {{get-experiment.variant_count}}\nTraffic Split: {{get-experiment.traffic_pct}}%\nPrimary Metric ({{primary_metric}}): Control={{get-ga-conversions.control_value}}, Treatment={{get-ga-conversions.treatment_value}}\nLift: {{get-ga-conversions.lift_pct}}%\nStatistical Significance: {{get-ga-conversions.p_value}}"
  consumes:
    - type: http
      namespace: experimentation-api
      baseUri: "https://experimentation.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.experimentation_token"
      resources:
        - name: experiments
          path: "/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-experiment-report
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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

Detects abandoned carts from the e-commerce platform, looks up the customer profile, sends a personalized recovery email via MailChimp, and creates a Facebook retargeting audience segment for the cart items.

naftiko: "0.5"
info:
  label: "Abandoned Cart Recovery Orchestrator"
  description: "Detects abandoned carts from the e-commerce platform, looks up the customer profile, sends a personalized recovery email via MailChimp, and creates a Facebook retargeting audience segment for the cart items."
  tags:
    - e-commerce
    - marketing
    - customer-experience
    - mailchimp
    - facebook
    - personalization
capability:
  exposes:
    - type: mcp
      namespace: cart-recovery
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Given a cart ID and customer ID, retrieve the abandoned cart, look up the customer, send a recovery email, and add the customer to a Facebook retargeting audience."
          inputParameters:
            - name: cart_id
              in: body
              type: string
              description: "The abandoned cart session ID."
            - name: customer_id
              in: body
              type: string
              description: "The Wayfair customer ID."
          steps:
            - name: get-cart
              type: call
              call: "cart-api.get-cart"
              with:
                cart_id: "{{cart_id}}"
            - name: get-customer
              type: call
              call: "customer-api.get-customer"
              with:
                customer_id: "{{customer_id}}"
            - name: send-recovery-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "abandoned-cart-recovery"
                email: "{{get-customer.email}}"
                merge_vars: "{\"FIRST_NAME\":\"{{get-customer.first_name}}\",\"CART_URL\":\"https://www.wayfair.com/cart/{{cart_id}}\",\"ITEMS\":\"{{get-cart.item_summary}}\",\"TOTAL\":\"{{get-cart.total}}\"}"
            - name: add-to-retargeting
              type: call
              call: "facebook.add-to-audience"
              with:
                audience_id: "abandoned_cart_retarget"
                email_hash: "{{get-customer.email_hash}}"
                category: "{{get-cart.primary_category}}"
  consumes:
    - type: http
      namespace: cart-api
      baseUri: "https://cart-api.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cart_api_token"
      resources:
        - name: carts
          path: "/carts/{{cart_id}}"
          inputParameters:
            - name: cart_id
              in: path
          operations:
            - name: get-cart
              method: GET
    - type: http
      namespace: customer-api
      baseUri: "https://customer-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.customer_api_token"
      resources:
        - name: customers
          path: "/customers/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-customer
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_marketing_token"
      resources:
        - name: audiences
          path: "/{{audience_id}}/users"
          inputParameters:
            - name: audience_id
              in: path
          operations:
            - name: add-to-audience
              method: POST

Retrieves metadata for an object stored in an Amazon S3 bucket including size, content type, last modified date, and storage class. Used by data engineering to inspect catalog feed files and image assets.

naftiko: "0.5"
info:
  label: "Amazon S3 Object Metadata"
  description: "Retrieves metadata for an object stored in an Amazon S3 bucket including size, content type, last modified date, and storage class. Used by data engineering to inspect catalog feed files and image assets."
  tags:
    - data
    - storage
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: object-storage
      port: 8080
      tools:
        - name: get-object-metadata
          description: "Retrieve S3 object metadata by bucket and key. Returns size, content type, last modified, and storage class."
          inputParameters:
            - name: bucket
              in: body
              type: string
              description: "The S3 bucket name."
            - name: object_key
              in: body
              type: string
              description: "The full object key path."
          call: "s3.head-object"
          with:
            bucket: "{{bucket}}"
            object_key: "{{object_key}}"
          outputParameters:
            - name: content_length
              type: number
              mapping: "$.ContentLength"
            - name: content_type
              type: string
              mapping: "$.ContentType"
            - name: last_modified
              type: string
              mapping: "$.LastModified"
            - name: storage_class
              type: string
              mapping: "$.StorageClass"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_session_token"
      resources:
        - name: objects
          path: "/{{bucket}}/{{object_key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: object_key
              in: path
          operations:
            - name: head-object
              method: HEAD

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: "0.5"
info:
  label: "Annual Compliance Certification Orchestrator"
  description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
  tags:
    - compliance
    - hr
    - legal
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-annual-compliance-certification-orchestrator
          description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Annual Compliance Certification Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: "0.5"
info:
  label: "API Lifecycle Management Orchestrator"
  description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
  tags:
    - engineering
    - api
    - operations
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: run-api-lifecycle-management-orchestrator
          description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed API Lifecycle Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Fetches recent GitHub Actions workflow run data, queries SonarQube for code quality metrics, pulls deployment frequency from the internal deploy tracker, and compiles a weekly engineering health report in Google Drive.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Health Dashboard"
  description: "Fetches recent GitHub Actions workflow run data, queries SonarQube for code quality metrics, pulls deployment frequency from the internal deploy tracker, and compiles a weekly engineering health report in Google Drive."
  tags:
    - engineering
    - ci-cd
    - github-actions
    - sonarqube
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: cicd-health
      port: 8080
      tools:
        - name: generate-pipeline-health-report
          description: "Given a repository name and date range, compile CI/CD pipeline metrics, code quality data, and deployment frequency into a report."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository (e.g., wayfair-incubator/storefront)."
            - name: start_date
              in: body
              type: string
              description: "Report start date (YYYY-MM-DD)."
            - name: end_date
              in: body
              type: string
              description: "Report end date (YYYY-MM-DD)."
          steps:
            - name: get-workflow-runs
              type: call
              call: "github.list-workflow-runs"
              with:
                repository: "{{repository}}"
                created: "{{start_date}}..{{end_date}}"
            - name: get-code-quality
              type: call
              call: "sonarqube.get-project-measures"
              with:
                project_key: "{{repository}}"
                metrics: "bugs,vulnerabilities,code_smells,coverage,duplicated_lines_density"
            - name: create-report
              type: call
              call: "gdrive.create-document"
              with:
                title: "CI/CD Health Report — {{repository}} — {{start_date}} to {{end_date}}"
                folder_id: "engineering_reports"
                content: "Total Runs: {{get-workflow-runs.total_count}} | Success Rate: {{get-workflow-runs.success_rate}}% | Avg Duration: {{get-workflow-runs.avg_duration_min}}m | Bugs: {{get-code-quality.bugs}} | Vulnerabilities: {{get-code-quality.vulnerabilities}} | Coverage: {{get-code-quality.coverage}}% | Code Smells: {{get-code-quality.code_smells}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repository}}/actions/runs"
          inputParameters:
            - name: repository
              in: path
          operations:
            - name: list-workflow-runs
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.wayfair.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: measures
          path: "/measures/component"
          operations:
            - name: get-project-measures
              method: GET
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-document
              method: POST

Retrieves the current state of an AWS CloudWatch alarm by alarm name. Returns the alarm state, reason, metric name, and threshold. Used by SRE teams for incident triage.

naftiko: "0.5"
info:
  label: "CloudWatch Alarm Status"
  description: "Retrieves the current state of an AWS CloudWatch alarm by alarm name. Returns the alarm state, reason, metric name, and threshold. Used by SRE teams for incident triage."
  tags:
    - operations
    - monitoring
    - cloudwatch
    - amazon-web-services
capability:
  exposes:
    - type: mcp
      namespace: aws-monitoring
      port: 8080
      tools:
        - name: get-alarm-status
          description: "Look up a CloudWatch alarm by name. Returns current state, state reason, metric name, and threshold value."
          inputParameters:
            - name: alarm_name
              in: body
              type: string
              description: "The CloudWatch alarm name."
          call: "cloudwatch.describe-alarm"
          with:
            alarm_name: "{{alarm_name}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.MetricAlarms[0].StateValue"
            - name: state_reason
              type: string
              mapping: "$.MetricAlarms[0].StateReason"
            - name: metric_name
              type: string
              mapping: "$.MetricAlarms[0].MetricName"
            - name: threshold
              type: number
              mapping: "$.MetricAlarms[0].Threshold"
  consumes:
    - type: http
      namespace: cloudwatch
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_session_token"
      resources:
        - name: alarms
          path: "/?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}"
          inputParameters:
            - name: alarm_name
              in: path
          operations:
            - name: describe-alarm
              method: GET

Retrieves a Confluence wiki page.

naftiko: "0.5"
info:
  label: "Confluence Page Viewer"
  description: "Retrieves a Confluence wiki page."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-confluence
          description: "Retrieves a Confluence wiki page."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The confluence page viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.wayfair.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: confluence
          path: "/confluence/page/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-confluence
              method: GET

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: "0.5"
info:
  label: "Cross-Functional Project Kickoff Orchestrator"
  description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
  tags:
    - project-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: run-cross-functional-project-kickoff-orchestrator
          description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

After order delivery, fetches the order details, generates cross-sell recommendations using the ML model, creates a personalized email campaign in MailChimp, and logs the recommendation event to Google Analytics.

naftiko: "0.5"
info:
  label: "Cross-Sell Recommendation Email Pipeline"
  description: "After order delivery, fetches the order details, generates cross-sell recommendations using the ML model, creates a personalized email campaign in MailChimp, and logs the recommendation event to Google Analytics."
  tags:
    - e-commerce
    - marketing
    - personalization
    - machine-learning
    - mailchimp
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: cross-sell
      port: 8080
      tools:
        - name: send-cross-sell-recommendations
          description: "Given an order ID, fetch order details, generate cross-sell suggestions, send a personalized email, and log the event to GA."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The delivered order ID."
            - name: customer_id
              in: body
              type: string
              description: "The Wayfair customer ID."
          steps:
            - name: get-order
              type: call
              call: "orders-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-recommendations
              type: call
              call: "ml-reco.cross-sell"
              with:
                purchased_skus: "{{get-order.sku_list}}"
                customer_id: "{{customer_id}}"
                count: "6"
            - name: send-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "cross-sell-post-delivery"
                email: "{{get-order.customer_email}}"
                merge_vars: "{\"FIRST_NAME\":\"{{get-order.customer_name}}\",\"ORDER_ID\":\"{{order_id}}\",\"RECOMMENDATIONS\":\"{{get-recommendations.product_cards}}\"}"
            - name: log-event
              type: call
              call: "ga.send-event"
              with:
                category: "cross-sell"
                action: "email_sent"
                label: "{{order_id}}"
                value: "{{get-recommendations.count}}"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: ml-reco
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: cross-sell
          path: "/models/cross-sell/predict"
          operations:
            - name: cross-sell
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: ga
      baseUri: "https://www.google-analytics.com"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: collect
          path: "/mp/collect"
          operations:
            - name: send-event
              method: POST

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: "0.5"
info:
  label: "Customer Data Privacy Request Handler"
  description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
  tags:
    - compliance
    - privacy
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-customer-data-privacy-request-handler
          description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Data Privacy Request Handler for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: "0.5"
info:
  label: "Customer Journey Mapping Orchestrator"
  description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
  tags:
    - customer-experience
    - analytics
    - product-management
capability:
  exposes:
    - type: mcp
      namespace: customer-experience
      port: 8080
      tools:
        - name: run-customer-journey-mapping-orchestrator
          description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Journey Mapping Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Evaluates a customer's loyalty tier by fetching order history, calculating lifetime spend, updating the customer tier in the CRM, and sending a tier notification email through MailChimp.

naftiko: "0.5"
info:
  label: "Customer Loyalty Tier Evaluation"
  description: "Evaluates a customer's loyalty tier by fetching order history, calculating lifetime spend, updating the customer tier in the CRM, and sending a tier notification email through MailChimp."
  tags:
    - e-commerce
    - customer-experience
    - loyalty
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: loyalty-program
      port: 8080
      tools:
        - name: evaluate-loyalty-tier
          description: "Given a customer ID, calculate lifetime spend, determine the loyalty tier, update the CRM, and send a notification email."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Wayfair customer ID."
          steps:
            - name: get-order-history
              type: call
              call: "orders-api.get-customer-orders"
              with:
                customer_id: "{{customer_id}}"
            - name: get-customer
              type: call
              call: "customer-api.get-customer"
              with:
                customer_id: "{{customer_id}}"
            - name: update-crm-tier
              type: call
              call: "salesforce.update-contact"
              with:
                contact_id: "{{get-customer.salesforce_id}}"
                loyalty_tier: "{{get-order-history.calculated_tier}}"
                lifetime_value: "{{get-order-history.lifetime_spend}}"
            - name: send-tier-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "loyalty-tier-update"
                email: "{{get-customer.email}}"
                merge_vars: "{\"FIRST_NAME\":\"{{get-customer.first_name}}\",\"NEW_TIER\":\"{{get-order-history.calculated_tier}}\",\"LIFETIME_SPEND\":\"{{get-order-history.lifetime_spend}}\",\"BENEFITS_URL\":\"https://www.wayfair.com/loyalty/{{get-order-history.calculated_tier}}\"}"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: customer-orders
          path: "/customers/{{customer_id}}/orders"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-customer-orders
              method: GET
    - type: http
      namespace: customer-api
      baseUri: "https://customer-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.customer_api_token"
      resources:
        - name: customers
          path: "/customers/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-customer
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://wayfair.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
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Retrieves order history for a customer.

naftiko: "0.5"
info:
  label: "Customer Order History"
  description: "Retrieves order history for a customer."
  tags:
    - e-commerce
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: get-customer
          description: "Retrieves order history for a customer."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The customer order history identifier."
          call: "e-commerce-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-commerce-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: customer
          path: "/customer/order/history/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-customer
              method: GET

Processes a customer return by looking up the order, creating a return authorization, issuing a refund, updating the Zendesk ticket, and notifying the customer via email.

naftiko: "0.5"
info:
  label: "Customer Return Processing"
  description: "Processes a customer return by looking up the order, creating a return authorization, issuing a refund, updating the Zendesk ticket, and notifying the customer via email."
  tags:
    - e-commerce
    - customer-service
    - returns
    - zendesk
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: returns-processing
      port: 8080
      tools:
        - name: process-return
          description: "Given an order ID and Zendesk ticket ID, look up the order, create a return authorization, issue a refund, update the support ticket, and notify the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original order ID."
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk support ticket ID."
            - name: return_reason
              in: body
              type: string
              description: "Reason for the return (e.g., damaged, wrong_item, not_as_described)."
          steps:
            - name: get-order
              type: call
              call: "orders-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-return
              type: call
              call: "orders-api.create-return-auth"
              with:
                order_id: "{{order_id}}"
                reason: "{{return_reason}}"
            - name: issue-refund
              type: call
              call: "payments-api.create-refund"
              with:
                order_id: "{{order_id}}"
                amount: "{{get-order.total_amount}}"
                return_auth_id: "{{create-return.return_auth_id}}"
            - name: update-ticket
              type: call
              call: "zendesk.update-ticket"
              with:
                ticket_id: "{{ticket_id}}"
                status: "solved"
                comment: "Return authorized ({{create-return.return_auth_id}}). Refund of ${{get-order.total_amount}} initiated. RMA label sent to customer."
            - name: send-return-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "return-confirmation"
                email: "{{get-order.customer_email}}"
                merge_vars: "{\"ORDER_ID\":\"{{order_id}}\",\"RETURN_AUTH\":\"{{create-return.return_auth_id}}\",\"REFUND_AMOUNT\":\"{{get-order.total_amount}}\"}"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
        - name: returns
          path: "/orders/{{order_id}}/returns"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: create-return-auth
              method: POST
    - type: http
      namespace: payments-api
      baseUri: "https://payments-api.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.payments_api_token"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://wayfair.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: update-ticket
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

After order delivery, sends a CSAT survey via Google Forms, waits for the response webhook, and updates the customer record with the satisfaction score and routes negative feedback to Zendesk.

naftiko: "0.5"
info:
  label: "Customer Satisfaction Survey Pipeline"
  description: "After order delivery, sends a CSAT survey via Google Forms, waits for the response webhook, and updates the customer record with the satisfaction score and routes negative feedback to Zendesk."
  tags:
    - customer-experience
    - feedback
    - google-forms
    - zendesk
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: csat-survey
      port: 8080
      tools:
        - name: send-post-delivery-survey
          description: "Given an order ID and customer email, send a CSAT survey and route the response to the appropriate channel."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The delivered order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: customer_name
              in: body
              type: string
              description: "The customer first name."
          steps:
            - name: get-order
              type: call
              call: "orders-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: send-survey-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "csat-survey"
                email: "{{customer_email}}"
                merge_vars: "{\"FIRST_NAME\":\"{{customer_name}}\",\"ORDER_ID\":\"{{order_id}}\",\"PRODUCT_NAME\":\"{{get-order.primary_product_name}}\",\"SURVEY_URL\":\"https://forms.wayfair.com/csat/{{order_id}}\"}"
            - name: create-feedback-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Post-Delivery CSAT Follow-up: Order {{order_id}}"
                description: "Survey sent to {{customer_email}} for order {{order_id}} ({{get-order.primary_product_name}}). Monitor for negative responses."
                tags: "csat,post-delivery,{{order_id}}"
                priority: "low"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://wayfair.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: "0.5"
info:
  label: "Data Governance Review Orchestrator"
  description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
  tags:
    - data-governance
    - compliance
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: run-data-governance-review-orchestrator
          description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Data Governance Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Queries Datadog for the current health status and key metrics of a specified Wayfair microservice. Returns error rate, latency p99, and active monitors in alert state.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status and key metrics of a specified Wayfair microservice. Returns error rate, latency p99, and active monitors in alert state."
  tags:
    - operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: platform-monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Given a Datadog service name, return the current error rate, p99 latency, and any active monitor alerts."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog APM service name (e.g., storefront-api, checkout-service)."
          call: "datadog.get-service-summary"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: error_rate
              type: number
              mapping: "$.data.attributes.error_rate"
            - name: latency_p99
              type: number
              mapping: "$.data.attributes.latency_p99"
            - name: active_alerts
              type: number
              mapping: "$.data.attributes.alert_count"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: services
          path: "/services/{{service_name}}/summary"
          inputParameters:
            - name: service_name
              in: path
          operations:
            - name: get-service-summary
              method: GET

When a shipment status changes, updates the order tracking in the orders API, sends a delivery status email to the customer via MailChimp, and updates the Zendesk ticket if one exists for the order.

naftiko: "0.5"
info:
  label: "Delivery Tracking Notification Pipeline"
  description: "When a shipment status changes, updates the order tracking in the orders API, sends a delivery status email to the customer via MailChimp, and updates the Zendesk ticket if one exists for the order."
  tags:
    - logistics
    - e-commerce
    - shipping
    - mailchimp
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: delivery-tracking
      port: 8080
      tools:
        - name: process-tracking-update
          description: "Given an order ID, tracking number, and new status, update the order, notify the customer, and update any associated support ticket."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Wayfair order ID."
            - name: tracking_number
              in: body
              type: string
              description: "The carrier tracking number."
            - name: new_status
              in: body
              type: string
              description: "The new shipment status (e.g., in_transit, out_for_delivery, delivered)."
          steps:
            - name: get-order
              type: call
              call: "orders-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: update-tracking
              type: call
              call: "orders-api.update-tracking"
              with:
                order_id: "{{order_id}}"
                tracking_number: "{{tracking_number}}"
                status: "{{new_status}}"
            - name: send-status-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "delivery-status-update"
                email: "{{get-order.customer_email}}"
                merge_vars: "{\"FIRST_NAME\":\"{{get-order.customer_name}}\",\"ORDER_ID\":\"{{order_id}}\",\"STATUS\":\"{{new_status}}\",\"TRACKING\":\"{{tracking_number}}\"}"
            - name: update-support-ticket
              type: call
              call: "zendesk.search-and-update"
              with:
                query: "type:ticket tags:order_{{order_id}}"
                comment: "Shipment status updated to {{new_status}}. Tracking: {{tracking_number}}"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
        - name: tracking
          path: "/orders/{{order_id}}/tracking"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-tracking
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://wayfair.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: search
          path: "/search.json"
          operations:
            - name: search-and-update
              method: GET

After a GitHub Actions deployment completes, posts a summary to the Microsoft Teams engineering channel, creates a Datadog event marker, and updates the Jira release ticket with deployment details.

naftiko: "0.5"
info:
  label: "Deployment Notification Pipeline"
  description: "After a GitHub Actions deployment completes, posts a summary to the Microsoft Teams engineering channel, creates a Datadog event marker, and updates the Jira release ticket with deployment details."
  tags:
    - engineering
    - deployment
    - github-actions
    - microsoft-teams
    - datadog
    - jira
capability:
  exposes:
    - type: mcp
      namespace: deploy-notify
      port: 8080
      tools:
        - name: notify-deployment
          description: "Given a GitHub Actions run ID and Jira release ticket key, post deployment details to Teams, create a Datadog event, and update the Jira ticket."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: repository
              in: body
              type: string
              description: "The GitHub repository (e.g., wayfair-incubator/storefront)."
            - name: jira_ticket
              in: body
              type: string
              description: "The Jira release ticket key (e.g., REL-456)."
          steps:
            - name: get-run
              type: call
              call: "github.get-workflow-run"
              with:
                repository: "{{repository}}"
                run_id: "{{run_id}}"
            - name: post-teams-message
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "engineering-deploys"
                text: "Deployment Complete: {{repository}} | Commit: {{get-run.head_sha}} | Status: {{get-run.conclusion}} | Branch: {{get-run.head_branch}} | Run: {{get-run.html_url}}"
            - name: create-dd-event
              type: call
              call: "datadog.create-event"
              with:
                title: "Deployment: {{repository}}"
                text: "SHA: {{get-run.head_sha}} | Branch: {{get-run.head_branch}} | Status: {{get-run.conclusion}}"
                tags: "service:{{repository}},env:production"
            - name: update-jira
              type: call
              call: "jira.add-comment"
              with:
                issue_key: "{{jira_ticket}}"
                body: "Deployed to production. SHA: {{get-run.head_sha}}. Status: {{get-run.conclusion}}. Run: {{get-run.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repository}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repository
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              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/wayfair-eng/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wayfair.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: comments
          path: "/issue/{{issue_key}}/comment"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: add-comment
              method: POST

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: "0.5"
info:
  label: "Digital Transformation Progress Orchestrator"
  description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
  tags:
    - strategy
    - analytics
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: strategy
      port: 8080
      tools:
        - name: run-digital-transformation-progress-orchestrator
          description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Digital Transformation Progress Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: "0.5"
info:
  label: "Disaster Recovery Test Orchestrator"
  description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
  tags:
    - infrastructure
    - operations
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-disaster-recovery-test-orchestrator
          description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Disaster Recovery Test Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Triggers a security scan on a Docker container image, queries SonarQube for dependency vulnerabilities, creates a Jira security ticket for critical findings, and alerts the security team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Docker Container Security Scan Pipeline"
  description: "Triggers a security scan on a Docker container image, queries SonarQube for dependency vulnerabilities, creates a Jira security ticket for critical findings, and alerts the security team in Microsoft Teams."
  tags:
    - security
    - engineering
    - docker
    - sonarqube
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: container-security
      port: 8080
      tools:
        - name: scan-container-image
          description: "Given a Docker image tag, scan for vulnerabilities, check SonarQube for dependency issues, create a Jira ticket for critical findings, and alert the security team."
          inputParameters:
            - name: image_tag
              in: body
              type: string
              description: "The Docker image tag to scan (e.g., registry.wayfair.com/storefront:v2.3.1)."
            - name: repository
              in: body
              type: string
              description: "The source code repository for SonarQube lookup."
          steps:
            - name: scan-image
              type: call
              call: "container-scan.scan-image"
              with:
                image: "{{image_tag}}"
            - name: get-sonar-vulns
              type: call
              call: "sonarqube.get-vulnerabilities"
              with:
                project_key: "{{repository}}"
                severities: "CRITICAL,BLOCKER"
            - name: create-security-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                issue_type: "Bug"
                summary: "Container Security: {{image_tag}} — {{scan-image.critical_count}} critical vulnerabilities"
                description: "Image: {{image_tag}}\nCritical CVEs: {{scan-image.critical_count}}\nHigh CVEs: {{scan-image.high_count}}\nSonarQube Critical Issues: {{get-sonar-vulns.total}}\nTop CVE: {{scan-image.top_cve}}"
                priority: "Critical"
            - name: alert-security
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "security-alerts"
                text: "Container Security Alert: {{image_tag}} | Critical: {{scan-image.critical_count}} | High: {{scan-image.high_count}} | Jira: {{create-security-ticket.key}}"
  consumes:
    - type: http
      namespace: container-scan
      baseUri: "https://security-scan.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_scan_token"
      resources:
        - name: scans
          path: "/scans"
          operations:
            - name: scan-image
              method: POST
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.wayfair.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: issues
          path: "/issues/search"
          operations:
            - name: get-vulnerabilities
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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/wayfair-security/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Fetches competitor pricing data from Circana, runs the ML pricing model to calculate optimal price, updates the product price in the catalog API, and logs the change to Google Analytics as a custom event.

naftiko: "0.5"
info:
  label: "Dynamic Pricing Update Pipeline"
  description: "Fetches competitor pricing data from Circana, runs the ML pricing model to calculate optimal price, updates the product price in the catalog API, and logs the change to Google Analytics as a custom event."
  tags:
    - e-commerce
    - pricing
    - machine-learning
    - circana
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: dynamic-pricing
      port: 8080
      tools:
        - name: update-product-price
          description: "Given a SKU, fetch competitor pricing intelligence, run the ML pricing model, update the catalog price, and log the change to GA."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to reprice."
            - name: current_price
              in: body
              type: number
              description: "The current listed price."
            - name: category
              in: body
              type: string
              description: "The product category for competitive analysis."
          steps:
            - name: get-competitor-pricing
              type: call
              call: "circana.get-pricing-data"
              with:
                category: "{{category}}"
                sku: "{{sku}}"
            - name: calculate-optimal-price
              type: call
              call: "ml-pricing.predict-price"
              with:
                sku: "{{sku}}"
                current_price: "{{current_price}}"
                competitor_avg: "{{get-competitor-pricing.average_price}}"
                competitor_min: "{{get-competitor-pricing.min_price}}"
                demand_score: "{{get-competitor-pricing.demand_index}}"
            - name: update-catalog-price
              type: call
              call: "catalog-api.update-price"
              with:
                sku: "{{sku}}"
                new_price: "{{calculate-optimal-price.recommended_price}}"
                effective_date: "{{calculate-optimal-price.effective_date}}"
            - name: log-price-change
              type: call
              call: "ga.send-event"
              with:
                category: "pricing"
                action: "price_update"
                label: "{{sku}}"
                value: "{{calculate-optimal-price.recommended_price}}"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v2"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: pricing
          path: "/pricing/competitive-analysis"
          operations:
            - name: get-pricing-data
              method: POST
    - type: http
      namespace: ml-pricing
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: pricing-model
          path: "/models/dynamic-pricing/predict"
          operations:
            - name: predict-price
              method: POST
    - type: http
      namespace: catalog-api
      baseUri: "https://catalog-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.catalog_api_token"
      resources:
        - name: products
          path: "/products/{{sku}}/price"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-price
              method: PUT
    - type: http
      namespace: ga
      baseUri: "https://www.google-analytics.com"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: collect
          path: "/mp/collect"
          operations:
            - name: send-event
              method: POST

Orchestrates e commerce workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 1"
  description: "Orchestrates e commerce workflow 1 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-001
          description: "Orchestrates e commerce workflow 1 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 1 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates e commerce workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 2"
  description: "Orchestrates e commerce workflow 2 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-002
          description: "Orchestrates e commerce workflow 2 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 2 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves e commerce operational data for workflow 3.

naftiko: "0.5"
info:
  label: "E Commerce Data Query 3"
  description: "Retrieves e commerce operational data for workflow 3."
  tags:
    - e
    - operations
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: get-data-3
          description: "Query e commerce data for workflow 3."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "e-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-3
              method: GET

Orchestrates e commerce workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 4"
  description: "Orchestrates e commerce workflow 4 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-004
          description: "Orchestrates e commerce workflow 4 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 4 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates e commerce workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 5"
  description: "Orchestrates e commerce workflow 5 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-005
          description: "Orchestrates e commerce workflow 5 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 5 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves e commerce operational data for workflow 6.

naftiko: "0.5"
info:
  label: "E Commerce Data Query 6"
  description: "Retrieves e commerce operational data for workflow 6."
  tags:
    - e
    - operations
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: get-data-6
          description: "Query e commerce data for workflow 6."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "e-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-6
              method: GET

Orchestrates e commerce workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 7"
  description: "Orchestrates e commerce workflow 7 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-007
          description: "Orchestrates e commerce workflow 7 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 7 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates e commerce workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 8"
  description: "Orchestrates e commerce workflow 8 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-008
          description: "Orchestrates e commerce workflow 8 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 8 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves e commerce operational data for workflow 9.

naftiko: "0.5"
info:
  label: "E Commerce Data Query 9"
  description: "Retrieves e commerce operational data for workflow 9."
  tags:
    - e
    - operations
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: get-data-9
          description: "Query e commerce data for workflow 9."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "e-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-9
              method: GET

Orchestrates e commerce workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 10"
  description: "Orchestrates e commerce workflow 10 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-010
          description: "Orchestrates e commerce workflow 10 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 10 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates e commerce workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 11"
  description: "Orchestrates e commerce workflow 11 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-011
          description: "Orchestrates e commerce workflow 11 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 11 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves e commerce operational data for workflow 12.

naftiko: "0.5"
info:
  label: "E Commerce Data Query 12"
  description: "Retrieves e commerce operational data for workflow 12."
  tags:
    - e
    - operations
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: get-data-12
          description: "Query e commerce data for workflow 12."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "e-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-12
              method: GET

Orchestrates e commerce workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 13"
  description: "Orchestrates e commerce workflow 13 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-013
          description: "Orchestrates e commerce workflow 13 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 13 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates e commerce workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "E Commerce Workflow 14"
  description: "Orchestrates e commerce workflow 14 by coordinating across systems, validating data, and sending notifications."
  tags:
    - e
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: run-e-commerce-workflow-014
          description: "Orchestrates e commerce workflow 14 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed E Commerce Workflow 14 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves e commerce operational data for workflow 15.

naftiko: "0.5"
info:
  label: "E Commerce Data Query 15"
  description: "Retrieves e commerce operational data for workflow 15."
  tags:
    - e
    - operations
capability:
  exposes:
    - type: mcp
      namespace: e
      port: 8080
      tools:
        - name: get-data-15
          description: "Query e commerce data for workflow 15."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "e-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-15
              method: GET

Executes a product search query against the Wayfair Elasticsearch product catalog index. Returns matching SKUs, titles, prices, and relevance scores for merchandising and search quality analysis.

naftiko: "0.5"
info:
  label: "Elasticsearch Product Search"
  description: "Executes a product search query against the Wayfair Elasticsearch product catalog index. Returns matching SKUs, titles, prices, and relevance scores for merchandising and search quality analysis."
  tags:
    - search
    - e-commerce
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: product-search
      port: 8080
      tools:
        - name: search-products
          description: "Search the product catalog by keyword query. Returns matching SKU IDs, product titles, prices, and relevance scores."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query string."
            - name: category_filter
              in: body
              type: string
              description: "Optional category slug to narrow results (e.g., living-room-furniture)."
            - name: limit
              in: body
              type: number
              description: "Maximum number of results to return."
          call: "es.search-products"
          with:
            query: "{{query}}"
            category_filter: "{{category_filter}}"
            limit: "{{limit}}"
          outputParameters:
            - name: total_hits
              type: number
              mapping: "$.hits.total.value"
            - name: results
              type: array
              mapping: "$.hits.hits"
  consumes:
    - type: http
      namespace: es
      baseUri: "https://es-prod.wayfair.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: product-index
          path: "/products/_search"
          operations:
            - name: search-products
              method: POST

Pulls campaign performance data from MailChimp, cross-references with Google Analytics conversion data, and creates a Jira ticket summarizing the campaign results for the marketing team.

naftiko: "0.5"
info:
  label: "Email Campaign Performance Report"
  description: "Pulls campaign performance data from MailChimp, cross-references with Google Analytics conversion data, and creates a Jira ticket summarizing the campaign results for the marketing team."
  tags:
    - marketing
    - email-marketing
    - mailchimp
    - google-analytics
    - jira
capability:
  exposes:
    - type: mcp
      namespace: email-performance
      port: 8080
      tools:
        - name: report-campaign-performance
          description: "Given a MailChimp campaign ID, pull open/click rates, cross-reference with GA conversions, and create a Jira summary ticket."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The MailChimp campaign ID."
          steps:
            - name: get-campaign-stats
              type: call
              call: "mailchimp.get-campaign-report"
              with:
                campaign_id: "{{campaign_id}}"
            - name: get-ga-conversions
              type: call
              call: "ga.get-campaign-report"
              with:
                campaign_name: "{{get-campaign-stats.campaign_title}}"
            - name: create-results-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "MKT"
                issue_type: "Task"
                summary: "Email Campaign Results: {{get-campaign-stats.campaign_title}}"
                description: "Campaign: {{get-campaign-stats.campaign_title}}\nSent: {{get-campaign-stats.emails_sent}}\nOpen Rate: {{get-campaign-stats.open_rate}}%\nClick Rate: {{get-campaign-stats.click_rate}}%\nUnsubscribes: {{get-campaign-stats.unsubscribes}}\nGA Sessions: {{get-ga-conversions.sessions}}\nGA Conversions: {{get-ga-conversions.conversions}}\nRevenue: ${{get-ga-conversions.revenue}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: reports
          path: "/reports/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-report
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-campaign-report
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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

Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
  tags:
    - hr
    - identity
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-employee-offboarding-orchestrator
          description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Employee Offboarding Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: "0.5"
info:
  label: "Executive Dashboard Refresh Orchestrator"
  description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
  tags:
    - analytics
    - power-bi
    - business
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-executive-dashboard-refresh-orchestrator
          description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

When the ML fraud model flags a suspicious order, freezes the order in the orders API, creates a Salesforce case for the fraud team, sends an SMS alert to the customer via Twilio, and logs the event to Kafka.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert Pipeline"
  description: "When the ML fraud model flags a suspicious order, freezes the order in the orders API, creates a Salesforce case for the fraud team, sends an SMS alert to the customer via Twilio, and logs the event to Kafka."
  tags:
    - e-commerce
    - security
    - fraud-detection
    - salesforce
    - twilio
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: fraud-detection
      port: 8080
      tools:
        - name: process-fraud-alert
          description: "Given an order ID and fraud score, freeze the order, create a fraud case, alert the customer, and log the event."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The flagged order ID."
            - name: fraud_score
              in: body
              type: number
              description: "The ML fraud model confidence score (0-100)."
            - name: customer_phone
              in: body
              type: string
              description: "The customer phone number in E.164 format."
          steps:
            - name: freeze-order
              type: call
              call: "orders-api.freeze-order"
              with:
                order_id: "{{order_id}}"
                reason: "fraud_detection"
            - name: get-order
              type: call
              call: "orders-api.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-fraud-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Fraud Alert: Order {{order_id}} — Score {{fraud_score}}"
                description: "Order {{order_id}} flagged with fraud score {{fraud_score}}/100. Amount: ${{get-order.total_amount}}. Customer: {{get-order.customer_email}}. Order frozen pending review."
                priority: "High"
                type: "Fraud Investigation"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{customer_phone}}"
                body: "Wayfair Security: Your order {{order_id}} is under review. If you did not place this order, please call 1-866-263-8325 immediately."
            - name: log-fraud-event
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "fraud.alerts"
                key: "{{order_id}}"
                payload: "{\"order_id\":\"{{order_id}}\",\"fraud_score\":{{fraud_score}},\"amount\":\"{{get-order.total_amount}}\",\"case_id\":\"{{create-fraud-case.case_id}}\"}"
  consumes:
    - type: http
      namespace: orders-api
      baseUri: "https://orders-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.orders_api_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
        - name: order-actions
          path: "/orders/{{order_id}}/freeze"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: freeze-order
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wayfair.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: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Accounts/$secrets.twilio_account_sid/Messages.json"
          operations:
            - name: send-sms
              method: POST
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST

Retrieves real-time page view and session metrics from Google Analytics for a given product page URL. Used by merchandising and marketing teams to gauge product interest without accessing the GA console.

naftiko: "0.5"
info:
  label: "Google Analytics Page View Lookup"
  description: "Retrieves real-time page view and session metrics from Google Analytics for a given product page URL. Used by merchandising and marketing teams to gauge product interest without accessing the GA console."
  tags:
    - analytics
    - marketing
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-page-metrics
          description: "Given a product page path, return real-time page views, unique visitors, average session duration, and bounce rate from Google Analytics."
          inputParameters:
            - name: page_path
              in: body
              type: string
              description: "The relative URL path of the product page (e.g., /furniture/sofas/sku-12345)."
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD:YYYY-MM-DD format."
          call: "ga.get-report"
          with:
            page_path: "{{page_path}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: page_views
              type: number
              mapping: "$.reports[0].data.totals[0].values[0]"
            - name: unique_visitors
              type: number
              mapping: "$.reports[0].data.totals[0].values[1]"
            - name: avg_session_duration
              type: string
              mapping: "$.reports[0].data.totals[0].values[2]"
            - name: bounce_rate
              type: string
              mapping: "$.reports[0].data.totals[0].values[3]"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-report
              method: POST

Retrieves a file from Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive File Viewer"
  description: "Retrieves a file from Google Drive."
  tags:
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-google
          description: "Retrieves a file from Google Drive."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The google drive file viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.wayfair.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: google
          path: "/google/drive/file/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-google
              method: GET

Fetches the latest published container version from Google Tag Manager for a specified container ID. Returns version number, publish date, and tag count for marketing and analytics auditing.

naftiko: "0.5"
info:
  label: "Google Tag Manager Container Version"
  description: "Fetches the latest published container version from Google Tag Manager for a specified container ID. Returns version number, publish date, and tag count for marketing and analytics auditing."
  tags:
    - marketing
    - analytics
    - google-tag-manager
capability:
  exposes:
    - type: mcp
      namespace: tag-management
      port: 8080
      tools:
        - name: get-container-version
          description: "Retrieve the latest published GTM container version by container ID."
          inputParameters:
            - name: container_id
              in: body
              type: string
              description: "The GTM container ID (e.g., GTM-XXXX)."
          call: "gtm.get-version"
          with:
            container_id: "{{container_id}}"
          outputParameters:
            - name: version_number
              type: string
              mapping: "$.containerVersion.containerVersionId"
            - name: publish_date
              type: string
              mapping: "$.containerVersion.fingerprint"
            - name: tag_count
              type: number
              mapping: "$.containerVersion.tag.length"
  consumes:
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.google_gtm_token"
      resources:
        - name: containers
          path: "/accounts/wayfair/containers/{{container_id}}/versions:live"
          inputParameters:
            - name: container_id
              in: path
          operations:
            - name: get-version
              method: GET

When a Datadog alert fires, creates a ServiceNow incident, posts an alert to the Microsoft Teams on-call channel, and pages the on-call engineer via Twilio SMS.

naftiko: "0.5"
info:
  label: "Incident Response Orchestrator"
  description: "When a Datadog alert fires, creates a ServiceNow incident, posts an alert to the Microsoft Teams on-call channel, and pages the on-call engineer via Twilio SMS."
  tags:
    - operations
    - incident-response
    - datadog
    - servicenow
    - microsoft-teams
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: incident-response
      port: 8080
      tools:
        - name: trigger-incident-response
          description: "Given a Datadog alert ID and on-call engineer phone number, create a ServiceNow incident, alert the Teams channel, and send an SMS page."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert/monitor ID that triggered."
            - name: service_name
              in: body
              type: string
              description: "The affected service name."
            - name: oncall_phone
              in: body
              type: string
              description: "The on-call engineer phone number in E.164 format."
          steps:
            - name: get-alert
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "{{alert_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "P1 Alert: {{service_name}} — {{get-alert.name}}"
                description: "Datadog monitor {{alert_id}} triggered for {{service_name}}. Message: {{get-alert.message}}. Status: {{get-alert.overall_state}}"
                urgency: "1"
                category: "infrastructure"
                assigned_group: "SRE_OnCall"
            - name: alert-teams
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "sre-incidents"
                text: "INCIDENT: {{service_name}} | {{get-alert.name}} | ServiceNow: {{create-incident.number}} | Monitor: {{get-alert.overall_state}}"
            - name: page-oncall
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{oncall_phone}}"
                body: "P1 INCIDENT: {{service_name}} — {{get-alert.name}}. INC: {{create-incident.number}}. Respond immediately."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.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/wayfair-eng/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST
    - type: http
      namespace: twilio
      baseUri: "https://api.twilio.com/2010-04-01"
      authentication:
        type: basic
        username: "$secrets.twilio_account_sid"
        password: "$secrets.twilio_auth_token"
      resources:
        - name: messages
          path: "/Accounts/$secrets.twilio_account_sid/Messages.json"
          operations:
            - name: send-sms
              method: POST

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: "0.5"
info:
  label: "Infrastructure Capacity Planning Orchestrator"
  description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
  tags:
    - infrastructure
    - planning
    - finance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-infrastructure-capacity-planning-orchestrator
          description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Pulls AWS cost data from CloudWatch, correlates with service ownership in ServiceNow CMDB, generates a cost breakdown by team, and shares the report via Microsoft Teams and Google Drive.

naftiko: "0.5"
info:
  label: "Infrastructure Cost Report Pipeline"
  description: "Pulls AWS cost data from CloudWatch, correlates with service ownership in ServiceNow CMDB, generates a cost breakdown by team, and shares the report via Microsoft Teams and Google Drive."
  tags:
    - operations
    - finops
    - cloudwatch
    - servicenow
    - microsoft-teams
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: infra-cost
      port: 8080
      tools:
        - name: generate-cost-report
          description: "Given a date range, pull AWS cost metrics, correlate with CMDB service owners, generate team-level cost breakdown, and distribute the report."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Report start date (YYYY-MM-DD)."
            - name: end_date
              in: body
              type: string
              description: "Report end date (YYYY-MM-DD)."
          steps:
            - name: get-cost-data
              type: call
              call: "aws-cost.get-cost-report"
              with:
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-service-owners
              type: call
              call: "servicenow.get-cmdb-services"
              with:
                query: "operational_status=operational"
            - name: create-report
              type: call
              call: "gdrive.create-spreadsheet"
              with:
                title: "AWS Cost Report {{start_date}} to {{end_date}}"
                folder_id: "finops_reports"
                data: "{{get-cost-data.cost_by_service}}"
            - name: notify-leadership
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "platform-finops"
                text: "AWS Cost Report ({{start_date}} to {{end_date}}): Total spend ${{get-cost-data.total_cost}}. Top service: {{get-cost-data.top_service}} (${{get-cost-data.top_service_cost}}). Report: {{create-report.url}}"
  consumes:
    - type: http
      namespace: aws-cost
      baseUri: "https://ce.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_session_token"
      resources:
        - name: cost-reports
          path: "/"
          operations:
            - name: get-cost-report
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci_service"
          operations:
            - name: get-cmdb-services
              method: GET
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-spreadsheet
              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/wayfair-platform/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When inventory for a product drops below the reorder threshold, fetches supplier lead times, creates a purchase order in the procurement system, publishes a reorder event to Kafka, and notifies the supply chain team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Inventory Reorder Orchestrator"
  description: "When inventory for a product drops below the reorder threshold, fetches supplier lead times, creates a purchase order in the procurement system, publishes a reorder event to Kafka, and notifies the supply chain team in Microsoft Teams."
  tags:
    - supply-chain
    - inventory-management
    - logistics
    - apache-kafka
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: inventory-reorder
      port: 8080
      tools:
        - name: trigger-reorder
          description: "Given a SKU and current stock level, check the reorder threshold, fetch supplier lead time, create a purchase order, publish the event, and notify the team."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU that is low on inventory."
            - name: current_stock
              in: body
              type: number
              description: "The current inventory quantity."
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse ID where stock is low."
          steps:
            - name: get-product-details
              type: call
              call: "catalog-api.get-product"
              with:
                sku: "{{sku}}"
            - name: get-supplier-lead-time
              type: call
              call: "supplier-api.get-lead-time"
              with:
                supplier_id: "{{get-product-details.supplier_id}}"
                sku: "{{sku}}"
            - name: create-purchase-order
              type: call
              call: "procurement-api.create-po"
              with:
                supplier_id: "{{get-product-details.supplier_id}}"
                sku: "{{sku}}"
                quantity: "{{get-product-details.reorder_quantity}}"
                warehouse_id: "{{warehouse_id}}"
            - name: publish-reorder-event
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "inventory.reorder.created"
                key: "{{sku}}"
                payload: "{\"sku\":\"{{sku}}\",\"po_number\":\"{{create-purchase-order.po_number}}\",\"quantity\":\"{{get-product-details.reorder_quantity}}\",\"eta_days\":{{get-supplier-lead-time.lead_days}}}"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "supply-chain-ops"
                text: "Reorder Triggered: {{get-product-details.product_name}} ({{sku}}) | Current Stock: {{current_stock}} | PO: {{create-purchase-order.po_number}} | Qty: {{get-product-details.reorder_quantity}} | ETA: {{get-supplier-lead-time.lead_days}} days"
  consumes:
    - type: http
      namespace: catalog-api
      baseUri: "https://catalog-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.catalog_api_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: supplier-api
      baseUri: "https://supplier-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.supplier_api_token"
      resources:
        - name: lead-times
          path: "/suppliers/{{supplier_id}}/lead-times/{{sku}}"
          inputParameters:
            - name: supplier_id
              in: path
            - name: sku
              in: path
          operations:
            - name: get-lead-time
              method: GET
    - type: http
      namespace: procurement-api
      baseUri: "https://procurement-api.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_api_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders"
          operations:
            - name: create-po
              method: POST
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/wayfair-supply/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: "0.5"
info:
  label: "IT Change Management Orchestrator"
  description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
  tags:
    - it
    - servicenow
    - operations
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: run-it-change-management-orchestrator
          description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed IT Change Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a Jira issue by key and returns summary, status, assignee, priority, and sprint information. Used across engineering and product teams for quick status checks.

naftiko: "0.5"
info:
  label: "Jira Ticket Lookup"
  description: "Retrieves a Jira issue by key and returns summary, status, assignee, priority, and sprint information. Used across engineering and product teams for quick status checks."
  tags:
    - engineering
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key. Returns summary, status, assignee, priority, and current sprint name."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g., STOR-1234, SHIP-567)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: priority
              type: string
              mapping: "$.fields.priority.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://wayfair.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Retrieves a Jira ticket by issue key.

naftiko: "0.5"
info:
  label: "Jira Ticket Viewer"
  description: "Retrieves a Jira ticket by issue key."
  tags:
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-jira
          description: "Retrieves a Jira ticket by issue key."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The jira ticket viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.wayfair.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: jira
          path: "/jira/ticket/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-jira
              method: GET

Checks Apache Kafka consumer group lag for a specified topic, evaluates against thresholds, creates a Datadog alert annotation, and posts a warning to the Microsoft Teams engineering channel when lag exceeds limits.

naftiko: "0.5"
info:
  label: "Kafka Consumer Lag Monitor"
  description: "Checks Apache Kafka consumer group lag for a specified topic, evaluates against thresholds, creates a Datadog alert annotation, and posts a warning to the Microsoft Teams engineering channel when lag exceeds limits."
  tags:
    - engineering
    - monitoring
    - apache-kafka
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: kafka-monitoring
      port: 8080
      tools:
        - name: check-consumer-lag
          description: "Given a Kafka topic and consumer group, check current lag, evaluate thresholds, annotate Datadog, and alert the team if lag is excessive."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "The Kafka topic name."
            - name: consumer_group
              in: body
              type: string
              description: "The consumer group ID."
            - name: lag_threshold
              in: body
              type: number
              description: "The maximum acceptable lag in messages."
          steps:
            - name: get-lag
              type: call
              call: "kafka-admin.get-consumer-lag"
              with:
                topic: "{{topic}}"
                group: "{{consumer_group}}"
            - name: annotate-datadog
              type: call
              call: "datadog.create-event"
              with:
                title: "Kafka Lag Check: {{topic}}/{{consumer_group}}"
                text: "Current lag: {{get-lag.total_lag}} messages. Threshold: {{lag_threshold}}."
                tags: "kafka:{{topic}},consumer_group:{{consumer_group}}"
            - name: alert-team
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "platform-alerts"
                text: "Kafka Lag Warning: {{topic}} / {{consumer_group}} | Current Lag: {{get-lag.total_lag}} | Threshold: {{lag_threshold}} | Partitions Behind: {{get-lag.partitions_behind}}"
  consumes:
    - type: http
      namespace: kafka-admin
      baseUri: "https://kafka-admin.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kafka_admin_token"
      resources:
        - name: consumer-lag
          path: "/topics/{{topic}}/consumers/{{group}}/lag"
          inputParameters:
            - name: topic
              in: path
            - name: group
              in: path
          operations:
            - name: get-consumer-lag
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/wayfair-eng/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: "0.5"
info:
  label: "Knowledge Base Refresh Orchestrator"
  description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
  tags:
    - knowledge-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: knowledge-management
      port: 8080
      tools:
        - name: run-knowledge-base-refresh-orchestrator
          description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Knowledge Base Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Fetches pending deliveries from the warehouse API, calculates optimal delivery routes using Google Maps, assigns drivers, publishes route events to Kafka, and notifies the logistics team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Last-Mile Delivery Optimization"
  description: "Fetches pending deliveries from the warehouse API, calculates optimal delivery routes using Google Maps, assigns drivers, publishes route events to Kafka, and notifies the logistics team in Microsoft Teams."
  tags:
    - logistics
    - delivery
    - google-maps
    - apache-kafka
    - microsoft-teams
    - optimization
capability:
  exposes:
    - type: mcp
      namespace: delivery-routing
      port: 8080
      tools:
        - name: optimize-delivery-routes
          description: "Given a warehouse ID and delivery date, fetch pending deliveries, calculate optimal routes, assign drivers, and publish the route plan."
          inputParameters:
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse facility ID."
            - name: delivery_date
              in: body
              type: string
              description: "The target delivery date (YYYY-MM-DD)."
          steps:
            - name: get-pending-deliveries
              type: call
              call: "warehouse-api.get-pending-deliveries"
              with:
                warehouse_id: "{{warehouse_id}}"
                date: "{{delivery_date}}"
            - name: calculate-routes
              type: call
              call: "google-maps.optimize-routes"
              with:
                origin: "{{get-pending-deliveries.warehouse_address}}"
                waypoints: "{{get-pending-deliveries.delivery_addresses}}"
                optimize_waypoints: "true"
            - name: publish-route-plan
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "delivery.routes.planned"
                key: "{{warehouse_id}}_{{delivery_date}}"
                payload: "{\"warehouse_id\":\"{{warehouse_id}}\",\"date\":\"{{delivery_date}}\",\"total_deliveries\":{{get-pending-deliveries.count}},\"total_distance_km\":{{calculate-routes.total_distance}},\"estimated_hours\":{{calculate-routes.total_duration_hours}}}"
            - name: notify-logistics
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "logistics-dispatch"
                text: "Route Plan Ready: Warehouse {{warehouse_id}} | Date: {{delivery_date}} | Deliveries: {{get-pending-deliveries.count}} | Routes: {{calculate-routes.route_count}} | Distance: {{calculate-routes.total_distance}} km | ETA: {{calculate-routes.total_duration_hours}}h"
  consumes:
    - type: http
      namespace: warehouse-api
      baseUri: "https://warehouse-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.warehouse_api_token"
      resources:
        - name: deliveries
          path: "/warehouses/{{warehouse_id}}/deliveries/pending"
          inputParameters:
            - name: warehouse_id
              in: path
          operations:
            - name: get-pending-deliveries
              method: GET
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: bearer
        token: "$secrets.google_maps_key"
      resources:
        - name: directions
          path: "/directions/json"
          operations:
            - name: optimize-routes
              method: GET
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/wayfair-logistics/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Launches a marketing campaign by creating an audience segment in MailChimp, scheduling social posts to Facebook and Instagram, setting up Google Analytics campaign tracking, and notifying the marketing team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Marketing Campaign Launch Orchestrator"
  description: "Launches a marketing campaign by creating an audience segment in MailChimp, scheduling social posts to Facebook and Instagram, setting up Google Analytics campaign tracking, and notifying the marketing team in Microsoft Teams."
  tags:
    - marketing
    - campaigns
    - mailchimp
    - facebook
    - instagram
    - google-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: campaign-launch
      port: 8080
      tools:
        - name: launch-campaign
          description: "Given campaign details, create a MailChimp segment, schedule social posts, configure GA tracking, and notify the marketing team."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The marketing campaign name."
            - name: audience_criteria
              in: body
              type: string
              description: "The audience targeting criteria for segmentation."
            - name: launch_date
              in: body
              type: string
              description: "Campaign launch date in YYYY-MM-DD format."
            - name: creative_url
              in: body
              type: string
              description: "URL to the campaign creative asset."
          steps:
            - name: create-segment
              type: call
              call: "mailchimp.create-segment"
              with:
                list_id: "wayfair_main"
                name: "{{campaign_name}}_{{launch_date}}"
                criteria: "{{audience_criteria}}"
            - name: schedule-facebook
              type: call
              call: "facebook.create-post"
              with:
                page_id: "wayfair"
                message: "{{campaign_name}}"
                link: "https://www.wayfair.com/promo/{{campaign_name}}"
                scheduled_publish_time: "{{launch_date}}T12:00:00Z"
            - name: schedule-instagram
              type: call
              call: "instagram.create-media"
              with:
                image_url: "{{creative_url}}"
                caption: "{{campaign_name}} — Shop now at wayfair.com"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "marketing-campaigns"
                text: "Campaign Launched: {{campaign_name}} | Segment: {{create-segment.segment_id}} ({{create-segment.member_count}} members) | Facebook: {{schedule-facebook.post_id}} | Launch: {{launch_date}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: segments
          path: "/lists/{{list_id}}/segments"
          inputParameters:
            - name: list_id
              in: path
          operations:
            - name: create-segment
              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: "/{{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: "/wayfair_ig/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/wayfair-marketing/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Orchestrator"
  description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
  tags:
    - marketing
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: run-marketing-campaign-performance-orchestrator
          description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Marketing Campaign Performance Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Sends a message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Message Sender"
  description: "Sends a message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-microsoft
          description: "Sends a message to a Microsoft Teams channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The microsoft teams message sender identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.wayfair.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: microsoft
          path: "/microsoft/teams/message/sender/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-microsoft
              method: GET

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions access via Azure Active Directory, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions access via Azure Active Directory, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - azure-active-directory
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: onboard-new-hire
          description: "Given a Workday employee ID, create a ServiceNow onboarding ticket, provision Azure AD access, and send a Teams welcome message."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date (YYYY-MM-DD)."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
            - name: provision-aad
              type: call
              call: "azure-ad.create-user"
              with:
                display_name: "{{get-employee.full_name}}"
                mail: "{{get-employee.work_email}}"
                department: "{{department}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Wayfair, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. You can log in at https://myapps.wayfair.com with your new credentials."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.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: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a new order is placed, validates inventory via the warehouse API, creates a shipment record, triggers a Kafka shipping event, and sends an order confirmation email through MailChimp.

naftiko: "0.5"
info:
  label: "Order Fulfillment Orchestrator"
  description: "When a new order is placed, validates inventory via the warehouse API, creates a shipment record, triggers a Kafka shipping event, and sends an order confirmation email through MailChimp."
  tags:
    - e-commerce
    - fulfillment
    - logistics
    - apache-kafka
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: process-new-order
          description: "Given an order ID and customer email, validate inventory, create a shipment, publish a shipping event to Kafka, and send an order confirmation email."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Wayfair order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address for confirmation."
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse ID for fulfillment."
          steps:
            - name: check-inventory
              type: call
              call: "warehouse-api.check-inventory"
              with:
                order_id: "{{order_id}}"
                warehouse_id: "{{warehouse_id}}"
            - name: create-shipment
              type: call
              call: "warehouse-api.create-shipment"
              with:
                order_id: "{{order_id}}"
                warehouse_id: "{{warehouse_id}}"
                items: "{{check-inventory.available_items}}"
            - name: publish-shipping-event
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "order.shipping.created"
                key: "{{order_id}}"
                payload: "{\"order_id\":\"{{order_id}}\",\"shipment_id\":\"{{create-shipment.shipment_id}}\",\"tracking_number\":\"{{create-shipment.tracking_number}}\"}"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "order-confirmation"
                email: "{{customer_email}}"
                merge_vars: "{\"ORDER_ID\":\"{{order_id}}\",\"TRACKING\":\"{{create-shipment.tracking_number}}\"}"
  consumes:
    - type: http
      namespace: warehouse-api
      baseUri: "https://warehouse-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.warehouse_api_token"
      resources:
        - name: inventory
          path: "/orders/{{order_id}}/inventory-check"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: check-inventory
              method: POST
        - name: shipments
          path: "/shipments"
          operations:
            - name: create-shipment
              method: POST
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Fetches a customer's browsing history, runs the TensorFlow recommendation model, updates the personalization cache in Redis, and logs the recommendation event to Kafka for analytics.

naftiko: "0.5"
info:
  label: "Personalized Recommendation Pipeline"
  description: "Fetches a customer's browsing history, runs the TensorFlow recommendation model, updates the personalization cache in Redis, and logs the recommendation event to Kafka for analytics."
  tags:
    - e-commerce
    - personalization
    - machine-learning
    - tensorflow
    - redis
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: recommendations
      port: 8080
      tools:
        - name: generate-recommendations
          description: "Given a customer ID, fetch browsing history, generate ML recommendations, update the Redis personalization cache, and publish a recommendation event to Kafka."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Wayfair customer ID."
            - name: page_context
              in: body
              type: string
              description: "The current page context (e.g., homepage, category, pdp)."
            - name: num_recommendations
              in: body
              type: number
              description: "Number of product recommendations to generate."
          steps:
            - name: get-browsing-history
              type: call
              call: "customer-api.get-browsing-history"
              with:
                customer_id: "{{customer_id}}"
                limit: "50"
            - name: run-model
              type: call
              call: "ml-reco.predict"
              with:
                customer_id: "{{customer_id}}"
                browsing_history: "{{get-browsing-history.viewed_skus}}"
                context: "{{page_context}}"
                count: "{{num_recommendations}}"
            - name: cache-results
              type: call
              call: "redis-api.set-key"
              with:
                cache_key: "reco:{{customer_id}}:{{page_context}}"
                value: "{{run-model.recommended_skus}}"
                ttl: "3600"
            - name: publish-event
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "recommendations.generated"
                key: "{{customer_id}}"
                payload: "{\"customer_id\":\"{{customer_id}}\",\"context\":\"{{page_context}}\",\"model_version\":\"{{run-model.model_version}}\",\"sku_count\":{{num_recommendations}}}"
  consumes:
    - type: http
      namespace: customer-api
      baseUri: "https://customer-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.customer_api_token"
      resources:
        - name: browsing-history
          path: "/customers/{{customer_id}}/browsing-history"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-browsing-history
              method: GET
    - type: http
      namespace: ml-reco
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: recommendations
          path: "/models/product-reco/predict"
          operations:
            - name: predict
              method: POST
    - type: http
      namespace: redis-api
      baseUri: "https://redis-gateway.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_gateway_token"
      resources:
        - name: keys
          path: "/keys/{{cache_key}}"
          inputParameters:
            - name: cache_key
              in: path
          operations:
            - name: set-key
              method: PUT
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST

Queries the Wayfair supplier management PostgreSQL database for a supplier record by supplier ID. Returns company name, onboarding status, payment terms, and primary contact.

naftiko: "0.5"
info:
  label: "PostgreSQL Supplier Record Lookup"
  description: "Queries the Wayfair supplier management PostgreSQL database for a supplier record by supplier ID. Returns company name, onboarding status, payment terms, and primary contact."
  tags:
    - supply-chain
    - supplier-management
    - postgresql
capability:
  exposes:
    - type: mcp
      namespace: supplier-data
      port: 8080
      tools:
        - name: get-supplier
          description: "Look up a supplier by ID from the supplier management database. Returns company name, status, payment terms, and contact info."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The internal Wayfair supplier ID."
          call: "supplier-db.get-supplier"
          with:
            supplier_id: "{{supplier_id}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.supplier.company_name"
            - name: onboarding_status
              type: string
              mapping: "$.supplier.status"
            - name: payment_terms
              type: string
              mapping: "$.supplier.payment_terms"
            - name: primary_contact_email
              type: string
              mapping: "$.supplier.primary_contact.email"
  consumes:
    - type: http
      namespace: supplier-db
      baseUri: "https://supplier-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.supplier_api_token"
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET

Triggers a Power BI dataset refresh.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresher"
  description: "Triggers a Power BI dataset refresh."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-power
          description: "Triggers a Power BI dataset refresh."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The power bi dashboard refresher identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.wayfair.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: power
          path: "/power/bi/dashboard/refresher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-power
              method: GET

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: "0.5"
info:
  label: "Procurement Spend Analysis Orchestrator"
  description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
  tags:
    - procurement
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-procurement-spend-analysis-orchestrator
          description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Procurement Spend Analysis Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Enriches a product listing by fetching supplier catalog data, generating SEO-optimized descriptions via the ML service, updating the Elasticsearch index, and invalidating the Cloudflare cache for the product page.

naftiko: "0.5"
info:
  label: "Product Listing Enrichment Pipeline"
  description: "Enriches a product listing by fetching supplier catalog data, generating SEO-optimized descriptions via the ML service, updating the Elasticsearch index, and invalidating the Cloudflare cache for the product page."
  tags:
    - e-commerce
    - product-management
    - elasticsearch
    - cloudflare
    - machine-learning
capability:
  exposes:
    - type: mcp
      namespace: catalog-enrichment
      port: 8080
      tools:
        - name: enrich-product-listing
          description: "Given a SKU and supplier ID, fetch supplier catalog data, generate an ML-enhanced description, update the search index, and purge the CDN cache."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The Wayfair product SKU."
            - name: supplier_id
              in: body
              type: string
              description: "The supplier ID for catalog data retrieval."
          steps:
            - name: get-supplier-catalog
              type: call
              call: "supplier-api.get-product-details"
              with:
                supplier_id: "{{supplier_id}}"
                sku: "{{sku}}"
            - name: generate-description
              type: call
              call: "ml-service.generate-product-description"
              with:
                product_title: "{{get-supplier-catalog.product_title}}"
                attributes: "{{get-supplier-catalog.attributes}}"
                category: "{{get-supplier-catalog.category}}"
            - name: update-search-index
              type: call
              call: "es.index-product"
              with:
                sku: "{{sku}}"
                title: "{{get-supplier-catalog.product_title}}"
                description: "{{generate-description.optimized_description}}"
                category: "{{get-supplier-catalog.category}}"
                price: "{{get-supplier-catalog.wholesale_price}}"
            - name: purge-cdn-cache
              type: call
              call: "cloudflare.purge-url"
              with:
                url: "https://www.wayfair.com/product/{{sku}}"
  consumes:
    - type: http
      namespace: supplier-api
      baseUri: "https://supplier-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.supplier_api_token"
      resources:
        - name: product-details
          path: "/suppliers/{{supplier_id}}/products/{{sku}}"
          inputParameters:
            - name: supplier_id
              in: path
            - name: sku
              in: path
          operations:
            - name: get-product-details
              method: GET
    - type: http
      namespace: ml-service
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: descriptions
          path: "/product-descriptions/generate"
          operations:
            - name: generate-product-description
              method: POST
    - type: http
      namespace: es
      baseUri: "https://es-prod.wayfair.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: products
          path: "/products/_doc/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: index-product
              method: PUT
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: purge
          path: "/zones/$secrets.cloudflare_zone_id/purge_cache"
          operations:
            - name: purge-url
              method: POST

Collects product reviews from the reviews API, runs NLP topic extraction to identify common themes, updates the product search index with review sentiment, and creates a Jira ticket for products with declining ratings.

naftiko: "0.5"
info:
  label: "Product Review Aggregation Pipeline"
  description: "Collects product reviews from the reviews API, runs NLP topic extraction to identify common themes, updates the product search index with review sentiment, and creates a Jira ticket for products with declining ratings."
  tags:
    - e-commerce
    - customer-experience
    - reviews
    - elasticsearch
    - jira
    - nlp
capability:
  exposes:
    - type: mcp
      namespace: review-analysis
      port: 8080
      tools:
        - name: analyze-product-reviews
          description: "Given a SKU, aggregate recent reviews, extract common themes, update the search index with sentiment data, and flag declining products."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to analyze."
            - name: review_period_days
              in: body
              type: number
              description: "Number of days of reviews to analyze."
          steps:
            - name: get-reviews
              type: call
              call: "reviews-api.get-product-reviews"
              with:
                sku: "{{sku}}"
                days: "{{review_period_days}}"
            - name: extract-themes
              type: call
              call: "ml-nlp.extract-topics"
              with:
                texts: "{{get-reviews.review_texts}}"
                max_topics: "5"
            - name: update-search-index
              type: call
              call: "es.update-product-sentiment"
              with:
                sku: "{{sku}}"
                avg_rating: "{{get-reviews.average_rating}}"
                review_count: "{{get-reviews.total_count}}"
                top_themes: "{{extract-themes.topics}}"
                sentiment_score: "{{extract-themes.overall_sentiment}}"
            - name: flag-declining-product
              type: call
              call: "jira.create-issue"
              with:
                project: "MERCH"
                issue_type: "Bug"
                summary: "Review Alert: {{sku}} — Avg Rating {{get-reviews.average_rating}}/5 ({{get-reviews.total_count}} reviews)"
                description: "Product {{sku}} has an average rating of {{get-reviews.average_rating}}/5 over the last {{review_period_days}} days.\nTop themes: {{extract-themes.topics}}\nSentiment: {{extract-themes.overall_sentiment}}\nReview count: {{get-reviews.total_count}}"
  consumes:
    - type: http
      namespace: reviews-api
      baseUri: "https://reviews-api.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.reviews_api_token"
      resources:
        - name: reviews
          path: "/products/{{sku}}/reviews"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product-reviews
              method: GET
    - type: http
      namespace: ml-nlp
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: topics
          path: "/models/topic-extraction/predict"
          operations:
            - name: extract-topics
              method: POST
    - type: http
      namespace: es
      baseUri: "https://es-prod.wayfair.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: products
          path: "/products/_update/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-product-sentiment
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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

Retrieves review summary for a product.

naftiko: "0.5"
info:
  label: "Product Review Summary"
  description: "Retrieves review summary for a product."
  tags:
    - e-commerce
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: get-product
          description: "Retrieves review summary for a product."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The product review summary identifier."
          call: "e-commerce-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-commerce-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: product
          path: "/product/review/summary/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-product
              method: GET

Retrieves product search results by query.

naftiko: "0.5"
info:
  label: "Product Search Results"
  description: "Retrieves product search results by query."
  tags:
    - e-commerce
    - product-management
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: get-product
          description: "Retrieves product search results by query."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The product search results identifier."
          call: "e-commerce-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-commerce-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: product
          path: "/product/search/results/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-product
              method: GET

Executes an instant PromQL query against the Wayfair Prometheus instance. Returns the current value and label set for a given metric expression. Used by SRE for ad-hoc metric checks.

naftiko: "0.5"
info:
  label: "Prometheus Metric Query"
  description: "Executes an instant PromQL query against the Wayfair Prometheus instance. Returns the current value and label set for a given metric expression. Used by SRE for ad-hoc metric checks."
  tags:
    - operations
    - monitoring
    - prometheus
capability:
  exposes:
    - type: mcp
      namespace: metrics-query
      port: 8080
      tools:
        - name: query-metric
          description: "Run an instant PromQL query and return the current metric value and labels."
          inputParameters:
            - name: promql_expression
              in: body
              type: string
              description: "The PromQL expression to evaluate (e.g., rate(http_requests_total{service='checkout'}[5m]))."
          call: "prometheus.instant-query"
          with:
            promql_expression: "{{promql_expression}}"
          outputParameters:
            - name: result_type
              type: string
              mapping: "$.data.resultType"
            - name: results
              type: array
              mapping: "$.data.result"
  consumes:
    - type: http
      namespace: prometheus
      baseUri: "https://prometheus.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.prometheus_token"
      resources:
        - name: queries
          path: "/query"
          operations:
            - name: instant-query
              method: POST

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Orchestrator"
  description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
  tags:
    - analytics
    - business
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-quarterly-business-review-orchestrator
          description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Quarterly Business Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Fetches a value from a specified Redis key in the Wayfair caching layer. Used by engineering teams to inspect cached product data, session state, or feature flags without direct Redis CLI access.

naftiko: "0.5"
info:
  label: "Redis Cache Key Lookup"
  description: "Fetches a value from a specified Redis key in the Wayfair caching layer. Used by engineering teams to inspect cached product data, session state, or feature flags without direct Redis CLI access."
  tags:
    - engineering
    - caching
    - redis
capability:
  exposes:
    - type: mcp
      namespace: cache-ops
      port: 8080
      tools:
        - name: get-cache-key
          description: "Retrieve the value stored at a given Redis cache key."
          inputParameters:
            - name: cache_key
              in: body
              type: string
              description: "The Redis key to look up (e.g., product:sku:12345, session:abc)."
          call: "redis-api.get-key"
          with:
            cache_key: "{{cache_key}}"
          outputParameters:
            - name: value
              type: string
              mapping: "$.value"
            - name: ttl_seconds
              type: number
              mapping: "$.ttl"
  consumes:
    - type: http
      namespace: redis-api
      baseUri: "https://redis-gateway.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_gateway_token"
      resources:
        - name: keys
          path: "/keys/{{cache_key}}"
          inputParameters:
            - name: cache_key
              in: path
          operations:
            - name: get-key
              method: GET

Takes a customer's room dimensions and selected products, generates a 3D room layout via the Unity rendering service, stores the scene in S3, and sends the visualization link to the customer via email.

naftiko: "0.5"
info:
  label: "Room Planner 3D Scene Pipeline"
  description: "Takes a customer's room dimensions and selected products, generates a 3D room layout via the Unity rendering service, stores the scene in S3, and sends the visualization link to the customer via email."
  tags:
    - e-commerce
    - 3d
    - personalization
    - unity
    - amazon-s3
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: room-planner
      port: 8080
      tools:
        - name: generate-room-visualization
          description: "Given room dimensions, selected SKUs, and customer email, render a 3D room scene, store it in S3, and email the visualization link."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: room_dimensions
              in: body
              type: string
              description: "Room dimensions as JSON (width, length, height in feet)."
            - name: selected_skus
              in: body
              type: string
              description: "Comma-separated list of product SKUs to place in the room."
          steps:
            - name: render-scene
              type: call
              call: "unity-render.create-room-scene"
              with:
                dimensions: "{{room_dimensions}}"
                product_skus: "{{selected_skus}}"
                output_format: "webgl"
            - name: upload-to-s3
              type: call
              call: "s3-api.upload-object"
              with:
                bucket: "wayfair-room-planner"
                key: "scenes/{{render-scene.scene_id}}/index.html"
                content_url: "{{render-scene.output_url}}"
            - name: send-visualization-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "room-planner-result"
                email: "{{customer_email}}"
                merge_vars: "{\"SCENE_URL\":\"https://roomplanner.wayfair.com/scenes/{{render-scene.scene_id}}\",\"PRODUCT_COUNT\":\"{{render-scene.product_count}}\"}"
  consumes:
    - type: http
      namespace: unity-render
      baseUri: "https://render-service.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.render_service_token"
      resources:
        - name: scenes
          path: "/scenes"
          operations:
            - name: create-room-scene
              method: POST
    - type: http
      namespace: s3-api
      baseUri: "https://s3-gateway.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.aws_session_token"
      resources:
        - name: objects
          path: "/upload/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: upload-object
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Triggers a SailPoint access review campaign for a department, fetches the review results, creates a ServiceNow task for access revocations, and notifies the compliance team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "SailPoint Access Review Pipeline"
  description: "Triggers a SailPoint access review campaign for a department, fetches the review results, creates a ServiceNow task for access revocations, and notifies the compliance team in Microsoft Teams."
  tags:
    - security
    - compliance
    - sailpoint
    - servicenow
    - microsoft-teams
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: run-access-review
          description: "Given a department name, trigger a SailPoint access certification campaign, process results, create revocation tasks, and notify compliance."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to review (e.g., Engineering, Finance)."
            - name: campaign_name
              in: body
              type: string
              description: "The name for the access review campaign."
          steps:
            - name: create-campaign
              type: call
              call: "sailpoint.create-certification"
              with:
                name: "{{campaign_name}}"
                department: "{{department}}"
            - name: get-results
              type: call
              call: "sailpoint.get-certification-results"
              with:
                campaign_id: "{{create-campaign.campaign_id}}"
            - name: create-revocation-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Access Revocation: {{department}} — {{get-results.revocations_count}} entitlements"
                description: "SailPoint campaign {{campaign_name}} completed. Total reviewed: {{get-results.total_reviewed}}. Approved: {{get-results.approved_count}}. Revocations needed: {{get-results.revocations_count}}."
                assigned_group: "IT_Security"
                category: "access_management"
            - name: notify-compliance
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "compliance-reviews"
                text: "Access Review Complete: {{department}} | Reviewed: {{get-results.total_reviewed}} | Approved: {{get-results.approved_count}} | Revocations: {{get-results.revocations_count}} | ServiceNow: {{create-revocation-task.number}}"
  consumes:
    - type: http
      namespace: sailpoint
      baseUri: "https://wayfair.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: certifications
          path: "/certifications"
          operations:
            - name: create-certification
              method: POST
        - name: certification-results
          path: "/certifications/{{campaign_id}}/decisions"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-certification-results
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/wayfair-compliance/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Looks up a Salesforce account record by account ID and returns company name, account owner, annual revenue, and open opportunity count. Used by sales and supplier partnership teams.

naftiko: "0.5"
info:
  label: "Salesforce Account Lookup"
  description: "Looks up a Salesforce account record by account ID and returns company name, account owner, annual revenue, and open opportunity count. Used by sales and supplier partnership teams."
  tags:
    - sales
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-accounts
      port: 8080
      tools:
        - name: get-account
          description: "Look up a Salesforce account by ID. Returns company name, owner, annual revenue, industry, and open opportunity count."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account record ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.Name"
            - name: owner
              type: string
              mapping: "$.Owner.Name"
            - name: annual_revenue
              type: number
              mapping: "$.AnnualRevenue"
            - name: industry
              type: string
              mapping: "$.Industry"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wayfair.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves a Salesforce account by account ID.

naftiko: "0.5"
info:
  label: "Salesforce Account Viewer"
  description: "Retrieves a Salesforce account by account ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-salesforce
          description: "Retrieves a Salesforce account by account ID."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The salesforce account viewer identifier."
          call: "sales-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: sales-api
      baseUri: "https://api.wayfair.com/sales/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: salesforce
          path: "/salesforce/account/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-salesforce
              method: GET

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: "0.5"
info:
  label: "Security Audit Orchestrator"
  description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
  tags:
    - security
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: run-security-audit-orchestrator
          description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Security Audit Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Fetches page performance data from Google Analytics, crawl status from Google Tag Manager, search ranking from the SEO API, and compiles findings into a Jira ticket for the content team.

naftiko: "0.5"
info:
  label: "SEO Content Audit Pipeline"
  description: "Fetches page performance data from Google Analytics, crawl status from Google Tag Manager, search ranking from the SEO API, and compiles findings into a Jira ticket for the content team."
  tags:
    - marketing
    - search-engine-optimization
    - google-analytics
    - google-tag-manager
    - jira
capability:
  exposes:
    - type: mcp
      namespace: seo-audit
      port: 8080
      tools:
        - name: audit-page-seo
          description: "Given a page URL, pull GA performance data, GTM tag status, search rankings, and create a Jira ticket with the audit findings."
          inputParameters:
            - name: page_url
              in: body
              type: string
              description: "The full URL of the page to audit."
            - name: target_keyword
              in: body
              type: string
              description: "The primary keyword to check ranking for."
          steps:
            - name: get-ga-data
              type: call
              call: "ga.get-page-report"
              with:
                page_path: "{{page_url}}"
                metrics: "pageviews,bounceRate,avgSessionDuration"
            - name: get-gtm-status
              type: call
              call: "gtm.get-tag-status"
              with:
                page_url: "{{page_url}}"
            - name: get-rankings
              type: call
              call: "seo-api.get-ranking"
              with:
                url: "{{page_url}}"
                keyword: "{{target_keyword}}"
            - name: create-audit-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEO"
                issue_type: "Task"
                summary: "SEO Audit: {{page_url}} — Rank #{{get-rankings.position}} for '{{target_keyword}}'"
                description: "Page Views: {{get-ga-data.pageviews}} | Bounce Rate: {{get-ga-data.bounce_rate}}% | Avg Duration: {{get-ga-data.avg_duration}}s | GTM Tags: {{get-gtm-status.tag_count}} active | Current Rank: #{{get-rankings.position}} for '{{target_keyword}}'"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-page-report
              method: POST
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.google_gtm_token"
      resources:
        - name: tags
          path: "/accounts/wayfair/containers/tags"
          operations:
            - name: get-tag-status
              method: GET
    - type: http
      namespace: seo-api
      baseUri: "https://seo-api.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.seo_api_token"
      resources:
        - name: rankings
          path: "/rankings"
          operations:
            - name: get-ranking
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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

Creates a new incident in ServiceNow.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Creator"
  description: "Creates a new incident in ServiceNow."
  tags:
    - it
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: get-servicenow
          description: "Creates a new incident in ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The servicenow incident creator identifier."
          call: "it-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: it-api
      baseUri: "https://api.wayfair.com/it/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: servicenow
          path: "/servicenow/incident/creator/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-servicenow
              method: GET

Retrieves a ServiceNow incident by number and returns short description, state, priority, assigned group, and resolution notes. Used by IT support and engineering on-call.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns short description, state, priority, assigned group, and resolution notes. Used by IT support and engineering on-call."
  tags:
    - operations
    - support
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-service
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number. Returns description, state, priority, assigned group, and resolution notes."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: short_description
              type: string
              mapping: "$.result.short_description"
            - 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"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.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: path
          operations:
            - name: get-incident
              method: GET

Retrieves contents of a shopping cart.

naftiko: "0.5"
info:
  label: "Shopping Cart Contents"
  description: "Retrieves contents of a shopping cart."
  tags:
    - e-commerce
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: get-shopping
          description: "Retrieves contents of a shopping cart."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The shopping cart contents identifier."
          call: "e-commerce-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: e-commerce-api
      baseUri: "https://api.wayfair.com/e-commerce/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: shopping
          path: "/shopping/cart/contents/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-shopping
              method: GET

Sends a notification to a Slack channel.

naftiko: "0.5"
info:
  label: "Slack Notification Publisher"
  description: "Sends a notification to a Slack channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-slack
          description: "Sends a notification to a Slack channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The slack notification publisher identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.wayfair.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: slack
          path: "/slack/notification/publisher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-slack
              method: GET

Runs an analytics query against the Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Analytics Query"
  description: "Runs an analytics query against the Snowflake data warehouse."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-snowflake
          description: "Runs an analytics query against the Snowflake data warehouse."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The snowflake analytics query identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.wayfair.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: snowflake
          path: "/snowflake/analytics/query/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-snowflake
              method: GET

Fetches recent brand mentions from Facebook and Instagram, runs NLP sentiment analysis, and creates a Salesforce case when negative sentiment spikes, with a summary posted to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Social Media Sentiment Monitor"
  description: "Fetches recent brand mentions from Facebook and Instagram, runs NLP sentiment analysis, and creates a Salesforce case when negative sentiment spikes, with a summary posted to Microsoft Teams."
  tags:
    - marketing
    - social-media
    - facebook
    - instagram
    - salesforce
    - microsoft-teams
    - nlp
capability:
  exposes:
    - type: mcp
      namespace: social-sentiment
      port: 8080
      tools:
        - name: monitor-brand-sentiment
          description: "Fetch recent social mentions, analyze sentiment, create a Salesforce case on negative trends, and notify the brand team."
          inputParameters:
            - name: brand_keyword
              in: body
              type: string
              description: "The brand keyword or hashtag to monitor."
            - name: lookback_hours
              in: body
              type: number
              description: "Number of hours to look back for mentions."
          steps:
            - name: get-facebook-mentions
              type: call
              call: "facebook.search-posts"
              with:
                query: "{{brand_keyword}}"
                since_hours: "{{lookback_hours}}"
            - name: get-instagram-mentions
              type: call
              call: "instagram.search-hashtag"
              with:
                hashtag: "{{brand_keyword}}"
            - name: analyze-sentiment
              type: call
              call: "ml-nlp.analyze-sentiment"
              with:
                texts: "{{get-facebook-mentions.post_texts}},{{get-instagram-mentions.caption_texts}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Social Sentiment Alert: {{brand_keyword}} — Score {{analyze-sentiment.average_score}}"
                description: "Sentiment analysis for '{{brand_keyword}}' over last {{lookback_hours}}h: Avg Score: {{analyze-sentiment.average_score}}/10. Negative mentions: {{analyze-sentiment.negative_count}}. Facebook posts: {{get-facebook-mentions.count}}. Instagram posts: {{get-instagram-mentions.count}}."
                priority: "High"
            - name: notify-brand-team
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "brand-monitoring"
                text: "Social Sentiment Alert: '{{brand_keyword}}' avg score {{analyze-sentiment.average_score}}/10 ({{analyze-sentiment.negative_count}} negative). Salesforce case: {{create-case.case_number}}"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_page_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-posts
              method: GET
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: hashtags
          path: "/ig_hashtag_search"
          operations:
            - name: search-hashtag
              method: GET
    - type: http
      namespace: ml-nlp
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: sentiment
          path: "/models/sentiment-analysis/predict"
          operations:
            - name: analyze-sentiment
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wayfair.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/wayfair-marketing/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Fetches the latest product feed from a supplier's BigCommerce store, validates data quality, updates the Wayfair product catalog, and notifies the merchandising team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Catalog Sync Pipeline"
  description: "Fetches the latest product feed from a supplier's BigCommerce store, validates data quality, updates the Wayfair product catalog, and notifies the merchandising team in Microsoft Teams."
  tags:
    - supply-chain
    - e-commerce
    - bigcommerce
    - microsoft-teams
    - catalog-management
capability:
  exposes:
    - type: mcp
      namespace: catalog-sync
      port: 8080
      tools:
        - name: sync-supplier-catalog
          description: "Given a supplier ID and their BigCommerce store hash, fetch their product feed, validate data, update the catalog, and notify merchandising."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The Wayfair supplier ID."
            - name: store_hash
              in: body
              type: string
              description: "The BigCommerce store hash for the supplier."
          steps:
            - name: fetch-bc-products
              type: call
              call: "bigcommerce.list-products"
              with:
                store_hash: "{{store_hash}}"
            - name: validate-feed
              type: call
              call: "catalog-api.validate-feed"
              with:
                supplier_id: "{{supplier_id}}"
                products: "{{fetch-bc-products.data}}"
            - name: update-catalog
              type: call
              call: "catalog-api.bulk-upsert"
              with:
                supplier_id: "{{supplier_id}}"
                products: "{{validate-feed.valid_products}}"
            - name: notify-merch
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "merchandising-ops"
                text: "Catalog Sync Complete: Supplier {{supplier_id}} | Total Products: {{fetch-bc-products.total}} | Valid: {{validate-feed.valid_count}} | Errors: {{validate-feed.error_count}} | Updated: {{update-catalog.upserted_count}}"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      inputParameters:
        - name: store_hash
          in: path
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: list-products
              method: GET
    - type: http
      namespace: catalog-api
      baseUri: "https://catalog-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.catalog_api_token"
      resources:
        - name: feed-validation
          path: "/feeds/validate"
          operations:
            - name: validate-feed
              method: POST
        - name: bulk-products
          path: "/products/bulk"
          operations:
            - name: bulk-upsert
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/wayfair-merch/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a new supplier is approved, creates the supplier record in the supplier management system, provisions a SharePoint document folder, sends onboarding instructions via email, and opens a Jira onboarding task for the supplier ops team.

naftiko: "0.5"
info:
  label: "Supplier Onboarding Pipeline"
  description: "When a new supplier is approved, creates the supplier record in the supplier management system, provisions a SharePoint document folder, sends onboarding instructions via email, and opens a Jira onboarding task for the supplier ops team."
  tags:
    - supply-chain
    - supplier-management
    - sharepoint
    - jira
    - mailchimp
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: supplier-onboarding
      port: 8080
      tools:
        - name: onboard-supplier
          description: "Given supplier details, create the supplier record, provision a SharePoint folder, send onboarding email, and open a Jira task for supplier ops."
          inputParameters:
            - name: supplier_name
              in: body
              type: string
              description: "The supplier company name."
            - name: contact_email
              in: body
              type: string
              description: "The primary contact email for the supplier."
            - name: category
              in: body
              type: string
              description: "The product category the supplier will fulfill (e.g., outdoor-furniture, lighting)."
          steps:
            - name: create-supplier
              type: call
              call: "supplier-api.create-supplier"
              with:
                supplier_name: "{{supplier_name}}"
                contact_email: "{{contact_email}}"
                category: "{{category}}"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "supplier_portal"
                folder_path: "Suppliers/{{supplier_name}}_{{create-supplier.supplier_id}}"
            - name: send-onboarding-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "supplier-onboarding"
                email: "{{contact_email}}"
                merge_vars: "{\"SUPPLIER_NAME\":\"{{supplier_name}}\",\"PORTAL_URL\":\"{{provision-folder.url}}\",\"SUPPLIER_ID\":\"{{create-supplier.supplier_id}}\"}"
            - name: create-jira-task
              type: call
              call: "jira.create-issue"
              with:
                project: "SUPOPS"
                issue_type: "Task"
                summary: "Onboard new supplier: {{supplier_name}} ({{category}})"
                description: "Supplier ID: {{create-supplier.supplier_id}}\nContact: {{contact_email}}\nSharePoint: {{provision-folder.url}}"
  consumes:
    - type: http
      namespace: supplier-api
      baseUri: "https://supplier-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.supplier_api_token"
      resources:
        - name: suppliers
          path: "/suppliers"
          operations:
            - name: create-supplier
              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: bearer
        token: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wayfair.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

Aggregates supplier delivery metrics from the warehouse API, fetches quality scores from the supplier scorecard, pulls customer complaint data from Zendesk, and compiles a performance report in Google Drive.

naftiko: "0.5"
info:
  label: "Supplier Performance Review Orchestrator"
  description: "Aggregates supplier delivery metrics from the warehouse API, fetches quality scores from the supplier scorecard, pulls customer complaint data from Zendesk, and compiles a performance report in Google Drive."
  tags:
    - supply-chain
    - supplier-management
    - zendesk
    - google-drive
    - quality-assurance
capability:
  exposes:
    - type: mcp
      namespace: supplier-performance
      port: 8080
      tools:
        - name: generate-supplier-review
          description: "Given a supplier ID and review period, aggregate delivery metrics, quality scores, customer complaints, and compile a performance report in Google Drive."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The Wayfair supplier ID."
            - name: period_start
              in: body
              type: string
              description: "Review period start date (YYYY-MM-DD)."
            - name: period_end
              in: body
              type: string
              description: "Review period end date (YYYY-MM-DD)."
          steps:
            - name: get-delivery-metrics
              type: call
              call: "warehouse-api.get-supplier-metrics"
              with:
                supplier_id: "{{supplier_id}}"
                start_date: "{{period_start}}"
                end_date: "{{period_end}}"
            - name: get-quality-scores
              type: call
              call: "supplier-api.get-scorecard"
              with:
                supplier_id: "{{supplier_id}}"
                period: "{{period_start}}_{{period_end}}"
            - name: get-complaints
              type: call
              call: "zendesk.search-tickets"
              with:
                query: "type:ticket tags:supplier_{{supplier_id}} created>{{period_start}} created<{{period_end}}"
            - name: create-report
              type: call
              call: "gdrive.create-document"
              with:
                title: "Supplier Performance Review — {{get-quality-scores.supplier_name}} — {{period_start}} to {{period_end}}"
                folder_id: "supplier_reviews"
                content: "On-Time Delivery: {{get-delivery-metrics.on_time_rate}}% | Damage Rate: {{get-delivery-metrics.damage_rate}}% | Quality Score: {{get-quality-scores.overall_score}}/100 | Customer Complaints: {{get-complaints.count}} | Fill Rate: {{get-delivery-metrics.fill_rate}}%"
  consumes:
    - type: http
      namespace: warehouse-api
      baseUri: "https://warehouse-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.warehouse_api_token"
      resources:
        - name: supplier-metrics
          path: "/suppliers/{{supplier_id}}/metrics"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier-metrics
              method: GET
    - type: http
      namespace: supplier-api
      baseUri: "https://supplier-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.supplier_api_token"
      resources:
        - name: scorecards
          path: "/suppliers/{{supplier_id}}/scorecard"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-scorecard
              method: GET
    - type: http
      namespace: zendesk
      baseUri: "https://wayfair.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: search
          path: "/search.json"
          operations:
            - name: search-tickets
              method: GET
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-document
              method: POST

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Orchestrator"
  description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
  tags:
    - sustainability
    - analytics
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: run-sustainability-metrics-collection-orchestrator
          description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves the latest data snapshot from a Tableau workbook view. Returns the last refresh timestamp and key metric values for executive dashboards and automated reporting.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Snapshot"
  description: "Retrieves the latest data snapshot from a Tableau workbook view. Returns the last refresh timestamp and key metric values for executive dashboards and automated reporting."
  tags:
    - analytics
    - business-intelligence
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: get-dashboard-snapshot
          description: "Fetch the latest snapshot from a Tableau workbook view including refresh timestamp and summary metrics."
          inputParameters:
            - name: view_id
              in: body
              type: string
              description: "The Tableau view ID or content URL path."
          call: "tableau.get-view-data"
          with:
            view_id: "{{view_id}}"
          outputParameters:
            - name: last_refresh
              type: string
              mapping: "$.view.updatedAt"
            - name: data_values
              type: array
              mapping: "$.view.data.values"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.wayfair.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/wayfair/views/{{view_id}}/data"
          inputParameters:
            - name: view_id
              in: path
          operations:
            - name: get-view-data
              method: GET

Compares the current Terraform state with the actual AWS infrastructure, identifies drift, creates a ServiceNow change request, and alerts the platform team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Drift Detector"
  description: "Compares the current Terraform state with the actual AWS infrastructure, identifies drift, creates a ServiceNow change request, and alerts the platform team in Microsoft Teams."
  tags:
    - engineering
    - infrastructure
    - terraform
    - servicenow
    - microsoft-teams
    - amazon-web-services
capability:
  exposes:
    - type: mcp
      namespace: infra-drift
      port: 8080
      tools:
        - name: detect-infrastructure-drift
          description: "Given a Terraform workspace, detect drift from actual AWS state, create a ServiceNow change request, and alert the platform team."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "The Terraform Cloud workspace name."
            - name: environment
              in: body
              type: string
              description: "The target environment (e.g., production, staging)."
          steps:
            - name: get-state
              type: call
              call: "terraform-cloud.get-current-state"
              with:
                workspace: "{{workspace_name}}"
            - name: run-plan
              type: call
              call: "terraform-cloud.create-plan"
              with:
                workspace: "{{workspace_name}}"
                is_destroy: "false"
            - name: create-change-request
              type: call
              call: "servicenow.create-change"
              with:
                short_description: "Infrastructure drift detected: {{workspace_name}} ({{environment}})"
                description: "Terraform plan detected {{run-plan.resource_changes}} resource changes in workspace {{workspace_name}}. Additions: {{run-plan.additions}}, Changes: {{run-plan.modifications}}, Deletions: {{run-plan.deletions}}."
                category: "infrastructure"
                risk: "moderate"
            - name: alert-team
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "platform-infra"
                text: "Infrastructure Drift: {{workspace_name}} ({{environment}}) | +{{run-plan.additions}} ~{{run-plan.modifications}} -{{run-plan.deletions}} | Change Request: {{create-change-request.number}}"
  consumes:
    - type: http
      namespace: terraform-cloud
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_cloud_token"
      resources:
        - name: state-versions
          path: "/workspaces/{{workspace}}/current-state-version"
          inputParameters:
            - name: workspace
              in: path
          operations:
            - name: get-current-state
              method: GET
        - name: runs
          path: "/runs"
          operations:
            - name: create-plan
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wayfair.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/wayfair-platform/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: "0.5"
info:
  label: "Third Party Risk Assessment Orchestrator"
  description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
  tags:
    - risk
    - procurement
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: run-third-party-risk-assessment-orchestrator
          description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Third Party Risk Assessment Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: "0.5"
info:
  label: "Vendor Contract Renewal Pipeline"
  description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
  tags:
    - procurement
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-vendor-contract-renewal-pipeline
          description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Vendor Contract Renewal Pipeline for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wayfair.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

When new product images are uploaded to S3, runs the computer vision model to extract visual features, indexes the features in Elasticsearch for visual search, and publishes an indexing event to Kafka.

naftiko: "0.5"
info:
  label: "Visual Search Image Indexing Pipeline"
  description: "When new product images are uploaded to S3, runs the computer vision model to extract visual features, indexes the features in Elasticsearch for visual search, and publishes an indexing event to Kafka."
  tags:
    - e-commerce
    - machine-learning
    - computer-vision
    - amazon-s3
    - elasticsearch
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: visual-search
      port: 8080
      tools:
        - name: index-product-image
          description: "Given an S3 image key and SKU, extract visual features via the CV model, index in Elasticsearch, and publish the event."
          inputParameters:
            - name: s3_bucket
              in: body
              type: string
              description: "The S3 bucket containing the product image."
            - name: s3_key
              in: body
              type: string
              description: "The S3 object key for the product image."
            - name: sku
              in: body
              type: string
              description: "The product SKU associated with the image."
          steps:
            - name: get-image-url
              type: call
              call: "s3-api.generate-presigned-url"
              with:
                bucket: "{{s3_bucket}}"
                key: "{{s3_key}}"
            - name: extract-features
              type: call
              call: "cv-service.extract-visual-features"
              with:
                image_url: "{{get-image-url.presigned_url}}"
                model: "product-visual-v3"
            - name: index-features
              type: call
              call: "es.index-visual-features"
              with:
                sku: "{{sku}}"
                feature_vector: "{{extract-features.feature_vector}}"
                color_palette: "{{extract-features.dominant_colors}}"
                style_tags: "{{extract-features.style_tags}}"
            - name: publish-event
              type: call
              call: "kafka-bridge.publish-event"
              with:
                topic: "visual-search.indexed"
                key: "{{sku}}"
                payload: "{\"sku\":\"{{sku}}\",\"image_key\":\"{{s3_key}}\",\"feature_dimensions\":{{extract-features.dimensions}}}"
  consumes:
    - type: http
      namespace: s3-api
      baseUri: "https://s3-gateway.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.aws_session_token"
      resources:
        - name: presigned
          path: "/presign/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: generate-presigned-url
              method: GET
    - type: http
      namespace: cv-service
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: visual-features
          path: "/models/visual-features/predict"
          operations:
            - name: extract-visual-features
              method: POST
    - type: http
      namespace: es
      baseUri: "https://es-prod.wayfair.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: visual-index
          path: "/visual-search/_doc/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: index-visual-features
              method: PUT
    - type: http
      namespace: kafka-bridge
      baseUri: "https://kafka-rest.wayfair.com/v2"
      authentication:
        type: bearer
        token: "$secrets.kafka_rest_token"
      resources:
        - name: topics
          path: "/topics/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: publish-event
              method: POST

Aggregates current inventory levels from the warehouse API, forecasts demand using the ML platform, pulls inbound shipment data, and creates a capacity planning report in Google Drive for logistics leadership.

naftiko: "0.5"
info:
  label: "Warehouse Capacity Planning Orchestrator"
  description: "Aggregates current inventory levels from the warehouse API, forecasts demand using the ML platform, pulls inbound shipment data, and creates a capacity planning report in Google Drive for logistics leadership."
  tags:
    - logistics
    - inventory-management
    - machine-learning
    - google-drive
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: capacity-planning
      port: 8080
      tools:
        - name: generate-capacity-report
          description: "Given a warehouse ID and planning horizon, aggregate inventory, forecast demand, assess inbound shipments, and compile a capacity planning document."
          inputParameters:
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse facility ID."
            - name: planning_horizon_days
              in: body
              type: number
              description: "Number of days to forecast ahead."
          steps:
            - name: get-current-inventory
              type: call
              call: "warehouse-api.get-inventory-summary"
              with:
                warehouse_id: "{{warehouse_id}}"
            - name: forecast-demand
              type: call
              call: "ml-demand.predict"
              with:
                warehouse_id: "{{warehouse_id}}"
                horizon_days: "{{planning_horizon_days}}"
                current_utilization: "{{get-current-inventory.utilization_pct}}"
            - name: get-inbound-shipments
              type: call
              call: "warehouse-api.get-inbound"
              with:
                warehouse_id: "{{warehouse_id}}"
                days_ahead: "{{planning_horizon_days}}"
            - name: create-report
              type: call
              call: "gdrive.create-document"
              with:
                title: "Capacity Plan — Warehouse {{warehouse_id}} — {{planning_horizon_days}} Day Horizon"
                folder_id: "logistics_planning"
                content: "Current Utilization: {{get-current-inventory.utilization_pct}}% | Available Slots: {{get-current-inventory.available_slots}} | Forecasted Demand: {{forecast-demand.predicted_units}} units | Inbound Shipments: {{get-inbound-shipments.shipment_count}} ({{get-inbound-shipments.total_units}} units) | Projected Utilization: {{forecast-demand.projected_utilization}}%"
  consumes:
    - type: http
      namespace: warehouse-api
      baseUri: "https://warehouse-api.wayfair.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.warehouse_api_token"
      resources:
        - name: inventory-summary
          path: "/warehouses/{{warehouse_id}}/inventory/summary"
          inputParameters:
            - name: warehouse_id
              in: path
          operations:
            - name: get-inventory-summary
              method: GET
        - name: inbound
          path: "/warehouses/{{warehouse_id}}/inbound"
          inputParameters:
            - name: warehouse_id
              in: path
          operations:
            - name: get-inbound
              method: GET
    - type: http
      namespace: ml-demand
      baseUri: "https://ml-platform.wayfair.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ml_platform_token"
      resources:
        - name: demand-forecast
          path: "/models/demand-forecast/predict"
          operations:
            - name: predict
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-document
              method: POST

Retrieves stock level for a product in a warehouse.

naftiko: "0.5"
info:
  label: "Warehouse Stock Level"
  description: "Retrieves stock level for a product in a warehouse."
  tags:
    - warehouse
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: warehouse
      port: 8080
      tools:
        - name: get-warehouse
          description: "Retrieves stock level for a product in a warehouse."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The warehouse stock level identifier."
          call: "warehouse-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: warehouse-api
      baseUri: "https://api.wayfair.com/warehouse/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: warehouse
          path: "/warehouse/stock/level/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-warehouse
              method: GET

Looks up a Workday employee by ID and returns full name, department, job title, location, and manager. Used by HR, IT, and engineering teams for quick employee lookups.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Looks up a Workday employee by ID and returns full name, department, job title, location, and manager. Used by HR, IT, and engineering teams for quick employee lookups."
  tags:
    - hr
    - employee-data
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up a Workday employee by worker ID. Returns full name, department, title, location, and manager name."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.fullName"
            - name: department
              type: string
              mapping: "$.worker.department"
            - name: job_title
              type: string
              mapping: "$.worker.jobTitle"
            - name: location
              type: string
              mapping: "$.worker.location"
            - name: manager
              type: string
              mapping: "$.worker.manager.fullName"
  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 employee profile from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Profile"
  description: "Retrieves employee profile from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-workday
          description: "Retrieves employee profile from Workday."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The workday employee profile identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.wayfair.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.wayfair_api_token"
      resources:
        - name: workday
          path: "/workday/employee/profile/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-workday
              method: GET

Pulls current headcount data from Workday, segments by department and location, and creates a summary spreadsheet in Google Drive for HR leadership review.

naftiko: "0.5"
info:
  label: "Workday Headcount Report"
  description: "Pulls current headcount data from Workday, segments by department and location, and creates a summary spreadsheet in Google Drive for HR leadership review."
  tags:
    - hr
    - workforce-planning
    - workday
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: generate-headcount-report
          description: "Given a report date, pull Workday headcount data and create a Google Drive spreadsheet with department and location breakdowns."
          inputParameters:
            - name: report_date
              in: body
              type: string
              description: "The effective date for the headcount snapshot (YYYY-MM-DD)."
          steps:
            - name: get-headcount
              type: call
              call: "workday.get-headcount-report"
              with:
                effective_date: "{{report_date}}"
            - name: create-report
              type: call
              call: "gdrive.create-spreadsheet"
              with:
                title: "Headcount Report — {{report_date}}"
                folder_id: "hr_reports"
                data: "{{get-headcount.department_summary}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: reports
          path: "/reports/headcount"
          operations:
            - name: get-headcount-report
              method: GET
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-spreadsheet
              method: POST

Retrieves a Zendesk support ticket by ID and returns subject, status, priority, assignee group, and customer satisfaction rating. Used by CX leadership for escalation reviews.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Status"
  description: "Retrieves a Zendesk support ticket by ID and returns subject, status, priority, assignee group, and customer satisfaction rating. Used by CX leadership for escalation reviews."
  tags:
    - customer-service
    - support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: cx-support
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Look up a Zendesk ticket by ID. Returns subject, status, priority, assigned group, and CSAT rating."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assigned_group
              type: string
              mapping: "$.ticket.group_id"
            - name: satisfaction_rating
              type: string
              mapping: "$.ticket.satisfaction_rating.score"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://wayfair.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET