Home Depot Capabilities

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

Sort
Expand

Retrieves a pre-signed URL for a product image or document stored in Amazon S3, used by content teams to share assets across marketing channels.

naftiko: "0.5"
info:
  label: "Amazon S3 Asset Retrieval"
  description: "Retrieves a pre-signed URL for a product image or document stored in Amazon S3, used by content teams to share assets across marketing channels."
  tags:
    - content
    - storage
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: asset-storage
      port: 8080
      tools:
        - name: get-asset-url
          description: "Given an S3 bucket and object key, return a pre-signed URL valid for one hour."
          inputParameters:
            - name: bucket
              in: body
              type: string
              description: "The S3 bucket name."
            - name: object_key
              in: body
              type: string
              description: "The S3 object key (path to the file)."
          call: "s3.get-presigned-url"
          with:
            bucket: "{{bucket}}"
            key: "{{object_key}}"
          outputParameters:
            - name: presigned_url
              type: string
              mapping: "$.url"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: aws
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: get-presigned-url
              method: GET

When a customer purchases a major appliance, checks delivery slot availability, creates the delivery order in SAP, schedules the installation crew in ServiceNow, and sends confirmation via MailChimp transactional email.

naftiko: "0.5"
info:
  label: "Appliance Delivery Scheduling"
  description: "When a customer purchases a major appliance, checks delivery slot availability, creates the delivery order in SAP, schedules the installation crew in ServiceNow, and sends confirmation via MailChimp transactional email."
  tags:
    - fulfillment
    - delivery
    - sap
    - servicenow
    - mailchimp
    - appliances
capability:
  exposes:
    - type: mcp
      namespace: appliance-delivery
      port: 8080
      tools:
        - name: schedule-appliance-delivery
          description: "Given an order ID, customer details, and preferred date, schedule delivery, book installation, and confirm with the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The appliance order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: customer_address
              in: body
              type: string
              description: "The delivery address."
            - name: preferred_date
              in: body
              type: string
              description: "Preferred delivery date in YYYY-MM-DD format."
            - name: appliance_type
              in: body
              type: string
              description: "Type of appliance (e.g. WASHER, REFRIGERATOR, DISHWASHER)."
          steps:
            - name: check-availability
              type: call
              call: "delivery-svc.check-slots"
              with:
                address: "{{customer_address}}"
                date: "{{preferred_date}}"
                type: "{{appliance_type}}"
            - name: create-delivery-order
              type: call
              call: "sap-commerce.create-delivery"
              with:
                order_id: "{{order_id}}"
                delivery_date: "{{check-availability.confirmed_date}}"
                time_window: "{{check-availability.time_window}}"
                address: "{{customer_address}}"
            - name: schedule-installation
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Appliance install: {{appliance_type}} - Order {{order_id}}"
                scheduled_date: "{{check-availability.confirmed_date}}"
                assigned_group: "Appliance_Install_Crew"
                description: "Install {{appliance_type}} at {{customer_address}}. Delivery order: {{create-delivery-order.delivery_id}}."
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "appliance_delivery_confirm"
                to_email: "{{customer_email}}"
                merge_vars:
                  order_id: "{{order_id}}"
                  delivery_date: "{{check-availability.confirmed_date}}"
                  time_window: "{{check-availability.time_window}}"
                  appliance_type: "{{appliance_type}}"
  consumes:
    - type: http
      namespace: delivery-svc
      baseUri: "https://delivery.homedepot.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.delivery_svc_token"
      resources:
        - name: slots
          path: "/availability"
          operations:
            - name: check-slots
              method: POST
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: deliveries
          path: "/orders/{{order_id}}/delivery"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Processes appliance warranty claims by verifying purchase in Oracle Retail, creating a ServiceNow case, and scheduling a technician visit via the field service platform.

naftiko: "0.5"
info:
  label: "Appliance Warranty Claim Processor"
  description: "Processes appliance warranty claims by verifying purchase in Oracle Retail, creating a ServiceNow case, and scheduling a technician visit via the field service platform."
  tags:
    - customer-service
    - warranty
    - oracle-cloud
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: warranty-claims
      port: 8080
      tools:
        - name: process-warranty-claim
          description: "Process an appliance warranty claim."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original purchase order ID."
            - name: sku
              in: body
              type: string
              description: "The appliance SKU."
            - name: issue_description
              in: body
              type: string
              description: "Description of the issue."
            - name: customer_address
              in: body
              type: string
              description: "Customer service address."
          steps:
            - name: verify-purchase
              type: call
              call: "oracle-retail.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-service-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Warranty claim: {{sku}} - Order {{order_id}}"
                description: "{{issue_description}}"
                category: "warranty_claim"
                purchase_date: "{{verify-purchase.order_date}}"
            - name: schedule-technician
              type: call
              call: "field-service.create-work-order"
              with:
                case_ref: "{{create-service-case.number}}"
                sku: "{{sku}}"
                address: "{{customer_address}}"
                issue: "{{issue_description}}"
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: field-service
      baseUri: "https://fieldservice.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.field_service_token"
      resources:
        - name: work-orders
          path: "/work-orders"
          operations:
            - name: create-work-order
              method: POST

Processes associate recognition nominations by creating a record in Workday, adding reward points in the recognition platform, and sending a congratulatory email via Outlook.

naftiko: "0.5"
info:
  label: "Associate Recognition Award Processor"
  description: "Processes associate recognition nominations by creating a record in Workday, adding reward points in the recognition platform, and sending a congratulatory email via Outlook."
  tags:
    - hr
    - recognition
    - workday
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: recognition
      port: 8080
      tools:
        - name: process-recognition
          description: "Process an associate recognition award."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The recognized employee Workday ID."
            - name: award_type
              in: body
              type: string
              description: "Award type (homer, quarterly, annual)."
            - name: nominator_name
              in: body
              type: string
              description: "Name of the person nominating."
            - name: reason
              in: body
              type: string
              description: "Recognition reason."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: add-award-points
              type: call
              call: "recognition-platform.add-points"
              with:
                employee_id: "{{employee_id}}"
                award_type: "{{award_type}}"
                reason: "{{reason}}"
            - name: send-congratulations
              type: call
              call: "outlook.send-email"
              with:
                to: "{{get-employee.work_email}}"
                subject: "Congratulations on Your {{award_type}} Award!"
                body: "{{get-employee.first_name}}, you have been recognized by {{nominator_name}} for: {{reason}}. Points awarded: {{add-award-points.points_added}}."
  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: recognition-platform
      baseUri: "https://recognition.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.recognition_token"
      resources:
        - name: awards
          path: "/awards"
          operations:
            - name: add-points
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

When an associate requests a schedule change, fetches their current schedule from Workday, checks store staffing levels in the workforce management system, and routes the request to the department head via Microsoft Teams for approval.

naftiko: "0.5"
info:
  label: "Associate Schedule Change Request"
  description: "When an associate requests a schedule change, fetches their current schedule from Workday, checks store staffing levels in the workforce management system, and routes the request to the department head via Microsoft Teams for approval."
  tags:
    - hr
    - scheduling
    - workday
    - microsoft-teams
    - workforce-management
capability:
  exposes:
    - type: mcp
      namespace: schedule-management
      port: 8080
      tools:
        - name: request-schedule-change
          description: "Given an employee ID, requested date, and shift preference, validate staffing and route the approval."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: requested_date
              in: body
              type: string
              description: "The date for the schedule change in YYYY-MM-DD format."
            - name: requested_shift
              in: body
              type: string
              description: "The preferred shift (e.g. MORNING, AFTERNOON, EVENING)."
            - name: reason
              in: body
              type: string
              description: "The reason for the schedule change."
          steps:
            - name: get-associate
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: check-staffing
              type: call
              call: "wfm.get-staffing-levels"
              with:
                store_id: "{{get-associate.home_store}}"
                department: "{{get-associate.department}}"
                date: "{{requested_date}}"
                shift: "{{requested_shift}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-associate.manager_email}}"
                text: "Schedule change request from {{get-associate.full_name}}: {{requested_date}}, {{requested_shift}} shift. Reason: {{reason}}. Current staffing for that shift: {{check-staffing.current_count}}/{{check-staffing.required_count}}. Please approve or deny."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
      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: wfm
      baseUri: "https://wfm.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wfm_token"
      resources:
        - name: staffing
          path: "/stores/{{store_id}}/departments/{{department}}/staffing"
          inputParameters:
            - name: store_id
              in: path
            - name: department
              in: path
          operations:
            - name: get-staffing-levels
              method: GET
    - 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

Tracks store associate training completion by pulling records from Cornerstone LMS, comparing against required courses in Workday, and sending gap reports via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Associate Training Completion Tracker"
  description: "Tracks store associate training completion by pulling records from Cornerstone LMS, comparing against required courses in Workday, and sending gap reports via Microsoft Outlook."
  tags:
    - hr
    - training
    - workday
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: training-tracker
      port: 8080
      tools:
        - name: track-training-completion
          description: "Track and report training completion gaps for a store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
          steps:
            - name: get-completions
              type: call
              call: "cornerstone.get-store-completions"
              with:
                location: "store_{{store_id}}"
            - name: get-requirements
              type: call
              call: "workday.get-training-requirements"
              with:
                location: "store_{{store_id}}"
            - name: send-gap-report
              type: call
              call: "outlook.send-email"
              with:
                to: "storemanager_{{store_id}}@homedepot.com"
                subject: "Training Completion Report: Store {{store_id}}"
                body: "Completed: {{get-completions.total_completed}}. Required: {{get-requirements.total_required}}. Gap: {{get-requirements.total_required}} - {{get-completions.total_completed}} courses."
  consumes:
    - type: http
      namespace: cornerstone
      baseUri: "https://homedepot.csod.com/services/api/x/v2"
      authentication:
        type: bearer
        token: "$secrets.cornerstone_token"
      resources:
        - name: completions
          path: "/reports/completions?location={{location}}"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-store-completions
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: training
          path: "/training/requirements?location={{location}}"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-training-requirements
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Pulls Azure resource usage from CloudWatch-equivalent Azure Cost Management, compares against budgets in the FinOps dashboard, identifies idle resources via Datadog, and creates a Jira ticket for the engineering team to remediate.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Optimization"
  description: "Pulls Azure resource usage from CloudWatch-equivalent Azure Cost Management, compares against budgets in the FinOps dashboard, identifies idle resources via Datadog, and creates a Jira ticket for the engineering team to remediate."
  tags:
    - cloud-ops
    - finops
    - microsoft-azure
    - datadog
    - jira
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: analyze-cloud-costs
          description: "Given a subscription ID and month, pull costs, compare to budget, identify waste, and create remediation tickets."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID."
            - name: month
              in: body
              type: string
              description: "The reporting month in YYYY-MM format."
          steps:
            - name: get-costs
              type: call
              call: "azure-cost.get-usage"
              with:
                subscription_id: "{{subscription_id}}"
                month: "{{month}}"
            - name: get-idle-resources
              type: call
              call: "datadog.query-metrics"
              with:
                service_name: "azure-{{subscription_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CLOUDOPS"
                issue_type: "Task"
                summary: "Azure cost optimization: {{subscription_id}} - {{month}}"
                description: "Total spend: ${{get-costs.total_cost}}. Budget: ${{get-costs.budget_amount}}. Utilization: {{get-costs.utilization_pct}}%. Idle resources detected: {{get-idle-resources.idle_count}}. Top cost driver: {{get-costs.top_service}}."
  consumes:
    - type: http
      namespace: azure-cost
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: usage
          path: "/{{subscription_id}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: get-usage
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://homedepot.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 product reviews and ratings from Azure Cosmos DB by SKU, returning average rating, review count, and most recent review text.

naftiko: "0.5"
info:
  label: "Azure Cosmos DB Product Review Lookup"
  description: "Retrieves product reviews and ratings from Azure Cosmos DB by SKU, returning average rating, review count, and most recent review text."
  tags:
    - e-commerce
    - reviews
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: product-reviews
      port: 8080
      tools:
        - name: get-reviews
          description: "Look up product reviews by SKU."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
          call: "cosmos-db.query-reviews"
          with:
            query: "SELECT * FROM reviews r WHERE r.sku = '{{sku}}' ORDER BY r.created_at DESC"
          outputParameters:
            - name: avg_rating
              type: number
              mapping: "$.Documents[0].avg_rating"
            - name: review_count
              type: integer
              mapping: "$.Documents[0].count"
  consumes:
    - type: http
      namespace: cosmos-db
      baseUri: "https://homedepot-reviews.documents.azure.com"
      authentication:
        type: apiKey
        key: "$secrets.cosmos_db_key"
      resources:
        - name: documents
          path: "/dbs/reviews/colls/product_reviews/docs"
          operations:
            - name: query-reviews
              method: POST

Checks Black Friday inventory readiness by comparing promotional item stock in SAP against demand forecast in Snowflake, and alerting replenishment via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Black Friday Inventory Readiness Checker"
  description: "Checks Black Friday inventory readiness by comparing promotional item stock in SAP against demand forecast in Snowflake, and alerting replenishment via Microsoft Teams."
  tags:
    - merchandising
    - seasonal
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bf-readiness
      port: 8080
      tools:
        - name: check-bf-readiness
          description: "Check Black Friday inventory readiness for a store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: promo_event_id
              in: body
              type: string
              description: "The promotional event ID."
          steps:
            - name: get-current-stock
              type: call
              call: "sap.get-promo-stock"
              with:
                store: "{{store_id}}"
                event: "{{promo_event_id}}"
            - name: get-demand-forecast
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT sku, forecast_units FROM promo_demand_forecast WHERE store_id = '{{store_id}}' AND event_id = '{{promo_event_id}}'"
            - name: alert-replenishment
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "replenishment-alerts"
                text: "BF Readiness - Store {{store_id}}: {{get-current-stock.items_in_stock}} of {{get-demand-forecast.data.length}} promo items stocked. Review gaps immediately."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: promo-stock
          path: "/PromoStockSet(Store='{{store}}',Event='{{event}}')"
          inputParameters:
            - name: store
              in: path
            - name: event
              in: path
          operations:
            - name: get-promo-stock
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a Buy Online Pick Up In Store order is picked and staged, updates the order status in SAP Commerce Cloud and sends a pickup-ready SMS via the customer notification service.

naftiko: "0.5"
info:
  label: "BOPIS Ready Notification"
  description: "When a Buy Online Pick Up In Store order is picked and staged, updates the order status in SAP Commerce Cloud and sends a pickup-ready SMS via the customer notification service."
  tags:
    - e-commerce
    - bopis
    - sap
    - customer-notification
capability:
  exposes:
    - type: mcp
      namespace: bopis
      port: 8080
      tools:
        - name: notify-pickup-ready
          description: "Given an order ID and customer phone number, update the order status to ready and send a pickup-ready SMS notification."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BOPIS order ID."
            - name: customer_phone
              in: body
              type: string
              description: "The customer phone number for SMS notification."
            - name: store_id
              in: body
              type: string
              description: "The pickup store number."
          steps:
            - name: update-order-status
              type: call
              call: "sap-commerce.update-order"
              with:
                order_id: "{{order_id}}"
                status: "READY_FOR_PICKUP"
            - name: send-sms
              type: call
              call: "notification-svc.send-sms"
              with:
                phone: "{{customer_phone}}"
                message: "Your Home Depot order {{order_id}} is ready for pickup at Store #{{store_id}}. Please bring your order confirmation and valid ID."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}/status"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: update-order
              method: PUT
    - type: http
      namespace: notification-svc
      baseUri: "https://notifications.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_svc_token"
      resources:
        - name: sms
          path: "/sms/send"
          operations:
            - name: send-sms
              method: POST

Monitors competitor prices by pulling data from the pricing intelligence platform, comparing against internal pricing in SAP, and alerting category managers via Slack.

naftiko: "0.5"
info:
  label: "Competitive Price Monitoring Pipeline"
  description: "Monitors competitor prices by pulling data from the pricing intelligence platform, comparing against internal pricing in SAP, and alerting category managers via Slack."
  tags:
    - pricing
    - competitive-intelligence
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: price-monitoring
      port: 8080
      tools:
        - name: monitor-competitor-prices
          description: "Monitor and alert on competitive price changes."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to monitor."
            - name: category_code
              in: body
              type: string
              description: "The merchandising category code."
          steps:
            - name: get-competitor-prices
              type: call
              call: "pricing-intel.get-prices"
              with:
                sku: "{{sku}}"
            - name: get-our-price
              type: call
              call: "sap.get-price"
              with:
                material: "{{sku}}"
            - name: alert-category-manager
              type: call
              call: "slack.post-message"
              with:
                channel: "category-{{category_code}}-pricing"
                text: "Price alert for SKU {{sku}}: Our price ${{get-our-price.list_price}}. Lowest competitor: ${{get-competitor-prices.lowest_price}} ({{get-competitor-prices.lowest_retailer}})."
  consumes:
    - type: http
      namespace: pricing-intel
      baseUri: "https://pricing-intelligence.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pricing_intel_token"
      resources:
        - name: prices
          path: "/products/{{sku}}/competitor-prices"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-prices
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_PRICING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: prices
          path: "/PriceSet('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-price
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Searches Confluence for a knowledge article by title or keyword, returning page content, last updated date, and author. Used by store associates for troubleshooting guidance.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Article Lookup"
  description: "Searches Confluence for a knowledge article by title or keyword, returning page content, last updated date, and author. Used by store associates for troubleshooting guidance."
  tags:
    - knowledge-management
    - support
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-articles
          description: "Given a search query, return matching Confluence pages with title, excerpt, author, and last modified date."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query for finding knowledge articles."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/content/search?cql=text~\"{{query}}\""
          inputParameters:
            - name: query
              in: path
          operations:
            - name: search
              method: GET

Generates a quarterly Pro Xtra rewards statement by pulling purchase history from Teradata, reward points from Salesforce, and sending a branded statement PDF via MailChimp transactional email.

naftiko: "0.5"
info:
  label: "Contractor Pro Rewards Statement"
  description: "Generates a quarterly Pro Xtra rewards statement by pulling purchase history from Teradata, reward points from Salesforce, and sending a branded statement PDF via MailChimp transactional email."
  tags:
    - loyalty
    - pro-xtra
    - teradata
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: pro-rewards
      port: 8080
      tools:
        - name: generate-rewards-statement
          description: "Given a Pro customer ID and quarter, compile purchase and rewards data and send the statement."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce Pro Xtra customer ID."
            - name: quarter
              in: body
              type: string
              description: "The statement quarter (e.g. Q1_2026)."
            - name: customer_email
              in: body
              type: string
              description: "The customer email for statement delivery."
          steps:
            - name: get-purchases
              type: call
              call: "teradata.run-query"
              with:
                query: "SELECT SUM(net_sales) as total_spend, COUNT(*) as txn_count, SUM(rewards_earned) as points_earned FROM pro_transactions WHERE customer_id='{{customer_id}}' AND fiscal_quarter='{{quarter}}'"
            - name: get-rewards-balance
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{customer_id}}"
            - name: send-statement
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "pro_xtra_statement"
                to_email: "{{customer_email}}"
                merge_vars:
                  customer_name: "{{get-rewards-balance.company_name}}"
                  quarter: "{{quarter}}"
                  total_spend: "{{get-purchases.total_spend}}"
                  txn_count: "{{get-purchases.txn_count}}"
                  points_earned: "{{get-purchases.points_earned}}"
                  points_balance: "{{get-rewards-balance.pro_tier}}"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://teradata.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.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
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

When a customer checks in for curbside pickup, retrieves the order from SAP Commerce Cloud, dispatches an associate via the workforce management system, and sends a real-time SMS update to the customer.

naftiko: "0.5"
info:
  label: "Curbside Pickup Orchestrator"
  description: "When a customer checks in for curbside pickup, retrieves the order from SAP Commerce Cloud, dispatches an associate via the workforce management system, and sends a real-time SMS update to the customer."
  tags:
    - e-commerce
    - curbside-pickup
    - sap
    - workforce-management
    - customer-notification
capability:
  exposes:
    - type: mcp
      namespace: curbside
      port: 8080
      tools:
        - name: process-curbside-checkin
          description: "Given an order ID and parking spot, retrieve the order, dispatch an associate, and notify the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The curbside pickup order ID."
            - name: parking_spot
              in: body
              type: string
              description: "The customer parking spot identifier."
            - name: customer_phone
              in: body
              type: string
              description: "The customer phone for SMS updates."
            - name: store_id
              in: body
              type: string
              description: "The store number."
          steps:
            - name: get-order
              type: call
              call: "sap-commerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: dispatch-associate
              type: call
              call: "wfm.dispatch-task"
              with:
                store_id: "{{store_id}}"
                task_type: "curbside_delivery"
                order_id: "{{order_id}}"
                location: "Parking spot {{parking_spot}}"
                item_count: "{{get-order.item_count}}"
            - name: notify-customer
              type: call
              call: "notification-svc.send-sms"
              with:
                phone: "{{customer_phone}}"
                message: "An associate is on the way to spot {{parking_spot}} with your order {{order_id}} ({{get-order.item_count}} items). ETA: {{dispatch-associate.estimated_minutes}} minutes."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: wfm
      baseUri: "https://wfm.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wfm_token"
      resources:
        - name: tasks
          path: "/dispatch"
          operations:
            - name: dispatch-task
              method: POST
    - type: http
      namespace: notification-svc
      baseUri: "https://notifications.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.notification_svc_token"
      resources:
        - name: sms
          path: "/sms/send"
          operations:
            - name: send-sms
              method: POST

Processes customer credit applications by submitting to the credit bureau, creating the account in SAP, and sending approval notification via email.

naftiko: "0.5"
info:
  label: "Customer Credit Application Processor"
  description: "Processes customer credit applications by submitting to the credit bureau, creating the account in SAP, and sending approval notification via email."
  tags:
    - finance
    - credit
    - sap
capability:
  exposes:
    - type: mcp
      namespace: credit-application
      port: 8080
      tools:
        - name: process-credit-application
          description: "Process a new customer credit card application."
          inputParameters:
            - name: applicant_name
              in: body
              type: string
              description: "Applicant full name."
            - name: applicant_email
              in: body
              type: string
              description: "Applicant email."
            - name: ssn_last_four
              in: body
              type: string
              description: "Last four digits of SSN."
          steps:
            - name: submit-credit-check
              type: call
              call: "credit-bureau.check-credit"
              with:
                name: "{{applicant_name}}"
                ssn_last_four: "{{ssn_last_four}}"
            - name: create-account
              type: call
              call: "sap.create-customer"
              with:
                name: "{{applicant_name}}"
                email: "{{applicant_email}}"
                credit_limit: "{{submit-credit-check.approved_limit}}"
            - name: send-notification
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{applicant_email}}"
                template_id: "credit_approval"
                dynamic_data:
                  name: "{{applicant_name}}"
                  credit_limit: "{{submit-credit-check.approved_limit}}"
  consumes:
    - type: http
      namespace: credit-bureau
      baseUri: "https://creditservices.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.credit_bureau_token"
      resources:
        - name: checks
          path: "/credit-checks"
          operations:
            - name: check-credit
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_CUSTOMER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: customers
          path: "/CustomerSet"
          operations:
            - name: create-customer
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Enrolls customers in the Pro Xtra loyalty program by creating the profile in Salesforce, provisioning the loyalty account, and sending a welcome email via SendGrid.

naftiko: "0.5"
info:
  label: "Customer Loyalty Program Enrollment Orchestrator"
  description: "Enrolls customers in the Pro Xtra loyalty program by creating the profile in Salesforce, provisioning the loyalty account, and sending a welcome email via SendGrid."
  tags:
    - loyalty
    - pro-services
    - salesforce
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: loyalty-enrollment
      port: 8080
      tools:
        - name: enroll-loyalty-member
          description: "Enroll a new customer in the Pro Xtra loyalty program."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "Customer full name."
            - name: email
              in: body
              type: string
              description: "Customer email."
            - name: business_name
              in: body
              type: string
              description: "Business name."
            - name: trade
              in: body
              type: string
              description: "Trade specialty."
          steps:
            - name: create-sf-contact
              type: call
              call: "salesforce.create-contact"
              with:
                name: "{{customer_name}}"
                email: "{{email}}"
                company: "{{business_name}}"
                trade: "{{trade}}"
            - name: create-loyalty-account
              type: call
              call: "loyalty-platform.create-member"
              with:
                contact_id: "{{create-sf-contact.id}}"
                program: "pro_xtra"
                tier: "silver"
            - name: send-welcome
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{email}}"
                template_id: "pro_xtra_welcome"
                dynamic_data:
                  name: "{{customer_name}}"
                  member_id: "{{create-loyalty-account.member_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          operations:
            - name: create-contact
              method: POST
    - type: http
      namespace: loyalty-platform
      baseUri: "https://loyalty.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loyalty_token"
      resources:
        - name: members
          path: "/members"
          operations:
            - name: create-member
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

When a customer initiates a return, looks up the order in SAP Commerce Cloud, creates a return authorization, updates inventory in Oracle Retail, and opens a ServiceNow case if the return exceeds the policy threshold.

naftiko: "0.5"
info:
  label: "Customer Return Processing"
  description: "When a customer initiates a return, looks up the order in SAP Commerce Cloud, creates a return authorization, updates inventory in Oracle Retail, and opens a ServiceNow case if the return exceeds the policy threshold."
  tags:
    - customer-service
    - returns
    - sap
    - oracle-cloud
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: process-return
          description: "Given an order ID, SKU, and reason code, look up the order, create the return authorization, adjust inventory, and escalate if needed."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original order ID."
            - name: sku
              in: body
              type: string
              description: "The SKU being returned."
            - name: reason_code
              in: body
              type: string
              description: "The return reason code (e.g. DEFECTIVE, WRONG_ITEM, NOT_NEEDED)."
            - name: store_id
              in: body
              type: string
              description: "The store processing the return."
          steps:
            - name: get-order
              type: call
              call: "sap-commerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-return-auth
              type: call
              call: "sap-commerce.create-return"
              with:
                order_id: "{{order_id}}"
                sku: "{{sku}}"
                reason: "{{reason_code}}"
            - name: adjust-inventory
              type: call
              call: "oracle-retail.adjust-stock"
              with:
                store_id: "{{store_id}}"
                sku: "{{sku}}"
                adjustment: "+1"
                reason: "return_{{create-return-auth.return_id}}"
            - name: escalate-if-needed
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "High-value return: Order {{order_id}} - {{sku}} (${{get-order.item_total}})"
                category: "return_escalation"
                assigned_group: "Store_Loss_Prevention"
                description: "Return auth {{create-return-auth.return_id}} for {{sku}} from order {{order_id}}. Reason: {{reason_code}}. Original amount: ${{get-order.item_total}}."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_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
              method: POST
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: stock-adjustments
          path: "/stores/{{store_id}}/items/{{sku}}/adjustments"
          inputParameters:
            - name: store_id
              in: path
            - name: sku
              in: path
          operations:
            - name: adjust-stock
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST

When a negative product review is posted, fetches the review from the e-commerce platform, creates a Salesforce case for customer outreach, and alerts the product manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Review Escalation"
  description: "When a negative product review is posted, fetches the review from the e-commerce platform, creates a Salesforce case for customer outreach, and alerts the product manager via Microsoft Teams."
  tags:
    - customer-service
    - reviews
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: review-escalation
      port: 8080
      tools:
        - name: escalate-negative-review
          description: "Given a review ID and product SKU, fetch the review, create a customer service case, and notify the product manager."
          inputParameters:
            - name: review_id
              in: body
              type: string
              description: "The product review ID."
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: product_manager_email
              in: body
              type: string
              description: "The product manager email for notification."
          steps:
            - name: get-review
              type: call
              call: "sap-commerce.get-review"
              with:
                review_id: "{{review_id}}"
                sku: "{{sku}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Negative review escalation: {{sku}} - Rating {{get-review.rating}}/5"
                description: "Review by {{get-review.author}}: {{get-review.text}}. Rating: {{get-review.rating}}/5. SKU: {{sku}}."
                type: "Customer_Feedback"
                priority: "High"
            - name: notify-pm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{product_manager_email}}"
                text: "Negative review alert for SKU {{sku}}: {{get-review.rating}}/5 stars by {{get-review.author}}. Case {{create-case.case_number}} created. Review: \"{{get-review.text}}\""
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: reviews
          path: "/products/{{sku}}/reviews/{{review_id}}"
          inputParameters:
            - name: sku
              in: path
            - name: review_id
              in: path
          operations:
            - name: get-review
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries Datadog for the current health status and error rate of a specified microservice, returning p99 latency, error count, and alert status.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status and error rate of a specified microservice, returning p99 latency, error count, and alert status."
  tags:
    - monitoring
    - reliability
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-health
          description: "Given a service name, return the current p99 latency, error rate, and active alert count from Datadog."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name (e.g. cart-service, checkout-api)."
          call: "datadog.query-metrics"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: p99_latency_ms
              type: number
              mapping: "$.series[0].pointlist[-1][1]"
            - name: error_rate
              type: number
              mapping: "$.series[1].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET

Processes inbound shipments at distribution centers by validating ASN in SAP, creating receiving tasks in WMS, and updating vendor delivery metrics in Snowflake.

naftiko: "0.5"
info:
  label: "DC Inbound Shipment Receiving Pipeline"
  description: "Processes inbound shipments at distribution centers by validating ASN in SAP, creating receiving tasks in WMS, and updating vendor delivery metrics in Snowflake."
  tags:
    - supply-chain
    - warehouse
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: dc-receiving
      port: 8080
      tools:
        - name: receive-inbound-shipment
          description: "Process inbound shipment receiving at a distribution center."
          inputParameters:
            - name: asn_number
              in: body
              type: string
              description: "The advance ship notice number."
            - name: dc_id
              in: body
              type: string
              description: "The distribution center ID."
          steps:
            - name: validate-asn
              type: call
              call: "sap.get-asn"
              with:
                asn: "{{asn_number}}"
            - name: create-receiving-task
              type: call
              call: "wms.create-receipt"
              with:
                dc_id: "{{dc_id}}"
                po_number: "{{validate-asn.po_number}}"
                vendor: "{{validate-asn.vendor_id}}"
                items: "{{validate-asn.line_items}}"
            - name: update-vendor-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO vendor_delivery_metrics (vendor_id, asn_number, dc_id, on_time, in_full, received_at) VALUES ('{{validate-asn.vendor_id}}', '{{asn_number}}', '{{dc_id}}', true, true, CURRENT_TIMESTAMP())"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_ASN_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: asns
          path: "/ASNSet('{{asn}}')"
          inputParameters:
            - name: asn
              in: path
          operations:
            - name: get-asn
              method: GET
    - type: http
      namespace: wms
      baseUri: "https://wms.homedepot.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: receipts
          path: "/receipts"
          operations:
            - name: create-receipt
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Optimizes last-mile delivery routes by pulling pending deliveries from SAP, calculating optimal routes via Google Maps, and assigning to drivers in the dispatch system.

naftiko: "0.5"
info:
  label: "Delivery Route Optimization Orchestrator"
  description: "Optimizes last-mile delivery routes by pulling pending deliveries from SAP, calculating optimal routes via Google Maps, and assigning to drivers in the dispatch system."
  tags:
    - logistics
    - delivery
    - sap
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: route-optimization
      port: 8080
      tools:
        - name: optimize-delivery-routes
          description: "Optimize delivery routes for a distribution center."
          inputParameters:
            - name: dc_id
              in: body
              type: string
              description: "The distribution center ID."
            - name: delivery_date
              in: body
              type: string
              description: "Delivery date in YYYY-MM-DD."
          steps:
            - name: get-pending-deliveries
              type: call
              call: "sap.get-delivery-list"
              with:
                facility: "{{dc_id}}"
                date: "{{delivery_date}}"
            - name: calculate-routes
              type: call
              call: "google-maps.optimize-routes"
              with:
                origin: "{{dc_id}}"
                waypoints: "{{get-pending-deliveries.addresses}}"
            - name: assign-drivers
              type: call
              call: "dispatch.assign-routes"
              with:
                dc_id: "{{dc_id}}"
                routes: "{{calculate-routes.optimized_routes}}"
                date: "{{delivery_date}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZTM_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/DeliverySet?$filter=Facility eq '{{facility}}' and Date eq '{{date}}'"
          inputParameters:
            - name: facility
              in: query
            - name: date
              in: query
          operations:
            - name: get-delivery-list
              method: GET
    - type: http
      namespace: google-maps
      baseUri: "https://routes.googleapis.com/distanceMatrix/v2"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
      resources:
        - name: routes
          path: "/computeRoutes"
          operations:
            - name: optimize-routes
              method: POST
    - type: http
      namespace: dispatch
      baseUri: "https://dispatch.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dispatch_token"
      resources:
        - name: routes
          path: "/route-assignments"
          operations:
            - name: assign-routes
              method: POST

Processes digital coupon redemptions by validating the coupon, applying the discount in the POS system, and recording the redemption in Snowflake for analytics.

naftiko: "0.5"
info:
  label: "Digital Coupon Redemption Orchestrator"
  description: "Processes digital coupon redemptions by validating the coupon, applying the discount in the POS system, and recording the redemption in Snowflake for analytics."
  tags:
    - marketing
    - promotions
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: coupon-redemption
      port: 8080
      tools:
        - name: redeem-digital-coupon
          description: "Process a digital coupon redemption."
          inputParameters:
            - name: coupon_code
              in: body
              type: string
              description: "The digital coupon code."
            - name: transaction_id
              in: body
              type: string
              description: "The POS transaction ID."
            - name: store_id
              in: body
              type: string
              description: "The store number."
          steps:
            - name: validate-coupon
              type: call
              call: "promotions.validate-coupon"
              with:
                code: "{{coupon_code}}"
            - name: apply-discount
              type: call
              call: "pos-system.apply-discount"
              with:
                transaction_id: "{{transaction_id}}"
                discount_amount: "{{validate-coupon.discount_value}}"
                coupon_code: "{{coupon_code}}"
            - name: record-redemption
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO coupon_redemptions (coupon_code, store_id, transaction_id, discount_amount, redeemed_at) VALUES ('{{coupon_code}}', '{{store_id}}', '{{transaction_id}}', {{validate-coupon.discount_value}}, CURRENT_TIMESTAMP())"
  consumes:
    - type: http
      namespace: promotions
      baseUri: "https://promotions.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.promotions_token"
      resources:
        - name: coupons
          path: "/coupons/validate"
          operations:
            - name: validate-coupon
              method: POST
    - type: http
      namespace: pos-system
      baseUri: "https://pos.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: discounts
          path: "/transactions/{{transaction_id}}/discounts"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: apply-discount
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

When Dynatrace detects a synthetic monitor failure for homedepot.com, fetches the failure details, creates a PagerDuty-style ServiceNow incident, and posts an alert to the SRE Microsoft Teams channel with diagnostic links.

naftiko: "0.5"
info:
  label: "Dynatrace Synthetic Monitor Alert Handler"
  description: "When Dynatrace detects a synthetic monitor failure for homedepot.com, fetches the failure details, creates a PagerDuty-style ServiceNow incident, and posts an alert to the SRE Microsoft Teams channel with diagnostic links."
  tags:
    - monitoring
    - e-commerce
    - dynatrace
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: synthetic-alerts
      port: 8080
      tools:
        - name: handle-synthetic-failure
          description: "Given a Dynatrace monitor ID and failure timestamp, fetch details, create an incident, and alert SRE."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Dynatrace synthetic monitor ID."
            - name: failure_timestamp
              in: body
              type: string
              description: "The failure timestamp in ISO 8601 format."
          steps:
            - name: get-failure-details
              type: call
              call: "dynatrace.get-monitor-result"
              with:
                monitor_id: "{{monitor_id}}"
                timestamp: "{{failure_timestamp}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Synthetic monitor failure: {{get-failure-details.monitor_name}}"
                priority: "1"
                category: "website_availability"
                assigned_group: "SRE_Team"
                description: "Monitor: {{get-failure-details.monitor_name}}. Location: {{get-failure-details.location}}. Error: {{get-failure-details.error_message}}. Response time: {{get-failure-details.response_time_ms}}ms."
            - name: alert-sre
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "sre-alerts"
                text: "SITE ALERT: Synthetic monitor '{{get-failure-details.monitor_name}}' FAILED at {{failure_timestamp}}. Location: {{get-failure-details.location}}. Error: {{get-failure-details.error_message}}. Incident: {{create-incident.number}}. Dashboard: {{get-failure-details.dashboard_url}}"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://homedepot.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: monitors
          path: "/synthetic/monitors/{{monitor_id}}/results"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor-result
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Collects A/B test results from Google Optimize, enriches with revenue data from Google Analytics, and publishes findings to Confluence.

naftiko: "0.5"
info:
  label: "E-Commerce A/B Test Results Pipeline"
  description: "Collects A/B test results from Google Optimize, enriches with revenue data from Google Analytics, and publishes findings to Confluence."
  tags:
    - e-commerce
    - experimentation
    - google-analytics
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: ab-test-results
      port: 8080
      tools:
        - name: collect-ab-results
          description: "Collect and publish A/B test results."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "The Google Optimize experiment ID."
          steps:
            - name: get-experiment-results
              type: call
              call: "google-optimize.get-experiment"
              with:
                id: "{{experiment_id}}"
            - name: get-revenue-impact
              type: call
              call: "google-analytics.get-report"
              with:
                experiment_id: "{{experiment_id}}"
                metric: "revenue"
            - name: publish-findings
              type: call
              call: "confluence.create-page"
              with:
                space: "ECOMM"
                title: "A/B Test Results: {{get-experiment-results.name}}"
                body: "Winner: {{get-experiment-results.winner}}. Conversion lift: {{get-experiment-results.lift_pct}}%. Revenue impact: ${{get-revenue-impact.incremental_revenue}}."
  consumes:
    - type: http
      namespace: google-optimize
      baseUri: "https://www.googleapis.com/analytics/v3/management"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: experiments
          path: "/accounts/homedepot/experiments/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-experiment
              method: GET
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/homedepot:runReport"
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Schedules fleet vehicle maintenance by checking mileage from the telematics system, creating a work order in ServiceNow, and booking the appointment with the service provider.

naftiko: "0.5"
info:
  label: "Fleet Vehicle Maintenance Scheduler"
  description: "Schedules fleet vehicle maintenance by checking mileage from the telematics system, creating a work order in ServiceNow, and booking the appointment with the service provider."
  tags:
    - fleet
    - maintenance
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: fleet-maintenance
      port: 8080
      tools:
        - name: schedule-maintenance
          description: "Schedule preventive maintenance for a fleet vehicle."
          inputParameters:
            - name: vehicle_id
              in: body
              type: string
              description: "The fleet vehicle ID."
          steps:
            - name: get-vehicle-status
              type: call
              call: "telematics.get-vehicle"
              with:
                id: "{{vehicle_id}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "PM: Vehicle {{vehicle_id}} at {{get-vehicle-status.mileage}} miles"
                category: "fleet_maintenance"
                assignment_group: "Fleet_Operations"
            - name: book-service
              type: call
              call: "fleet-service.book-appointment"
              with:
                vehicle_id: "{{vehicle_id}}"
                mileage: "{{get-vehicle-status.mileage}}"
                service_type: "preventive_maintenance"
  consumes:
    - type: http
      namespace: telematics
      baseUri: "https://telematics.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.telematics_token"
      resources:
        - name: vehicles
          path: "/vehicles/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-vehicle
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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: fleet-service
      baseUri: "https://fleet.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fleet_service_token"
      resources:
        - name: appointments
          path: "/appointments"
          operations:
            - name: book-appointment
              method: POST

Manages the flooring installation workflow by capturing measurements in the field service system, generating a materials quote in SAP, and scheduling the installation appointment.

naftiko: "0.5"
info:
  label: "Flooring Measurement to Install Pipeline"
  description: "Manages the flooring installation workflow by capturing measurements in the field service system, generating a materials quote in SAP, and scheduling the installation appointment."
  tags:
    - home-services
    - flooring
    - sap
capability:
  exposes:
    - type: mcp
      namespace: flooring-install
      port: 8080
      tools:
        - name: process-flooring-measurement
          description: "Convert a flooring measurement into an installation appointment."
          inputParameters:
            - name: measurement_id
              in: body
              type: string
              description: "The field measurement ID."
            - name: customer_id
              in: body
              type: string
              description: "The customer account ID."
          steps:
            - name: get-measurements
              type: call
              call: "field-service.get-measurement"
              with:
                id: "{{measurement_id}}"
            - name: generate-quote
              type: call
              call: "sap.create-quote"
              with:
                customer: "{{customer_id}}"
                square_footage: "{{get-measurements.total_sqft}}"
                product_sku: "{{get-measurements.selected_product}}"
            - name: schedule-install
              type: call
              call: "field-service.create-appointment"
              with:
                customer_id: "{{customer_id}}"
                service_type: "flooring_installation"
                quote_ref: "{{generate-quote.quote_number}}"
  consumes:
    - type: http
      namespace: field-service
      baseUri: "https://fieldservice.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.field_service_token"
      resources:
        - name: measurements
          path: "/measurements/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-measurement
              method: GET
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_QUOTE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: quotes
          path: "/QuoteSet"
          operations:
            - name: create-quote
              method: POST

Coordinates seasonal garden center resets by updating planograms in Oracle Retail, generating purchase orders in SAP, and notifying store teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Garden Center Seasonal Reset Orchestrator"
  description: "Coordinates seasonal garden center resets by updating planograms in Oracle Retail, generating purchase orders in SAP, and notifying store teams via Microsoft Teams."
  tags:
    - merchandising
    - garden
    - oracle-cloud
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: garden-reset
      port: 8080
      tools:
        - name: execute-seasonal-reset
          description: "Execute a seasonal garden center reset."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: season
              in: body
              type: string
              description: "The season (spring, summer, fall, holiday)."
          steps:
            - name: update-planogram
              type: call
              call: "oracle-retail.update-planogram"
              with:
                store: "{{store_id}}"
                department: "garden"
                template: "garden_{{season}}"
            - name: generate-po
              type: call
              call: "sap.create-purchase-order"
              with:
                store: "{{store_id}}"
                category: "garden_seasonal_{{season}}"
            - name: notify-store
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store-{{store_id}}-merchandising"
                text: "Garden center {{season}} reset initiated. New planogram deployed. PO {{generate-po.po_number}} created for seasonal inventory."
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-msm/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: planograms
          path: "/stores/{{store}}/planograms/{{department}}"
          inputParameters:
            - name: store
              in: path
            - name: department
              in: path
          operations:
            - name: update-planogram
              method: PUT
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_PO_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/PurchaseOrderSet"
          operations:
            - name: create-purchase-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a GitHub deployment completes, fetches the deployment details, checks Datadog for post-deploy error spikes, and posts the deployment summary to the engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Deployment Notification"
  description: "When a GitHub deployment completes, fetches the deployment details, checks Datadog for post-deploy error spikes, and posts the deployment summary to the engineering Microsoft Teams channel."
  tags:
    - development
    - ci-cd
    - github
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deploy-notify
      port: 8080
      tools:
        - name: notify-deployment
          description: "Given a GitHub repo and deployment ID, fetch details, check for error spikes, and notify the team."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository (org/repo format)."
            - name: deployment_id
              in: body
              type: string
              description: "The GitHub deployment ID."
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name to monitor post-deploy."
          steps:
            - name: get-deployment
              type: call
              call: "github.get-deployment"
              with:
                repo: "{{repo}}"
                deployment_id: "{{deployment_id}}"
            - name: check-errors
              type: call
              call: "datadog.query-metrics"
              with:
                service_name: "{{service_name}}"
            - name: notify-team
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "engineering-deploys"
                text: "Deployment {{deployment_id}} to {{get-deployment.environment}}: {{get-deployment.status}}. Ref: {{get-deployment.ref}}. Creator: {{get-deployment.creator}}. Post-deploy error rate: {{check-errors.error_rate}}%."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com/repos"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: deployments
          path: "/{{repo}}/deployments/{{deployment_id}}"
          inputParameters:
            - name: repo
              in: path
            - name: deployment_id
              in: path
          operations:
            - name: get-deployment
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Retrieves campaign performance metrics from Google Ads including impressions, clicks, conversions, and cost per acquisition.

naftiko: "0.5"
info:
  label: "Google Ads Campaign Performance Report"
  description: "Retrieves campaign performance metrics from Google Ads including impressions, clicks, conversions, and cost per acquisition."
  tags:
    - marketing
    - advertising
    - google-ads
capability:
  exposes:
    - type: mcp
      namespace: google-ads
      port: 8080
      tools:
        - name: get-campaign-performance
          description: "Fetch Google Ads campaign performance metrics."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Google Ads campaign ID."
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD_YYYY-MM-DD format."
          call: "google-ads.get-report"
          with:
            campaign: "{{campaign_id}}"
            dates: "{{date_range}}"
          outputParameters:
            - name: impressions
              type: integer
              mapping: "$.metrics.impressions"
            - name: clicks
              type: integer
              mapping: "$.metrics.clicks"
            - name: conversions
              type: number
              mapping: "$.metrics.conversions"
            - name: cpa
              type: number
              mapping: "$.metrics.costPerConversion"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v15"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: reports
          path: "/customers/homedepot/campaigns/{{campaign}}/metrics"
          inputParameters:
            - name: campaign
              in: path
          operations:
            - name: get-report
              method: GET

Pulls page view metrics and bounce rate from Google Analytics for a given product page URL over a specified date range.

naftiko: "0.5"
info:
  label: "Google Analytics Page Performance"
  description: "Pulls page view metrics and bounce rate from Google Analytics for a given product page URL over a specified date range."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-page-metrics
          description: "Given a page path and date range, return page views, unique visitors, bounce rate, and average session duration from Google Analytics."
          inputParameters:
            - name: page_path
              in: body
              type: string
              description: "The URL path of the product page (e.g. /p/product-name/123456)."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "ga.run-report"
          with:
            page_path: "{{page_path}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: page_views
              type: number
              mapping: "$.rows[0].metricValues[0].value"
            - name: bounce_rate
              type: string
              mapping: "$.rows[0].metricValues[1].value"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST

Given a ZIP code or city name, queries Google Maps Places API to find the nearest Home Depot stores with addresses, phone numbers, and operating hours.

naftiko: "0.5"
info:
  label: "Google Maps Store Locator"
  description: "Given a ZIP code or city name, queries Google Maps Places API to find the nearest Home Depot stores with addresses, phone numbers, and operating hours."
  tags:
    - customer-service
    - store-locator
    - google-maps
capability:
  exposes:
    - type: mcp
      namespace: store-locator
      port: 8080
      tools:
        - name: find-nearest-stores
          description: "Given a location query string, return the nearest Home Depot stores with address, phone, and hours."
          inputParameters:
            - name: location_query
              in: body
              type: string
              description: "A ZIP code, city, or address to search near."
          call: "gmaps.nearby-search"
          with:
            query: "Home Depot near {{location_query}}"
          outputParameters:
            - name: stores
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api/place"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
      resources:
        - name: nearby
          path: "/textsearch/json"
          operations:
            - name: nearby-search
              method: GET

Converts home services leads by enriching in Salesforce, checking installer availability, and scheduling the consultation appointment via the field service platform.

naftiko: "0.5"
info:
  label: "Home Services Lead to Appointment Pipeline"
  description: "Converts home services leads by enriching in Salesforce, checking installer availability, and scheduling the consultation appointment via the field service platform."
  tags:
    - home-services
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: services-leads
      port: 8080
      tools:
        - name: convert-services-lead
          description: "Convert a home services lead into a scheduled appointment."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID."
            - name: service_type
              in: body
              type: string
              description: "Service type (roofing, flooring, hvac, etc.)."
            - name: zip_code
              in: body
              type: string
              description: "Customer zip code."
          steps:
            - name: get-lead
              type: call
              call: "salesforce.get-lead"
              with:
                id: "{{lead_id}}"
            - name: find-installer
              type: call
              call: "field-service.check-availability"
              with:
                service_type: "{{service_type}}"
                zip_code: "{{zip_code}}"
            - name: schedule-appointment
              type: call
              call: "field-service.create-appointment"
              with:
                lead_name: "{{get-lead.Name}}"
                phone: "{{get-lead.Phone}}"
                service_type: "{{service_type}}"
                installer_id: "{{find-installer.installer_id}}"
                preferred_date: "{{find-installer.next_available}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-lead
              method: GET
    - type: http
      namespace: field-service
      baseUri: "https://fieldservice.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.field_service_token"
      resources:
        - name: availability
          path: "/installers/availability"
          operations:
            - name: check-availability
              method: POST
        - name: appointments
          path: "/appointments"
          operations:
            - name: create-appointment
              method: POST

When a customer requests an installation quote (flooring, countertops, HVAC), captures the lead in HubSpot, finds the nearest certified installer via Google Maps, creates a Salesforce opportunity, and schedules the consultation via ServiceNow.

naftiko: "0.5"
info:
  label: "Installation Services Lead Router"
  description: "When a customer requests an installation quote (flooring, countertops, HVAC), captures the lead in HubSpot, finds the nearest certified installer via Google Maps, creates a Salesforce opportunity, and schedules the consultation via ServiceNow."
  tags:
    - sales
    - installation-services
    - hubspot
    - google-maps
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: install-services
      port: 8080
      tools:
        - name: route-install-lead
          description: "Given customer details and installation type, create the lead, find an installer, create an opportunity, and schedule the consultation."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The customer full name."
            - name: customer_email
              in: body
              type: string
              description: "The customer email."
            - name: customer_address
              in: body
              type: string
              description: "The customer address for installation."
            - name: install_type
              in: body
              type: string
              description: "Type of installation (e.g. FLOORING, COUNTERTOP, HVAC, ROOFING)."
            - name: estimated_budget
              in: body
              type: number
              description: "The customer estimated budget."
          steps:
            - name: create-lead
              type: call
              call: "hubspot.create-contact"
              with:
                name: "{{customer_name}}"
                email: "{{customer_email}}"
                address: "{{customer_address}}"
                lead_source: "Installation_Request"
                install_type: "{{install_type}}"
            - name: find-installer
              type: call
              call: "gmaps.nearby-search"
              with:
                query: "{{install_type}} installer near {{customer_address}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Install - {{install_type}} - {{customer_name}}"
                amount: "{{estimated_budget}}"
                stage: "Lead"
                contact_email: "{{customer_email}}"
            - name: schedule-consultation
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Installation consultation: {{install_type}} - {{customer_name}}"
                assigned_group: "Installation_Services"
                description: "Customer: {{customer_name}}. Address: {{customer_address}}. Type: {{install_type}}. Budget: ${{estimated_budget}}. Nearest installer: {{find-installer.stores[0].name}}. Opportunity: {{create-opportunity.id}}."
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts"
          operations:
            - name: create-contact
              method: POST
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api/place"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_key"
      resources:
        - name: nearby
          path: "/textsearch/json"
          operations:
            - name: nearby-search
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST

When Oracle Retail detects stock falling below reorder point, creates a purchase requisition in SAP, notifies the category merchant via Microsoft Teams, and logs the auto-reorder event in Confluence.

naftiko: "0.5"
info:
  label: "Inventory Reorder Automation"
  description: "When Oracle Retail detects stock falling below reorder point, creates a purchase requisition in SAP, notifies the category merchant via Microsoft Teams, and logs the auto-reorder event in Confluence."
  tags:
    - inventory
    - supply-chain
    - oracle-cloud
    - sap
    - microsoft-teams
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: auto-reorder
      port: 8080
      tools:
        - name: trigger-auto-reorder
          description: "Given a SKU, store ID, and current on-hand quantity, create a purchase requisition and notify the merchant."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU that is low on stock."
            - name: store_id
              in: body
              type: string
              description: "The store number where stock is low."
            - name: on_hand_qty
              in: body
              type: number
              description: "The current on-hand quantity."
            - name: reorder_qty
              in: body
              type: number
              description: "The recommended reorder quantity."
            - name: merchant_email
              in: body
              type: string
              description: "The category merchant email."
          steps:
            - name: get-product
              type: call
              call: "sap-commerce.get-product"
              with:
                sku: "{{sku}}"
            - name: create-requisition
              type: call
              call: "sap.create-requisition"
              with:
                material: "{{sku}}"
                plant: "Store_{{store_id}}"
                quantity: "{{reorder_qty}}"
                description: "Auto-reorder: {{get-product.product_name}} (on-hand: {{on_hand_qty}})"
            - name: notify-merchant
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{merchant_email}}"
                text: "Auto-reorder triggered: {{get-product.product_name}} ({{sku}}) at Store #{{store_id}}. On-hand: {{on_hand_qty}}. Reorder qty: {{reorder_qty}}. Requisition: {{create-requisition.req_number}}."
            - name: log-event
              type: call
              call: "confluence.create-page"
              with:
                space_key: "INVENTORY"
                title: "Auto-Reorder: {{sku}} - Store #{{store_id}} - {{create-requisition.req_number}}"
                body: "Product: {{get-product.product_name}}. On-hand: {{on_hand_qty}}. Reorder qty: {{reorder_qty}}. Requisition: {{create-requisition.req_number}}."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseRequisition"
          operations:
            - name: create-requisition
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves the current sprint status for the e-commerce development team in Jira, returning sprint goal, completion percentage, and blockers.

naftiko: "0.5"
info:
  label: "Jira E-Commerce Sprint Status"
  description: "Retrieves the current sprint status for the e-commerce development team in Jira, returning sprint goal, completion percentage, and blockers."
  tags:
    - engineering
    - e-commerce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: ecommerce-sprints
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Get current sprint status for e-commerce team."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID."
          call: "jira.get-active-sprint"
          with:
            board: "{{board_id}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.values[0].name"
            - name: goal
              type: string
              mapping: "$.values[0].goal"
            - name: start_date
              type: string
              mapping: "$.values[0].startDate"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://homedepot.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/board/{{board}}/sprint?state=active"
          inputParameters:
            - name: board
              in: path
          operations:
            - name: get-active-sprint
              method: GET

Looks up a Jira issue by key and returns the current status, assignee, sprint, and story points for engineering and store technology teams.

naftiko: "0.5"
info:
  label: "Jira Ticket Status"
  description: "Looks up a Jira issue by key and returns the current status, assignee, sprint, and story points for engineering and store technology teams."
  tags:
    - development
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: dev-tracking
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Given a Jira issue key, return the issue summary, status, assignee, sprint name, and story points."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g. STORE-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: sprint
              type: string
              mapping: "$.fields.sprint.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://homedepot.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

When a customer requests a kitchen design consultation, creates the lead in HubSpot, checks designer availability in the workforce management system, books the appointment in ServiceNow, and sends a confirmation via MailChimp with preparation tips.

naftiko: "0.5"
info:
  label: "Kitchen Design Consultation Scheduler"
  description: "When a customer requests a kitchen design consultation, creates the lead in HubSpot, checks designer availability in the workforce management system, books the appointment in ServiceNow, and sends a confirmation via MailChimp with preparation tips."
  tags:
    - sales
    - kitchen-design
    - hubspot
    - workforce-management
    - servicenow
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: kitchen-design
      port: 8080
      tools:
        - name: schedule-kitchen-consultation
          description: "Given customer details and preferred store, create the lead, find an available designer, book the appointment, and confirm."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The customer full name."
            - name: customer_email
              in: body
              type: string
              description: "The customer email."
            - name: store_id
              in: body
              type: string
              description: "The preferred store for the consultation."
            - name: preferred_date
              in: body
              type: string
              description: "Preferred consultation date in YYYY-MM-DD format."
            - name: project_scope
              in: body
              type: string
              description: "Description of the kitchen project scope."
          steps:
            - name: create-lead
              type: call
              call: "hubspot.create-contact"
              with:
                name: "{{customer_name}}"
                email: "{{customer_email}}"
                lead_source: "Kitchen_Design"
                notes: "{{project_scope}}"
            - name: find-designer
              type: call
              call: "wfm.get-available-specialist"
              with:
                store_id: "{{store_id}}"
                specialty: "kitchen_design"
                date: "{{preferred_date}}"
            - name: book-appointment
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Kitchen design consultation: {{customer_name}}"
                assigned_to: "{{find-designer.designer_id}}"
                scheduled_date: "{{find-designer.available_slot}}"
                description: "Customer: {{customer_name}}. Project: {{project_scope}}. Store #{{store_id}}."
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "kitchen_design_confirm"
                to_email: "{{customer_email}}"
                merge_vars:
                  customer_name: "{{customer_name}}"
                  designer_name: "{{find-designer.designer_name}}"
                  appointment_date: "{{find-designer.available_slot}}"
                  store_id: "{{store_id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts"
          operations:
            - name: create-contact
              method: POST
    - type: http
      namespace: wfm
      baseUri: "https://wfm.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wfm_token"
      resources:
        - name: specialists
          path: "/stores/{{store_id}}/specialists/availability"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-available-specialist
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Posts employer brand content to LinkedIn, tracks engagement via LinkedIn Analytics, cross-references with career page traffic in Google Analytics, and summarizes results in a Confluence page for the talent acquisition team.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Campaign"
  description: "Posts employer brand content to LinkedIn, tracks engagement via LinkedIn Analytics, cross-references with career page traffic in Google Analytics, and summarizes results in a Confluence page for the talent acquisition team."
  tags:
    - hr
    - employer-brand
    - linkedin
    - google-analytics
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: employer-brand
      port: 8080
      tools:
        - name: run-employer-brand-campaign
          description: "Given post content and tracking parameters, publish to LinkedIn, monitor engagement, pull career page analytics, and summarize."
          inputParameters:
            - name: post_content
              in: body
              type: string
              description: "The LinkedIn post content."
            - name: campaign_name
              in: body
              type: string
              description: "The internal campaign name for tracking."
          steps:
            - name: publish-post
              type: call
              call: "linkedin.create-post"
              with:
                text: "{{post_content}}"
                visibility: "PUBLIC"
            - name: get-engagement
              type: call
              call: "linkedin.get-post-stats"
              with:
                post_id: "{{publish-post.id}}"
            - name: get-career-traffic
              type: call
              call: "ga.run-report"
              with:
                page_path: "/careers"
                start_date: "2026-03-20"
                end_date: "2026-03-27"
            - name: publish-summary
              type: call
              call: "confluence.create-page"
              with:
                space_key: "TALENT"
                title: "Employer Brand: {{campaign_name}}"
                body: "LinkedIn post: {{publish-post.id}}. Impressions: {{get-engagement.impressions}}. Clicks: {{get-engagement.clicks}}. Career page views: {{get-career-traffic.page_views}}. Bounce rate: {{get-career-traffic.bounce_rate}}."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: posts
          path: "/ugcPosts"
          operations:
            - name: create-post
              method: POST
        - name: stats
          path: "/socialActions/{{post_id}}"
          inputParameters:
            - name: post_id
              in: path
          operations:
            - name: get-post-stats
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Initiates loss prevention investigations by pulling transaction anomalies from Snowflake, creating a case in ServiceNow, and alerting the LP team via Slack.

naftiko: "0.5"
info:
  label: "Loss Prevention Investigation Pipeline"
  description: "Initiates loss prevention investigations by pulling transaction anomalies from Snowflake, creating a case in ServiceNow, and alerting the LP team via Slack."
  tags:
    - loss-prevention
    - security
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: loss-prevention
      port: 8080
      tools:
        - name: initiate-investigation
          description: "Initiate a loss prevention investigation."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: anomaly_type
              in: body
              type: string
              description: "Type of anomaly detected."
            - name: transaction_ids
              in: body
              type: string
              description: "Comma-separated suspicious transaction IDs."
          steps:
            - name: get-transaction-details
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT transaction_id, amount, cashier_id, timestamp FROM transactions WHERE transaction_id IN ('{{transaction_ids}}') AND store_id = '{{store_id}}'"
            - name: create-lp-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "LP Investigation: Store {{store_id}} - {{anomaly_type}}"
                category: "loss_prevention"
                description: "Anomaly: {{anomaly_type}}. Transactions: {{transaction_ids}}."
            - name: alert-lp-team
              type: call
              call: "slack.post-message"
              with:
                channel: "loss-prevention-alerts"
                text: "LP Investigation opened for Store {{store_id}}: {{anomaly_type}}. Case: {{create-lp-case.number}}. Transactions flagged: {{transaction_ids}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves email campaign performance metrics from MailChimp including open rate, click rate, unsubscribes, and revenue attributed for a given campaign ID.

naftiko: "0.5"
info:
  label: "MailChimp Campaign Metrics"
  description: "Retrieves email campaign performance metrics from MailChimp including open rate, click rate, unsubscribes, and revenue attributed for a given campaign ID."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: get-campaign-report
          description: "Given a MailChimp campaign ID, return open rate, click rate, unsubscribes, and attributed revenue."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The MailChimp campaign ID."
          call: "mailchimp.get-report"
          with:
            campaign_id: "{{campaign_id}}"
          outputParameters:
            - name: open_rate
              type: number
              mapping: "$.opens.open_rate"
            - name: click_rate
              type: number
              mapping: "$.clicks.click_rate"
            - name: unsubscribes
              type: number
              mapping: "$.unsubscribed"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: reports
          path: "/reports/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-report
              method: GET

Pulls clearance candidates from Oracle Retail based on aging inventory, calculates optimal markdown percentage via the pricing engine, updates SAP Commerce Cloud pricing, and logs the markdown in Confluence for merchant review.

naftiko: "0.5"
info:
  label: "Merchandise Markdown Processor"
  description: "Pulls clearance candidates from Oracle Retail based on aging inventory, calculates optimal markdown percentage via the pricing engine, updates SAP Commerce Cloud pricing, and logs the markdown in Confluence for merchant review."
  tags:
    - pricing
    - merchandising
    - oracle-cloud
    - sap
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: markdown-processor
      port: 8080
      tools:
        - name: process-markdowns
          description: "Given a department and aging threshold, identify candidates, calculate markdowns, update prices, and document."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department to evaluate for markdowns."
            - name: aging_days
              in: body
              type: number
              description: "The minimum days on shelf to qualify for markdown."
            - name: max_markdown_pct
              in: body
              type: number
              description: "The maximum markdown percentage allowed."
          steps:
            - name: get-aging-inventory
              type: call
              call: "oracle-retail.get-aging-items"
              with:
                department: "{{department}}"
                min_days: "{{aging_days}}"
            - name: calculate-markdown
              type: call
              call: "pricing-engine.calculate-markdown"
              with:
                items: "{{get-aging-inventory.items}}"
                max_markdown: "{{max_markdown_pct}}"
            - name: update-prices
              type: call
              call: "sap-commerce.bulk-price-update"
              with:
                price_updates: "{{calculate-markdown.recommendations}}"
            - name: log-markdowns
              type: call
              call: "confluence.create-page"
              with:
                space_key: "MERCH"
                title: "Markdowns: {{department}} - Aging >{{aging_days}} days"
                body: "Items marked down: {{calculate-markdown.item_count}}. Average markdown: {{calculate-markdown.avg_markdown_pct}}%. Total inventory value reduced: ${{calculate-markdown.total_value_reduction}}. Updated in SAP Commerce: {{update-prices.success_count}} SKUs."
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: aging
          path: "/departments/{{department}}/aging-inventory"
          inputParameters:
            - name: department
              in: path
          operations:
            - name: get-aging-items
              method: GET
    - type: http
      namespace: pricing-engine
      baseUri: "https://pricing.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pricing_engine_token"
      resources:
        - name: markdowns
          path: "/markdowns/calculate"
          operations:
            - name: calculate-markdown
              method: POST
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: prices
          path: "/products/prices/bulk"
          operations:
            - name: bulk-price-update
              method: PUT
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Queries New Relic for application response time, throughput, and error rate for a given application name, providing real-time performance visibility for the e-commerce platform.

naftiko: "0.5"
info:
  label: "New Relic Application Performance"
  description: "Queries New Relic for application response time, throughput, and error rate for a given application name, providing real-time performance visibility for the e-commerce platform."
  tags:
    - monitoring
    - e-commerce
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-app-performance
          description: "Given a New Relic application ID, return response time, throughput, and error rate metrics."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time_ms
              type: number
              mapping: "$.application.application_summary.response_time"
            - name: throughput_rpm
              type: number
              mapping: "$.application.application_summary.throughput"
            - name: error_rate
              type: number
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Provisions IT infrastructure for new store openings by creating Azure AD groups, setting up ServiceNow CMDB entries, and configuring network devices via the network management platform.

naftiko: "0.5"
info:
  label: "New Store Opening IT Provisioning"
  description: "Provisions IT infrastructure for new store openings by creating Azure AD groups, setting up ServiceNow CMDB entries, and configuring network devices via the network management platform."
  tags:
    - it
    - store-opening
    - azure-active-directory
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: store-it-provision
      port: 8080
      tools:
        - name: provision-new-store-it
          description: "Provision IT infrastructure for a new store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The new store number."
            - name: store_address
              in: body
              type: string
              description: "Store physical address."
            - name: district
              in: body
              type: string
              description: "District code."
          steps:
            - name: create-ad-groups
              type: call
              call: "azure-ad.create-group"
              with:
                display_name: "Store_{{store_id}}_Associates"
                mail_nickname: "store{{store_id}}"
            - name: create-cmdb-entries
              type: call
              call: "servicenow.create-ci"
              with:
                name: "Store_{{store_id}}_Infrastructure"
                location: "{{store_address}}"
                category: "store_network"
            - name: configure-network
              type: call
              call: "network-mgmt.provision-site"
              with:
                site_id: "store_{{store_id}}"
                address: "{{store_address}}"
                template: "standard_store"
  consumes:
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: groups
          path: "/groups"
          operations:
            - name: create-group
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cis
          path: "/table/cmdb_ci"
          operations:
            - name: create-ci
              method: POST
    - type: http
      namespace: network-mgmt
      baseUri: "https://network.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.network_mgmt_token"
      resources:
        - name: sites
          path: "/sites"
          operations:
            - name: provision-site
              method: POST

Recovers abandoned carts by pulling cart data from the e-commerce platform, enriching with customer profile from Salesforce, and sending recovery emails via MailChimp.

naftiko: "0.5"
info:
  label: "Omnichannel Cart Abandonment Recovery"
  description: "Recovers abandoned carts by pulling cart data from the e-commerce platform, enriching with customer profile from Salesforce, and sending recovery emails via MailChimp."
  tags:
    - e-commerce
    - marketing
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: cart-recovery
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Send cart abandonment recovery communication."
          inputParameters:
            - name: cart_id
              in: body
              type: string
              description: "The abandoned cart ID."
          steps:
            - name: get-cart-details
              type: call
              call: "ecommerce.get-cart"
              with:
                id: "{{cart_id}}"
            - name: get-customer-profile
              type: call
              call: "salesforce.get-contact"
              with:
                email: "{{get-cart-details.customer_email}}"
            - name: send-recovery-email
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "cart_abandonment_recovery"
                to_email: "{{get-cart-details.customer_email}}"
                merge_vars:
                  first_name: "{{get-customer-profile.FirstName}}"
                  cart_items: "{{get-cart-details.items_summary}}"
                  cart_total: "{{get-cart-details.total}}"
  consumes:
    - type: http
      namespace: ecommerce
      baseUri: "https://api.homedepot.com/ecommerce/v2"
      authentication:
        type: bearer
        token: "$secrets.ecommerce_token"
      resources:
        - name: carts
          path: "/carts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-cart
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/email/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

When a new e-commerce order is placed, validates inventory in Oracle Retail, creates a pick task in the warehouse management system, and sends an order confirmation via MailChimp transactional email.

naftiko: "0.5"
info:
  label: "Online Order Fulfillment Orchestrator"
  description: "When a new e-commerce order is placed, validates inventory in Oracle Retail, creates a pick task in the warehouse management system, and sends an order confirmation via MailChimp transactional email."
  tags:
    - e-commerce
    - fulfillment
    - oracle-cloud
    - mailchimp
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: process-new-order
          description: "Given an order ID, customer email, store ID, and SKU list, validate inventory, create pick tasks, and send order confirmation."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The e-commerce order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: store_id
              in: body
              type: string
              description: "The fulfillment store number."
            - name: sku_list
              in: body
              type: string
              description: "Comma-separated list of SKUs in the order."
          steps:
            - name: check-inventory
              type: call
              call: "oracle-retail.get-stock"
              with:
                store_id: "{{store_id}}"
                sku: "{{sku_list}}"
            - name: create-pick-task
              type: call
              call: "wms.create-task"
              with:
                order_id: "{{order_id}}"
                store_id: "{{store_id}}"
                items: "{{sku_list}}"
                priority: "standard"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "order_confirmation"
                to_email: "{{customer_email}}"
                merge_vars:
                  order_id: "{{order_id}}"
                  pick_task_id: "{{create-pick-task.task_id}}"
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: stock
          path: "/stores/{{store_id}}/items/{{sku}}/stock"
          inputParameters:
            - name: store_id
              in: path
            - name: sku
              in: path
          operations:
            - name: get-stock
              method: GET
    - type: http
      namespace: wms
      baseUri: "https://wms.homedepot.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: tasks
          path: "/pick-tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Processes online order returns by validating the return in Oracle Retail, issuing store credit in SAP, and sending confirmation via SendGrid email.

naftiko: "0.5"
info:
  label: "Online Return to Store Credit Pipeline"
  description: "Processes online order returns by validating the return in Oracle Retail, issuing store credit in SAP, and sending confirmation via SendGrid email."
  tags:
    - e-commerce
    - returns
    - oracle-cloud
    - sap
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: online-returns
      port: 8080
      tools:
        - name: process-online-return
          description: "Process an online return and issue store credit."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The original order ID."
            - name: return_sku
              in: body
              type: string
              description: "SKU being returned."
            - name: customer_email
              in: body
              type: string
              description: "Customer email."
          steps:
            - name: validate-return
              type: call
              call: "oracle-retail.validate-return"
              with:
                order_id: "{{order_id}}"
                sku: "{{return_sku}}"
            - name: issue-credit
              type: call
              call: "sap.create-credit-memo"
              with:
                order_ref: "{{order_id}}"
                amount: "{{validate-return.refund_amount}}"
            - name: send-confirmation
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{customer_email}}"
                template_id: "return_confirmation"
                dynamic_data:
                  order_id: "{{order_id}}"
                  credit_amount: "{{validate-return.refund_amount}}"
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: returns
          path: "/returns/validate"
          operations:
            - name: validate-return
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_CREDIT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: credits
          path: "/CreditMemoSet"
          operations:
            - name: create-credit-memo
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Retrieves the current planogram assignment for a product at a specific store from Oracle Retail, returning bay, shelf, and facing count.

naftiko: "0.5"
info:
  label: "Oracle Retail Planogram Lookup"
  description: "Retrieves the current planogram assignment for a product at a specific store from Oracle Retail, returning bay, shelf, and facing count."
  tags:
    - merchandising
    - planogram
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: planogram
      port: 8080
      tools:
        - name: get-planogram
          description: "Look up planogram placement for a product at a store."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: store_id
              in: body
              type: string
              description: "The store number."
          call: "oracle-retail.get-planogram"
          with:
            sku: "{{sku}}"
            store: "{{store_id}}"
          outputParameters:
            - name: bay
              type: string
              mapping: "$.planogram.bay"
            - name: shelf
              type: string
              mapping: "$.planogram.shelf"
            - name: facings
              type: integer
              mapping: "$.planogram.facings"
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-msm/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: planograms
          path: "/stores/{{store}}/planograms/{{sku}}"
          inputParameters:
            - name: store
              in: path
            - name: sku
              in: path
          operations:
            - name: get-planogram
              method: GET

Retrieves the current status and assigned responder for a PagerDuty incident related to homedepot.com e-commerce platform.

naftiko: "0.5"
info:
  label: "PagerDuty E-Commerce Incident Lookup"
  description: "Retrieves the current status and assigned responder for a PagerDuty incident related to homedepot.com e-commerce platform."
  tags:
    - operations
    - e-commerce
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: ecommerce-incidents
      port: 8080
      tools:
        - name: get-incident
          description: "Look up an e-commerce PagerDuty incident."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The PagerDuty incident ID."
          call: "pagerduty.get-incident"
          with:
            id: "{{incident_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.incident.status"
            - name: urgency
              type: string
              mapping: "$.incident.urgency"
            - name: responder
              type: string
              mapping: "$.incident.assignments[0].assignee.summary"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-incident
              method: GET

Processes paint color match requests by querying the formula database, creating a mix order in the store system, and notifying the paint desk associate via Slack.

naftiko: "0.5"
info:
  label: "Paint Color Match Order Pipeline"
  description: "Processes paint color match requests by querying the formula database, creating a mix order in the store system, and notifying the paint desk associate via Slack."
  tags:
    - paint
    - store-operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: paint-orders
      port: 8080
      tools:
        - name: process-color-match
          description: "Process a paint color match and create a mix order."
          inputParameters:
            - name: color_code
              in: body
              type: string
              description: "The color code from spectrophotometer."
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: base_product_sku
              in: body
              type: string
              description: "The paint base SKU."
          steps:
            - name: get-formula
              type: call
              call: "paint-system.match-color"
              with:
                color_code: "{{color_code}}"
                base_sku: "{{base_product_sku}}"
            - name: create-mix-order
              type: call
              call: "paint-system.create-order"
              with:
                store_id: "{{store_id}}"
                formula_id: "{{get-formula.formula_id}}"
                base_sku: "{{base_product_sku}}"
            - name: notify-paint-desk
              type: call
              call: "slack.post-message"
              with:
                channel: "store-{{store_id}}-paint"
                text: "Paint mix order ready: {{get-formula.color_name}} ({{color_code}}). Order #{{create-mix-order.order_number}}. Base: {{base_product_sku}}."
  consumes:
    - type: http
      namespace: paint-system
      baseUri: "https://paint.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.paint_system_token"
      resources:
        - name: colors
          path: "/colors/match"
          operations:
            - name: match-color
              method: POST
        - name: orders
          path: "/mix-orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Triggers a refresh of the district-level sales performance Power BI dataset to update dashboards with the latest transaction data.

naftiko: "0.5"
info:
  label: "Power BI District Sales Dashboard Refresh"
  description: "Triggers a refresh of the district-level sales performance Power BI dataset to update dashboards with the latest transaction data."
  tags:
    - analytics
    - sales
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: district-dashboard
      port: 8080
      tools:
        - name: refresh-district-dashboard
          description: "Trigger Power BI district sales dashboard refresh."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.refresh-dataset"
          with:
            id: "{{dataset_id}}"
          outputParameters:
            - name: refresh_id
              type: string
              mapping: "$.requestId"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{id}}/refreshes"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

When a price match request comes in, retrieves the product price from SAP Commerce Cloud, fetches competitor pricing from Circana market data, and updates the price if the policy allows, logging the decision in Salesforce.

naftiko: "0.5"
info:
  label: "Price Match Competitor Analysis"
  description: "When a price match request comes in, retrieves the product price from SAP Commerce Cloud, fetches competitor pricing from Circana market data, and updates the price if the policy allows, logging the decision in Salesforce."
  tags:
    - pricing
    - competitive-intelligence
    - sap
    - circana
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: price-matching
      port: 8080
      tools:
        - name: evaluate-price-match
          description: "Given a SKU and competitor URL, fetch current pricing, validate competitor price, and process the match decision."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: competitor_name
              in: body
              type: string
              description: "The competitor retailer name."
            - name: competitor_price
              in: body
              type: number
              description: "The competitor advertised price."
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce customer ID requesting the match."
          steps:
            - name: get-current-price
              type: call
              call: "sap-commerce.get-product"
              with:
                sku: "{{sku}}"
            - name: get-market-data
              type: call
              call: "circana.get-product-pricing"
              with:
                sku: "{{sku}}"
                competitor: "{{competitor_name}}"
            - name: log-decision
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Price Match: {{sku}} vs {{competitor_name}}"
                description: "SKU: {{sku}}. Our price: ${{get-current-price.price}}. Competitor ({{competitor_name}}): ${{competitor_price}}. Market avg: ${{get-market-data.market_avg}}. Customer: {{customer_id}}."
                type: "Price_Match"
                account_id: "{{customer_id}}"
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: pricing
          path: "/products/{{sku}}/competitive-pricing"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product-pricing
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST

Tracks private label product development by pulling milestones from Jira, verifying lab test results from the testing platform, and updating the product record in SAP.

naftiko: "0.5"
info:
  label: "Private Label Product Development Tracker"
  description: "Tracks private label product development by pulling milestones from Jira, verifying lab test results from the testing platform, and updating the product record in SAP."
  tags:
    - product-development
    - private-label
    - jira
    - sap
capability:
  exposes:
    - type: mcp
      namespace: private-label
      port: 8080
      tools:
        - name: track-development
          description: "Track private label product development progress."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key."
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          steps:
            - name: get-milestones
              type: call
              call: "jira.get-issues"
              with:
                jql: "project = '{{project_key}}' AND type = Milestone ORDER BY dueDate"
            - name: get-test-results
              type: call
              call: "testing-platform.get-results"
              with:
                product_ref: "{{material_number}}"
            - name: update-product-status
              type: call
              call: "sap.update-material"
              with:
                material_id: "{{material_number}}"
                development_status: "{{get-milestones.current_phase}}"
                test_status: "{{get-test-results.overall_result}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://homedepot.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search?jql={{jql}}"
          inputParameters:
            - name: jql
              in: query
          operations:
            - name: get-issues
              method: GET
    - type: http
      namespace: testing-platform
      baseUri: "https://testing.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.testing_platform_token"
      resources:
        - name: results
          path: "/products/{{product_ref}}/results"
          inputParameters:
            - name: product_ref
              in: path
          operations:
            - name: get-results
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/MaterialSet('{{material_id}}')"
          inputParameters:
            - name: material_id
              in: path
          operations:
            - name: update-material
              method: PATCH

When a new Pro Xtra lead comes in through HubSpot, enriches the contact with ZoomInfo firmographic data, creates a Salesforce opportunity, and alerts the assigned sales rep in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Pro Customer Lead Qualification"
  description: "When a new Pro Xtra lead comes in through HubSpot, enriches the contact with ZoomInfo firmographic data, creates a Salesforce opportunity, and alerts the assigned sales rep in Microsoft Teams."
  tags:
    - sales
    - lead-management
    - hubspot
    - zoominfo
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pro-sales
      port: 8080
      tools:
        - name: qualify-pro-lead
          description: "Given a HubSpot contact ID, enrich with ZoomInfo data, create a Salesforce opportunity, and notify the sales rep."
          inputParameters:
            - name: hubspot_contact_id
              in: body
              type: string
              description: "The HubSpot contact ID for the new Pro lead."
            - name: estimated_annual_spend
              in: body
              type: number
              description: "The estimated annual spend for the Pro customer."
          steps:
            - name: get-contact
              type: call
              call: "hubspot.get-contact"
              with:
                contact_id: "{{hubspot_contact_id}}"
            - name: enrich-company
              type: call
              call: "zoominfo.enrich-company"
              with:
                company_name: "{{get-contact.company}}"
                domain: "{{get-contact.website}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Pro Xtra - {{get-contact.company}}"
                amount: "{{estimated_annual_spend}}"
                stage: "Qualification"
                account_name: "{{get-contact.company}}"
                employees: "{{enrich-company.employee_count}}"
                industry: "{{enrich-company.industry}}"
            - name: notify-rep
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-contact.owner_email}}"
                text: "New Pro lead qualified: {{get-contact.company}} ({{enrich-company.industry}}, {{enrich-company.employee_count}} employees). Est. annual spend: ${{estimated_annual_spend}}. Opportunity: {{create-opportunity.id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: company-enrich
          path: "/enrich/company"
          operations:
            - name: enrich-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              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

Generates project quotes for Pro customers by pulling product pricing from SAP, calculating volume discounts, and creating the quote in Salesforce.

naftiko: "0.5"
info:
  label: "Pro Customer Project Quote Generator"
  description: "Generates project quotes for Pro customers by pulling product pricing from SAP, calculating volume discounts, and creating the quote in Salesforce."
  tags:
    - pro-services
    - sales
    - sap
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pro-quotes
      port: 8080
      tools:
        - name: generate-project-quote
          description: "Generate a project quote for a Pro customer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce Pro account ID."
            - name: sku_list
              in: body
              type: string
              description: "Comma-separated SKUs with quantities."
            - name: project_name
              in: body
              type: string
              description: "The project name."
          steps:
            - name: get-pricing
              type: call
              call: "sap.get-pricing"
              with:
                items: "{{sku_list}}"
                customer_group: "pro"
            - name: get-customer-tier
              type: call
              call: "salesforce.get-account"
              with:
                id: "{{customer_id}}"
            - name: create-quote
              type: call
              call: "salesforce.create-quote"
              with:
                account_id: "{{customer_id}}"
                name: "{{project_name}}"
                line_items: "{{get-pricing.priced_items}}"
                discount_tier: "{{get-customer-tier.Pro_Tier__c}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_PRICING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pricing
          path: "/PricingSimulation"
          operations:
            - name: get-pricing
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: quotes
          path: "/sobjects/Quote"
          operations:
            - name: create-quote
              method: POST

Retrieves product details from the SAP Commerce Cloud catalog by SKU, returning name, price, department, aisle location, and current availability status.

naftiko: "0.5"
info:
  label: "Product Catalog Lookup"
  description: "Retrieves product details from the SAP Commerce Cloud catalog by SKU, returning name, price, department, aisle location, and current availability status."
  tags:
    - e-commerce
    - product-catalog
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-catalog
      port: 8080
      tools:
        - name: get-product-details
          description: "Given a product SKU, return the full product record including price, department, aisle, and stock status."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The Home Depot product SKU."
          call: "sap-commerce.get-product"
          with:
            sku: "{{sku}}"
          outputParameters:
            - name: product_name
              type: string
              mapping: "$.product.name"
            - name: price
              type: string
              mapping: "$.product.price.value"
            - name: department
              type: string
              mapping: "$.product.department"
            - name: aisle
              type: string
              mapping: "$.product.aisle"
            - name: in_stock
              type: boolean
              mapping: "$.product.stock.inStock"
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET

Fetches product data from SAP Commerce Cloud, retrieves marketing images from Amazon S3, publishes to Facebook Shops via Meta API, and updates Google Tag Manager with product feed events.

naftiko: "0.5"
info:
  label: "Product Content Syndication"
  description: "Fetches product data from SAP Commerce Cloud, retrieves marketing images from Amazon S3, publishes to Facebook Shops via Meta API, and updates Google Tag Manager with product feed events."
  tags:
    - e-commerce
    - content-syndication
    - sap
    - amazon-s3
    - meta
    - google-tag-manager
capability:
  exposes:
    - type: mcp
      namespace: content-syndication
      port: 8080
      tools:
        - name: syndicate-product
          description: "Given a SKU, pull product data and images, publish to social commerce channels, and update tracking."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to syndicate."
          steps:
            - name: get-product
              type: call
              call: "sap-commerce.get-product"
              with:
                sku: "{{sku}}"
            - name: get-images
              type: call
              call: "s3.get-presigned-url"
              with:
                bucket: "homedepot-product-images"
                key: "products/{{sku}}/hero.jpg"
            - name: publish-to-shops
              type: call
              call: "meta-catalog.create-product"
              with:
                name: "{{get-product.product_name}}"
                price: "{{get-product.price}}"
                image_url: "{{get-images.presigned_url}}"
                description: "{{get-product.description}}"
                sku: "{{sku}}"
            - name: update-gtm
              type: call
              call: "gtm.push-event"
              with:
                event: "product_syndicated"
                sku: "{{sku}}"
                channel: "facebook_shops"
                catalog_id: "{{publish-to-shops.catalog_product_id}}"
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: aws
        accessKeyId: "$secrets.aws_access_key"
        secretAccessKey: "$secrets.aws_secret_key"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: get-presigned-url
              method: GET
    - type: http
      namespace: meta-catalog
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: catalog-products
          path: "/{{catalog_id}}/products"
          inputParameters:
            - name: catalog_id
              in: path
          operations:
            - name: create-product
              method: POST
    - type: http
      namespace: gtm
      baseUri: "https://www.googletagmanager.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: events
          path: "/accounts/{{account_id}}/containers/{{container_id}}/events"
          inputParameters:
            - name: account_id
              in: path
            - name: container_id
              in: path
          operations:
            - name: push-event
              method: POST

When a product recall is initiated, pulls affected order data from SAP Commerce Cloud, identifies impacted customers in Salesforce, sends recall notification emails via MailChimp, and creates a Jira epic to track the recall response.

naftiko: "0.5"
info:
  label: "Product Recall Notification Workflow"
  description: "When a product recall is initiated, pulls affected order data from SAP Commerce Cloud, identifies impacted customers in Salesforce, sends recall notification emails via MailChimp, and creates a Jira epic to track the recall response."
  tags:
    - customer-service
    - product-safety
    - sap
    - salesforce
    - mailchimp
    - jira
capability:
  exposes:
    - type: mcp
      namespace: product-recall
      port: 8080
      tools:
        - name: execute-recall-notification
          description: "Given a SKU and recall reason, identify affected customers, send notifications, and create a tracking epic."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The recalled product SKU."
            - name: recall_reason
              in: body
              type: string
              description: "The reason for the recall."
            - name: recall_id
              in: body
              type: string
              description: "The CPSC or internal recall identifier."
            - name: date_range_start
              in: body
              type: string
              description: "Start of the affected sale date range."
            - name: date_range_end
              in: body
              type: string
              description: "End of the affected sale date range."
          steps:
            - name: get-affected-orders
              type: call
              call: "sap-commerce.search-orders"
              with:
                sku: "{{sku}}"
                date_from: "{{date_range_start}}"
                date_to: "{{date_range_end}}"
            - name: get-customer-list
              type: call
              call: "salesforce.get-contacts-by-product"
              with:
                sku: "{{sku}}"
                order_ids: "{{get-affected-orders.order_ids}}"
            - name: send-recall-emails
              type: call
              call: "mailchimp.create-campaign"
              with:
                list_id: "recall_notification_list"
                subject: "Important Safety Recall Notice - {{sku}}"
                template_id: "product_recall"
                segment_conditions:
                  sku: "{{sku}}"
            - name: create-recall-epic
              type: call
              call: "jira.create-issue"
              with:
                project: "SAFETY"
                issue_type: "Epic"
                summary: "Product Recall: {{recall_id}} - SKU {{sku}}"
                description: "Recall ID: {{recall_id}}. SKU: {{sku}}. Reason: {{recall_reason}}. Affected orders: {{get-affected-orders.count}}. Customers notified: {{get-customer-list.count}}. Email campaign: {{send-recall-emails.campaign_id}}."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: orders
          path: "/orders/search"
          operations:
            - name: search-orders
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query"
          operations:
            - name: get-contacts-by-product
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://homedepot.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

Launches a new promotional campaign by creating the offer in SAP Commerce Cloud, scheduling the MailChimp email blast, publishing a Facebook ad through Meta, and tagging the campaign in Google Analytics.

naftiko: "0.5"
info:
  label: "Promotional Campaign Launch Orchestrator"
  description: "Launches a new promotional campaign by creating the offer in SAP Commerce Cloud, scheduling the MailChimp email blast, publishing a Facebook ad through Meta, and tagging the campaign in Google Analytics."
  tags:
    - marketing
    - promotions
    - sap
    - mailchimp
    - meta
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: campaign-launch
      port: 8080
      tools:
        - name: launch-promo-campaign
          description: "Given campaign details, create the promotion, schedule email, launch social ads, and set up analytics tracking."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The promotional campaign name."
            - name: discount_percent
              in: body
              type: number
              description: "The discount percentage."
            - name: category_id
              in: body
              type: string
              description: "The product category for the promotion."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date in YYYY-MM-DD format."
            - name: audience_list_id
              in: body
              type: string
              description: "The MailChimp audience list ID for email targeting."
          steps:
            - name: create-promotion
              type: call
              call: "sap-commerce.create-promotion"
              with:
                name: "{{campaign_name}}"
                discount: "{{discount_percent}}"
                category: "{{category_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: schedule-email
              type: call
              call: "mailchimp.create-campaign"
              with:
                list_id: "{{audience_list_id}}"
                subject: "{{campaign_name}} - Save {{discount_percent}}%!"
                send_time: "{{start_date}}T08:00:00Z"
            - name: create-ad
              type: call
              call: "meta-ads.create-ad"
              with:
                campaign_name: "{{campaign_name}}"
                objective: "CONVERSIONS"
                start_time: "{{start_date}}T00:00:00Z"
                end_time: "{{end_date}}T23:59:59Z"
            - name: tag-analytics
              type: call
              call: "ga.create-annotation"
              with:
                description: "Campaign launch: {{campaign_name}} ({{start_date}} to {{end_date}})"
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: promotions
          path: "/promotions"
          operations:
            - name: create-promotion
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: meta-ads
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: ads
          path: "/act_{{ad_account_id}}/campaigns"
          inputParameters:
            - name: ad_account_id
              in: path
          operations:
            - name: create-ad
              method: POST
    - type: http
      namespace: ga
      baseUri: "https://www.googleapis.com/analytics/v3"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: annotations
          path: "/management/accounts/{{account_id}}/webproperties/{{property_id}}/customDataSources"
          inputParameters:
            - name: account_id
              in: path
            - name: property_id
              in: path
          operations:
            - name: create-annotation
              method: POST

Processes tool rental returns by updating the rental system, inspecting equipment status in ServiceNow, and charging damage fees via the payment gateway.

naftiko: "0.5"
info:
  label: "Rental Equipment Return Processor"
  description: "Processes tool rental returns by updating the rental system, inspecting equipment status in ServiceNow, and charging damage fees via the payment gateway."
  tags:
    - rental
    - equipment
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: rental-returns
      port: 8080
      tools:
        - name: process-rental-return
          description: "Process a tool rental equipment return."
          inputParameters:
            - name: rental_id
              in: body
              type: string
              description: "The rental contract ID."
            - name: condition
              in: body
              type: string
              description: "Equipment condition (good, damaged, missing_parts)."
          steps:
            - name: close-rental
              type: call
              call: "rental-system.close-contract"
              with:
                rental_id: "{{rental_id}}"
                return_condition: "{{condition}}"
            - name: create-inspection
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Equipment inspection: Rental {{rental_id}}"
                category: "equipment_inspection"
                condition: "{{condition}}"
            - name: process-charges
              type: call
              call: "payment-gateway.charge"
              with:
                rental_id: "{{rental_id}}"
                charge_type: "return"
                damage_assessment: "{{condition}}"
  consumes:
    - type: http
      namespace: rental-system
      baseUri: "https://rental.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.rental_system_token"
      resources:
        - name: contracts
          path: "/contracts/{{rental_id}}/close"
          inputParameters:
            - name: rental_id
              in: path
          operations:
            - name: close-contract
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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: payment-gateway
      baseUri: "https://payments.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.payment_gateway_token"
      resources:
        - name: charges
          path: "/charges"
          operations:
            - name: charge
              method: POST

When a store safety incident is reported, creates a ServiceNow incident, logs the details in Workday for the affected associate, notifies store management via Microsoft Teams, and uploads incident photos to SharePoint.

naftiko: "0.5"
info:
  label: "Safety Incident Reporting"
  description: "When a store safety incident is reported, creates a ServiceNow incident, logs the details in Workday for the affected associate, notifies store management via Microsoft Teams, and uploads incident photos to SharePoint."
  tags:
    - safety
    - store-ops
    - servicenow
    - workday
    - microsoft-teams
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: safety-reporting
      port: 8080
      tools:
        - name: report-safety-incident
          description: "Given incident details, create tickets, update HR records, notify management, and archive documentation."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number where the incident occurred."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID of the affected associate."
            - name: incident_type
              in: body
              type: string
              description: "Type of incident (e.g. SLIP_FALL, EQUIPMENT, CHEMICAL, ERGONOMIC)."
            - name: description
              in: body
              type: string
              description: "Description of the incident."
            - name: store_manager_email
              in: body
              type: string
              description: "The store manager email for notification."
          steps:
            - name: get-associate
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Safety incident: {{incident_type}} at Store #{{store_id}}"
                category: "safety"
                priority: "2"
                assigned_group: "EHS_Safety"
                description: "{{description}} Associate: {{get-associate.full_name}}. Store #{{store_id}}. Type: {{incident_type}}."
            - name: create-doc-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "safety_incidents_site"
                folder_path: "Incidents/Store{{store_id}}/{{create-incident.number}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{store_manager_email}}"
                text: "SAFETY ALERT: {{incident_type}} incident at Store #{{store_id}} involving {{get-associate.full_name}}. ServiceNow ticket: {{create-incident.number}}. Documentation folder: {{create-doc-folder.url}}. Please upload photos and witness statements."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
      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://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce account record for a Pro Xtra commercial customer by account ID, returning company name, tier, credit limit, and account manager.

naftiko: "0.5"
info:
  label: "Salesforce Customer Account Lookup"
  description: "Retrieves a Salesforce account record for a Pro Xtra commercial customer by account ID, returning company name, tier, credit limit, and account manager."
  tags:
    - customer-service
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-accounts
      port: 8080
      tools:
        - name: get-pro-account
          description: "Given a Salesforce account ID, return the Pro Xtra customer record including tier, credit limit, and assigned account manager."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID for the Pro customer."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.Name"
            - name: pro_tier
              type: string
              mapping: "$.Pro_Tier__c"
            - name: credit_limit
              type: number
              mapping: "$.Credit_Limit__c"
            - name: account_manager
              type: string
              mapping: "$.Owner.Name"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v59.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 the current credit balance and payment terms for a Pro Xtra customer account in Salesforce.

naftiko: "0.5"
info:
  label: "Salesforce Pro Account Balance Lookup"
  description: "Retrieves the current credit balance and payment terms for a Pro Xtra customer account in Salesforce."
  tags:
    - pro-services
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: pro-account
      port: 8080
      tools:
        - name: get-pro-balance
          description: "Look up Pro customer account balance and credit terms."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce Pro account ID."
          call: "salesforce.get-account"
          with:
            id: "{{account_id}}"
          outputParameters:
            - name: credit_balance
              type: number
              mapping: "$.Credit_Balance__c"
            - name: payment_terms
              type: string
              mapping: "$.Payment_Terms__c"
            - name: account_status
              type: string
              mapping: "$.Account_Status__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-account
              method: GET

Looks up a SAP S/4HANA purchase order by number, returning vendor, total value, delivery status, and expected receipt date for supply chain teams.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP S/4HANA purchase order by number, returning vendor, total value, delivery status, and expected receipt date for supply chain teams."
  tags:
    - supply-chain
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-po
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, return status, vendor, total value, and expected delivery date."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves the payment status and expected payment date for a vendor invoice from SAP Accounts Payable.

naftiko: "0.5"
info:
  label: "SAP Vendor Payment Status"
  description: "Retrieves the payment status and expected payment date for a vendor invoice from SAP Accounts Payable."
  tags:
    - finance
    - accounts-payable
    - sap
capability:
  exposes:
    - type: mcp
      namespace: vendor-payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Check payment status for a vendor invoice."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice number."
          call: "sap.get-invoice-status"
          with:
            doc_number: "{{invoice_number}}"
          outputParameters:
            - name: payment_status
              type: string
              mapping: "$.d.PaymentStatus"
            - name: expected_date
              type: string
              mapping: "$.d.ExpectedPaymentDate"
            - name: amount
              type: number
              mapping: "$.d.InvoiceAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_AP_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/InvoiceSet('{{doc_number}}')"
          inputParameters:
            - name: doc_number
              in: path
          operations:
            - name: get-invoice-status
              method: GET

Pulls historical sales data from Teradata, runs a forecast model via Azure Machine Learning, updates Oracle Retail replenishment parameters, and posts the forecast summary to a Confluence page.

naftiko: "0.5"
info:
  label: "Seasonal Demand Forecasting Pipeline"
  description: "Pulls historical sales data from Teradata, runs a forecast model via Azure Machine Learning, updates Oracle Retail replenishment parameters, and posts the forecast summary to a Confluence page."
  tags:
    - supply-chain
    - forecasting
    - teradata
    - azure-machine-learning
    - oracle-cloud
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: run-seasonal-forecast
          description: "Given a product category and season, pull historical data, generate forecast, update replenishment, and publish results."
          inputParameters:
            - name: category_id
              in: body
              type: string
              description: "The product category ID (e.g. LUMBER, PAINT, GARDEN)."
            - name: season
              in: body
              type: string
              description: "The target season (e.g. SPRING_2026, HOLIDAY_2026)."
            - name: region
              in: body
              type: string
              description: "The geographic region for the forecast."
          steps:
            - name: pull-historical
              type: call
              call: "teradata.run-query"
              with:
                query: "SELECT * FROM sales_history WHERE category='{{category_id}}' AND region='{{region}}' AND sale_date >= CURRENT_DATE - INTERVAL '3' YEAR"
            - name: run-forecast
              type: call
              call: "azureml.invoke-endpoint"
              with:
                endpoint_name: "seasonal-demand-model"
                input_data:
                  category: "{{category_id}}"
                  season: "{{season}}"
                  region: "{{region}}"
                  historical_rows: "{{pull-historical.row_count}}"
            - name: update-replenishment
              type: call
              call: "oracle-retail.update-replenishment"
              with:
                category_id: "{{category_id}}"
                region: "{{region}}"
                forecast_units: "{{run-forecast.predicted_units}}"
                safety_stock_multiplier: "{{run-forecast.safety_factor}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SUPPLY"
                title: "Demand Forecast: {{category_id}} - {{season}} - {{region}}"
                body: "Predicted demand: {{run-forecast.predicted_units}} units. Confidence: {{run-forecast.confidence_interval}}. Replenishment parameters updated. Historical sample: {{pull-historical.row_count}} records."
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://teradata.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: azureml
      baseUri: "https://homedepot-ml.eastus2.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: endpoints
          path: "/score"
          operations:
            - name: invoke-endpoint
              method: POST
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: replenishment
          path: "/categories/{{category_id}}/replenishment"
          inputParameters:
            - name: category_id
              in: path
          operations:
            - name: update-replenishment
              method: PUT
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Fetches product page data from SAP Commerce Cloud, pulls search performance from Google Analytics, checks keyword rankings via Google Tag Manager events, and creates a Jira ticket for the content team with optimization recommendations.

naftiko: "0.5"
info:
  label: "SEO Product Page Optimization"
  description: "Fetches product page data from SAP Commerce Cloud, pulls search performance from Google Analytics, checks keyword rankings via Google Tag Manager events, and creates a Jira ticket for the content team with optimization recommendations."
  tags:
    - marketing
    - seo
    - sap
    - google-analytics
    - google-tag-manager
    - jira
capability:
  exposes:
    - type: mcp
      namespace: seo-optimization
      port: 8080
      tools:
        - name: analyze-product-seo
          description: "Given a SKU and page path, pull product data, search analytics, and create an optimization ticket."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: page_path
              in: body
              type: string
              description: "The product page URL path."
          steps:
            - name: get-product
              type: call
              call: "sap-commerce.get-product"
              with:
                sku: "{{sku}}"
            - name: get-search-metrics
              type: call
              call: "ga.run-report"
              with:
                page_path: "{{page_path}}"
                start_date: "2026-02-25"
                end_date: "2026-03-27"
            - name: create-seo-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CONTENT"
                issue_type: "Task"
                summary: "SEO optimization: {{get-product.product_name}} ({{sku}})"
                description: "Product: {{get-product.product_name}}. Page: {{page_path}}. Last 30d views: {{get-search-metrics.page_views}}. Bounce rate: {{get-search-metrics.bounce_rate}}. Current title: {{get-product.meta_title}}. Recommendation: Review title tags, meta description, and H1 structure."
  consumes:
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://homedepot.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 a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes. Used by store ops and IT support teams.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes. Used by store ops and IT support teams."
  tags:
    - support
    - it-ops
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident
          description: "Given a ServiceNow incident number, return the incident details including state, priority, assigned group, and description."
          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: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
            - name: description
              type: string
              mapping: "$.result.description"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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 IT asset details for a store location from ServiceNow CMDB, returning device type, serial number, and warranty status.

naftiko: "0.5"
info:
  label: "ServiceNow Store IT Asset Lookup"
  description: "Retrieves IT asset details for a store location from ServiceNow CMDB, returning device type, serial number, and warranty status."
  tags:
    - it
    - asset-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: store-assets
      port: 8080
      tools:
        - name: get-store-asset
          description: "Look up IT asset details at a store location."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The asset tag number."
          call: "servicenow.get-asset"
          with:
            asset_tag: "{{asset_tag}}"
          outputParameters:
            - name: device_type
              type: string
              mapping: "$.result.model_category.display_value"
            - name: serial_number
              type: string
              mapping: "$.result.serial_number"
            - name: warranty_expiry
              type: string
              mapping: "$.result.warranty_expiration"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: assets
          path: "/table/alm_hardware?sysparm_query=asset_tag={{asset_tag}}"
          inputParameters:
            - name: asset_tag
              in: query
          operations:
            - name: get-asset
              method: GET

When an inventory discrepancy is detected, pulls the variance report from Oracle Retail, cross-references with POS transaction data in Teradata, creates a ServiceNow loss prevention case, and notifies the asset protection team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Shrinkage Alert Investigation"
  description: "When an inventory discrepancy is detected, pulls the variance report from Oracle Retail, cross-references with POS transaction data in Teradata, creates a ServiceNow loss prevention case, and notifies the asset protection team via Microsoft Teams."
  tags:
    - loss-prevention
    - inventory
    - oracle-cloud
    - teradata
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shrinkage-alert
      port: 8080
      tools:
        - name: investigate-shrinkage
          description: "Given a store ID, SKU, and variance amount, pull transaction data, create a loss prevention case, and notify asset protection."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: sku
              in: body
              type: string
              description: "The SKU with the inventory discrepancy."
            - name: variance_qty
              in: body
              type: number
              description: "The number of units in the variance (negative = shrinkage)."
          steps:
            - name: get-inventory-detail
              type: call
              call: "oracle-retail.get-stock"
              with:
                store_id: "{{store_id}}"
                sku: "{{sku}}"
            - name: get-transactions
              type: call
              call: "teradata.run-query"
              with:
                query: "SELECT txn_id, txn_type, qty, associate_id, txn_timestamp FROM pos_transactions WHERE store_id='{{store_id}}' AND sku='{{sku}}' AND txn_date >= CURRENT_DATE - INTERVAL '7' DAY ORDER BY txn_timestamp DESC"
            - name: create-lp-case
              type: call
              call: "servicenow.create-case"
              with:
                short_description: "Shrinkage alert: {{sku}} at Store #{{store_id}} ({{variance_qty}} units)"
                category: "loss_prevention"
                priority: "2"
                assigned_group: "Asset_Protection"
                description: "Inventory variance of {{variance_qty}} units for SKU {{sku}} at Store #{{store_id}}. System on-hand: {{get-inventory-detail.on_hand}}. Recent transactions: {{get-transactions.row_count}} in last 7 days."
            - name: notify-ap
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "asset-protection-alerts"
                text: "SHRINKAGE ALERT: SKU {{sku}} at Store #{{store_id}}. Variance: {{variance_qty}} units. Case: {{create-lp-case.number}}. {{get-transactions.row_count}} POS transactions in last 7 days flagged for review."
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: stock
          path: "/stores/{{store_id}}/items/{{sku}}/stock"
          inputParameters:
            - name: store_id
              in: path
            - name: sku
              in: path
          operations:
            - name: get-stock
              method: GET
    - type: http
      namespace: teradata
      baseUri: "https://teradata.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cases
          path: "/table/sn_customerservice_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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Sends formatted operational notifications to store-specific Slack channels for time-sensitive alerts and updates.

naftiko: "0.5"
info:
  label: "Slack Store Operations Notifier"
  description: "Sends formatted operational notifications to store-specific Slack channels for time-sensitive alerts and updates."
  tags:
    - communications
    - store-operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: store-notifications
      port: 8080
      tools:
        - name: send-store-notification
          description: "Send an operational notification to a store Slack channel."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: message
              in: body
              type: string
              description: "The notification message."
          call: "slack.post-message"
          with:
            channel: "store-{{store_id}}-ops"
            text: "{{message}}"
          outputParameters:
            - name: message_ts
              type: string
              mapping: "$.ts"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Queries Snowflake for customer lifetime value metrics by customer segment, returning average CLV, purchase frequency, and retention rate.

naftiko: "0.5"
info:
  label: "Snowflake Customer Lifetime Value Query"
  description: "Queries Snowflake for customer lifetime value metrics by customer segment, returning average CLV, purchase frequency, and retention rate."
  tags:
    - analytics
    - customer
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: clv-analytics
      port: 8080
      tools:
        - name: query-clv
          description: "Query customer lifetime value by segment."
          inputParameters:
            - name: segment
              in: body
              type: string
              description: "Customer segment (pro, diy, online)."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT avg_clv, purchase_frequency, retention_rate FROM customer_clv WHERE segment = '{{segment}}'"
          outputParameters:
            - name: results
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Aggregates campaign performance from Facebook (Meta) Ads and Instagram, pulls conversion data from Google Analytics, and posts a weekly performance summary to the marketing Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Social Media Campaign Performance"
  description: "Aggregates campaign performance from Facebook (Meta) Ads and Instagram, pulls conversion data from Google Analytics, and posts a weekly performance summary to the marketing Microsoft Teams channel."
  tags:
    - marketing
    - social-media
    - meta
    - google-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: social-performance
      port: 8080
      tools:
        - name: compile-social-report
          description: "Given a campaign ID and date range, aggregate social metrics and post the performance summary."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Meta Ads campaign ID."
            - name: start_date
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: get-meta-metrics
              type: call
              call: "meta-ads.get-insights"
              with:
                campaign_id: "{{campaign_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-conversions
              type: call
              call: "ga.run-report"
              with:
                campaign_source: "facebook"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: post-summary
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "marketing-performance"
                text: "Social Campaign Report ({{start_date}} to {{end_date}}): Reach: {{get-meta-metrics.reach}}. Impressions: {{get-meta-metrics.impressions}}. Clicks: {{get-meta-metrics.clicks}}. Spend: ${{get-meta-metrics.spend}}. Conversions: {{get-conversions.goal_completions}}. ROAS: {{get-conversions.revenue_per_spend}}."
  consumes:
    - type: http
      namespace: meta-ads
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-insights
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Tracks special orders by querying SAP for order status, retrieving carrier tracking from FedEx, and sending customer updates via Twilio SMS.

naftiko: "0.5"
info:
  label: "Special Order Tracking Orchestrator"
  description: "Tracks special orders by querying SAP for order status, retrieving carrier tracking from FedEx, and sending customer updates via Twilio SMS."
  tags:
    - fulfillment
    - special-orders
    - sap
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: special-order-tracking
      port: 8080
      tools:
        - name: track-special-order
          description: "Track and notify customer on special order status."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The special order ID."
            - name: customer_phone
              in: body
              type: string
              description: "Customer phone number."
          steps:
            - name: get-order-status
              type: call
              call: "sap.get-order"
              with:
                order_number: "{{order_id}}"
            - name: get-carrier-tracking
              type: call
              call: "fedex.track-shipment"
              with:
                tracking_number: "{{get-order-status.tracking_number}}"
            - name: notify-customer
              type: call
              call: "twilio.send-sms"
              with:
                to: "{{customer_phone}}"
                body: "Home Depot Order {{order_id}}: {{get-carrier-tracking.status}}. ETA: {{get-carrier-tracking.estimated_delivery}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/OrderSet('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: fedex
      baseUri: "https://apis.fedex.com/track/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_token"
      resources:
        - name: tracking
          path: "/trackingnumbers"
          operations:
            - name: track-shipment
              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

Searches Splunk for point-of-sale system error logs by store number and time range, returning error codes and frequency counts.

naftiko: "0.5"
info:
  label: "Splunk POS Error Log Search"
  description: "Searches Splunk for point-of-sale system error logs by store number and time range, returning error codes and frequency counts."
  tags:
    - operations
    - pos
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: pos-logs
      port: 8080
      tools:
        - name: search-pos-errors
          description: "Search for POS error logs in Splunk by store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: hours_back
              in: body
              type: integer
              description: "Number of hours to search back."
          call: "splunk.search"
          with:
            search: "search index=pos store={{store_id}} level=ERROR earliest=-{{hours_back}}h | stats count by error_code"
          outputParameters:
            - name: error_summary
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.homedepot.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search-jobs
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder with store SOPs, and sends a Microsoft Teams welcome message to the new associate and their manager.

naftiko: "0.5"
info:
  label: "Store Associate Onboarding"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder with store SOPs, and sends a Microsoft Teams welcome message to the new associate and their manager."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-associate-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full associate onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The associate start date in YYYY-MM-DD format."
            - name: store_id
              in: body
              type: string
              description: "The store number the associate is joining."
          steps:
            - name: get-associate
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New associate onboarding: {{get-associate.full_name}} - Store #{{store_id}}"
                category: "hr_onboarding"
                assigned_group: "Store_IT_Onboarding"
                description: "Onboarding for {{get-associate.full_name}} starting {{start_date}} at Store #{{store_id}}. Provision POS access, locker assignment, and safety training enrollment."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "store_onboarding_site"
                folder_path: "Associates/{{get-associate.full_name}}_Store{{store_id}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-associate.work_email}}"
                text: "Welcome to The Home Depot, {{get-associate.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Store #{{store_id}} orientation docs: {{provision-folder.url}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
      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://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Processes store property damage claims by creating a ServiceNow incident, documenting in SharePoint, and notifying the risk management team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Damage Claim Orchestrator"
  description: "Processes store property damage claims by creating a ServiceNow incident, documenting in SharePoint, and notifying the risk management team via Microsoft Teams."
  tags:
    - operations
    - risk
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: damage-claims
      port: 8080
      tools:
        - name: file-damage-claim
          description: "File and track a store property damage claim."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: damage_description
              in: body
              type: string
              description: "Description of the damage."
            - name: estimated_cost
              in: body
              type: number
              description: "Estimated repair cost."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Property damage: Store {{store_id}}"
                description: "{{damage_description}}"
                category: "property_damage"
                estimated_cost: "{{estimated_cost}}"
            - name: create-documentation
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "risk_management"
                folder_path: "DamageClaims/Store_{{store_id}}/{{create-incident.number}}"
            - name: notify-risk-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "risk-management"
                text: "Damage claim filed for Store {{store_id}}: {{damage_description}}. Estimated cost: ${{estimated_cost}}. Incident: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: folders
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Coordinates emergency store closures by updating the store locator via Google Maps API, notifying associates via Microsoft Teams, and creating a ServiceNow major incident.

naftiko: "0.5"
info:
  label: "Store Emergency Closure Coordinator"
  description: "Coordinates emergency store closures by updating the store locator via Google Maps API, notifying associates via Microsoft Teams, and creating a ServiceNow major incident."
  tags:
    - operations
    - emergency
    - google-maps
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: emergency-closure
      port: 8080
      tools:
        - name: coordinate-closure
          description: "Coordinate an emergency store closure."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: reason
              in: body
              type: string
              description: "Closure reason."
            - name: expected_reopen
              in: body
              type: string
              description: "Expected reopen date."
          steps:
            - name: update-store-hours
              type: call
              call: "google-maps.update-hours"
              with:
                location_id: "store_{{store_id}}"
                status: "temporarily_closed"
                message: "{{reason}}. Expected reopen: {{expected_reopen}}."
            - name: notify-associates
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store-{{store_id}}-all"
                text: "URGENT: Store {{store_id}} emergency closure effective immediately. Reason: {{reason}}. Expected reopen: {{expected_reopen}}."
            - name: create-major-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Emergency closure: Store {{store_id}}"
                urgency: "1"
                impact: "1"
                description: "Reason: {{reason}}. Expected reopen: {{expected_reopen}}."
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://mybusiness.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_mybusiness_token"
      resources:
        - name: locations
          path: "/accounts/homedepot/locations/{{location_id}}"
          inputParameters:
            - name: location_id
              in: path
          operations:
            - name: update-hours
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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

Collects energy consumption data from the building management system, compares against targets in Snowflake, and publishes the report to SharePoint.

naftiko: "0.5"
info:
  label: "Store Energy Management Reporter"
  description: "Collects energy consumption data from the building management system, compares against targets in Snowflake, and publishes the report to SharePoint."
  tags:
    - sustainability
    - energy
    - snowflake
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: energy-management
      port: 8080
      tools:
        - name: report-energy-usage
          description: "Generate energy management report for a store."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: month
              in: body
              type: string
              description: "Reporting month in YYYY-MM format."
          steps:
            - name: get-consumption
              type: call
              call: "bms.get-energy-data"
              with:
                facility: "store_{{store_id}}"
                period: "{{month}}"
            - name: get-target
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT energy_target_kwh FROM store_energy_targets WHERE store_id = '{{store_id}}' AND month = '{{month}}'"
            - name: publish-report
              type: call
              call: "sharepoint.upload-document"
              with:
                site_id: "sustainability"
                folder_path: "EnergyReports/{{month}}"
                file_name: "store_{{store_id}}_energy.json"
  consumes:
    - type: http
      namespace: bms
      baseUri: "https://bms.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bms_token"
      resources:
        - name: energy
          path: "/facilities/{{facility}}/energy?period={{period}}"
          inputParameters:
            - name: facility
              in: path
            - name: period
              in: query
          operations:
            - name: get-energy-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: uploads
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-document
              method: PUT

When a store associate reports an equipment issue, creates a ServiceNow work order, checks the equipment warranty in SAP, notifies the facilities team via Microsoft Teams, and logs the event in the asset management system.

naftiko: "0.5"
info:
  label: "Store Equipment Maintenance Request"
  description: "When a store associate reports an equipment issue, creates a ServiceNow work order, checks the equipment warranty in SAP, notifies the facilities team via Microsoft Teams, and logs the event in the asset management system."
  tags:
    - store-ops
    - maintenance
    - servicenow
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: equipment-maintenance
      port: 8080
      tools:
        - name: submit-maintenance-request
          description: "Given store ID, equipment details, and issue description, create a work order, check warranty, and notify facilities."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: equipment_id
              in: body
              type: string
              description: "The asset ID of the equipment."
            - name: issue_description
              in: body
              type: string
              description: "Description of the equipment issue."
            - name: priority
              in: body
              type: string
              description: "Request priority (LOW, MEDIUM, HIGH, CRITICAL)."
          steps:
            - name: check-warranty
              type: call
              call: "sap.get-asset"
              with:
                asset_id: "{{equipment_id}}"
            - name: create-work-order
              type: call
              call: "servicenow.create-work-order"
              with:
                short_description: "Equipment repair: {{equipment_id}} at Store #{{store_id}}"
                priority: "{{priority}}"
                assigned_group: "Facilities_Maintenance"
                description: "{{issue_description}} Asset: {{equipment_id}}. Warranty status: {{check-warranty.warranty_status}}. Warranty expiry: {{check-warranty.warranty_end_date}}."
            - name: notify-facilities
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "facilities-maintenance"
                text: "Maintenance request: Store #{{store_id}}, Equipment {{equipment_id}}. Priority: {{priority}}. Warranty: {{check-warranty.warranty_status}}. Work order: {{create-work-order.number}}. Issue: {{issue_description}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_0002"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: assets
          path: "/A_FixedAsset('{{asset_id}}')"
          inputParameters:
            - name: asset_id
              in: path
          operations:
            - name: get-asset
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: work-orders
          path: "/table/wm_order"
          operations:
            - name: create-work-order
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Responds to store HVAC emergencies by pulling BMS alerts, creating an urgent ServiceNow work order, and dispatching the nearest HVAC technician via field service.

naftiko: "0.5"
info:
  label: "Store HVAC Emergency Response Orchestrator"
  description: "Responds to store HVAC emergencies by pulling BMS alerts, creating an urgent ServiceNow work order, and dispatching the nearest HVAC technician via field service."
  tags:
    - facilities
    - emergency
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hvac-emergency
      port: 8080
      tools:
        - name: respond-hvac-emergency
          description: "Respond to a store HVAC emergency."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: alert_type
              in: body
              type: string
              description: "HVAC alert type (no_cooling, no_heating, refrigerant_leak)."
          steps:
            - name: get-bms-data
              type: call
              call: "bms.get-hvac-status"
              with:
                facility: "store_{{store_id}}"
            - name: create-urgent-wo
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "HVAC Emergency: Store {{store_id}} - {{alert_type}}"
                urgency: "1"
                category: "facilities"
                description: "Current temp: {{get-bms-data.current_temp}}F. Set point: {{get-bms-data.set_point}}F. Alert: {{alert_type}}."
            - name: dispatch-technician
              type: call
              call: "field-service.dispatch"
              with:
                store_id: "{{store_id}}"
                service_type: "hvac_emergency"
                reference: "{{create-urgent-wo.number}}"
  consumes:
    - type: http
      namespace: bms
      baseUri: "https://bms.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bms_token"
      resources:
        - name: hvac
          path: "/facilities/{{facility}}/hvac/status"
          inputParameters:
            - name: facility
              in: path
          operations:
            - name: get-hvac-status
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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: field-service
      baseUri: "https://fieldservice.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.field_service_token"
      resources:
        - name: dispatch
          path: "/dispatch"
          operations:
            - name: dispatch
              method: POST

Queries Oracle Retail inventory for a specific product at a given store location, returning on-hand quantity, on-order quantity, and next expected delivery date.

naftiko: "0.5"
info:
  label: "Store Inventory Check"
  description: "Queries Oracle Retail inventory for a specific product at a given store location, returning on-hand quantity, on-order quantity, and next expected delivery date."
  tags:
    - inventory
    - store-ops
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: store-inventory
      port: 8080
      tools:
        - name: check-store-stock
          description: "Given a store number and SKU, return on-hand inventory, on-order quantity, and next delivery date."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Home Depot store number."
            - name: sku
              in: body
              type: string
              description: "The product SKU to check."
          call: "oracle-retail.get-stock"
          with:
            store_id: "{{store_id}}"
            sku: "{{sku}}"
          outputParameters:
            - name: on_hand
              type: number
              mapping: "$.inventory.onHandQty"
            - name: on_order
              type: number
              mapping: "$.inventory.onOrderQty"
            - name: next_delivery
              type: string
              mapping: "$.inventory.nextDeliveryDate"
  consumes:
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: stock
          path: "/stores/{{store_id}}/items/{{sku}}/stock"
          inputParameters:
            - name: store_id
              in: path
            - name: sku
              in: path
          operations:
            - name: get-stock
              method: GET

Optimizes store labor scheduling by pulling traffic forecasts from Snowflake, current staffing from Workday, and publishing optimized schedules back to the workforce management system.

naftiko: "0.5"
info:
  label: "Store Labor Scheduling Optimizer"
  description: "Optimizes store labor scheduling by pulling traffic forecasts from Snowflake, current staffing from Workday, and publishing optimized schedules back to the workforce management system."
  tags:
    - hr
    - scheduling
    - snowflake
    - workday
capability:
  exposes:
    - type: mcp
      namespace: labor-scheduling
      port: 8080
      tools:
        - name: optimize-schedule
          description: "Optimize store labor schedule based on traffic forecast."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: week_start
              in: body
              type: string
              description: "Week start date in YYYY-MM-DD."
          steps:
            - name: get-traffic-forecast
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT day_of_week, hourly_traffic_forecast FROM store_traffic_forecast WHERE store_id = '{{store_id}}' AND week_start = '{{week_start}}'"
            - name: get-current-staffing
              type: call
              call: "workday.get-store-headcount"
              with:
                location: "store_{{store_id}}"
            - name: publish-schedule
              type: call
              call: "wfm.create-schedule"
              with:
                store_id: "{{store_id}}"
                week_start: "{{week_start}}"
                traffic_data: "{{get-traffic-forecast.data}}"
                headcount: "{{get-current-staffing.count}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/headcount?location={{location}}"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-store-headcount
              method: GET
    - type: http
      namespace: wfm
      baseUri: "https://wfm.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wfm_token"
      resources:
        - name: schedules
          path: "/schedules"
          operations:
            - name: create-schedule
              method: POST

Generates a daily store briefing by pulling yesterday's sales from Snowflake, open incidents from ServiceNow, and staffing status from Workday, then emailing via Outlook.

naftiko: "0.5"
info:
  label: "Store Manager Daily Briefing Generator"
  description: "Generates a daily store briefing by pulling yesterday's sales from Snowflake, open incidents from ServiceNow, and staffing status from Workday, then emailing via Outlook."
  tags:
    - operations
    - reporting
    - snowflake
    - servicenow
    - workday
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: daily-briefing
      port: 8080
      tools:
        - name: generate-briefing
          description: "Generate the daily store manager briefing."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
          steps:
            - name: get-sales-summary
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT total_revenue, transaction_count, avg_basket_size FROM daily_store_sales WHERE store_id = '{{store_id}}' AND sale_date = CURRENT_DATE - 1"
            - name: get-open-incidents
              type: call
              call: "servicenow.get-incidents"
              with:
                query: "assignment_group.name=Store_{{store_id}}^state!=6"
            - name: get-staffing
              type: call
              call: "workday.get-daily-schedule"
              with:
                location: "store_{{store_id}}"
            - name: send-briefing
              type: call
              call: "outlook.send-email"
              with:
                to: "storemanager_{{store_id}}@homedepot.com"
                subject: "Daily Briefing: Store {{store_id}}"
                body: "Sales: ${{get-sales-summary.data[0].total_revenue}} ({{get-sales-summary.data[0].transaction_count}} transactions). Open incidents: {{get-open-incidents.count}}. Scheduled associates: {{get-staffing.total_scheduled}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: get-incidents
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/schedules?location={{location}}&date=today"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-daily-schedule
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

At store opening time, verifies POS system status via ServiceNow, checks associate clock-ins from Workday, reviews overnight receiving in Oracle Retail, and posts the morning readiness summary to the store manager's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Store Opening Checklist Orchestrator"
  description: "At store opening time, verifies POS system status via ServiceNow, checks associate clock-ins from Workday, reviews overnight receiving in Oracle Retail, and posts the morning readiness summary to the store manager's Microsoft Teams channel."
  tags:
    - store-ops
    - daily-operations
    - servicenow
    - workday
    - oracle-cloud
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-opening
      port: 8080
      tools:
        - name: run-opening-checklist
          description: "Given a store ID and date, verify POS, staffing, and receiving status, then post the morning readiness report."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: date
              in: body
              type: string
              description: "The date in YYYY-MM-DD format."
            - name: manager_email
              in: body
              type: string
              description: "The store manager email."
          steps:
            - name: check-pos-status
              type: call
              call: "servicenow.get-ci-status"
              with:
                ci_name: "POS_Store_{{store_id}}"
            - name: check-staffing
              type: call
              call: "workday.get-attendance"
              with:
                location: "Store_{{store_id}}"
                date: "{{date}}"
                shift: "opening"
            - name: check-receiving
              type: call
              call: "oracle-retail.get-overnight-receipts"
              with:
                store_id: "{{store_id}}"
                date: "{{date}}"
            - name: post-readiness
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Morning Readiness - Store #{{store_id}} ({{date}}): POS Status: {{check-pos-status.status}}. Associates clocked in: {{check-staffing.present_count}}/{{check-staffing.scheduled_count}}. Overnight receipts processed: {{check-receiving.receipt_count}} ({{check-receiving.units_received}} units)."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: ci
          path: "/table/cmdb_ci?sysparm_query=name={{ci_name}}"
          inputParameters:
            - name: ci_name
              in: path
          operations:
            - name: get-ci-status
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: attendance
          path: "/attendance/{{location}}/{{date}}"
          inputParameters:
            - name: location
              in: path
            - name: date
              in: path
          operations:
            - name: get-attendance
              method: GET
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: receipts
          path: "/stores/{{store_id}}/receipts"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-overnight-receipts
              method: GET
    - 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

Pulls daily sales from Teradata, foot traffic from Google Analytics, and open incidents from ServiceNow, then compiles a digest and posts it to the store's Microsoft Teams channel every morning.

naftiko: "0.5"
info:
  label: "Store Performance Daily Digest"
  description: "Pulls daily sales from Teradata, foot traffic from Google Analytics, and open incidents from ServiceNow, then compiles a digest and posts it to the store's Microsoft Teams channel every morning."
  tags:
    - store-ops
    - reporting
    - teradata
    - google-analytics
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-digest
      port: 8080
      tools:
        - name: generate-daily-digest
          description: "Given a store ID and date, compile sales, traffic, and incident data into a daily digest and post to Teams."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: report_date
              in: body
              type: string
              description: "The date for the digest in YYYY-MM-DD format."
          steps:
            - name: get-sales
              type: call
              call: "teradata.run-query"
              with:
                query: "SELECT SUM(net_sales) as total_sales, COUNT(DISTINCT txn_id) as txn_count FROM daily_sales WHERE store_id='{{store_id}}' AND sale_date='{{report_date}}'"
            - name: get-traffic
              type: call
              call: "ga.run-report"
              with:
                store_id: "{{store_id}}"
                start_date: "{{report_date}}"
                end_date: "{{report_date}}"
            - name: get-incidents
              type: call
              call: "servicenow.get-store-incidents"
              with:
                store_id: "{{store_id}}"
                date: "{{report_date}}"
            - name: post-digest
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "store-{{store_id}}-ops"
                text: "Daily Digest for Store #{{store_id}} ({{report_date}}): Sales: ${{get-sales.total_sales}} across {{get-sales.txn_count}} transactions. Online traffic: {{get-traffic.page_views}} page views. Open incidents: {{get-incidents.count}}."
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://teradata.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: store-incidents
          path: "/table/incident?sysparm_query=location={{store_id}}^opened_at={{date}}"
          inputParameters:
            - name: store_id
              in: path
            - name: date
              in: path
          operations:
            - name: get-store-incidents
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Retrieves the current planogram from SharePoint, compares against actual shelf data from the store IoT system, logs discrepancies in Jira, and notifies the department manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Planogram Compliance Audit"
  description: "Retrieves the current planogram from SharePoint, compares against actual shelf data from the store IoT system, logs discrepancies in Jira, and notifies the department manager via Microsoft Teams."
  tags:
    - store-ops
    - planogram
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: planogram-audit
      port: 8080
      tools:
        - name: audit-planogram
          description: "Given a store ID and department, compare the planogram against shelf reality and report discrepancies."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number to audit."
            - name: department
              in: body
              type: string
              description: "The department to audit (e.g. PAINT, ELECTRICAL, PLUMBING)."
            - name: manager_email
              in: body
              type: string
              description: "The department manager email for notifications."
          steps:
            - name: get-planogram
              type: call
              call: "sharepoint.get-file"
              with:
                site_id: "store_ops_site"
                file_path: "Planograms/Store{{store_id}}/{{department}}_current.json"
            - name: get-shelf-data
              type: call
              call: "store-iot.get-shelf-scan"
              with:
                store_id: "{{store_id}}"
                department: "{{department}}"
            - name: log-discrepancy
              type: call
              call: "jira.create-issue"
              with:
                project: "STOREOPS"
                issue_type: "Task"
                summary: "Planogram discrepancy: Store #{{store_id}} - {{department}}"
                description: "Planogram audit found discrepancies in {{department}} at Store #{{store_id}}. Expected SKU positions: {{get-planogram.sku_count}}. Actual matches: {{get-shelf-data.match_count}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Planogram audit completed for {{department}} at Store #{{store_id}}. Discrepancies found and logged as {{log-discrepancy.key}}. Please review and correct shelf placement."
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: store-iot
      baseUri: "https://iot.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.store_iot_token"
      resources:
        - name: shelf-scans
          path: "/stores/{{store_id}}/departments/{{department}}/shelf-scan"
          inputParameters:
            - name: store_id
              in: path
            - name: department
              in: path
          operations:
            - name: get-shelf-scan
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://homedepot.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Coordinates store remodel projects by creating a Jira project, generating a budget in SAP, and distributing the project plan via SharePoint.

naftiko: "0.5"
info:
  label: "Store Remodel Project Coordinator"
  description: "Coordinates store remodel projects by creating a Jira project, generating a budget in SAP, and distributing the project plan via SharePoint."
  tags:
    - operations
    - store-remodel
    - jira
    - sap
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: store-remodel
      port: 8080
      tools:
        - name: initiate-remodel
          description: "Initiate and coordinate a store remodel project."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: remodel_type
              in: body
              type: string
              description: "Remodel type (full, partial, department)."
            - name: budget_amount
              in: body
              type: number
              description: "Allocated budget."
          steps:
            - name: create-project
              type: call
              call: "jira.create-project"
              with:
                name: "Store {{store_id}} Remodel - {{remodel_type}}"
                key: "REM{{store_id}}"
                template: "store_remodel"
            - name: create-budget
              type: call
              call: "sap.create-wbs"
              with:
                project_name: "Remodel_{{store_id}}"
                budget: "{{budget_amount}}"
            - name: distribute-plan
              type: call
              call: "sharepoint.upload-document"
              with:
                site_id: "store_operations"
                folder_path: "Remodels/Store_{{store_id}}"
                file_name: "remodel_plan_{{store_id}}.xlsx"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://homedepot.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: projects
          path: "/project"
          operations:
            - name: create-project
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZPS_WBS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: wbs
          path: "/WBSElementSet"
          operations:
            - name: create-wbs
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: uploads
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-document
              method: PUT

Conducts store safety audits by pulling checklist from ServiceNow, verifying training completion in Cornerstone LMS, and publishing results to SharePoint.

naftiko: "0.5"
info:
  label: "Store Safety Compliance Auditor"
  description: "Conducts store safety audits by pulling checklist from ServiceNow, verifying training completion in Cornerstone LMS, and publishing results to SharePoint."
  tags:
    - safety
    - compliance
    - servicenow
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: safety-audit
      port: 8080
      tools:
        - name: conduct-safety-audit
          description: "Conduct a store safety compliance audit."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store number."
            - name: audit_date
              in: body
              type: string
              description: "Audit date in YYYY-MM-DD."
          steps:
            - name: get-checklist
              type: call
              call: "servicenow.get-checklist"
              with:
                template: "store_safety_audit"
                location: "store_{{store_id}}"
            - name: verify-training
              type: call
              call: "cornerstone.get-compliance-report"
              with:
                location: "store_{{store_id}}"
                course_category: "safety"
            - name: publish-results
              type: call
              call: "sharepoint.upload-document"
              with:
                site_id: "safety_compliance"
                folder_path: "Audits/{{audit_date}}"
                file_name: "store_{{store_id}}_safety_audit.json"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: checklists
          path: "/table/checklist_template?sysparm_query=name={{template}}^location={{location}}"
          inputParameters:
            - name: template
              in: query
            - name: location
              in: query
          operations:
            - name: get-checklist
              method: GET
    - type: http
      namespace: cornerstone
      baseUri: "https://homedepot.csod.com/services/api/x/v2"
      authentication:
        type: bearer
        token: "$secrets.cornerstone_token"
      resources:
        - name: compliance
          path: "/reports/compliance?location={{location}}&category={{course_category}}"
          inputParameters:
            - name: location
              in: query
            - name: course_category
              in: query
          operations:
            - name: get-compliance-report
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: uploads
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-document
              method: PUT

Fetches invoices from SAP, matches against goods receipts in Oracle Retail, flags discrepancies in ServiceNow for accounts payable review, and sends a summary to the finance team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Invoice Reconciliation"
  description: "Fetches invoices from SAP, matches against goods receipts in Oracle Retail, flags discrepancies in ServiceNow for accounts payable review, and sends a summary to the finance team in Microsoft Teams."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle-cloud
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: invoice-reconciliation
      port: 8080
      tools:
        - name: reconcile-invoice
          description: "Given a SAP invoice number, match against goods receipts and flag discrepancies."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice number."
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor ID."
          steps:
            - name: get-invoice
              type: call
              call: "sap.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: get-goods-receipt
              type: call
              call: "oracle-retail.get-receipt"
              with:
                po_number: "{{get-invoice.po_reference}}"
                vendor_id: "{{vendor_id}}"
            - name: flag-discrepancy
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Invoice discrepancy: {{invoice_number}} vs GR {{get-goods-receipt.receipt_id}}"
                assigned_group: "Accounts_Payable"
                description: "Invoice {{invoice_number}} amount: ${{get-invoice.total_amount}}. GR amount: ${{get-goods-receipt.received_value}}. Variance: ${{get-invoice.total_amount}} - ${{get-goods-receipt.received_value}}. Vendor: {{vendor_id}}."
            - name: notify-finance
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "accounts-payable"
                text: "Invoice reconciliation: {{invoice_number}} for vendor {{vendor_id}}. Invoice: ${{get-invoice.total_amount}}. GR: ${{get-goods-receipt.received_value}}. Task: {{flag-discrepancy.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_INVOICE_MAINT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: invoices
          path: "/A_SupplierInvoice('{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: receipts
          path: "/purchase-orders/{{po_number}}/receipts"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-receipt
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Retrieves a pre-built Tableau view as a PNG image for a given dashboard name, used for embedding store performance visuals in Slack and email reports.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Snapshot"
  description: "Retrieves a pre-built Tableau view as a PNG image for a given dashboard name, used for embedding store performance visuals in Slack and email reports."
  tags:
    - analytics
    - reporting
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: analytics-dashboards
      port: 8080
      tools:
        - name: get-dashboard-image
          description: "Given a Tableau workbook and view name, return a PNG image URL of the rendered dashboard."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Tableau workbook ID."
            - name: view_id
              in: body
              type: string
              description: "The Tableau view ID within the workbook."
          call: "tableau.get-view-image"
          with:
            workbook_id: "{{workbook_id}}"
            view_id: "{{view_id}}"
          outputParameters:
            - name: image_url
              type: string
              mapping: "$.view.imageUrl"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.homedepot.com/api/3.21"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/views/{{view_id}}/image"
          inputParameters:
            - name: site_id
              in: path
            - name: workbook_id
              in: path
            - name: view_id
              in: path
          operations:
            - name: get-view-image
              method: GET

When a customer reserves a tool rental online, validates availability in the rental management system, creates the reservation in SAP Commerce Cloud, charges the deposit via Square, and sends a confirmation email via MailChimp.

naftiko: "0.5"
info:
  label: "Tool Rental Reservation Processor"
  description: "When a customer reserves a tool rental online, validates availability in the rental management system, creates the reservation in SAP Commerce Cloud, charges the deposit via Square, and sends a confirmation email via MailChimp."
  tags:
    - e-commerce
    - tool-rental
    - sap
    - square
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: tool-rental
      port: 8080
      tools:
        - name: process-rental-reservation
          description: "Given a tool ID, store ID, customer details, and rental dates, validate availability, create reservation, charge deposit, and confirm."
          inputParameters:
            - name: tool_id
              in: body
              type: string
              description: "The rental tool inventory ID."
            - name: store_id
              in: body
              type: string
              description: "The store number for pickup."
            - name: customer_email
              in: body
              type: string
              description: "The customer email."
            - name: start_date
              in: body
              type: string
              description: "Rental start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "Rental end date in YYYY-MM-DD format."
            - name: deposit_amount
              in: body
              type: number
              description: "The deposit amount in dollars."
          steps:
            - name: check-availability
              type: call
              call: "rental-svc.check-tool"
              with:
                tool_id: "{{tool_id}}"
                store_id: "{{store_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: create-reservation
              type: call
              call: "sap-commerce.create-rental"
              with:
                tool_id: "{{tool_id}}"
                store_id: "{{store_id}}"
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
                customer_email: "{{customer_email}}"
            - name: charge-deposit
              type: call
              call: "square.create-payment"
              with:
                amount: "{{deposit_amount}}"
                currency: "USD"
                reference_id: "{{create-reservation.reservation_id}}"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                template_name: "rental_confirmation"
                to_email: "{{customer_email}}"
                merge_vars:
                  reservation_id: "{{create-reservation.reservation_id}}"
                  tool_name: "{{check-availability.tool_name}}"
                  store_id: "{{store_id}}"
                  start_date: "{{start_date}}"
                  end_date: "{{end_date}}"
                  deposit: "{{deposit_amount}}"
  consumes:
    - type: http
      namespace: rental-svc
      baseUri: "https://rentals.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.rental_svc_token"
      resources:
        - name: tools
          path: "/tools/{{tool_id}}/availability"
          inputParameters:
            - name: tool_id
              in: path
          operations:
            - name: check-tool
              method: GET
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: rentals
          path: "/rentals"
          operations:
            - name: create-rental
              method: POST
    - type: http
      namespace: square
      baseUri: "https://connect.squareup.com/v2"
      authentication:
        type: bearer
        token: "$secrets.square_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: create-payment
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apiKey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Sends delivery status SMS notifications to customers via Twilio for appliance and special order deliveries.

naftiko: "0.5"
info:
  label: "Twilio Customer Delivery SMS Sender"
  description: "Sends delivery status SMS notifications to customers via Twilio for appliance and special order deliveries."
  tags:
    - fulfillment
    - notifications
    - twilio
capability:
  exposes:
    - type: mcp
      namespace: delivery-sms
      port: 8080
      tools:
        - name: send-delivery-sms
          description: "Send a delivery status SMS to a customer."
          inputParameters:
            - name: phone_number
              in: body
              type: string
              description: "Customer phone number."
            - name: message
              in: body
              type: string
              description: "The SMS message text."
          call: "twilio.send-sms"
          with:
            to: "{{phone_number}}"
            body: "{{message}}"
          outputParameters:
            - name: message_sid
              type: string
              mapping: "$.sid"
  consumes:
    - 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

Generates vendor compliance scorecards by pulling on-time delivery metrics from SAP, quality data from Snowflake, and publishing to the vendor portal via Salesforce.

naftiko: "0.5"
info:
  label: "Vendor Compliance Scorecard Generator"
  description: "Generates vendor compliance scorecards by pulling on-time delivery metrics from SAP, quality data from Snowflake, and publishing to the vendor portal via Salesforce."
  tags:
    - procurement
    - vendor
    - sap
    - snowflake
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: vendor-scorecard
      port: 8080
      tools:
        - name: generate-scorecard
          description: "Generate a vendor compliance scorecard."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor ID."
            - name: period
              in: body
              type: string
              description: "Reporting period in YYYY-Q format."
          steps:
            - name: get-delivery-metrics
              type: call
              call: "sap.get-vendor-otif"
              with:
                vendor: "{{vendor_id}}"
                period: "{{period}}"
            - name: get-quality-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT defect_rate, return_rate, avg_quality_score FROM vendor_quality WHERE vendor_id = '{{vendor_id}}' AND period = '{{period}}'"
            - name: publish-scorecard
              type: call
              call: "salesforce.update-account"
              with:
                vendor_id: "{{vendor_id}}"
                otif_score: "{{get-delivery-metrics.otif_percentage}}"
                quality_score: "{{get-quality-metrics.data[0].avg_quality_score}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_VENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: otif
          path: "/VendorOTIFSet(Vendor='{{vendor}}',Period='{{period}}')"
          inputParameters:
            - name: vendor
              in: path
            - name: period
              in: path
          operations:
            - name: get-vendor-otif
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Vendor_Account__c/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: update-account
              method: PATCH

Sets up a new vendor product by creating the item in SAP, syncing product content to the e-commerce platform, and notifying merchandising via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor New Item Setup Pipeline"
  description: "Sets up a new vendor product by creating the item in SAP, syncing product content to the e-commerce platform, and notifying merchandising via Microsoft Teams."
  tags:
    - merchandising
    - vendor
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: new-item-setup
      port: 8080
      tools:
        - name: setup-new-item
          description: "Orchestrate new vendor item setup across systems."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor ID."
            - name: item_name
              in: body
              type: string
              description: "Product name."
            - name: category
              in: body
              type: string
              description: "Product category."
            - name: cost_price
              in: body
              type: number
              description: "Vendor cost price."
          steps:
            - name: create-sap-material
              type: call
              call: "sap.create-material"
              with:
                vendor: "{{vendor_id}}"
                description: "{{item_name}}"
                category: "{{category}}"
                cost: "{{cost_price}}"
            - name: sync-to-ecommerce
              type: call
              call: "sap-commerce.create-product"
              with:
                sku: "{{create-sap-material.material_number}}"
                name: "{{item_name}}"
                category: "{{category}}"
            - name: notify-merchandising
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "merchandising-new-items"
                text: "New item setup: {{item_name}} (SKU: {{create-sap-material.material_number}}) from vendor {{vendor_id}}. Category: {{category}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_MATERIAL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/MaterialSet"
          operations:
            - name: create-material
              method: POST
    - type: http
      namespace: sap-commerce
      baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
      authentication:
        type: bearer
        token: "$secrets.sap_commerce_token"
      resources:
        - name: products
          path: "/products"
          operations:
            - name: create-product
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates vendor performance data from SAP, delivery metrics from Oracle Retail, and quality incidents from ServiceNow, then publishes a quarterly scorecard to Confluence and notifies the procurement team.

naftiko: "0.5"
info:
  label: "Vendor Scorecard Generation"
  description: "Aggregates vendor performance data from SAP, delivery metrics from Oracle Retail, and quality incidents from ServiceNow, then publishes a quarterly scorecard to Confluence and notifies the procurement team."
  tags:
    - supply-chain
    - vendor-management
    - sap
    - oracle-cloud
    - servicenow
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-scorecard
      port: 8080
      tools:
        - name: generate-vendor-scorecard
          description: "Given a vendor ID and quarter, aggregate performance data across systems and publish the scorecard."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The SAP vendor ID."
            - name: quarter
              in: body
              type: string
              description: "The reporting quarter (e.g. Q1_2026)."
          steps:
            - name: get-vendor-pos
              type: call
              call: "sap.get-vendor-orders"
              with:
                vendor_id: "{{vendor_id}}"
                quarter: "{{quarter}}"
            - name: get-delivery-metrics
              type: call
              call: "oracle-retail.get-vendor-delivery-stats"
              with:
                vendor_id: "{{vendor_id}}"
                quarter: "{{quarter}}"
            - name: get-quality-incidents
              type: call
              call: "servicenow.get-vendor-incidents"
              with:
                vendor_id: "{{vendor_id}}"
                quarter: "{{quarter}}"
            - name: publish-scorecard
              type: call
              call: "confluence.create-page"
              with:
                space_key: "PROCUREMENT"
                title: "Vendor Scorecard: {{vendor_id}} - {{quarter}}"
                body: "PO Count: {{get-vendor-pos.total_orders}}. On-time delivery: {{get-delivery-metrics.on_time_pct}}%. Fill rate: {{get-delivery-metrics.fill_rate_pct}}%. Quality incidents: {{get-quality-incidents.count}}. Overall score: {{get-delivery-metrics.composite_score}}."
            - name: notify-procurement
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "procurement-scorecards"
                text: "Vendor scorecard published for {{vendor_id}} ({{quarter}}). On-time: {{get-delivery-metrics.on_time_pct}}%. Quality incidents: {{get-quality-incidents.count}}. Full report: {{publish-scorecard.url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendor-orders
          path: "/A_PurchaseOrder?$filter=Supplier eq '{{vendor_id}}'"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-orders
              method: GET
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: vendor-stats
          path: "/vendors/{{vendor_id}}/delivery-stats"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-delivery-stats
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://homedepot.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: vendor-incidents
          path: "/table/incident?sysparm_query=vendor={{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-incidents
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

When a SAP purchase order ships, fetches carrier tracking details, updates Oracle Retail with the expected arrival, and posts a supply chain update to the Microsoft Teams logistics channel.

naftiko: "0.5"
info:
  label: "Vendor Shipment Tracking Pipeline"
  description: "When a SAP purchase order ships, fetches carrier tracking details, updates Oracle Retail with the expected arrival, and posts a supply chain update to the Microsoft Teams logistics channel."
  tags:
    - supply-chain
    - logistics
    - sap
    - oracle-cloud
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shipment-tracking
      port: 8080
      tools:
        - name: track-vendor-shipment
          description: "Given a PO number and tracking number, fetch carrier details, update Oracle Retail ETA, and notify the logistics team in Microsoft Teams."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: tracking_number
              in: body
              type: string
              description: "The carrier tracking number."
            - name: carrier
              in: body
              type: string
              description: "The shipping carrier (e.g. UPS, FedEx, XPO)."
          steps:
            - name: get-po
              type: call
              call: "sap.get-po"
              with:
                po_number: "{{po_number}}"
            - name: get-tracking
              type: call
              call: "carrier-api.track-shipment"
              with:
                carrier: "{{carrier}}"
                tracking_number: "{{tracking_number}}"
            - name: update-eta
              type: call
              call: "oracle-retail.update-delivery"
              with:
                po_number: "{{po_number}}"
                eta: "{{get-tracking.estimated_delivery}}"
                status: "{{get-tracking.status}}"
            - name: notify-logistics
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "supply-chain-updates"
                text: "PO {{po_number}} from {{get-po.vendor}}: {{get-tracking.status}}. ETA: {{get-tracking.estimated_delivery}}. Tracking: {{tracking_number}} via {{carrier}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET
    - type: http
      namespace: carrier-api
      baseUri: "https://logistics.homedepot.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.logistics_token"
      resources:
        - name: tracking
          path: "/carriers/{{carrier}}/track/{{tracking_number}}"
          inputParameters:
            - name: carrier
              in: path
            - name: tracking_number
              in: path
          operations:
            - name: track-shipment
              method: GET
    - type: http
      namespace: oracle-retail
      baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_retail_token"
      resources:
        - name: deliveries
          path: "/purchase-orders/{{po_number}}/delivery"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: update-delivery
              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/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

Handles website performance issues by pulling metrics from Datadog, checking CDN status in Cloudflare, and creating an incident in PagerDuty.

naftiko: "0.5"
info:
  label: "Website Performance Degradation Handler"
  description: "Handles website performance issues by pulling metrics from Datadog, checking CDN status in Cloudflare, and creating an incident in PagerDuty."
  tags:
    - e-commerce
    - performance
    - datadog
    - cloudflare
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: web-performance
      port: 8080
      tools:
        - name: handle-performance-issue
          description: "Respond to website performance degradation."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The affected service name."
            - name: threshold_breach
              in: body
              type: string
              description: "Description of the threshold breach."
          steps:
            - name: get-metrics
              type: call
              call: "datadog.get-service-metrics"
              with:
                service: "{{service_name}}"
            - name: check-cdn
              type: call
              call: "cloudflare.get-zone-analytics"
              with:
                zone: "homedepot.com"
            - name: create-incident
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "ecommerce_platform"
                title: "Performance degradation: {{service_name}} - {{threshold_breach}}"
                details: "P99 latency: {{get-metrics.p99_latency}}ms. Error rate: {{get-metrics.error_rate}}%. CDN cache hit ratio: {{check-cdn.cache_hit_ratio}}%."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/metrics/query?query=avg:trace.{{service}}.request.duration"
          inputParameters:
            - name: service
              in: query
          operations:
            - name: get-service-metrics
              method: GET
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: analytics
          path: "/zones/{{zone}}/analytics/dashboard"
          inputParameters:
            - name: zone
              in: path
          operations:
            - name: get-zone-analytics
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Retrieves the warehouse bin location for a product in the distribution center warehouse management system, returning aisle, rack, and bin number.

naftiko: "0.5"
info:
  label: "WMS Bin Location Lookup"
  description: "Retrieves the warehouse bin location for a product in the distribution center warehouse management system, returning aisle, rack, and bin number."
  tags:
    - warehouse
    - fulfillment
    - wms
capability:
  exposes:
    - type: mcp
      namespace: bin-location
      port: 8080
      tools:
        - name: get-bin-location
          description: "Look up the bin location for a SKU in a distribution center."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: dc_id
              in: body
              type: string
              description: "The distribution center ID."
          call: "wms.get-location"
          with:
            sku: "{{sku}}"
            facility: "{{dc_id}}"
          outputParameters:
            - name: aisle
              type: string
              mapping: "$.location.aisle"
            - name: rack
              type: string
              mapping: "$.location.rack"
            - name: bin
              type: string
              mapping: "$.location.bin"
  consumes:
    - type: http
      namespace: wms
      baseUri: "https://wms.homedepot.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: locations
          path: "/facilities/{{facility}}/items/{{sku}}/location"
          inputParameters:
            - name: facility
              in: path
            - name: sku
              in: path
          operations:
            - name: get-location
              method: GET

Retrieves an associate profile from Workday by employee ID, returning name, job title, home store, department, and hire date.

naftiko: "0.5"
info:
  label: "Workday Associate Profile"
  description: "Retrieves an associate profile from Workday by employee ID, returning name, job title, home store, department, and hire date."
  tags:
    - hr
    - workforce
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-profiles
      port: 8080
      tools:
        - name: get-associate
          description: "Given a Workday employee ID, return the associate profile including name, title, home store, department, and hire date."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID for the associate."
          call: "workday.get-worker"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.descriptor"
            - name: job_title
              type: string
              mapping: "$.worker.primaryJob.jobTitle"
            - name: home_store
              type: string
              mapping: "$.worker.primaryJob.location"
            - name: department
              type: string
              mapping: "$.worker.primaryJob.department"
            - name: hire_date
              type: string
              mapping: "$.worker.hireDate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
      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 the current week schedule for a store associate from Workday, returning shift times, department, and manager.

naftiko: "0.5"
info:
  label: "Workday Associate Schedule Lookup"
  description: "Retrieves the current week schedule for a store associate from Workday, returning shift times, department, and manager."
  tags:
    - hr
    - scheduling
    - workday
capability:
  exposes:
    - type: mcp
      namespace: associate-schedule
      port: 8080
      tools:
        - name: get-schedule
          description: "Look up a store associate's weekly schedule."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-schedule"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: shifts
              type: array
              mapping: "$.schedule.shifts"
            - name: department
              type: string
              mapping: "$.schedule.department"
            - name: manager
              type: string
              mapping: "$.schedule.manager"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/workers/{{worker_id}}/schedule"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-schedule
              method: GET