LVMH Capabilities

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

Sort
Expand

Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions.

naftiko: "0.5"
info:
  label: "Adyen Payment Reconciliation Lookup"
  description: "Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions."
  tags:
    - payments
    - adyen
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: adyen_payment_reconciliation_lookup
          description: "Retrieves payment reconciliation details from Adyen payment platform for luxury retail transactions.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "adyen.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: adyen
      baseUri: "https://lvmh-adyen.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.adyen_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Executes a product search query against the Algolia index, returning matching products with facets for brand, category, and price range.

naftiko: "0.5"
info:
  label: "Algolia Search Query"
  description: "Executes a product search query against the Algolia index, returning matching products with facets for brand, category, and price range."
  tags:
    - e-commerce
    - search
    - algolia
capability:
  exposes:
    - type: mcp
      namespace: search
      port: 8080
      tools:
        - name: search-products
          description: "Execute a product search query on Algolia. Returns matching products with brand, category, and price facets."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query string."
            - name: brand_filter
              in: body
              type: string
              description: "Optional brand facet filter (e.g., Louis Vuitton, Dior)."
          call: "algolia.search"
          with:
            query: "{{query}}"
            facetFilters: "brand:{{brand_filter}}"
  consumes:
    - type: http
      namespace: algolia
      baseUri: "https://lvmh-app.algolia.net/1/indexes/products"
      authentication:
        type: bearer
        token: "$secrets.algolia_api_key"
      inputParameters:
        - name: X-Algolia-Application-Id
          in: header
          value: "$secrets.algolia_app_id"
      resources:
        - name: search
          path: "/query"
          operations:
            - name: search
              method: POST

Validates a product serial number against the SAP master data, checks blockchain provenance records, and logs the authentication event in Salesforce for traceability.

naftiko: "0.5"
info:
  label: "Anti-Counterfeit Product Authentication"
  description: "Validates a product serial number against the SAP master data, checks blockchain provenance records, and logs the authentication event in Salesforce for traceability."
  tags:
    - brand-protection
    - authentication
    - sap-s4hana
    - salesforce
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: brand-protection
      port: 8080
      tools:
        - name: authenticate-product
          description: "Given a product serial number, validate against SAP master data, check provenance, and log the authentication event in Salesforce."
          inputParameters:
            - name: serial_number
              in: body
              type: string
              description: "The product serial number or NFC tag ID."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID of the client requesting authentication."
          steps:
            - name: check-sap-master
              type: call
              call: "sap.get-serial"
              with:
                serial: "{{serial_number}}"
            - name: log-authentication
              type: call
              call: "salesforce.create-event"
              with:
                WhoId: "{{client_id}}"
                Subject: "Product Authentication: {{serial_number}}"
                Description: "Serial {{serial_number}} verified. Material: {{check-sap-master.material_number}}. Production date: {{check-sap-master.production_date}}. Origin: {{check-sap-master.plant}}."
                Type: "Authentication"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SERIALNUMBER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: serials
          path: "/A_SerialNumber('{{serial}}')"
          inputParameters:
            - name: serial
              in: path
          operations:
            - name: get-serial
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: events
          path: "/sobjects/Event"
          operations:
            - name: create-event
              method: POST

Plans artisan succession by analyzing skill matrices in Workday, identifying succession gaps in Snowflake, creating training plans in SharePoint, and notifying atelier directors.

naftiko: "0.5"
info:
  label: "Artisan Succession Planning Pipeline"
  description: "Plans artisan succession by analyzing skill matrices in Workday, identifying succession gaps in Snowflake, creating training plans in SharePoint, and notifying atelier directors."
  tags:
    - hr
    - succession
    - workday
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: artisan-ops
      port: 8080
      tools:
        - name: artisan-succession-planning
          description: "Plans artisan succession."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Artisan Succession Planning Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Manages artisan training programs by pulling competency data from Workday, assigning courses in the LMS, tracking completion, and reporting to atelier directors.

naftiko: "0.5"
info:
  label: "Atelier Artisan Training Pipeline"
  description: "Manages artisan training programs by pulling competency data from Workday, assigning courses in the LMS, tracking completion, and reporting to atelier directors."
  tags:
    - training
    - artisans
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: atelier-ops
      port: 8080
      tools:
        - name: atelier-artisan-training
          description: "Manages artisan training programs."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Atelier Artisan Training Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Aggregates boutique sales from Shopify POS, foot traffic from Google Analytics, and staffing data from Workday to build a daily boutique performance snapshot.

naftiko: "0.5"
info:
  label: "Boutique Performance Dashboard Builder"
  description: "Aggregates boutique sales from Shopify POS, foot traffic from Google Analytics, and staffing data from Workday to build a daily boutique performance snapshot."
  tags:
    - retail
    - analytics
    - shopify
    - google-analytics
    - workday
capability:
  exposes:
    - type: mcp
      namespace: boutique-performance
      port: 8080
      tools:
        - name: build-boutique-snapshot
          description: "Given a boutique location ID and date, aggregate POS sales, foot traffic analytics, and staffing levels into a daily performance snapshot."
          inputParameters:
            - name: location_id
              in: body
              type: string
              description: "The Shopify location ID for the boutique."
            - name: date
              in: body
              type: string
              description: "The date for the snapshot in YYYY-MM-DD format."
            - name: ga_property_id
              in: body
              type: string
              description: "The GA4 property ID for the boutique."
          steps:
            - name: get-pos-sales
              type: call
              call: "shopify.get-orders-by-location"
              with:
                location_id: "{{location_id}}"
                created_at_min: "{{date}}T00:00:00Z"
                created_at_max: "{{date}}T23:59:59Z"
            - name: get-foot-traffic
              type: call
              call: "ga.run-report"
              with:
                property: "{{ga_property_id}}"
                dateRanges: "[{startDate: '{{date}}', endDate: '{{date}}'}]"
            - name: get-staffing
              type: call
              call: "workday.get-workers-by-location"
              with:
                location: "{{location_id}}"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://lvmh-retail.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders.json?location_id={{location_id}}&created_at_min={{created_at_min}}&created_at_max={{created_at_max}}"
          inputParameters:
            - name: location_id
              in: query
            - name: created_at_min
              in: query
            - name: created_at_max
              in: query
          operations:
            - name: get-orders-by-location
              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}}:runReport"
          inputParameters:
            - name: property
              in: path
          operations:
            - name: run-report
              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: workers
          path: "/workers?location={{location}}"
          inputParameters:
            - name: location
              in: query
          operations:
            - name: get-workers-by-location
              method: GET

Launches a multi-channel marketing campaign by creating a Klaviyo campaign, publishing Contentful content, and tracking the campaign in Google Analytics.

naftiko: "0.5"
info:
  label: "Brand Campaign Launch Orchestrator"
  description: "Launches a multi-channel marketing campaign by creating a Klaviyo campaign, publishing Contentful content, and tracking the campaign in Google Analytics."
  tags:
    - marketing
    - brand-management
    - klaviyo
    - contentful
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: campaign-launch
      port: 8080
      tools:
        - name: launch-campaign
          description: "Given a campaign name, content entry ID, and email list ID, publish CMS content, create Klaviyo campaign, and register GA tracking."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The name of the marketing campaign."
            - name: content_entry_id
              in: body
              type: string
              description: "The Contentful entry ID for campaign content."
            - name: email_list_id
              in: body
              type: string
              description: "The Klaviyo list ID for target audience."
            - name: maison
              in: body
              type: string
              description: "The Maison brand (e.g., Louis Vuitton, Dior, Fendi)."
          steps:
            - name: get-content
              type: call
              call: "contentful.get-entry"
              with:
                entry_id: "{{content_entry_id}}"
            - name: publish-content
              type: call
              call: "contentful.publish-entry"
              with:
                entry_id: "{{content_entry_id}}"
            - name: create-email-campaign
              type: call
              call: "klaviyo.create-campaign"
              with:
                name: "{{campaign_name}} — {{maison}}"
                list_id: "{{email_list_id}}"
                subject: "{{get-content.fields.emailSubject}}"
                template_html: "{{get-content.fields.emailBody}}"
  consumes:
    - type: http
      namespace: contentful
      baseUri: "https://api.contentful.com/spaces/lvmh_space_id/environments/master"
      authentication:
        type: bearer
        token: "$secrets.contentful_mgmt_token"
      resources:
        - name: entries
          path: "/entries/{{entry_id}}"
          inputParameters:
            - name: entry_id
              in: path
          operations:
            - name: get-entry
              method: GET
            - name: publish-entry
              method: PUT
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST

Detects counterfeits by scanning online marketplaces, analyzing listings with AI, creating takedown requests, and reporting to the brand protection team.

naftiko: "0.5"
info:
  label: "Brand Protection Counterfeit Detection Pipeline"
  description: "Detects counterfeits by scanning online marketplaces, analyzing listings with AI, creating takedown requests, and reporting to the brand protection team."
  tags:
    - brand-protection
    - counterfeit
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: brand-ops
      port: 8080
      tools:
        - name: brand-protection-counterfeit-detection
          description: "Detects counterfeits."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Brand Protection Counterfeit Detection Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 point-of-sale transaction details from the Cegid retail system used across LVMH boutiques.

naftiko: "0.5"
info:
  label: "Cegid POS Transaction Lookup"
  description: "Retrieves point-of-sale transaction details from the Cegid retail system used across LVMH boutiques."
  tags:
    - retail
    - cegid
capability:
  exposes:
    - type: mcp
      namespace: retail
      port: 8080
      tools:
        - name: cegid_pos_transaction_lookup
          description: "Retrieves point-of-sale transaction details from the Cegid retail system used across LVMH boutiques.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "cegid.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: cegid
      baseUri: "https://lvmh-cegid.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cegid_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Fetches a VIC (Very Important Client) profile from Salesforce CRM by client ID, returning contact details, purchase history summary, and loyalty tier.

naftiko: "0.5"
info:
  label: "Client Profile Lookup"
  description: "Fetches a VIC (Very Important Client) profile from Salesforce CRM by client ID, returning contact details, purchase history summary, and loyalty tier."
  tags:
    - crm
    - clienteling
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-client
      port: 8080
      tools:
        - name: get-client-profile
          description: "Retrieve a client profile from Salesforce by client ID. Returns name, email, loyalty tier, lifetime spend, and preferred Maison."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID for the client."
          call: "salesforce.get-contact"
          with:
            contact_id: "{{client_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.Name"
            - name: email
              type: string
              mapping: "$.Email"
            - name: loyalty_tier
              type: string
              mapping: "$.Loyalty_Tier__c"
            - name: lifetime_spend
              type: string
              mapping: "$.Lifetime_Spend__c"
            - name: preferred_maison
              type: string
              mapping: "$.Preferred_Maison__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET

After a purchase, waits for delivery confirmation from ShipStation, then triggers a Klaviyo post-purchase survey email and creates a Salesforce follow-up task for the sales associate.

naftiko: "0.5"
info:
  label: "Clienteling After-Sales Follow-Up"
  description: "After a purchase, waits for delivery confirmation from ShipStation, then triggers a Klaviyo post-purchase survey email and creates a Salesforce follow-up task for the sales associate."
  tags:
    - clienteling
    - after-sales
    - shipstation
    - klaviyo
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: after-sales
      port: 8080
      tools:
        - name: trigger-after-sales-followup
          description: "Given an order ID and client ID, check delivery status, trigger post-purchase email, and create a CRM follow-up task."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The order ID."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: associate_id
              in: body
              type: string
              description: "The Salesforce user ID of the sales associate."
          steps:
            - name: get-shipment
              type: call
              call: "shipstation.get-shipment"
              with:
                order_number: "{{order_id}}"
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: send-survey
              type: call
              call: "klaviyo.send-event"
              with:
                email: "{{get-client.Email}}"
                event: "Post_Purchase_Survey"
                properties: "{order_id: '{{order_id}}', delivery_date: '{{get-shipment.ship_date}}'}"
            - name: create-followup-task
              type: call
              call: "salesforce.create-task"
              with:
                WhoId: "{{client_id}}"
                OwnerId: "{{associate_id}}"
                Subject: "Post-purchase follow-up: Order {{order_id}}"
                Description: "Delivered on {{get-shipment.ship_date}}. Survey sent. Follow up with {{get-client.FirstName}} within 7 days."
                ActivityDate: "{{get-shipment.ship_date}}"
  consumes:
    - type: http
      namespace: shipstation
      baseUri: "https://ssapi.shipstation.com"
      authentication:
        type: basic
        username: "$secrets.shipstation_key"
        password: "$secrets.shipstation_secret"
      resources:
        - name: shipments
          path: "/shipments?orderNumber={{order_number}}"
          inputParameters:
            - name: order_number
              in: query
          operations:
            - name: get-shipment
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: send-event
              method: POST

Generates a transformed image URL from Cloudinary for a given public ID, applying brand-standard transformations for luxury product imagery.

naftiko: "0.5"
info:
  label: "Cloudinary Image URL Generator"
  description: "Generates a transformed image URL from Cloudinary for a given public ID, applying brand-standard transformations for luxury product imagery."
  tags:
    - digital-asset
    - media
    - cloudinary
capability:
  exposes:
    - type: mcp
      namespace: media
      port: 8080
      tools:
        - name: get-image-url
          description: "Generate a Cloudinary image URL with luxury-standard transformations for a given public ID."
          inputParameters:
            - name: public_id
              in: body
              type: string
              description: "The Cloudinary public ID of the image."
          call: "cloudinary.get-resource"
          with:
            public_id: "{{public_id}}"
          outputParameters:
            - name: secure_url
              type: string
              mapping: "$.secure_url"
            - name: format
              type: string
              mapping: "$.format"
  consumes:
    - type: http
      namespace: cloudinary
      baseUri: "https://api.cloudinary.com/v1_1/lvmh"
      authentication:
        type: basic
        username: "$secrets.cloudinary_api_key"
        password: "$secrets.cloudinary_api_secret"
      resources:
        - name: resources
          path: "/resources/image/upload/{{public_id}}"
          inputParameters:
            - name: public_id
              in: path
          operations:
            - name: get-resource
              method: GET

When a SAP Concur travel expense is submitted, resolves the employee in Workday to determine their Maison and cost center, updates the expense category, and notifies the finance approver in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Concur Travel Expense Auto-Categorizer"
  description: "When a SAP Concur travel expense is submitted, resolves the employee in Workday to determine their Maison and cost center, updates the expense category, and notifies the finance approver in Microsoft Teams."
  tags:
    - finance
    - travel
    - sap-concur
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: travel-expense
      port: 8080
      tools:
        - name: categorize-travel-expense
          description: "Given a Concur expense report ID and employee ID, resolve the cost center from Workday, update the expense category, and notify the approver."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: approver_upn
              in: body
              type: string
              description: "The Teams UPN of the finance approver."
          steps:
            - name: get-expense
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{approver_upn}}"
                text: "Travel expense pending: {{get-employee.full_name}} ({{get-employee.department}}) submitted report {{expense_report_id}} for {{get-expense.total_amount}} {{get-expense.currency}}. Cost center: {{get-employee.cost_center}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              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: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              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

Fetches a digital asset entry from Contentful CMS by entry ID, returning asset URL, title, description, and associated Maison tag.

naftiko: "0.5"
info:
  label: "Contentful Asset Retrieval"
  description: "Fetches a digital asset entry from Contentful CMS by entry ID, returning asset URL, title, description, and associated Maison tag."
  tags:
    - content-management
    - digital-asset
    - contentful
capability:
  exposes:
    - type: mcp
      namespace: cms
      port: 8080
      tools:
        - name: get-asset
          description: "Retrieve a Contentful CMS asset by entry ID. Returns asset URL, title, description, and Maison tag."
          inputParameters:
            - name: entry_id
              in: body
              type: string
              description: "The Contentful entry ID."
          call: "contentful.get-entry"
          with:
            entry_id: "{{entry_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.fields.title"
            - name: asset_url
              type: string
              mapping: "$.fields.file.url"
            - name: maison
              type: string
              mapping: "$.fields.maisonTag"
  consumes:
    - type: http
      namespace: contentful
      baseUri: "https://cdn.contentful.com/spaces/lvmh_space_id"
      authentication:
        type: bearer
        token: "$secrets.contentful_token"
      resources:
        - name: entries
          path: "/entries/{{entry_id}}"
          inputParameters:
            - name: entry_id
              in: path
          operations:
            - name: get-entry
              method: GET

Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences.

naftiko: "0.5"
info:
  label: "Contentstack Editorial Content Lookup"
  description: "Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences."
  tags:
    - content
    - contentstack
capability:
  exposes:
    - type: mcp
      namespace: content
      port: 8080
      tools:
        - name: contentstack_editorial_content_lookup
          description: "Retrieves editorial and storytelling content from Contentstack CMS for luxury brand digital experiences.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "contentstack.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: contentstack
      baseUri: "https://lvmh-contentstack.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.contentstack_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

For international shipments, retrieves product details from SAP, generates customs documentation metadata, and attaches documents to the ShipStation shipment record.

naftiko: "0.5"
info:
  label: "Cross-Border Customs Documentation Generator"
  description: "For international shipments, retrieves product details from SAP, generates customs documentation metadata, and attaches documents to the ShipStation shipment record."
  tags:
    - logistics
    - customs
    - sap-s4hana
    - shipstation
capability:
  exposes:
    - type: mcp
      namespace: customs
      port: 8080
      tools:
        - name: generate-customs-docs
          description: "Given a shipment order number and destination country, retrieve material data from SAP and update ShipStation with customs information."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The ShipStation order number."
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: destination_country
              in: body
              type: string
              description: "The destination country ISO code."
            - name: declared_value
              in: body
              type: number
              description: "The declared customs value."
          steps:
            - name: get-material-details
              type: call
              call: "sap.get-material"
              with:
                material: "{{material_number}}"
            - name: update-shipment-customs
              type: call
              call: "shipstation.update-order"
              with:
                order_number: "{{order_number}}"
                customs_country: "{{destination_country}}"
                customs_value: "{{declared_value}}"
                hs_tariff_number: "{{get-material-details.hs_code}}"
                description: "{{get-material-details.description}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: materials
          path: "/A_Product('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material
              method: GET
    - type: http
      namespace: shipstation
      baseUri: "https://ssapi.shipstation.com"
      authentication:
        type: basic
        username: "$secrets.shipstation_key"
        password: "$secrets.shipstation_secret"
      resources:
        - name: orders
          path: "/orders/createorder"
          operations:
            - name: update-order
              method: POST

Aggregates a customer's profile from Salesforce CRM, purchase history from SFCC, behavioral events from Segment, and email engagement from Klaviyo to build a unified client 360 view.

naftiko: "0.5"
info:
  label: "Cross-Maison Customer 360 Builder"
  description: "Aggregates a customer's profile from Salesforce CRM, purchase history from SFCC, behavioral events from Segment, and email engagement from Klaviyo to build a unified client 360 view."
  tags:
    - crm
    - clienteling
    - customer-data
    - salesforce
    - salesforce-commerce-cloud
    - segment
    - klaviyo
capability:
  exposes:
    - type: mcp
      namespace: customer-360
      port: 8080
      tools:
        - name: build-customer-360
          description: "Given a client email, aggregate CRM profile, order history, behavioral events, and email engagement into a unified customer 360 view."
          inputParameters:
            - name: client_email
              in: body
              type: string
              description: "The client's email address."
            - name: segment_user_id
              in: body
              type: string
              description: "The Segment user ID."
          steps:
            - name: get-crm-profile
              type: call
              call: "salesforce.search-contact"
              with:
                email: "{{client_email}}"
            - name: get-order-history
              type: call
              call: "sfcc.search-orders"
              with:
                customer_email: "{{client_email}}"
            - name: get-behavior
              type: call
              call: "segment.get-events"
              with:
                user_id: "{{segment_user_id}}"
            - name: get-email-engagement
              type: call
              call: "klaviyo.get-profile"
              with:
                email: "{{client_email}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/parameterizedSearch/?q={{email}}&sobject=Contact"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: search-contact
              method: GET
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: order-search
          path: "/order_search"
          operations:
            - name: search-orders
              method: POST
    - type: http
      namespace: segment
      baseUri: "https://profiles.segment.com/v1/spaces/lvmh_space"
      authentication:
        type: bearer
        token: "$secrets.segment_token"
      resources:
        - name: events
          path: "/collections/users/{{user_id}}/events"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: profiles
          path: "/profiles/?filter=equals(email,'{{email}}')"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-profile
              method: GET

Facilitates talent mobility across maisons by matching profiles in Workday, coordinating transfers in Salesforce, creating onboarding plans in SharePoint, and notifying HR teams.

naftiko: "0.5"
info:
  label: "Cross-Maison Talent Mobility Pipeline"
  description: "Facilitates talent mobility across maisons by matching profiles in Workday, coordinating transfers in Salesforce, creating onboarding plans in SharePoint, and notifying HR teams."
  tags:
    - hr
    - talent-mobility
    - workday
    - salesforce
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cross-ops
      port: 8080
      tools:
        - name: cross-maison-talent-mobility
          description: "Facilitates talent mobility across maisons."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Cross-Maison Talent Mobility Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a Zendesk ticket is escalated, fetches the client profile from Salesforce, retrieves the associated order from SFCC, and sends a resolution notification via Microsoft Teams to the boutique manager.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Pipeline"
  description: "When a Zendesk ticket is escalated, fetches the client profile from Salesforce, retrieves the associated order from SFCC, and sends a resolution notification via Microsoft Teams to the boutique manager."
  tags:
    - customer-service
    - zendesk
    - salesforce
    - salesforce-commerce-cloud
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: complaint-resolution
      port: 8080
      tools:
        - name: resolve-complaint
          description: "Given a Zendesk ticket ID and client email, fetch the ticket, client profile, related order, and notify the boutique manager in Teams."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: client_email
              in: body
              type: string
              description: "The client email address."
            - name: boutique_manager_upn
              in: body
              type: string
              description: "The Microsoft Teams UPN of the boutique manager."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: get-client
              type: call
              call: "salesforce.get-contact-by-email"
              with:
                email: "{{client_email}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{boutique_manager_upn}}"
                text: "Escalated complaint from {{get-client.Name}} ({{get-client.Loyalty_Tier__c}}). Ticket #{{ticket_id}}: {{get-ticket.ticket.subject}}. Lifetime spend: {{get-client.Lifetime_Spend__c}}. Please review and authorize resolution."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://lvmh.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact-by-email
              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

Retrieves product images and marketing assets from the digital asset management system for campaign use.

naftiko: "0.5"
info:
  label: "DAM Product Asset Retrieval"
  description: "Retrieves product images and marketing assets from the digital asset management system for campaign use."
  tags:
    - marketing
    - dam
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: dam_product_asset_retrieval
          description: "Retrieves product images and marketing assets from the digital asset management system for campaign use.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "dam.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: dam
      baseUri: "https://lvmh-dam.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dam_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Aggregates historical sales from SFCC, current inventory from SAP, and search trend data from Algolia analytics to feed into demand forecasting models.

naftiko: "0.5"
info:
  label: "Demand Forecasting Data Aggregator"
  description: "Aggregates historical sales from SFCC, current inventory from SAP, and search trend data from Algolia analytics to feed into demand forecasting models."
  tags:
    - supply-chain
    - demand-planning
    - salesforce-commerce-cloud
    - sap-s4hana
    - algolia
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: aggregate-forecast-data
          description: "Given a product SKU and date range, aggregate sales history, current stock, and search trends for demand forecasting."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: start_date
              in: body
              type: string
              description: "The start of the historical period YYYY-MM-DD."
            - name: end_date
              in: body
              type: string
              description: "The end of the historical period YYYY-MM-DD."
          steps:
            - name: get-sales-history
              type: call
              call: "sfcc.search-orders"
              with:
                product_id: "{{sku}}"
                created_from: "{{start_date}}"
                created_to: "{{end_date}}"
            - name: get-current-stock
              type: call
              call: "sap.get-material-stock"
              with:
                material: "{{sku}}"
            - name: get-search-trends
              type: call
              call: "algolia.get-analytics"
              with:
                index: "products"
                search: "{{sku}}"
                startDate: "{{start_date}}"
                endDate: "{{end_date}}"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: order-search
          path: "/order_search"
          operations:
            - name: search-orders
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-stock
              method: GET
    - type: http
      namespace: algolia
      baseUri: "https://analytics.algolia.com/2"
      authentication:
        type: bearer
        token: "$secrets.algolia_api_key"
      inputParameters:
        - name: X-Algolia-Application-Id
          in: header
          value: "$secrets.algolia_app_id"
      resources:
        - name: analytics
          path: "/searches?index={{index}}&search={{search}}&startDate={{startDate}}&endDate={{endDate}}"
          inputParameters:
            - name: index
              in: query
            - name: search
              in: query
            - name: startDate
              in: query
            - name: endDate
              in: query
          operations:
            - name: get-analytics
              method: GET

Creates digital product passports for EU compliance by pulling product data from SAP, generating QR codes, recording in the blockchain, and distributing to retail.

naftiko: "0.5"
info:
  label: "Digital Product Passport Pipeline"
  description: "Creates digital product passports for EU compliance by pulling product data from SAP, generating QR codes, recording in the blockchain, and distributing to retail."
  tags:
    - compliance
    - product-passport
    - sap
    - blockchain
capability:
  exposes:
    - type: mcp
      namespace: digital-ops
      port: 8080
      tools:
        - name: digital-product-passport
          description: "Creates digital product passports for EU compliance."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Digital Product Passport Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Schedules a private digital showroom appointment by creating a Salesforce event, sending a calendar invite via Microsoft Graph, and triggering a personalized Klaviyo pre-visit email.

naftiko: "0.5"
info:
  label: "Digital Showroom Appointment Scheduler"
  description: "Schedules a private digital showroom appointment by creating a Salesforce event, sending a calendar invite via Microsoft Graph, and triggering a personalized Klaviyo pre-visit email."
  tags:
    - clienteling
    - crm
    - salesforce
    - microsoft-graph
    - klaviyo
capability:
  exposes:
    - type: mcp
      namespace: showroom
      port: 8080
      tools:
        - name: schedule-showroom-appointment
          description: "Given a client ID, date/time, and boutique advisor email, create a CRM event, send calendar invite, and trigger a pre-visit email."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: appointment_datetime
              in: body
              type: string
              description: "The appointment date/time in ISO 8601 format."
            - name: advisor_email
              in: body
              type: string
              description: "The boutique advisor email."
            - name: maison
              in: body
              type: string
              description: "The Maison for the showroom (e.g., Louis Vuitton, Dior)."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: create-crm-event
              type: call
              call: "salesforce.create-event"
              with:
                WhoId: "{{client_id}}"
                Subject: "Digital Showroom — {{maison}}"
                StartDateTime: "{{appointment_datetime}}"
                Description: "Private showroom for {{get-client.Name}}."
            - name: send-calendar-invite
              type: call
              call: "msgraph.create-event"
              with:
                organizer: "{{advisor_email}}"
                attendee: "{{get-client.Email}}"
                subject: "Your Private {{maison}} Showroom Experience"
                start: "{{appointment_datetime}}"
            - name: send-pre-visit-email
              type: call
              call: "klaviyo.send-event"
              with:
                email: "{{get-client.Email}}"
                event: "Showroom_Appointment_Booked"
                properties: "{maison: '{{maison}}', datetime: '{{appointment_datetime}}', advisor: '{{advisor_email}}'}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
        - name: events
          path: "/sobjects/Event"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/users/{{organizer}}/events"
          inputParameters:
            - name: organizer
              in: path
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: send-event
              method: POST

Optimizes duty-free product allocations by analyzing travel hub performance in Snowflake, adjusting stock levels in SAP, and notifying regional managers.

naftiko: "0.5"
info:
  label: "Duty Free Allocation Optimizer Pipeline"
  description: "Optimizes duty-free product allocations by analyzing travel hub performance in Snowflake, adjusting stock levels in SAP, and notifying regional managers."
  tags:
    - duty-free
    - allocation
    - snowflake
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: duty-ops
      port: 8080
      tools:
        - name: duty-free-allocation-optimizer
          description: "Optimizes duty-free product allocations."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Duty Free Allocation Optimizer Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a high-value cart is abandoned in SFCC, fetches the cart contents, enriches with Salesforce client data, and triggers a personalized Klaviyo recovery email with product recommendations.

naftiko: "0.5"
info:
  label: "E-Commerce Abandoned Cart Recovery"
  description: "When a high-value cart is abandoned in SFCC, fetches the cart contents, enriches with Salesforce client data, and triggers a personalized Klaviyo recovery email with product recommendations."
  tags:
    - e-commerce
    - marketing
    - cart-recovery
    - salesforce-commerce-cloud
    - salesforce
    - klaviyo
capability:
  exposes:
    - type: mcp
      namespace: cart-recovery
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Given a basket ID and client email, fetch cart contents, enrich with CRM data, and trigger a personalized recovery email."
          inputParameters:
            - name: basket_id
              in: body
              type: string
              description: "The SFCC basket ID."
            - name: client_email
              in: body
              type: string
              description: "The client email address."
          steps:
            - name: get-basket
              type: call
              call: "sfcc.get-basket"
              with:
                basket_id: "{{basket_id}}"
            - name: get-client
              type: call
              call: "salesforce.search-contact"
              with:
                email: "{{client_email}}"
            - name: trigger-recovery-email
              type: call
              call: "klaviyo.send-event"
              with:
                email: "{{client_email}}"
                event: "Abandoned_Cart_Recovery"
                properties: "{cart_total: '{{get-basket.order_total}}', items: '{{get-basket.product_items}}', loyalty_tier: '{{get-client.Loyalty_Tier__c}}'}"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: baskets
          path: "/baskets/{{basket_id}}"
          inputParameters:
            - name: basket_id
              in: path
          operations:
            - name: get-basket
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/parameterizedSearch/?q={{email}}&sobject=Contact"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: search-contact
              method: GET
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: send-event
              method: POST

Retrieves an order from Salesforce Commerce Cloud by order number and returns status, shipping method, and line items.

naftiko: "0.5"
info:
  label: "E-Commerce Order Status"
  description: "Retrieves an order from Salesforce Commerce Cloud by order number and returns status, shipping method, and line items."
  tags:
    - e-commerce
    - order-management
    - salesforce-commerce-cloud
capability:
  exposes:
    - type: mcp
      namespace: orders
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up an e-commerce order by order number. Returns current status, shipping carrier, tracking number, and line item summary."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The SFCC order number."
          call: "sfcc.get-order"
          with:
            order_no: "{{order_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: shipping_status
              type: string
              mapping: "$.shipping_status"
            - name: total
              type: string
              mapping: "$.order_total"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: orders
          path: "/orders/{{order_no}}"
          inputParameters:
            - name: order_no
              in: path
          operations:
            - name: get-order
              method: GET

Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.

naftiko: "0.5"
info:
  label: "Expense Report Processing"
  description: "Retrieves submitted expense reports from SAP Concur, validates against Workday cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected."
  tags:
    - finance
    - expense
    - sap-concur
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance-expense
      port: 8080
      tools:
        - name: review-expense-report
          description: "Given a Concur expense report ID and employee ID, fetch the report, validate the cost center against Workday, and flag policy violations to ServiceNow."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID of the expense submitter."
          steps:
            - name: get-expense-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{expense_report_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-review-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
                description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}."
                assigned_group: "Finance_Audit"
                category: "expense_review"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              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: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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

Coordinates fashion show logistics by creating a Salesforce event, provisioning a SharePoint collaboration site, sending invitations via Microsoft Graph, and posting announcements in Slack.

naftiko: "0.5"
info:
  label: "Fashion Show Event Logistics Coordinator"
  description: "Coordinates fashion show logistics by creating a Salesforce event, provisioning a SharePoint collaboration site, sending invitations via Microsoft Graph, and posting announcements in Slack."
  tags:
    - events
    - brand-management
    - salesforce
    - sharepoint
    - microsoft-graph
    - slack
capability:
  exposes:
    - type: mcp
      namespace: event-logistics
      port: 8080
      tools:
        - name: coordinate-fashion-show
          description: "Given event details, create CRM records, provision collaboration space, send invitations, and announce in Slack."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "The fashion show event name."
            - name: event_date
              in: body
              type: string
              description: "The event date in ISO 8601 format."
            - name: maison
              in: body
              type: string
              description: "The Maison hosting the show."
            - name: venue
              in: body
              type: string
              description: "The venue name and location."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel for event coordination."
          steps:
            - name: create-event-record
              type: call
              call: "salesforce.create-event"
              with:
                Subject: "{{event_name}} — {{maison}}"
                StartDateTime: "{{event_date}}"
                Location: "{{venue}}"
                Description: "Fashion show for {{maison}} at {{venue}}."
            - name: create-collab-site
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "events_site"
                folder_path: "FashionShows/{{maison}}/{{event_name}}"
            - name: announce-event
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Fashion Show Announced: {{event_name}} by {{maison}} on {{event_date}} at {{venue}}. Collaboration space: {{create-collab-site.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: events
          path: "/sobjects/Event"
          operations:
            - name: create-event
              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: 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

Produces fashion shows by coordinating venue logistics, managing guest lists in Salesforce, scheduling rehearsals, and synchronizing with press teams via Teams.

naftiko: "0.5"
info:
  label: "Fashion Show Production Orchestrator"
  description: "Produces fashion shows by coordinating venue logistics, managing guest lists in Salesforce, scheduling rehearsals, and synchronizing with press teams via Teams."
  tags:
    - events
    - fashion-show
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fashion-ops
      port: 8080
      tools:
        - name: fashion-show-production
          description: "Produces fashion shows."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Fashion Show Production Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Manages fragrance batch quality by pulling lab test results, comparing against specifications in SAP, releasing or holding batches, and notifying production teams.

naftiko: "0.5"
info:
  label: "Fragrance Batch Quality Pipeline"
  description: "Manages fragrance batch quality by pulling lab test results, comparing against specifications in SAP, releasing or holding batches, and notifying production teams."
  tags:
    - fragrance
    - quality
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fragrance-ops
      port: 8080
      tools:
        - name: fragrance-batch-quality
          description: "Manages fragrance batch quality."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Fragrance Batch Quality Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Supports global retail expansion by analyzing market data in Snowflake, identifying locations via Google Maps, creating business cases in SharePoint, and presenting to leadership.

naftiko: "0.5"
info:
  label: "Global Retail Expansion Pipeline"
  description: "Supports global retail expansion by analyzing market data in Snowflake, identifying locations via Google Maps, creating business cases in SharePoint, and presenting to leadership."
  tags:
    - retail-expansion
    - global
    - snowflake
    - google-maps
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: global-ops
      port: 8080
      tools:
        - name: global-retail-expansion
          description: "Supports global retail expansion."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Global Retail Expansion Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Pulls a campaign performance report from Google Analytics for a given date range, returning sessions, conversion rate, and revenue by channel.

naftiko: "0.5"
info:
  label: "Google Analytics Campaign Report"
  description: "Pulls a campaign performance report from Google Analytics for a given date range, returning sessions, conversion rate, and revenue by channel."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: get-campaign-report
          description: "Retrieve a Google Analytics campaign performance report for a date range. Returns sessions, conversions, and revenue by channel."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
            - name: property_id
              in: body
              type: string
              description: "The GA4 property ID."
          call: "ga.run-report"
          with:
            property: "{{property_id}}"
            dateRanges: "[{startDate: '{{start_date}}', endDate: '{{end_date}}'}]"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property}}:runReport"
          inputParameters:
            - name: property
              in: path
          operations:
            - name: run-report
              method: POST

Queries Google Trends API for luxury brand sentiment and search interest data across markets.

naftiko: "0.5"
info:
  label: "Google Trends Luxury Sentiment"
  description: "Queries Google Trends API for luxury brand sentiment and search interest data across markets."
  tags:
    - market-intelligence
    - google
capability:
  exposes:
    - type: mcp
      namespace: market-intelligence
      port: 8080
      tools:
        - name: google_trends_luxury_sentiment
          description: "Queries Google Trends API for luxury brand sentiment and search interest data across markets.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "google.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: google
      baseUri: "https://lvmh-google.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Orchestrates haute couture collection launches by syncing designs from the PLM system, creating production orders in SAP, scheduling ateliers, and coordinating press via Teams.

naftiko: "0.5"
info:
  label: "Haute Couture Collection Launch Orchestrator"
  description: "Orchestrates haute couture collection launches by syncing designs from the PLM system, creating production orders in SAP, scheduling ateliers, and coordinating press via Teams."
  tags:
    - fashion
    - collection-launch
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: haute-ops
      port: 8080
      tools:
        - name: haute-couture-collection-launch
          description: "Orchestrates haute couture collection launches."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Haute Couture Collection Launch Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Tracks influencer campaign performance by pulling engagement data from Google Analytics, matching it to the campaign in Salesforce Marketing, and sending a summary report to the brand team via Slack.

naftiko: "0.5"
info:
  label: "Influencer Campaign Tracking Pipeline"
  description: "Tracks influencer campaign performance by pulling engagement data from Google Analytics, matching it to the campaign in Salesforce Marketing, and sending a summary report to the brand team via Slack."
  tags:
    - marketing
    - influencer
    - google-analytics
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: influencer-tracking
      port: 8080
      tools:
        - name: track-influencer-campaign
          description: "Given a campaign ID and GA property, pull engagement metrics, update the Salesforce campaign record, and send a summary to the brand team Slack channel."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID."
            - name: ga_property_id
              in: body
              type: string
              description: "The GA4 property ID."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date YYYY-MM-DD."
            - name: end_date
              in: body
              type: string
              description: "Campaign end date YYYY-MM-DD."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel ID for the brand team."
          steps:
            - name: get-ga-report
              type: call
              call: "ga.run-report"
              with:
                property: "{{ga_property_id}}"
                dateRanges: "[{startDate: '{{start_date}}', endDate: '{{end_date}}'}]"
            - name: update-campaign
              type: call
              call: "salesforce.update-campaign"
              with:
                campaign_id: "{{campaign_id}}"
                NumberOfResponses: "{{get-ga-report.rows[0].metricValues[0].value}}"
            - name: notify-brand-team
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Influencer Campaign Report ({{start_date}} to {{end_date}}): Sessions: {{get-ga-report.rows[0].metricValues[0].value}}, Conversions: {{get-ga-report.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}}:runReport"
          inputParameters:
            - name: property
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: update-campaign
              method: PATCH
    - type: http
      namespace: 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

Manages influencer collaborations by tracking campaigns in HubSpot, measuring reach via Instagram API, calculating ROI in Snowflake, and reporting to marketing directors.

naftiko: "0.5"
info:
  label: "Influencer Collaboration Orchestrator"
  description: "Manages influencer collaborations by tracking campaigns in HubSpot, measuring reach via Instagram API, calculating ROI in Snowflake, and reporting to marketing directors."
  tags:
    - marketing
    - influencer
    - hubspot
    - instagram
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: influencer-ops
      port: 8080
      tools:
        - name: influencer-collaboration
          description: "Manages influencer collaborations."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Influencer Collaboration Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 Instagram engagement metrics for LVMH brand accounts including reach, impressions, and engagement rate.

naftiko: "0.5"
info:
  label: "Instagram Brand Engagement Metrics"
  description: "Retrieves Instagram engagement metrics for LVMH brand accounts including reach, impressions, and engagement rate."
  tags:
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: social-media
      port: 8080
      tools:
        - name: instagram_brand_engagement_metrics
          description: "Retrieves Instagram engagement metrics for LVMH brand accounts including reach."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "instagram.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://lvmh-instagram.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Queries SAP S/4HANA for real-time inventory levels of a given material number across LVMH warehouses.

naftiko: "0.5"
info:
  label: "Inventory Stock Check"
  description: "Queries SAP S/4HANA for real-time inventory levels of a given material number across LVMH warehouses."
  tags:
    - supply-chain
    - inventory
    - sap
    - sap-s4hana
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: check-stock
          description: "Check real-time inventory levels for a material number across all LVMH distribution centers in SAP S/4HANA."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          call: "sap.get-material-stock"
          with:
            material: "{{material_number}}"
          outputParameters:
            - name: total_stock
              type: string
              mapping: "$.d.MatlWrhsStkQtyInMatlBaseUnit"
            - name: plant
              type: string
              mapping: "$.d.Plant"
            - name: storage_location
              type: string
              mapping: "$.d.StorageLocation"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_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: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-stock
              method: GET

When an employee submits an IT request via ServiceNow, resolves their identity in Workday, provisions access in Azure AD via Microsoft Graph, and sends confirmation in Teams.

naftiko: "0.5"
info:
  label: "IT Service Request Handler"
  description: "When an employee submits an IT request via ServiceNow, resolves their identity in Workday, provisions access in Azure AD via Microsoft Graph, and sends confirmation in Teams."
  tags:
    - it
    - servicenow
    - workday
    - microsoft-graph
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: it-service
      port: 8080
      tools:
        - name: handle-it-request
          description: "Given a ServiceNow ticket ID and employee ID, resolve identity, provision access, and confirm via Teams."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The ServiceNow incident ID."
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: application_name
              in: body
              type: string
              description: "The application to provision access to."
          steps:
            - name: get-ticket
              type: call
              call: "servicenow.get-incident"
              with:
                ticket_id: "{{ticket_id}}"
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: provision-access
              type: call
              call: "msgraph.add-app-role"
              with:
                user_upn: "{{get-employee.work_email}}"
                app_name: "{{application_name}}"
            - name: confirm-provision
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Your IT request ({{ticket_id}}) for {{application_name}} has been provisioned. You should now have access."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-incident
              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: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: app-roles
          path: "/users/{{user_upn}}/appRoleAssignments"
          inputParameters:
            - name: user_upn
              in: path
          operations:
            - name: add-app-role
              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

Manages custom jewelry orders by capturing designs in the PLM, sourcing stones from SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.

naftiko: "0.5"
info:
  label: "Jewelry Custom Order Orchestrator"
  description: "Manages custom jewelry orders by capturing designs in the PLM, sourcing stones from SAP, scheduling artisan time in Workday, and updating clients via WhatsApp."
  tags:
    - jewelry
    - custom-orders
    - sap
    - workday
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: jewelry-ops
      port: 8080
      tools:
        - name: jewelry-custom-order
          description: "Manages custom jewelry orders."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Jewelry Custom Order Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 subscriber profile from Klaviyo by email address, returning subscription status, lists, and engagement metrics for email marketing.

naftiko: "0.5"
info:
  label: "Klaviyo Subscriber Profile"
  description: "Retrieves a subscriber profile from Klaviyo by email address, returning subscription status, lists, and engagement metrics for email marketing."
  tags:
    - marketing
    - email
    - klaviyo
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: get-subscriber
          description: "Look up a Klaviyo subscriber profile by email. Returns subscription status, list memberships, and open/click rates."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The subscriber email address."
          call: "klaviyo.get-profile"
          with:
            email: "{{email}}"
  consumes:
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      inputParameters:
        - name: revision
          in: header
          value: "2024-02-15"
      resources:
        - name: profiles
          path: "/profiles/?filter=equals(email,'{{email}}')"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-profile
              method: GET

Traces leather goods provenance by pulling tannery certificates from SAP, logging in the blockchain ledger, and providing digital product passports to clients.

naftiko: "0.5"
info:
  label: "Leather Goods Traceability Pipeline"
  description: "Traces leather goods provenance by pulling tannery certificates from SAP, logging in the blockchain ledger, and providing digital product passports to clients."
  tags:
    - traceability
    - leather
    - sap
    - blockchain
capability:
  exposes:
    - type: mcp
      namespace: leather-ops
      port: 8080
      tools:
        - name: leather-goods-traceability
          description: "Traces leather goods provenance."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Leather Goods Traceability Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a client's lifetime spend crosses a tier threshold, upgrades their Salesforce loyalty tier, triggers a congratulatory Klaviyo email, and notifies the assigned sales associate in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Loyalty Tier Upgrade Orchestrator"
  description: "When a client's lifetime spend crosses a tier threshold, upgrades their Salesforce loyalty tier, triggers a congratulatory Klaviyo email, and notifies the assigned sales associate in Microsoft Teams."
  tags:
    - crm
    - loyalty
    - salesforce
    - klaviyo
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: upgrade-loyalty-tier
          description: "Given a client ID and new tier, update Salesforce, send congratulatory email via Klaviyo, and notify the sales associate."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: new_tier
              in: body
              type: string
              description: "The new loyalty tier (Silver, Gold, Platinum, VIC)."
            - name: associate_upn
              in: body
              type: string
              description: "The Microsoft Teams UPN of the assigned sales associate."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: update-tier
              type: call
              call: "salesforce.update-contact"
              with:
                contact_id: "{{client_id}}"
                Loyalty_Tier__c: "{{new_tier}}"
            - name: send-congratulations
              type: call
              call: "klaviyo.send-event"
              with:
                email: "{{get-client.Email}}"
                event: "Loyalty_Tier_Upgrade"
                properties: "{new_tier: '{{new_tier}}', client_name: '{{get-client.FirstName}}'}"
            - name: notify-associate
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{associate_upn}}"
                text: "Loyalty upgrade: {{get-client.Name}} promoted to {{new_tier}}. Lifetime spend: {{get-client.Lifetime_Spend__c}}. Consider a personalized outreach."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
            - name: update-contact
              method: PATCH
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: send-event
              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 authentication certificates for luxury goods by pulling product data from SAP, creating digital certificates, recording in the blockchain, and delivering to clients.

naftiko: "0.5"
info:
  label: "Luxury Authentication Certificate Pipeline"
  description: "Generates authentication certificates for luxury goods by pulling product data from SAP, creating digital certificates, recording in the blockchain, and delivering to clients."
  tags:
    - authentication
    - certificates
    - sap
    - blockchain
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-authentication-certificate
          description: "Generates authentication certificates for luxury goods."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Authentication Certificate Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Enriches client profiles by aggregating purchase history from SAP, social engagement from Instagram, service interactions from Zendesk, and consolidating in Salesforce.

naftiko: "0.5"
info:
  label: "Luxury Client 360 Enrichment Pipeline"
  description: "Enriches client profiles by aggregating purchase history from SAP, social engagement from Instagram, service interactions from Zendesk, and consolidating in Salesforce."
  tags:
    - clienteling
    - client-360
    - sap
    - salesforce
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-client-360-enrichment
          description: "Enriches client profiles."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Client 360 Enrichment Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Orchestrates luxury concierge services by pulling client preferences from Salesforce, arranging reservations, coordinating deliveries, and confirming via WhatsApp.

naftiko: "0.5"
info:
  label: "Luxury Concierge Service Orchestrator"
  description: "Orchestrates luxury concierge services by pulling client preferences from Salesforce, arranging reservations, coordinating deliveries, and confirming via WhatsApp."
  tags:
    - concierge
    - luxury-service
    - salesforce
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-concierge-service
          description: "Orchestrates luxury concierge services."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Concierge Service Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Launches luxury e-commerce experiences by syncing product catalog from SAP, configuring Shopify storefront, loading content from the DAM, and notifying digital teams.

naftiko: "0.5"
info:
  label: "Luxury E-Commerce Launch Orchestrator"
  description: "Launches luxury e-commerce experiences by syncing product catalog from SAP, configuring Shopify storefront, loading content from the DAM, and notifying digital teams."
  tags:
    - e-commerce
    - launch
    - sap
    - shopify
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-e-commerce-launch
          description: "Launches luxury e-commerce experiences."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury E-Commerce Launch Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

For a VIC gifting request, looks up the client in Salesforce, searches available products in SFCC, creates a personalized gift order, and schedules white-glove delivery via ShipStation.

naftiko: "0.5"
info:
  label: "Luxury Gifting Concierge Orchestrator"
  description: "For a VIC gifting request, looks up the client in Salesforce, searches available products in SFCC, creates a personalized gift order, and schedules white-glove delivery via ShipStation."
  tags:
    - clienteling
    - e-commerce
    - gifting
    - salesforce
    - salesforce-commerce-cloud
    - shipstation
capability:
  exposes:
    - type: mcp
      namespace: gifting
      port: 8080
      tools:
        - name: create-gift-order
          description: "Given a VIC client ID, product SKU, gift message, and recipient address, create a personalized gift order with white-glove delivery."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID of the VIC."
            - name: product_sku
              in: body
              type: string
              description: "The SKU of the gift product."
            - name: gift_message
              in: body
              type: string
              description: "The personalized gift message."
            - name: recipient_name
              in: body
              type: string
              description: "The gift recipient name."
            - name: recipient_address
              in: body
              type: string
              description: "The delivery address."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: get-product
              type: call
              call: "sfcc.get-product"
              with:
                product_id: "{{product_sku}}"
            - name: create-order
              type: call
              call: "sfcc.create-order"
              with:
                customer_email: "{{get-client.Email}}"
                product_id: "{{product_sku}}"
                gift_message: "{{gift_message}}"
                shipping_address: "{{recipient_address}}"
            - name: schedule-delivery
              type: call
              call: "shipstation.create-order"
              with:
                orderNumber: "{{create-order.order_no}}"
                shipTo_name: "{{recipient_name}}"
                shipTo_address: "{{recipient_address}}"
                serviceCode: "white_glove"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: products
          path: "/products/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-product
              method: GET
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: shipstation
      baseUri: "https://ssapi.shipstation.com"
      authentication:
        type: basic
        username: "$secrets.shipstation_key"
        password: "$secrets.shipstation_secret"
      resources:
        - name: orders
          path: "/orders/createorder"
          operations:
            - name: create-order
              method: POST

Personalizes luxury gifts by pulling client preferences from Salesforce, recommending products from the catalog, creating gift packages, and sending confirmations via WhatsApp.

naftiko: "0.5"
info:
  label: "Luxury Gifting Personalization Pipeline"
  description: "Personalizes luxury gifts by pulling client preferences from Salesforce, recommending products from the catalog, creating gift packages, and sending confirmations via WhatsApp."
  tags:
    - gifting
    - personalization
    - salesforce
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-gifting-personalization
          description: "Personalizes luxury gifts."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Gifting Personalization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Reviews luxury packaging designs by collecting submissions from the DAM, routing for approval in Jira, tracking feedback in Confluence, and notifying the creative team.

naftiko: "0.5"
info:
  label: "Luxury Packaging Design Review Pipeline"
  description: "Reviews luxury packaging designs by collecting submissions from the DAM, routing for approval in Jira, tracking feedback in Confluence, and notifying the creative team."
  tags:
    - packaging
    - design
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-packaging-design-review
          description: "Reviews luxury packaging designs."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Packaging Design Review Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Orchestrates luxury pop-up store launches by sourcing inventory from SAP, coordinating logistics, creating event pages, and notifying the experiential marketing team.

naftiko: "0.5"
info:
  label: "Luxury Pop-Up Store Orchestrator"
  description: "Orchestrates luxury pop-up store launches by sourcing inventory from SAP, coordinating logistics, creating event pages, and notifying the experiential marketing team."
  tags:
    - retail
    - pop-up
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-pop-up-store
          description: "Orchestrates luxury pop-up store launches."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Pop-Up Store Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Manages luxury rental programs by checking item availability in SAP, processing reservations in Salesforce, scheduling cleaning in ServiceNow, and notifying boutique teams.

naftiko: "0.5"
info:
  label: "Luxury Rental Program Orchestrator"
  description: "Manages luxury rental programs by checking item availability in SAP, processing reservations in Salesforce, scheduling cleaning in ServiceNow, and notifying boutique teams."
  tags:
    - rental
    - luxury-program
    - sap
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-rental-program
          description: "Manages luxury rental programs."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Rental Program Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Manages luxury repair lifecycles by creating service orders in Zendesk, tracking parts in SAP, scheduling artisan time in Workday, and updating clients via WhatsApp.

naftiko: "0.5"
info:
  label: "Luxury Repair Lifecycle Orchestrator"
  description: "Manages luxury repair lifecycles by creating service orders in Zendesk, tracking parts in SAP, scheduling artisan time in Workday, and updating clients via WhatsApp."
  tags:
    - after-sales
    - repair
    - zendesk
    - sap
    - workday
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: luxury-ops
      port: 8080
      tools:
        - name: luxury-repair-lifecycle
          description: "Manages luxury repair lifecycles."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Luxury Repair Lifecycle Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 a luxury item repair request by creating a Salesforce case, logging the item details from SAP serial lookup, and scheduling a courier pickup via ShipStation.

naftiko: "0.5"
info:
  label: "Luxury Repair Service Intake"
  description: "Processes a luxury item repair request by creating a Salesforce case, logging the item details from SAP serial lookup, and scheduling a courier pickup via ShipStation."
  tags:
    - after-sales
    - repair
    - salesforce
    - sap-s4hana
    - shipstation
capability:
  exposes:
    - type: mcp
      namespace: repair-intake
      port: 8080
      tools:
        - name: intake-repair-request
          description: "Given a client ID, serial number, and defect description, create a CRM case, validate the item, and schedule courier pickup."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: serial_number
              in: body
              type: string
              description: "The product serial number."
            - name: defect_description
              in: body
              type: string
              description: "Description of the repair needed."
            - name: pickup_address
              in: body
              type: string
              description: "The client pickup address."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: get-item
              type: call
              call: "sap.get-serial"
              with:
                serial: "{{serial_number}}"
            - name: create-repair-case
              type: call
              call: "salesforce.create-case"
              with:
                ContactId: "{{client_id}}"
                Subject: "Repair request: {{get-item.material_description}} — SN {{serial_number}}"
                Description: "{{defect_description}}. Product: {{get-item.material_description}}. Manufactured: {{get-item.production_date}}."
                Type: "Repair"
            - name: schedule-pickup
              type: call
              call: "shipstation.create-order"
              with:
                orderNumber: "REPAIR-{{create-repair-case.id}}"
                shipTo_name: "LVMH Repair Center"
                shipFrom_name: "{{get-client.Name}}"
                shipFrom_address: "{{pickup_address}}"
                serviceCode: "courier_pickup"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SERIALNUMBER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: serials
          path: "/A_SerialNumber('{{serial}}')"
          inputParameters:
            - name: serial
              in: path
          operations:
            - name: get-serial
              method: GET
    - type: http
      namespace: shipstation
      baseUri: "https://ssapi.shipstation.com"
      authentication:
        type: basic
        username: "$secrets.shipstation_key"
        password: "$secrets.shipstation_secret"
      resources:
        - name: orders
          path: "/orders/createorder"
          operations:
            - name: create-order
              method: POST

Coordinates cross-maison product collaborations by syncing design specs in Confluence, aligning production in SAP, creating marketing plans, and launching via e-commerce.

naftiko: "0.5"
info:
  label: "Maison Collaboration Product Pipeline"
  description: "Coordinates cross-maison product collaborations by syncing design specs in Confluence, aligning production in SAP, creating marketing plans, and launching via e-commerce."
  tags:
    - collaboration
    - cross-maison
    - confluence
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: maison-ops
      port: 8080
      tools:
        - name: maison-collaboration-product
          description: "Coordinates cross-maison product collaborations."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Maison Collaboration Product Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Consolidates financial data across LVMH maisons by extracting from SAP, harmonizing in Snowflake, generating consolidated reports in Power BI, and distributing to CFO office.

naftiko: "0.5"
info:
  label: "Maison Financial Consolidation Pipeline"
  description: "Consolidates financial data across LVMH maisons by extracting from SAP, harmonizing in Snowflake, generating consolidated reports in Power BI, and distributing to CFO office."
  tags:
    - finance
    - consolidation
    - sap
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: maison-ops
      port: 8080
      tools:
        - name: maison-financial-consolidation
          description: "Consolidates financial data across LVMH maisons."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Maison Financial Consolidation Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment.

naftiko: "0.5"
info:
  label: "Manhattan WMS Inventory Position"
  description: "Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment."
  tags:
    - warehouse
    - manhattan-wms
capability:
  exposes:
    - type: mcp
      namespace: warehouse
      port: 8080
      tools:
        - name: manhattan_wms_inventory_position
          description: "Checks inventory positions in Manhattan warehouse management system for luxury goods fulfillment.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "manhattan-wms.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: manhattan-wms
      baseUri: "https://lvmh-manhattan-wms.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.manhattan_wms_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Aggregates daily revenue data from Shopify POS for boutique sales and SFCC for e-commerce, then posts a consolidated summary to the finance Slack channel.

naftiko: "0.5"
info:
  label: "Multi-Maison Revenue Consolidation"
  description: "Aggregates daily revenue data from Shopify POS for boutique sales and SFCC for e-commerce, then posts a consolidated summary to the finance Slack channel."
  tags:
    - finance
    - analytics
    - shopify
    - salesforce-commerce-cloud
    - slack
capability:
  exposes:
    - type: mcp
      namespace: revenue-consolidation
      port: 8080
      tools:
        - name: consolidate-daily-revenue
          description: "Given a date and Maison, pull POS and e-commerce revenue and post a consolidated summary to Slack."
          inputParameters:
            - name: date
              in: body
              type: string
              description: "The date in YYYY-MM-DD format."
            - name: maison
              in: body
              type: string
              description: "The Maison brand name."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel for finance reporting."
          steps:
            - name: get-pos-revenue
              type: call
              call: "shopify.get-orders-by-date"
              with:
                created_at_min: "{{date}}T00:00:00Z"
                created_at_max: "{{date}}T23:59:59Z"
            - name: get-ecommerce-revenue
              type: call
              call: "sfcc.search-orders"
              with:
                created_from: "{{date}}T00:00:00Z"
                created_to: "{{date}}T23:59:59Z"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Daily Revenue — {{maison}} ({{date}}): Boutique POS: {{get-pos-revenue.orders.length}} orders. E-Commerce: {{get-ecommerce-revenue.count}} orders."
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://lvmh-retail.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders.json?created_at_min={{created_at_min}}&created_at_max={{created_at_max}}"
          inputParameters:
            - name: created_at_min
              in: query
            - name: created_at_max
              in: query
          operations:
            - name: get-orders-by-date
              method: GET
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: order-search
          path: "/order_search"
          operations:
            - name: search-orders
              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

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for brand training materials, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for brand training materials, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee start date in YYYY-MM-DD format."
            - name: maison
              in: body
              type: string
              description: "The Maison the new hire is joining (e.g., Louis Vuitton, Dior)."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}} — {{maison}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} at {{maison}}."
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{maison}}/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to LVMH and {{maison}}, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Training materials are at {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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

When a new e-commerce order is placed, checks SAP inventory across warehouses and boutiques, selects optimal fulfillment location, and creates a shipping request in ShipStation.

naftiko: "0.5"
info:
  label: "Omnichannel Order Fulfillment Router"
  description: "When a new e-commerce order is placed, checks SAP inventory across warehouses and boutiques, selects optimal fulfillment location, and creates a shipping request in ShipStation."
  tags:
    - supply-chain
    - e-commerce
    - order-management
    - sap-s4hana
    - shipstation
    - salesforce-commerce-cloud
capability:
  exposes:
    - type: mcp
      namespace: fulfillment
      port: 8080
      tools:
        - name: route-order-fulfillment
          description: "Given an order ID, check inventory across locations, select the optimal fulfillment center, and create a ShipStation shipping label."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The SFCC order ID."
            - name: destination_country
              in: body
              type: string
              description: "The destination country ISO code."
          steps:
            - name: get-order
              type: call
              call: "sfcc.get-order"
              with:
                order_no: "{{order_id}}"
            - name: check-warehouse-stock
              type: call
              call: "sap.get-material-stock"
              with:
                material: "{{get-order.product_items[0].product_id}}"
            - name: create-shipment
              type: call
              call: "shipstation.create-order"
              with:
                orderNumber: "{{order_id}}"
                shipTo_country: "{{destination_country}}"
                shipTo_name: "{{get-order.billing_address.full_name}}"
                items: "{{get-order.product_items}}"
                warehouseId: "{{check-warehouse-stock.plant}}"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: orders
          path: "/orders/{{order_no}}"
          inputParameters:
            - name: order_no
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-material-stock
              method: GET
    - type: http
      namespace: shipstation
      baseUri: "https://ssapi.shipstation.com"
      authentication:
        type: basic
        username: "$secrets.shipstation_key"
        password: "$secrets.shipstation_secret"
      resources:
        - name: orders
          path: "/orders/createorder"
          operations:
            - name: create-order
              method: POST

Sources perfume ingredients by checking availability from suppliers in SAP, evaluating quality certificates, placing orders, and tracking shipments.

naftiko: "0.5"
info:
  label: "Perfume Ingredient Sourcing Orchestrator"
  description: "Sources perfume ingredients by checking availability from suppliers in SAP, evaluating quality certificates, placing orders, and tracking shipments."
  tags:
    - sourcing
    - perfume
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: perfume-ops
      port: 8080
      tools:
        - name: perfume-ingredient-sourcing
          description: "Sources perfume ingredients."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Perfume Ingredient Sourcing Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Builds personalized product recommendations by fetching client preferences from Salesforce, recent browse history from Segment, and searching matching products in Algolia.

naftiko: "0.5"
info:
  label: "Personalized Product Recommendation Engine"
  description: "Builds personalized product recommendations by fetching client preferences from Salesforce, recent browse history from Segment, and searching matching products in Algolia."
  tags:
    - e-commerce
    - personalization
    - salesforce
    - segment
    - algolia
capability:
  exposes:
    - type: mcp
      namespace: recommendations
      port: 8080
      tools:
        - name: get-recommendations
          description: "Given a client ID and Segment user ID, generate personalized product recommendations based on CRM preferences and browsing behavior."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: segment_user_id
              in: body
              type: string
              description: "The Segment user ID."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: get-browse-history
              type: call
              call: "segment.get-events"
              with:
                user_id: "{{segment_user_id}}"
            - name: search-products
              type: call
              call: "algolia.search"
              with:
                query: "{{get-client.Preferred_Maison__c}} {{get-browse-history.data[0].properties.category}}"
                facetFilters: "brand:{{get-client.Preferred_Maison__c}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: segment
      baseUri: "https://profiles.segment.com/v1/spaces/lvmh_space"
      authentication:
        type: bearer
        token: "$secrets.segment_token"
      resources:
        - name: events
          path: "/collections/users/{{user_id}}/events"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: algolia
      baseUri: "https://lvmh-app.algolia.net/1/indexes/products"
      authentication:
        type: bearer
        token: "$secrets.algolia_api_key"
      inputParameters:
        - name: X-Algolia-Application-Id
          in: header
          value: "$secrets.algolia_app_id"
      resources:
        - name: search
          path: "/query"
          operations:
            - name: search
              method: POST

Analyzes press coverage by collecting clippings, running sentiment analysis in Snowflake, generating media reports in SharePoint, and briefing the communications team.

naftiko: "0.5"
info:
  label: "Press Clipping Analysis Pipeline"
  description: "Analyzes press coverage by collecting clippings, running sentiment analysis in Snowflake, generating media reports in SharePoint, and briefing the communications team."
  tags:
    - communications
    - press
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: press-ops
      port: 8080
      tools:
        - name: press-clipping-analysis
          description: "Analyzes press coverage."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Press Clipping Analysis Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status.

naftiko: "0.5"
info:
  label: "Procurement Approval Pipeline"
  description: "When a SAP Ariba requisition exceeds a spend threshold, routes for manager approval via Workday and notifies the requestor in Microsoft Teams with approval status."
  tags:
    - procurement
    - approval
    - sap-ariba
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement-approval
      port: 8080
      tools:
        - name: route-requisition-approval
          description: "Given an Ariba requisition ID and requestor employee ID, check the amount, resolve the approver from Workday, and notify both parties in Teams."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The SAP Ariba requisition identifier."
            - name: requestor_employee_id
              in: body
              type: string
              description: "The Workday employee ID of the requestor."
            - name: spend_amount
              in: body
              type: number
              description: "The total spend amount on the requisition."
          steps:
            - name: get-requisition
              type: call
              call: "ariba.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: get-requestor
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{requestor_employee_id}}"
            - name: get-manager
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{get-requestor.manager_id}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-manager.work_email}}"
                text: "Approval Required: Ariba requisition {{requisition_id}} from {{get-requestor.full_name}} for EUR {{spend_amount}}. Vendor: {{get-requisition.vendor_name}}."
            - name: notify-requestor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-requestor.work_email}}"
                text: "Your requisition {{requisition_id}} (EUR {{spend_amount}}) has been routed to {{get-manager.full_name}} for approval."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-req/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              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: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              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

Retrieves a product from the Salesforce Commerce Cloud catalog by SKU, returning name, price, availability, and Maison attribution.

naftiko: "0.5"
info:
  label: "Product Catalog Lookup"
  description: "Retrieves a product from the Salesforce Commerce Cloud catalog by SKU, returning name, price, availability, and Maison attribution."
  tags:
    - e-commerce
    - product-catalog
    - salesforce-commerce-cloud
capability:
  exposes:
    - type: mcp
      namespace: catalog
      port: 8080
      tools:
        - name: get-product
          description: "Look up a product by SKU from the Salesforce Commerce Cloud catalog. Returns product name, price, availability, and brand Maison."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU identifier."
          call: "sfcc.get-product"
          with:
            product_id: "{{sku}}"
          outputParameters:
            - name: product_name
              type: string
              mapping: "$.name"
            - name: price
              type: string
              mapping: "$.price"
            - name: availability
              type: string
              mapping: "$.inventory.ats"
            - name: brand
              type: string
              mapping: "$.c_maisonBrand"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: products
          path: "/products/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-product
              method: GET

For a new product launch, retrieves the product from SFCC, fetches imagery from Cloudinary, publishes the content page in Contentful, and updates the Algolia search index.

naftiko: "0.5"
info:
  label: "Product Launch Content Pipeline"
  description: "For a new product launch, retrieves the product from SFCC, fetches imagery from Cloudinary, publishes the content page in Contentful, and updates the Algolia search index."
  tags:
    - e-commerce
    - content-management
    - product-launch
    - salesforce-commerce-cloud
    - cloudinary
    - contentful
    - algolia
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: publish-product-content
          description: "Given a product SKU and content entry ID, fetch product data, retrieve imagery, publish CMS content, and update search index."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: content_entry_id
              in: body
              type: string
              description: "The Contentful entry ID for the product page."
            - name: image_public_id
              in: body
              type: string
              description: "The Cloudinary public ID for the hero image."
          steps:
            - name: get-product
              type: call
              call: "sfcc.get-product"
              with:
                product_id: "{{sku}}"
            - name: get-hero-image
              type: call
              call: "cloudinary.get-resource"
              with:
                public_id: "{{image_public_id}}"
            - name: publish-content
              type: call
              call: "contentful.publish-entry"
              with:
                entry_id: "{{content_entry_id}}"
            - name: update-search-index
              type: call
              call: "algolia.save-object"
              with:
                objectID: "{{sku}}"
                name: "{{get-product.name}}"
                price: "{{get-product.price}}"
                image_url: "{{get-hero-image.secure_url}}"
                brand: "{{get-product.c_maisonBrand}}"
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: products
          path: "/products/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: cloudinary
      baseUri: "https://api.cloudinary.com/v1_1/lvmh"
      authentication:
        type: basic
        username: "$secrets.cloudinary_api_key"
        password: "$secrets.cloudinary_api_secret"
      resources:
        - name: resources
          path: "/resources/image/upload/{{public_id}}"
          inputParameters:
            - name: public_id
              in: path
          operations:
            - name: get-resource
              method: GET
    - type: http
      namespace: contentful
      baseUri: "https://api.contentful.com/spaces/lvmh_space_id/environments/master"
      authentication:
        type: bearer
        token: "$secrets.contentful_mgmt_token"
      resources:
        - name: entries
          path: "/entries/{{entry_id}}"
          inputParameters:
            - name: entry_id
              in: path
          operations:
            - name: publish-entry
              method: PUT
    - type: http
      namespace: algolia
      baseUri: "https://lvmh-app.algolia.net/1/indexes/products"
      authentication:
        type: bearer
        token: "$secrets.algolia_api_key"
      inputParameters:
        - name: X-Algolia-Application-Id
          in: header
          value: "$secrets.algolia_app_id"
      resources:
        - name: objects
          path: "/{{objectID}}"
          inputParameters:
            - name: objectID
              in: path
          operations:
            - name: save-object
              method: PUT

Manages raw material price hedging by monitoring commodity prices, analyzing exposure in Snowflake, recommending hedging strategies, and notifying the treasury team.

naftiko: "0.5"
info:
  label: "Raw Material Price Hedging Pipeline"
  description: "Manages raw material price hedging by monitoring commodity prices, analyzing exposure in Snowflake, recommending hedging strategies, and notifying the treasury team."
  tags:
    - treasury
    - hedging
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: raw-ops
      port: 8080
      tools:
        - name: raw-material-price-hedging
          description: "Manages raw material price hedging."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Raw Material Price Hedging Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 a return request by validating the order in SFCC, initiating a Stripe refund, updating the Salesforce case, and notifying the client via Zendesk.

naftiko: "0.5"
info:
  label: "Return and Exchange Processor"
  description: "Processes a return request by validating the order in SFCC, initiating a Stripe refund, updating the Salesforce case, and notifying the client via Zendesk."
  tags:
    - e-commerce
    - returns
    - salesforce-commerce-cloud
    - stripe
    - salesforce
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: process-return
          description: "Given an order ID, payment intent ID, and client ID, validate the order, issue a refund, update the CRM case, and notify the client."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The SFCC order ID."
            - name: payment_intent_id
              in: body
              type: string
              description: "The Stripe payment intent ID."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: reason
              in: body
              type: string
              description: "The return reason."
          steps:
            - name: get-order
              type: call
              call: "sfcc.get-order"
              with:
                order_no: "{{order_id}}"
            - name: issue-refund
              type: call
              call: "stripe.create-refund"
              with:
                payment_intent: "{{payment_intent_id}}"
                reason: "{{reason}}"
            - name: update-crm
              type: call
              call: "salesforce.create-case"
              with:
                ContactId: "{{client_id}}"
                Subject: "Return processed: Order {{order_id}}"
                Description: "Refund {{issue-refund.id}} issued for {{get-order.order_total}}. Reason: {{reason}}."
                Status: "Closed"
            - name: notify-client
              type: call
              call: "zendesk.create-ticket"
              with:
                requester_email: "{{get-order.customer_info.email}}"
                subject: "Your return for order {{order_id}} has been processed"
                body: "Your refund of {{get-order.order_total}} has been initiated. Refund reference: {{issue-refund.id}}. Please allow 5-10 business days."
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: orders
          path: "/orders/{{order_no}}"
          inputParameters:
            - name: order_no
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://lvmh.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST

Retrieves VIP client profile details from Salesforce including purchase history and brand preferences.

naftiko: "0.5"
info:
  label: "Salesforce VIP Client Lookup"
  description: "Retrieves VIP client profile details from Salesforce including purchase history and brand preferences."
  tags:
    - clienteling
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: clienteling
      port: 8080
      tools:
        - name: salesforce_vip_client_lookup
          description: "Retrieves VIP client profile details from Salesforce including purchase history and brand preferences.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "salesforce.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh-salesforce.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Checks intercompany stock transfer status between LVMH maisons in SAP.

naftiko: "0.5"
info:
  label: "SAP Intercompany Transfer Status"
  description: "Checks intercompany stock transfer status between LVMH maisons in SAP."
  tags:
    - supply-chain
    - sap
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: sap_intercompany_transfer_status
          description: "Checks intercompany stock transfer status between LVMH maisons in SAP.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "sap.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-sap.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Retrieves luxury raw material details from SAP including origin, quality grade, and current stock levels.

naftiko: "0.5"
info:
  label: "SAP Luxury Material Lookup"
  description: "Retrieves luxury raw material details from SAP including origin, quality grade, and current stock levels."
  tags:
    - materials
    - sap
capability:
  exposes:
    - type: mcp
      namespace: materials
      port: 8080
      tools:
        - name: sap_luxury_material_lookup
          description: "Retrieves luxury raw material details from SAP including origin."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "sap.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-sap.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Tracks luxury goods production order status in SAP including completion percentage and quality holds.

naftiko: "0.5"
info:
  label: "SAP Production Order Tracking"
  description: "Tracks luxury goods production order status in SAP including completion percentage and quality holds."
  tags:
    - manufacturing
    - sap
capability:
  exposes:
    - type: mcp
      namespace: manufacturing
      port: 8080
      tools:
        - name: sap_production_order_tracking
          description: "Tracks luxury goods production order status in SAP including completion percentage and quality holds.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "sap.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-sap.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date for LVMH procurement teams.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date for LVMH procurement teams."
  tags:
    - procurement
    - erp
    - sap
    - sap-s4hana
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP S/4HANA purchase order by PO number. Returns header status, vendor name, total value, currency, and delivery date."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (10-digit)."
          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: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-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

When a new seasonal collection is priced, updates product prices in SFCC, syncs to Algolia search index, and triggers a price-change notification to regional merchandising via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Seasonal Collection Pricing Sync"
  description: "When a new seasonal collection is priced, updates product prices in SFCC, syncs to Algolia search index, and triggers a price-change notification to regional merchandising via Microsoft Teams."
  tags:
    - merchandising
    - pricing
    - salesforce-commerce-cloud
    - algolia
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: sync-collection-pricing
          description: "Given a product SKU, new price, currency, and merchandising channel, update SFCC, Algolia, and notify the regional team."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: new_price
              in: body
              type: number
              description: "The new retail price."
            - name: currency
              in: body
              type: string
              description: "The currency code (EUR, USD, GBP, etc.)."
            - name: region_channel_upn
              in: body
              type: string
              description: "The Teams UPN of the regional merchandising lead."
          steps:
            - name: update-sfcc-price
              type: call
              call: "sfcc.update-product-price"
              with:
                product_id: "{{sku}}"
                price: "{{new_price}}"
                currency: "{{currency}}"
            - name: update-algolia
              type: call
              call: "algolia.partial-update"
              with:
                objectID: "{{sku}}"
                price: "{{new_price}}"
                currency: "{{currency}}"
            - name: notify-merchandising
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{region_channel_upn}}"
                text: "Price update: SKU {{sku}} now {{currency}} {{new_price}}. SFCC and search index updated."
  consumes:
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: products
          path: "/products/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: update-product-price
              method: PATCH
    - type: http
      namespace: algolia
      baseUri: "https://lvmh-app.algolia.net/1/indexes/products"
      authentication:
        type: bearer
        token: "$secrets.algolia_api_key"
      inputParameters:
        - name: X-Algolia-Application-Id
          in: header
          value: "$secrets.algolia_app_id"
      resources:
        - name: objects
          path: "/{{objectID}}/partial"
          inputParameters:
            - name: objectID
              in: path
          operations:
            - name: partial-update
              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

Optimizes seasonal markdowns by analyzing sell-through rates in Snowflake, recommending mark-down levels, updating pricing in SAP, and notifying merchandising teams.

naftiko: "0.5"
info:
  label: "Seasonal Markdown Optimization Pipeline"
  description: "Optimizes seasonal markdowns by analyzing sell-through rates in Snowflake, recommending mark-down levels, updating pricing in SAP, and notifying merchandising teams."
  tags:
    - merchandising
    - markdowns
    - snowflake
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: seasonal-ops
      port: 8080
      tools:
        - name: seasonal-markdown-optimization
          description: "Optimizes seasonal markdowns."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Seasonal Markdown Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 customer event history from Segment by user ID, returning recent track events for behavioral analysis and clienteling insights.

naftiko: "0.5"
info:
  label: "Segment Customer Event Lookup"
  description: "Retrieves customer event history from Segment by user ID, returning recent track events for behavioral analysis and clienteling insights."
  tags:
    - customer-data
    - analytics
    - segment
capability:
  exposes:
    - type: mcp
      namespace: cdp
      port: 8080
      tools:
        - name: get-customer-events
          description: "Fetch recent Segment track events for a user ID. Returns event names, timestamps, and properties."
          inputParameters:
            - name: user_id
              in: body
              type: string
              description: "The Segment user ID."
          call: "segment.get-events"
          with:
            user_id: "{{user_id}}"
  consumes:
    - type: http
      namespace: segment
      baseUri: "https://profiles.segment.com/v1/spaces/lvmh_space"
      authentication:
        type: bearer
        token: "$secrets.segment_token"
      resources:
        - name: events
          path: "/collections/users/{{user_id}}/events"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-events
              method: GET

Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking.

naftiko: "0.5"
info:
  label: "Shopify Plus Order Status"
  description: "Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking."
  tags:
    - e-commerce
    - shopify
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: shopify_plus_order_status
          description: "Checks the status of luxury e-commerce orders in Shopify Plus including fulfillment and delivery tracking.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "shopify.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://lvmh-shopify.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Retrieves a point-of-sale transaction from Shopify POS by transaction ID, returning payment details, line items, and store location.

naftiko: "0.5"
info:
  label: "Shopify POS Transaction Lookup"
  description: "Retrieves a point-of-sale transaction from Shopify POS by transaction ID, returning payment details, line items, and store location."
  tags:
    - retail
    - pos
    - shopify
capability:
  exposes:
    - type: mcp
      namespace: pos
      port: 8080
      tools:
        - name: get-pos-transaction
          description: "Retrieve a Shopify POS transaction by ID. Returns payment method, line items, store location, and associate."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The Shopify POS transaction ID."
          call: "shopify.get-order"
          with:
            order_id: "{{transaction_id}}"
          outputParameters:
            - name: total_price
              type: string
              mapping: "$.order.total_price"
            - name: payment_method
              type: string
              mapping: "$.order.payment_gateway_names[0]"
            - name: location
              type: string
              mapping: "$.order.location_id"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://lvmh-retail.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}.json"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

When a brand sentiment threshold is breached, pulls the social listening report from Sprinklr, creates a Salesforce case for the brand PR team, and alerts the communications lead in Slack.

naftiko: "0.5"
info:
  label: "Social Media Sentiment Alert"
  description: "When a brand sentiment threshold is breached, pulls the social listening report from Sprinklr, creates a Salesforce case for the brand PR team, and alerts the communications lead in Slack."
  tags:
    - brand-management
    - social-media
    - sprinklr
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sentiment-alert
      port: 8080
      tools:
        - name: escalate-sentiment-alert
          description: "Given a Sprinklr alert ID and Maison name, fetch the sentiment report, create a Salesforce PR case, and notify the comms lead in Slack."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Sprinklr alert ID."
            - name: maison
              in: body
              type: string
              description: "The Maison brand name."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel for brand communications."
          steps:
            - name: get-alert
              type: call
              call: "sprinklr.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: create-pr-case
              type: call
              call: "salesforce.create-case"
              with:
                Subject: "Sentiment Alert: {{maison}} — {{get-alert.topic}}"
                Description: "Sentiment score: {{get-alert.sentiment_score}}. Volume: {{get-alert.mention_count}} mentions. Top themes: {{get-alert.themes}}."
                Type: "Brand_PR"
                Priority: "High"
            - name: notify-comms
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Brand Alert for {{maison}}: Sentiment dropped to {{get-alert.sentiment_score}}. {{get-alert.mention_count}} mentions detected. Salesforce case: {{create-pr-case.id}}. Topic: {{get-alert.topic}}."
  consumes:
    - type: http
      namespace: sprinklr
      baseUri: "https://api2.sprinklr.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sprinklr_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: 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

Syncs boutique associate schedules from Workday to Microsoft Teams shifts, creating shift entries and sending confirmation notifications to each associate.

naftiko: "0.5"
info:
  label: "Store Associate Scheduling Sync"
  description: "Syncs boutique associate schedules from Workday to Microsoft Teams shifts, creating shift entries and sending confirmation notifications to each associate."
  tags:
    - retail
    - hr
    - scheduling
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: scheduling
      port: 8080
      tools:
        - name: sync-boutique-schedule
          description: "Given a Workday location ID and schedule date, pull associate shifts from Workday and create corresponding Teams shift entries."
          inputParameters:
            - name: location_id
              in: body
              type: string
              description: "The Workday location ID for the boutique."
            - name: schedule_date
              in: body
              type: string
              description: "The schedule date in YYYY-MM-DD format."
          steps:
            - name: get-shifts
              type: call
              call: "workday.get-schedules"
              with:
                location: "{{location_id}}"
                date: "{{schedule_date}}"
            - name: create-teams-shifts
              type: call
              call: "msteams.create-shift"
              with:
                teamId: "boutique_{{location_id}}"
                startDateTime: "{{get-shifts.shifts[0].start_time}}"
                endDateTime: "{{get-shifts.shifts[0].end_time}}"
                userId: "{{get-shifts.shifts[0].worker_upn}}"
            - name: notify-associates
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-shifts.shifts[0].worker_upn}}"
                text: "Your shift on {{schedule_date}} is confirmed: {{get-shifts.shifts[0].start_time}} to {{get-shifts.shifts[0].end_time}}."
  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: "/schedules?location={{location}}&date={{date}}"
          inputParameters:
            - name: location
              in: query
            - name: date
              in: query
          operations:
            - name: get-schedules
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: shifts
          path: "/teams/{{teamId}}/schedule/shifts"
          inputParameters:
            - name: teamId
              in: path
          operations:
            - name: create-shift
              method: POST
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Stripe payment intent by ID to check payment status, amount, and currency for LVMH e-commerce transactions.

naftiko: "0.5"
info:
  label: "Stripe Payment Intent Lookup"
  description: "Retrieves a Stripe payment intent by ID to check payment status, amount, and currency for LVMH e-commerce transactions."
  tags:
    - payments
    - e-commerce
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: get-payment-intent
          description: "Retrieve a Stripe payment intent by ID. Returns status, amount, currency, and payment method."
          inputParameters:
            - name: payment_intent_id
              in: body
              type: string
              description: "The Stripe payment intent ID (pi_xxx)."
          call: "stripe.get-payment-intent"
          with:
            pi_id: "{{payment_intent_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: amount
              type: string
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{pi_id}}"
          inputParameters:
            - name: pi_id
              in: path
          operations:
            - name: get-payment-intent
              method: GET

When a quality issue is reported, creates a SAP quality notification, opens a ServiceNow incident for the supply chain team, and alerts the supplier manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Quality Incident Pipeline"
  description: "When a quality issue is reported, creates a SAP quality notification, opens a ServiceNow incident for the supply chain team, and alerts the supplier manager in Microsoft Teams."
  tags:
    - supply-chain
    - quality
    - sap-s4hana
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-incident
      port: 8080
      tools:
        - name: report-quality-incident
          description: "Given a material number, supplier ID, and defect description, create a SAP quality notification, open a ServiceNow incident, and alert the supply chain manager."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number of the affected product."
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier/vendor ID."
            - name: defect_description
              in: body
              type: string
              description: "Description of the quality defect."
            - name: manager_upn
              in: body
              type: string
              description: "The Teams UPN of the supply chain manager."
          steps:
            - name: create-quality-notification
              type: call
              call: "sap.create-quality-notification"
              with:
                material: "{{material_number}}"
                supplier: "{{supplier_id}}"
                defect_text: "{{defect_description}}"
            - name: open-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Quality defect: Material {{material_number}} from supplier {{supplier_id}}"
                description: "{{defect_description}}. SAP QN: {{create-quality-notification.notification_id}}."
                category: "supply_chain_quality"
                assigned_group: "Quality_Assurance"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_upn}}"
                text: "Quality Alert: Material {{material_number}} — {{defect_description}}. SAP QN {{create-quality-notification.notification_id}}, ServiceNow {{open-incident.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: quality-notifications
          path: "/A_QualityNotification"
          operations:
            - name: create-quality-notification
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Pulls supplier sustainability metrics from SAP, cross-references with compliance records in ServiceNow, and generates a dashboard update posted to the ESG Slack channel.

naftiko: "0.5"
info:
  label: "Sustainability Compliance Tracker"
  description: "Pulls supplier sustainability metrics from SAP, cross-references with compliance records in ServiceNow, and generates a dashboard update posted to the ESG Slack channel."
  tags:
    - sustainability
    - compliance
    - sap-s4hana
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: track-sustainability-compliance
          description: "Given a supplier ID, pull sustainability data from SAP, check compliance status in ServiceNow, and post a summary to the ESG channel."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier ID."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel for ESG/sustainability reporting."
          steps:
            - name: get-supplier-data
              type: call
              call: "sap.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: get-compliance-records
              type: call
              call: "servicenow.get-compliance"
              with:
                supplier_id: "{{supplier_id}}"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Sustainability Report — Supplier {{get-supplier-data.name}} ({{supplier_id}}): Compliance status: {{get-compliance-records.status}}. Last audit: {{get-compliance-records.last_audit_date}}. Certifications: {{get-supplier-data.certifications}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: suppliers
          path: "/A_Supplier('{{supplier_id}}')"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: compliance
          path: "/table/u_supplier_compliance?sysparm_query=u_supplier_id={{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: query
          operations:
            - name: get-compliance
              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

Audits supply chain sustainability by collecting supplier certifications from SAP, analyzing ESG scores in Snowflake, generating audit reports, and notifying CSR teams.

naftiko: "0.5"
info:
  label: "Sustainability Supply Chain Audit Orchestrator"
  description: "Audits supply chain sustainability by collecting supplier certifications from SAP, analyzing ESG scores in Snowflake, generating audit reports, and notifying CSR teams."
  tags:
    - sustainability
    - audit
    - sap
    - snowflake
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sustainability-ops
      port: 8080
      tools:
        - name: sustainability-supply-chain-audit
          description: "Audits supply chain sustainability."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Sustainability Supply Chain Audit Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 boutique key performance indicators from Tableau dashboards including traffic, conversion, and average transaction.

naftiko: "0.5"
info:
  label: "Tableau Boutique KPI Dashboard"
  description: "Retrieves boutique key performance indicators from Tableau dashboards including traffic, conversion, and average transaction."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: tableau_boutique_kpi_dashboard
          description: "Retrieves boutique key performance indicators from Tableau dashboards including traffic."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "tableau.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://lvmh-tableau.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Optimizes travel retail inventory by analyzing passenger flow data, forecasting demand in Snowflake, adjusting allocations in SAP, and notifying travel retail managers.

naftiko: "0.5"
info:
  label: "Travel Retail Inventory Optimization Pipeline"
  description: "Optimizes travel retail inventory by analyzing passenger flow data, forecasting demand in Snowflake, adjusting allocations in SAP, and notifying travel retail managers."
  tags:
    - travel-retail
    - inventory
    - snowflake
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: travel-ops
      port: 8080
      tools:
        - name: travel-retail-inventory-optimization
          description: "Optimizes travel retail inventory."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Travel Retail Inventory Optimization Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Onboards a new supplier by creating a SAP vendor master record, opening a ServiceNow compliance review task, provisioning a SharePoint document folder, and notifying procurement in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Onboarding Pipeline"
  description: "Onboards a new supplier by creating a SAP vendor master record, opening a ServiceNow compliance review task, provisioning a SharePoint document folder, and notifying procurement in Microsoft Teams."
  tags:
    - procurement
    - vendor-management
    - sap-s4hana
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Given vendor details, create a SAP vendor record, open a compliance task, provision document storage, and notify the procurement team."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "The vendor company name."
            - name: vendor_country
              in: body
              type: string
              description: "The vendor country code."
            - name: vendor_category
              in: body
              type: string
              description: "The vendor category (raw materials, packaging, logistics)."
            - name: procurement_upn
              in: body
              type: string
              description: "The Teams UPN of the procurement lead."
          steps:
            - name: create-vendor
              type: call
              call: "sap.create-vendor"
              with:
                name: "{{vendor_name}}"
                country: "{{vendor_country}}"
                category: "{{vendor_category}}"
            - name: open-compliance-review
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Vendor compliance review: {{vendor_name}}"
                description: "New vendor {{vendor_name}} ({{vendor_country}}) in category {{vendor_category}}. SAP vendor ID: {{create-vendor.vendor_id}}."
                assigned_group: "Procurement_Compliance"
                category: "vendor_onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "procurement_site"
                folder_path: "Vendors/{{vendor_name}}_{{create-vendor.vendor_id}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{procurement_upn}}"
                text: "New vendor onboarded: {{vendor_name}} ({{vendor_country}}). SAP ID: {{create-vendor.vendor_id}}. Compliance review: {{open-compliance-review.number}}. Docs: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: vendors
          path: "/A_Supplier"
          operations:
            - name: create-vendor
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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: 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

On a high-value purchase event, enriches the client profile in Salesforce, triggers a personalized thank-you email via Klaviyo, and logs the interaction in the clienteling app.

naftiko: "0.5"
info:
  label: "VIC Clienteling Orchestrator"
  description: "On a high-value purchase event, enriches the client profile in Salesforce, triggers a personalized thank-you email via Klaviyo, and logs the interaction in the clienteling app."
  tags:
    - clienteling
    - crm
    - salesforce
    - klaviyo
    - luxury-retail
capability:
  exposes:
    - type: mcp
      namespace: clienteling
      port: 8080
      tools:
        - name: process-vic-purchase
          description: "Given a client ID and order ID, enrich the Salesforce profile, send a personalized Klaviyo thank-you, and log the clienteling interaction."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: order_id
              in: body
              type: string
              description: "The e-commerce order ID."
            - name: sales_associate_id
              in: body
              type: string
              description: "The ID of the sales associate who assisted."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{client_id}}"
            - name: get-order
              type: call
              call: "sfcc.get-order"
              with:
                order_no: "{{order_id}}"
            - name: update-client-spend
              type: call
              call: "salesforce.update-contact"
              with:
                contact_id: "{{client_id}}"
                Last_Purchase_Date__c: "{{get-order.creation_date}}"
                Last_Purchase_Amount__c: "{{get-order.order_total}}"
            - name: send-thank-you
              type: call
              call: "klaviyo.send-event"
              with:
                email: "{{get-client.Email}}"
                event: "VIC_Purchase_Thank_You"
                properties: "{amount: '{{get-order.order_total}}', associate: '{{sales_associate_id}}'}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://lvmh.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
            - name: update-contact
              method: PATCH
    - type: http
      namespace: sfcc
      baseUri: "https://lvmh.demandware.net/s/-/dw/data/v21_10"
      authentication:
        type: bearer
        token: "$secrets.sfcc_token"
      resources:
        - name: orders
          path: "/orders/{{order_no}}"
          inputParameters:
            - name: order_no
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: klaviyo
      baseUri: "https://a.klaviyo.com/api"
      authentication:
        type: bearer
        token: "$secrets.klaviyo_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: send-event
              method: POST

Manages VIP event invitations by selecting guests from Salesforce, generating personalized invitations, tracking RSVPs, and coordinating logistics via Teams.

naftiko: "0.5"
info:
  label: "VIP Event Invitation Orchestrator"
  description: "Manages VIP event invitations by selecting guests from Salesforce, generating personalized invitations, tracking RSVPs, and coordinating logistics via Teams."
  tags:
    - events
    - vip
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vip-ops
      port: 8080
      tools:
        - name: vip-event-invitation
          description: "Manages VIP event invitations."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "VIP Event Invitation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Audits visual merchandising across boutiques by collecting photos, analyzing display compliance via AI, creating audit reports in SharePoint, and alerting visual teams.

naftiko: "0.5"
info:
  label: "Visual Merchandising Audit Pipeline"
  description: "Audits visual merchandising across boutiques by collecting photos, analyzing display compliance via AI, creating audit reports in SharePoint, and alerting visual teams."
  tags:
    - visual-merchandising
    - audit
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: visual-ops
      port: 8080
      tools:
        - name: visual-merchandising-audit
          description: "Audits visual merchandising across boutiques."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Visual Merchandising Audit Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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

Compares boutique display imagery uploaded to Cloudinary against brand guidelines stored in Contentful, and creates a ServiceNow task for any non-compliant displays.

naftiko: "0.5"
info:
  label: "Visual Merchandising Compliance Checker"
  description: "Compares boutique display imagery uploaded to Cloudinary against brand guidelines stored in Contentful, and creates a ServiceNow task for any non-compliant displays."
  tags:
    - visual-merchandising
    - brand-management
    - cloudinary
    - contentful
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vm-compliance
      port: 8080
      tools:
        - name: check-display-compliance
          description: "Given a display image public ID and guidelines entry ID, fetch both assets and create a compliance review task if needed."
          inputParameters:
            - name: image_public_id
              in: body
              type: string
              description: "The Cloudinary public ID of the boutique display photo."
            - name: guidelines_entry_id
              in: body
              type: string
              description: "The Contentful entry ID for the VM guidelines."
            - name: boutique_name
              in: body
              type: string
              description: "The name of the boutique."
            - name: maison
              in: body
              type: string
              description: "The Maison brand."
          steps:
            - name: get-display-image
              type: call
              call: "cloudinary.get-resource"
              with:
                public_id: "{{image_public_id}}"
            - name: get-guidelines
              type: call
              call: "contentful.get-entry"
              with:
                entry_id: "{{guidelines_entry_id}}"
            - name: create-review-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "VM compliance review: {{boutique_name}} — {{maison}}"
                description: "Display image: {{get-display-image.secure_url}}. Guidelines: {{get-guidelines.fields.title}}. Please verify compliance with current {{maison}} visual merchandising standards."
                assigned_group: "Visual_Merchandising"
                category: "vm_compliance"
  consumes:
    - type: http
      namespace: cloudinary
      baseUri: "https://api.cloudinary.com/v1_1/lvmh"
      authentication:
        type: basic
        username: "$secrets.cloudinary_api_key"
        password: "$secrets.cloudinary_api_secret"
      resources:
        - name: resources
          path: "/resources/image/upload/{{public_id}}"
          inputParameters:
            - name: public_id
              in: path
          operations:
            - name: get-resource
              method: GET
    - type: http
      namespace: contentful
      baseUri: "https://cdn.contentful.com/spaces/lvmh_space_id"
      authentication:
        type: bearer
        token: "$secrets.contentful_token"
      resources:
        - name: entries
          path: "/entries/{{entry_id}}"
          inputParameters:
            - name: entry_id
              in: path
          operations:
            - name: get-entry
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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

Initiates an inter-warehouse stock transfer in SAP, creates a ServiceNow logistics task, and notifies the warehouse manager in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Warehouse Transfer Request"
  description: "Initiates an inter-warehouse stock transfer in SAP, creates a ServiceNow logistics task, and notifies the warehouse manager in Microsoft Teams."
  tags:
    - supply-chain
    - logistics
    - sap-s4hana
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse-transfer
      port: 8080
      tools:
        - name: request-stock-transfer
          description: "Given a material number, source plant, destination plant, and quantity, create a SAP transfer order, log a ServiceNow task, and notify the warehouse manager."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: source_plant
              in: body
              type: string
              description: "The source warehouse/plant code."
            - name: destination_plant
              in: body
              type: string
              description: "The destination warehouse/plant code."
            - name: quantity
              in: body
              type: number
              description: "The quantity to transfer."
            - name: manager_upn
              in: body
              type: string
              description: "The Teams UPN of the warehouse manager."
          steps:
            - name: create-transfer
              type: call
              call: "sap.create-stock-transfer"
              with:
                material: "{{material_number}}"
                source: "{{source_plant}}"
                destination: "{{destination_plant}}"
                quantity: "{{quantity}}"
            - name: create-logistics-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Stock transfer: {{material_number}} from {{source_plant}} to {{destination_plant}}"
                description: "Transfer order {{create-transfer.transfer_order_id}}: {{quantity}} units of {{material_number}}."
                assigned_group: "Logistics"
                category: "warehouse_transfer"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_upn}}"
                text: "Stock transfer initiated: {{quantity}} units of {{material_number}} from {{source_plant}} to {{destination_plant}}. SAP TO: {{create-transfer.transfer_order_id}}. ServiceNow: {{create-logistics-task.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: transfers
          path: "/A_StockTransfer"
          operations:
            - name: create-stock-transfer
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://lvmh.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Plans watch service center capacity by analyzing repair volumes in ServiceNow, forecasting demand in Snowflake, scheduling technicians in Workday, and reporting to management.

naftiko: "0.5"
info:
  label: "Watch Service Center Capacity Pipeline"
  description: "Plans watch service center capacity by analyzing repair volumes in ServiceNow, forecasting demand in Snowflake, scheduling technicians in Workday, and reporting to management."
  tags:
    - watches
    - service-capacity
    - servicenow
    - snowflake
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: watch-ops
      port: 8080
      tools:
        - name: watch-service-center-capacity
          description: "Plans watch service center capacity."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Watch Service Center Capacity Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 wholesale buyer orders by capturing orders in Salesforce, checking inventory in SAP, confirming delivery dates, and sending order confirmations.

naftiko: "0.5"
info:
  label: "Wholesale Buyer Order Pipeline"
  description: "Processes wholesale buyer orders by capturing orders in Salesforce, checking inventory in SAP, confirming delivery dates, and sending order confirmations."
  tags:
    - wholesale
    - orders
    - salesforce
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wholesale-ops
      port: 8080
      tools:
        - name: wholesale-buyer-order
          description: "Processes wholesale buyer orders."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Wholesale Buyer Order Pipeline complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a wholesale partner places a bulk order, creates the SAP sales order, generates an invoice draft, and sends order confirmation to the partner via email through Microsoft Graph.

naftiko: "0.5"
info:
  label: "Wholesale Order Pipeline"
  description: "When a wholesale partner places a bulk order, creates the SAP sales order, generates an invoice draft, and sends order confirmation to the partner via email through Microsoft Graph."
  tags:
    - wholesale
    - erp
    - sap-s4hana
    - microsoft-graph
capability:
  exposes:
    - type: mcp
      namespace: wholesale
      port: 8080
      tools:
        - name: process-wholesale-order
          description: "Given a partner ID, material list, and quantities, create a SAP sales order and send confirmation to the wholesale partner."
          inputParameters:
            - name: partner_id
              in: body
              type: string
              description: "The SAP business partner ID."
            - name: materials
              in: body
              type: string
              description: "JSON array of material numbers and quantities."
            - name: partner_email
              in: body
              type: string
              description: "The partner contact email."
          steps:
            - name: create-sales-order
              type: call
              call: "sap.create-sales-order"
              with:
                sold_to_party: "{{partner_id}}"
                items: "{{materials}}"
            - name: send-confirmation
              type: call
              call: "msgraph.send-mail"
              with:
                recipient: "{{partner_email}}"
                subject: "LVMH Wholesale Order Confirmation — {{create-sales-order.sales_order_id}}"
                body: "Your order {{create-sales-order.sales_order_id}} has been created. Estimated delivery: {{create-sales-order.delivery_date}}. Total: {{create-sales-order.net_value}} EUR."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://lvmh-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder"
          operations:
            - name: create-sales-order
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/wholesale@lvmh.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Allocates wine and spirits vintages by analyzing demand in SAP, optimizing allocation across markets, creating distribution plans, and notifying commercial teams.

naftiko: "0.5"
info:
  label: "Wine Spirits Vintage Allocation Orchestrator"
  description: "Allocates wine and spirits vintages by analyzing demand in SAP, optimizing allocation across markets, creating distribution plans, and notifying commercial teams."
  tags:
    - wine-spirits
    - allocation
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wine-ops
      port: 8080
      tools:
        - name: wine-spirits-vintage-allocation
          description: "Allocates wine and spirits vintages."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
            - name: notification_email
              in: body
              type: string
              description: "Notification email address."
          steps:
            - name: gather-data
              type: call
              call: "primary.get-data"
              with:
                entity_id: "{{entity_id}}"
            - name: process-data
              type: call
              call: "analytics.process"
              with:
                entity_id: "{{entity_id}}"
                input: "{{gather-data.results}}"
            - name: execute-action
              type: call
              call: "action.execute"
              with:
                entity_id: "{{entity_id}}"
                recommendations: "{{process-data.output}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{notification_email}}"
                text: "Wine Spirits Vintage Allocation Orchestrator complete for {{entity_id}}. Summary: {{process-data.summary}}. Actions: {{execute-action.count}}."
  consumes:
    - type: http
      namespace: primary
      baseUri: "https://lvmh-api.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lvmh_api_token"
      resources:
        - name: data
          path: "/data"
          operations:
            - name: get-data
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://lvmh-analytics.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: processing
          path: "/process"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: action
      baseUri: "https://lvmh-ops.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: actions
          path: "/execute"
          operations:
            - name: execute
              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 atelier artisan workforce data from Workday including skill certifications and capacity.

naftiko: "0.5"
info:
  label: "Workday Atelier Workforce Lookup"
  description: "Retrieves atelier artisan workforce data from Workday including skill certifications and capacity."
  tags:
    - workforce
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workforce
      port: 8080
      tools:
        - name: workday_atelier_workforce_lookup
          description: "Retrieves atelier artisan workforce data from Workday including skill certifications and capacity.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "workday.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://lvmh-workday.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Fetches an employee record from Workday by worker ID, returning name, department, manager, job title, and cost center.

naftiko: "0.5"
info:
  label: "Workday Employee Lookup"
  description: "Fetches an employee record from Workday by worker ID, returning name, department, manager, job title, and cost center."
  tags:
    - hr
    - workday
    - employee
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee
          description: "Retrieve an employee profile from Workday by worker ID. Returns full name, email, department, manager, and job title."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.fullName"
            - name: work_email
              type: string
              mapping: "$.workEmail"
            - name: department
              type: string
              mapping: "$.department"
            - name: manager_id
              type: string
              mapping: "$.managerId"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion.

naftiko: "0.5"
info:
  label: "Zendesk Luxury Service Ticket"
  description: "Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion."
  tags:
    - after-sales
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: after-sales
      port: 8080
      tools:
        - name: zendesk_luxury_service_ticket
          description: "Retrieves luxury after-sales service tickets from Zendesk including repair status and estimated completion.."
          inputParameters:
            - name: record_id
              in: body
              type: string
              description: "The record identifier."
          call: "zendesk.get-record"
          with:
            record_id: "{{record_id}}"
          outputParameters:
            - name: data
              type: object
              mapping: "$.data"
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://lvmh-zendesk.lvmh.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: records
          path: "/records/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, requester, and assignee details for LVMH client service teams.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID, returning subject, status, priority, requester, and assignee details for LVMH client service teams."
  tags:
    - customer-service
    - zendesk
    - support
capability:
  exposes:
    - type: mcp
      namespace: support
      port: 8080
      tools:
        - name: get-ticket
          description: "Retrieve a Zendesk ticket by ID. Returns subject, status, priority, requester name, and assigned agent."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: requester
              type: string
              mapping: "$.ticket.requester.name"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://lvmh.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET