LVMH Capabilities
Naftiko 0.5 capability definitions for LVMH - 100 capabilities showing integration workflows and service orchestrations.
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