Home Depot Capabilities
Naftiko 0.5 capability definitions for Home Depot - 100 capabilities showing integration workflows and service orchestrations.
Retrieves a pre-signed URL for a product image or document stored in Amazon S3, used by content teams to share assets across marketing channels.
naftiko: "0.5"
info:
label: "Amazon S3 Asset Retrieval"
description: "Retrieves a pre-signed URL for a product image or document stored in Amazon S3, used by content teams to share assets across marketing channels."
tags:
- content
- storage
- amazon-s3
capability:
exposes:
- type: mcp
namespace: asset-storage
port: 8080
tools:
- name: get-asset-url
description: "Given an S3 bucket and object key, return a pre-signed URL valid for one hour."
inputParameters:
- name: bucket
in: body
type: string
description: "The S3 bucket name."
- name: object_key
in: body
type: string
description: "The S3 object key (path to the file)."
call: "s3.get-presigned-url"
with:
bucket: "{{bucket}}"
key: "{{object_key}}"
outputParameters:
- name: presigned_url
type: string
mapping: "$.url"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: aws
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: get-presigned-url
method: GET
When a customer purchases a major appliance, checks delivery slot availability, creates the delivery order in SAP, schedules the installation crew in ServiceNow, and sends confirmation via MailChimp transactional email.
naftiko: "0.5"
info:
label: "Appliance Delivery Scheduling"
description: "When a customer purchases a major appliance, checks delivery slot availability, creates the delivery order in SAP, schedules the installation crew in ServiceNow, and sends confirmation via MailChimp transactional email."
tags:
- fulfillment
- delivery
- sap
- servicenow
- mailchimp
- appliances
capability:
exposes:
- type: mcp
namespace: appliance-delivery
port: 8080
tools:
- name: schedule-appliance-delivery
description: "Given an order ID, customer details, and preferred date, schedule delivery, book installation, and confirm with the customer."
inputParameters:
- name: order_id
in: body
type: string
description: "The appliance order ID."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: customer_address
in: body
type: string
description: "The delivery address."
- name: preferred_date
in: body
type: string
description: "Preferred delivery date in YYYY-MM-DD format."
- name: appliance_type
in: body
type: string
description: "Type of appliance (e.g. WASHER, REFRIGERATOR, DISHWASHER)."
steps:
- name: check-availability
type: call
call: "delivery-svc.check-slots"
with:
address: "{{customer_address}}"
date: "{{preferred_date}}"
type: "{{appliance_type}}"
- name: create-delivery-order
type: call
call: "sap-commerce.create-delivery"
with:
order_id: "{{order_id}}"
delivery_date: "{{check-availability.confirmed_date}}"
time_window: "{{check-availability.time_window}}"
address: "{{customer_address}}"
- name: schedule-installation
type: call
call: "servicenow.create-work-order"
with:
short_description: "Appliance install: {{appliance_type}} - Order {{order_id}}"
scheduled_date: "{{check-availability.confirmed_date}}"
assigned_group: "Appliance_Install_Crew"
description: "Install {{appliance_type}} at {{customer_address}}. Delivery order: {{create-delivery-order.delivery_id}}."
- name: send-confirmation
type: call
call: "mailchimp.send-transactional"
with:
template_name: "appliance_delivery_confirm"
to_email: "{{customer_email}}"
merge_vars:
order_id: "{{order_id}}"
delivery_date: "{{check-availability.confirmed_date}}"
time_window: "{{check-availability.time_window}}"
appliance_type: "{{appliance_type}}"
consumes:
- type: http
namespace: delivery-svc
baseUri: "https://delivery.homedepot.com/api/v2"
authentication:
type: bearer
token: "$secrets.delivery_svc_token"
resources:
- name: slots
path: "/availability"
operations:
- name: check-slots
method: POST
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: deliveries
path: "/orders/{{order_id}}/delivery"
inputParameters:
- name: order_id
in: path
operations:
- name: create-delivery
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
Processes appliance warranty claims by verifying purchase in Oracle Retail, creating a ServiceNow case, and scheduling a technician visit via the field service platform.
naftiko: "0.5"
info:
label: "Appliance Warranty Claim Processor"
description: "Processes appliance warranty claims by verifying purchase in Oracle Retail, creating a ServiceNow case, and scheduling a technician visit via the field service platform."
tags:
- customer-service
- warranty
- oracle-cloud
- servicenow
capability:
exposes:
- type: mcp
namespace: warranty-claims
port: 8080
tools:
- name: process-warranty-claim
description: "Process an appliance warranty claim."
inputParameters:
- name: order_id
in: body
type: string
description: "The original purchase order ID."
- name: sku
in: body
type: string
description: "The appliance SKU."
- name: issue_description
in: body
type: string
description: "Description of the issue."
- name: customer_address
in: body
type: string
description: "Customer service address."
steps:
- name: verify-purchase
type: call
call: "oracle-retail.get-order"
with:
order_id: "{{order_id}}"
- name: create-service-case
type: call
call: "servicenow.create-case"
with:
short_description: "Warranty claim: {{sku}} - Order {{order_id}}"
description: "{{issue_description}}"
category: "warranty_claim"
purchase_date: "{{verify-purchase.order_date}}"
- name: schedule-technician
type: call
call: "field-service.create-work-order"
with:
case_ref: "{{create-service-case.number}}"
sku: "{{sku}}"
address: "{{customer_address}}"
issue: "{{issue_description}}"
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: field-service
baseUri: "https://fieldservice.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.field_service_token"
resources:
- name: work-orders
path: "/work-orders"
operations:
- name: create-work-order
method: POST
Processes associate recognition nominations by creating a record in Workday, adding reward points in the recognition platform, and sending a congratulatory email via Outlook.
naftiko: "0.5"
info:
label: "Associate Recognition Award Processor"
description: "Processes associate recognition nominations by creating a record in Workday, adding reward points in the recognition platform, and sending a congratulatory email via Outlook."
tags:
- hr
- recognition
- workday
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: recognition
port: 8080
tools:
- name: process-recognition
description: "Process an associate recognition award."
inputParameters:
- name: employee_id
in: body
type: string
description: "The recognized employee Workday ID."
- name: award_type
in: body
type: string
description: "Award type (homer, quarterly, annual)."
- name: nominator_name
in: body
type: string
description: "Name of the person nominating."
- name: reason
in: body
type: string
description: "Recognition reason."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: add-award-points
type: call
call: "recognition-platform.add-points"
with:
employee_id: "{{employee_id}}"
award_type: "{{award_type}}"
reason: "{{reason}}"
- name: send-congratulations
type: call
call: "outlook.send-email"
with:
to: "{{get-employee.work_email}}"
subject: "Congratulations on Your {{award_type}} Award!"
body: "{{get-employee.first_name}}, you have been recognized by {{nominator_name}} for: {{reason}}. Points awarded: {{add-award-points.points_added}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: recognition-platform
baseUri: "https://recognition.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.recognition_token"
resources:
- name: awards
path: "/awards"
operations:
- name: add-points
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
When an associate requests a schedule change, fetches their current schedule from Workday, checks store staffing levels in the workforce management system, and routes the request to the department head via Microsoft Teams for approval.
naftiko: "0.5"
info:
label: "Associate Schedule Change Request"
description: "When an associate requests a schedule change, fetches their current schedule from Workday, checks store staffing levels in the workforce management system, and routes the request to the department head via Microsoft Teams for approval."
tags:
- hr
- scheduling
- workday
- microsoft-teams
- workforce-management
capability:
exposes:
- type: mcp
namespace: schedule-management
port: 8080
tools:
- name: request-schedule-change
description: "Given an employee ID, requested date, and shift preference, validate staffing and route the approval."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: requested_date
in: body
type: string
description: "The date for the schedule change in YYYY-MM-DD format."
- name: requested_shift
in: body
type: string
description: "The preferred shift (e.g. MORNING, AFTERNOON, EVENING)."
- name: reason
in: body
type: string
description: "The reason for the schedule change."
steps:
- name: get-associate
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: check-staffing
type: call
call: "wfm.get-staffing-levels"
with:
store_id: "{{get-associate.home_store}}"
department: "{{get-associate.department}}"
date: "{{requested_date}}"
shift: "{{requested_shift}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-associate.manager_email}}"
text: "Schedule change request from {{get-associate.full_name}}: {{requested_date}}, {{requested_shift}} shift. Reason: {{reason}}. Current staffing for that shift: {{check-staffing.current_count}}/{{check-staffing.required_count}}. Please approve or deny."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: wfm
baseUri: "https://wfm.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.wfm_token"
resources:
- name: staffing
path: "/stores/{{store_id}}/departments/{{department}}/staffing"
inputParameters:
- name: store_id
in: path
- name: department
in: path
operations:
- name: get-staffing-levels
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Tracks store associate training completion by pulling records from Cornerstone LMS, comparing against required courses in Workday, and sending gap reports via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Associate Training Completion Tracker"
description: "Tracks store associate training completion by pulling records from Cornerstone LMS, comparing against required courses in Workday, and sending gap reports via Microsoft Outlook."
tags:
- hr
- training
- workday
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: training-tracker
port: 8080
tools:
- name: track-training-completion
description: "Track and report training completion gaps for a store."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
steps:
- name: get-completions
type: call
call: "cornerstone.get-store-completions"
with:
location: "store_{{store_id}}"
- name: get-requirements
type: call
call: "workday.get-training-requirements"
with:
location: "store_{{store_id}}"
- name: send-gap-report
type: call
call: "outlook.send-email"
with:
to: "storemanager_{{store_id}}@homedepot.com"
subject: "Training Completion Report: Store {{store_id}}"
body: "Completed: {{get-completions.total_completed}}. Required: {{get-requirements.total_required}}. Gap: {{get-requirements.total_required}} - {{get-completions.total_completed}} courses."
consumes:
- type: http
namespace: cornerstone
baseUri: "https://homedepot.csod.com/services/api/x/v2"
authentication:
type: bearer
token: "$secrets.cornerstone_token"
resources:
- name: completions
path: "/reports/completions?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-store-completions
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/training/requirements?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-training-requirements
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Pulls Azure resource usage from CloudWatch-equivalent Azure Cost Management, compares against budgets in the FinOps dashboard, identifies idle resources via Datadog, and creates a Jira ticket for the engineering team to remediate.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Optimization"
description: "Pulls Azure resource usage from CloudWatch-equivalent Azure Cost Management, compares against budgets in the FinOps dashboard, identifies idle resources via Datadog, and creates a Jira ticket for the engineering team to remediate."
tags:
- cloud-ops
- finops
- microsoft-azure
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: cloud-cost
port: 8080
tools:
- name: analyze-cloud-costs
description: "Given a subscription ID and month, pull costs, compare to budget, identify waste, and create remediation tickets."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID."
- name: month
in: body
type: string
description: "The reporting month in YYYY-MM format."
steps:
- name: get-costs
type: call
call: "azure-cost.get-usage"
with:
subscription_id: "{{subscription_id}}"
month: "{{month}}"
- name: get-idle-resources
type: call
call: "datadog.query-metrics"
with:
service_name: "azure-{{subscription_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "CLOUDOPS"
issue_type: "Task"
summary: "Azure cost optimization: {{subscription_id}} - {{month}}"
description: "Total spend: ${{get-costs.total_cost}}. Budget: ${{get-costs.budget_amount}}. Utilization: {{get-costs.utilization_pct}}%. Idle resources detected: {{get-idle-resources.idle_count}}. Top cost driver: {{get-costs.top_service}}."
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: usage
path: "/{{subscription_id}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: get-usage
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves product reviews and ratings from Azure Cosmos DB by SKU, returning average rating, review count, and most recent review text.
naftiko: "0.5"
info:
label: "Azure Cosmos DB Product Review Lookup"
description: "Retrieves product reviews and ratings from Azure Cosmos DB by SKU, returning average rating, review count, and most recent review text."
tags:
- e-commerce
- reviews
- microsoft-azure
capability:
exposes:
- type: mcp
namespace: product-reviews
port: 8080
tools:
- name: get-reviews
description: "Look up product reviews by SKU."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
call: "cosmos-db.query-reviews"
with:
query: "SELECT * FROM reviews r WHERE r.sku = '{{sku}}' ORDER BY r.created_at DESC"
outputParameters:
- name: avg_rating
type: number
mapping: "$.Documents[0].avg_rating"
- name: review_count
type: integer
mapping: "$.Documents[0].count"
consumes:
- type: http
namespace: cosmos-db
baseUri: "https://homedepot-reviews.documents.azure.com"
authentication:
type: apiKey
key: "$secrets.cosmos_db_key"
resources:
- name: documents
path: "/dbs/reviews/colls/product_reviews/docs"
operations:
- name: query-reviews
method: POST
Checks Black Friday inventory readiness by comparing promotional item stock in SAP against demand forecast in Snowflake, and alerting replenishment via Microsoft Teams.
naftiko: "0.5"
info:
label: "Black Friday Inventory Readiness Checker"
description: "Checks Black Friday inventory readiness by comparing promotional item stock in SAP against demand forecast in Snowflake, and alerting replenishment via Microsoft Teams."
tags:
- merchandising
- seasonal
- sap
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bf-readiness
port: 8080
tools:
- name: check-bf-readiness
description: "Check Black Friday inventory readiness for a store."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: promo_event_id
in: body
type: string
description: "The promotional event ID."
steps:
- name: get-current-stock
type: call
call: "sap.get-promo-stock"
with:
store: "{{store_id}}"
event: "{{promo_event_id}}"
- name: get-demand-forecast
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT sku, forecast_units FROM promo_demand_forecast WHERE store_id = '{{store_id}}' AND event_id = '{{promo_event_id}}'"
- name: alert-replenishment
type: call
call: "msteams.send-message"
with:
channel_id: "replenishment-alerts"
text: "BF Readiness - Store {{store_id}}: {{get-current-stock.items_in_stock}} of {{get-demand-forecast.data.length}} promo items stocked. Review gaps immediately."
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_STOCK_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: promo-stock
path: "/PromoStockSet(Store='{{store}}',Event='{{event}}')"
inputParameters:
- name: store
in: path
- name: event
in: path
operations:
- name: get-promo-stock
method: GET
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Buy Online Pick Up In Store order is picked and staged, updates the order status in SAP Commerce Cloud and sends a pickup-ready SMS via the customer notification service.
naftiko: "0.5"
info:
label: "BOPIS Ready Notification"
description: "When a Buy Online Pick Up In Store order is picked and staged, updates the order status in SAP Commerce Cloud and sends a pickup-ready SMS via the customer notification service."
tags:
- e-commerce
- bopis
- sap
- customer-notification
capability:
exposes:
- type: mcp
namespace: bopis
port: 8080
tools:
- name: notify-pickup-ready
description: "Given an order ID and customer phone number, update the order status to ready and send a pickup-ready SMS notification."
inputParameters:
- name: order_id
in: body
type: string
description: "The BOPIS order ID."
- name: customer_phone
in: body
type: string
description: "The customer phone number for SMS notification."
- name: store_id
in: body
type: string
description: "The pickup store number."
steps:
- name: update-order-status
type: call
call: "sap-commerce.update-order"
with:
order_id: "{{order_id}}"
status: "READY_FOR_PICKUP"
- name: send-sms
type: call
call: "notification-svc.send-sms"
with:
phone: "{{customer_phone}}"
message: "Your Home Depot order {{order_id}} is ready for pickup at Store #{{store_id}}. Please bring your order confirmation and valid ID."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}/status"
inputParameters:
- name: order_id
in: path
operations:
- name: update-order
method: PUT
- type: http
namespace: notification-svc
baseUri: "https://notifications.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.notification_svc_token"
resources:
- name: sms
path: "/sms/send"
operations:
- name: send-sms
method: POST
Monitors competitor prices by pulling data from the pricing intelligence platform, comparing against internal pricing in SAP, and alerting category managers via Slack.
naftiko: "0.5"
info:
label: "Competitive Price Monitoring Pipeline"
description: "Monitors competitor prices by pulling data from the pricing intelligence platform, comparing against internal pricing in SAP, and alerting category managers via Slack."
tags:
- pricing
- competitive-intelligence
- sap
- slack
capability:
exposes:
- type: mcp
namespace: price-monitoring
port: 8080
tools:
- name: monitor-competitor-prices
description: "Monitor and alert on competitive price changes."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU to monitor."
- name: category_code
in: body
type: string
description: "The merchandising category code."
steps:
- name: get-competitor-prices
type: call
call: "pricing-intel.get-prices"
with:
sku: "{{sku}}"
- name: get-our-price
type: call
call: "sap.get-price"
with:
material: "{{sku}}"
- name: alert-category-manager
type: call
call: "slack.post-message"
with:
channel: "category-{{category_code}}-pricing"
text: "Price alert for SKU {{sku}}: Our price ${{get-our-price.list_price}}. Lowest competitor: ${{get-competitor-prices.lowest_price}} ({{get-competitor-prices.lowest_retailer}})."
consumes:
- type: http
namespace: pricing-intel
baseUri: "https://pricing-intelligence.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.pricing_intel_token"
resources:
- name: prices
path: "/products/{{sku}}/competitor-prices"
inputParameters:
- name: sku
in: path
operations:
- name: get-prices
method: GET
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_PRICING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: prices
path: "/PriceSet('{{material}}')"
inputParameters:
- name: material
in: path
operations:
- name: get-price
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Searches Confluence for a knowledge article by title or keyword, returning page content, last updated date, and author. Used by store associates for troubleshooting guidance.
naftiko: "0.5"
info:
label: "Confluence Knowledge Article Lookup"
description: "Searches Confluence for a knowledge article by title or keyword, returning page content, last updated date, and author. Used by store associates for troubleshooting guidance."
tags:
- knowledge-management
- support
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-articles
description: "Given a search query, return matching Confluence pages with title, excerpt, author, and last modified date."
inputParameters:
- name: query
in: body
type: string
description: "The search query for finding knowledge articles."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/content/search?cql=text~\"{{query}}\""
inputParameters:
- name: query
in: path
operations:
- name: search
method: GET
Generates a quarterly Pro Xtra rewards statement by pulling purchase history from Teradata, reward points from Salesforce, and sending a branded statement PDF via MailChimp transactional email.
naftiko: "0.5"
info:
label: "Contractor Pro Rewards Statement"
description: "Generates a quarterly Pro Xtra rewards statement by pulling purchase history from Teradata, reward points from Salesforce, and sending a branded statement PDF via MailChimp transactional email."
tags:
- loyalty
- pro-xtra
- teradata
- salesforce
- mailchimp
capability:
exposes:
- type: mcp
namespace: pro-rewards
port: 8080
tools:
- name: generate-rewards-statement
description: "Given a Pro customer ID and quarter, compile purchase and rewards data and send the statement."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Salesforce Pro Xtra customer ID."
- name: quarter
in: body
type: string
description: "The statement quarter (e.g. Q1_2026)."
- name: customer_email
in: body
type: string
description: "The customer email for statement delivery."
steps:
- name: get-purchases
type: call
call: "teradata.run-query"
with:
query: "SELECT SUM(net_sales) as total_spend, COUNT(*) as txn_count, SUM(rewards_earned) as points_earned FROM pro_transactions WHERE customer_id='{{customer_id}}' AND fiscal_quarter='{{quarter}}'"
- name: get-rewards-balance
type: call
call: "salesforce.get-account"
with:
account_id: "{{customer_id}}"
- name: send-statement
type: call
call: "mailchimp.send-transactional"
with:
template_name: "pro_xtra_statement"
to_email: "{{customer_email}}"
merge_vars:
customer_name: "{{get-rewards-balance.company_name}}"
quarter: "{{quarter}}"
total_spend: "{{get-purchases.total_spend}}"
txn_count: "{{get-purchases.txn_count}}"
points_earned: "{{get-purchases.points_earned}}"
points_balance: "{{get-rewards-balance.pro_tier}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
When a customer checks in for curbside pickup, retrieves the order from SAP Commerce Cloud, dispatches an associate via the workforce management system, and sends a real-time SMS update to the customer.
naftiko: "0.5"
info:
label: "Curbside Pickup Orchestrator"
description: "When a customer checks in for curbside pickup, retrieves the order from SAP Commerce Cloud, dispatches an associate via the workforce management system, and sends a real-time SMS update to the customer."
tags:
- e-commerce
- curbside-pickup
- sap
- workforce-management
- customer-notification
capability:
exposes:
- type: mcp
namespace: curbside
port: 8080
tools:
- name: process-curbside-checkin
description: "Given an order ID and parking spot, retrieve the order, dispatch an associate, and notify the customer."
inputParameters:
- name: order_id
in: body
type: string
description: "The curbside pickup order ID."
- name: parking_spot
in: body
type: string
description: "The customer parking spot identifier."
- name: customer_phone
in: body
type: string
description: "The customer phone for SMS updates."
- name: store_id
in: body
type: string
description: "The store number."
steps:
- name: get-order
type: call
call: "sap-commerce.get-order"
with:
order_id: "{{order_id}}"
- name: dispatch-associate
type: call
call: "wfm.dispatch-task"
with:
store_id: "{{store_id}}"
task_type: "curbside_delivery"
order_id: "{{order_id}}"
location: "Parking spot {{parking_spot}}"
item_count: "{{get-order.item_count}}"
- name: notify-customer
type: call
call: "notification-svc.send-sms"
with:
phone: "{{customer_phone}}"
message: "An associate is on the way to spot {{parking_spot}} with your order {{order_id}} ({{get-order.item_count}} items). ETA: {{dispatch-associate.estimated_minutes}} minutes."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: wfm
baseUri: "https://wfm.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.wfm_token"
resources:
- name: tasks
path: "/dispatch"
operations:
- name: dispatch-task
method: POST
- type: http
namespace: notification-svc
baseUri: "https://notifications.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.notification_svc_token"
resources:
- name: sms
path: "/sms/send"
operations:
- name: send-sms
method: POST
Processes customer credit applications by submitting to the credit bureau, creating the account in SAP, and sending approval notification via email.
naftiko: "0.5"
info:
label: "Customer Credit Application Processor"
description: "Processes customer credit applications by submitting to the credit bureau, creating the account in SAP, and sending approval notification via email."
tags:
- finance
- credit
- sap
capability:
exposes:
- type: mcp
namespace: credit-application
port: 8080
tools:
- name: process-credit-application
description: "Process a new customer credit card application."
inputParameters:
- name: applicant_name
in: body
type: string
description: "Applicant full name."
- name: applicant_email
in: body
type: string
description: "Applicant email."
- name: ssn_last_four
in: body
type: string
description: "Last four digits of SSN."
steps:
- name: submit-credit-check
type: call
call: "credit-bureau.check-credit"
with:
name: "{{applicant_name}}"
ssn_last_four: "{{ssn_last_four}}"
- name: create-account
type: call
call: "sap.create-customer"
with:
name: "{{applicant_name}}"
email: "{{applicant_email}}"
credit_limit: "{{submit-credit-check.approved_limit}}"
- name: send-notification
type: call
call: "sendgrid.send-email"
with:
to: "{{applicant_email}}"
template_id: "credit_approval"
dynamic_data:
name: "{{applicant_name}}"
credit_limit: "{{submit-credit-check.approved_limit}}"
consumes:
- type: http
namespace: credit-bureau
baseUri: "https://creditservices.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.credit_bureau_token"
resources:
- name: checks
path: "/credit-checks"
operations:
- name: check-credit
method: POST
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_CUSTOMER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: customers
path: "/CustomerSet"
operations:
- name: create-customer
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Enrolls customers in the Pro Xtra loyalty program by creating the profile in Salesforce, provisioning the loyalty account, and sending a welcome email via SendGrid.
naftiko: "0.5"
info:
label: "Customer Loyalty Program Enrollment Orchestrator"
description: "Enrolls customers in the Pro Xtra loyalty program by creating the profile in Salesforce, provisioning the loyalty account, and sending a welcome email via SendGrid."
tags:
- loyalty
- pro-services
- salesforce
- sendgrid
capability:
exposes:
- type: mcp
namespace: loyalty-enrollment
port: 8080
tools:
- name: enroll-loyalty-member
description: "Enroll a new customer in the Pro Xtra loyalty program."
inputParameters:
- name: customer_name
in: body
type: string
description: "Customer full name."
- name: email
in: body
type: string
description: "Customer email."
- name: business_name
in: body
type: string
description: "Business name."
- name: trade
in: body
type: string
description: "Trade specialty."
steps:
- name: create-sf-contact
type: call
call: "salesforce.create-contact"
with:
name: "{{customer_name}}"
email: "{{email}}"
company: "{{business_name}}"
trade: "{{trade}}"
- name: create-loyalty-account
type: call
call: "loyalty-platform.create-member"
with:
contact_id: "{{create-sf-contact.id}}"
program: "pro_xtra"
tier: "silver"
- name: send-welcome
type: call
call: "sendgrid.send-email"
with:
to: "{{email}}"
template_id: "pro_xtra_welcome"
dynamic_data:
name: "{{customer_name}}"
member_id: "{{create-loyalty-account.member_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: create-contact
method: POST
- type: http
namespace: loyalty-platform
baseUri: "https://loyalty.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.loyalty_token"
resources:
- name: members
path: "/members"
operations:
- name: create-member
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
When a customer initiates a return, looks up the order in SAP Commerce Cloud, creates a return authorization, updates inventory in Oracle Retail, and opens a ServiceNow case if the return exceeds the policy threshold.
naftiko: "0.5"
info:
label: "Customer Return Processing"
description: "When a customer initiates a return, looks up the order in SAP Commerce Cloud, creates a return authorization, updates inventory in Oracle Retail, and opens a ServiceNow case if the return exceeds the policy threshold."
tags:
- customer-service
- returns
- sap
- oracle-cloud
- servicenow
capability:
exposes:
- type: mcp
namespace: returns
port: 8080
tools:
- name: process-return
description: "Given an order ID, SKU, and reason code, look up the order, create the return authorization, adjust inventory, and escalate if needed."
inputParameters:
- name: order_id
in: body
type: string
description: "The original order ID."
- name: sku
in: body
type: string
description: "The SKU being returned."
- name: reason_code
in: body
type: string
description: "The return reason code (e.g. DEFECTIVE, WRONG_ITEM, NOT_NEEDED)."
- name: store_id
in: body
type: string
description: "The store processing the return."
steps:
- name: get-order
type: call
call: "sap-commerce.get-order"
with:
order_id: "{{order_id}}"
- name: create-return-auth
type: call
call: "sap-commerce.create-return"
with:
order_id: "{{order_id}}"
sku: "{{sku}}"
reason: "{{reason_code}}"
- name: adjust-inventory
type: call
call: "oracle-retail.adjust-stock"
with:
store_id: "{{store_id}}"
sku: "{{sku}}"
adjustment: "+1"
reason: "return_{{create-return-auth.return_id}}"
- name: escalate-if-needed
type: call
call: "servicenow.create-case"
with:
short_description: "High-value return: Order {{order_id}} - {{sku}} (${{get-order.item_total}})"
category: "return_escalation"
assigned_group: "Store_Loss_Prevention"
description: "Return auth {{create-return-auth.return_id}} for {{sku}} from order {{order_id}}. Reason: {{reason_code}}. Original amount: ${{get-order.item_total}}."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- name: returns
path: "/orders/{{order_id}}/returns"
inputParameters:
- name: order_id
in: path
operations:
- name: create-return
method: POST
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: stock-adjustments
path: "/stores/{{store_id}}/items/{{sku}}/adjustments"
inputParameters:
- name: store_id
in: path
- name: sku
in: path
operations:
- name: adjust-stock
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
When a negative product review is posted, fetches the review from the e-commerce platform, creates a Salesforce case for customer outreach, and alerts the product manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Review Escalation"
description: "When a negative product review is posted, fetches the review from the e-commerce platform, creates a Salesforce case for customer outreach, and alerts the product manager via Microsoft Teams."
tags:
- customer-service
- reviews
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: review-escalation
port: 8080
tools:
- name: escalate-negative-review
description: "Given a review ID and product SKU, fetch the review, create a customer service case, and notify the product manager."
inputParameters:
- name: review_id
in: body
type: string
description: "The product review ID."
- name: sku
in: body
type: string
description: "The product SKU."
- name: product_manager_email
in: body
type: string
description: "The product manager email for notification."
steps:
- name: get-review
type: call
call: "sap-commerce.get-review"
with:
review_id: "{{review_id}}"
sku: "{{sku}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Negative review escalation: {{sku}} - Rating {{get-review.rating}}/5"
description: "Review by {{get-review.author}}: {{get-review.text}}. Rating: {{get-review.rating}}/5. SKU: {{sku}}."
type: "Customer_Feedback"
priority: "High"
- name: notify-pm
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{product_manager_email}}"
text: "Negative review alert for SKU {{sku}}: {{get-review.rating}}/5 stars by {{get-review.author}}. Case {{create-case.case_number}} created. Review: \"{{get-review.text}}\""
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: reviews
path: "/products/{{sku}}/reviews/{{review_id}}"
inputParameters:
- name: sku
in: path
- name: review_id
in: path
operations:
- name: get-review
method: GET
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Queries Datadog for the current health status and error rate of a specified microservice, returning p99 latency, error count, and alert status.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the current health status and error rate of a specified microservice, returning p99 latency, error count, and alert status."
tags:
- monitoring
- reliability
- datadog
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Given a service name, return the current p99 latency, error rate, and active alert count from Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name (e.g. cart-service, checkout-api)."
call: "datadog.query-metrics"
with:
service_name: "{{service_name}}"
outputParameters:
- name: p99_latency_ms
type: number
mapping: "$.series[0].pointlist[-1][1]"
- name: error_rate
type: number
mapping: "$.series[1].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
Processes inbound shipments at distribution centers by validating ASN in SAP, creating receiving tasks in WMS, and updating vendor delivery metrics in Snowflake.
naftiko: "0.5"
info:
label: "DC Inbound Shipment Receiving Pipeline"
description: "Processes inbound shipments at distribution centers by validating ASN in SAP, creating receiving tasks in WMS, and updating vendor delivery metrics in Snowflake."
tags:
- supply-chain
- warehouse
- sap
- snowflake
capability:
exposes:
- type: mcp
namespace: dc-receiving
port: 8080
tools:
- name: receive-inbound-shipment
description: "Process inbound shipment receiving at a distribution center."
inputParameters:
- name: asn_number
in: body
type: string
description: "The advance ship notice number."
- name: dc_id
in: body
type: string
description: "The distribution center ID."
steps:
- name: validate-asn
type: call
call: "sap.get-asn"
with:
asn: "{{asn_number}}"
- name: create-receiving-task
type: call
call: "wms.create-receipt"
with:
dc_id: "{{dc_id}}"
po_number: "{{validate-asn.po_number}}"
vendor: "{{validate-asn.vendor_id}}"
items: "{{validate-asn.line_items}}"
- name: update-vendor-metrics
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO vendor_delivery_metrics (vendor_id, asn_number, dc_id, on_time, in_full, received_at) VALUES ('{{validate-asn.vendor_id}}', '{{asn_number}}', '{{dc_id}}', true, true, CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_ASN_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: asns
path: "/ASNSet('{{asn}}')"
inputParameters:
- name: asn
in: path
operations:
- name: get-asn
method: GET
- type: http
namespace: wms
baseUri: "https://wms.homedepot.com/api/v2"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: receipts
path: "/receipts"
operations:
- name: create-receipt
method: POST
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Optimizes last-mile delivery routes by pulling pending deliveries from SAP, calculating optimal routes via Google Maps, and assigning to drivers in the dispatch system.
naftiko: "0.5"
info:
label: "Delivery Route Optimization Orchestrator"
description: "Optimizes last-mile delivery routes by pulling pending deliveries from SAP, calculating optimal routes via Google Maps, and assigning to drivers in the dispatch system."
tags:
- logistics
- delivery
- sap
- google-maps
capability:
exposes:
- type: mcp
namespace: route-optimization
port: 8080
tools:
- name: optimize-delivery-routes
description: "Optimize delivery routes for a distribution center."
inputParameters:
- name: dc_id
in: body
type: string
description: "The distribution center ID."
- name: delivery_date
in: body
type: string
description: "Delivery date in YYYY-MM-DD."
steps:
- name: get-pending-deliveries
type: call
call: "sap.get-delivery-list"
with:
facility: "{{dc_id}}"
date: "{{delivery_date}}"
- name: calculate-routes
type: call
call: "google-maps.optimize-routes"
with:
origin: "{{dc_id}}"
waypoints: "{{get-pending-deliveries.addresses}}"
- name: assign-drivers
type: call
call: "dispatch.assign-routes"
with:
dc_id: "{{dc_id}}"
routes: "{{calculate-routes.optimized_routes}}"
date: "{{delivery_date}}"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZTM_DELIVERY_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: deliveries
path: "/DeliverySet?$filter=Facility eq '{{facility}}' and Date eq '{{date}}'"
inputParameters:
- name: facility
in: query
- name: date
in: query
operations:
- name: get-delivery-list
method: GET
- type: http
namespace: google-maps
baseUri: "https://routes.googleapis.com/distanceMatrix/v2"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
resources:
- name: routes
path: "/computeRoutes"
operations:
- name: optimize-routes
method: POST
- type: http
namespace: dispatch
baseUri: "https://dispatch.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.dispatch_token"
resources:
- name: routes
path: "/route-assignments"
operations:
- name: assign-routes
method: POST
Processes digital coupon redemptions by validating the coupon, applying the discount in the POS system, and recording the redemption in Snowflake for analytics.
naftiko: "0.5"
info:
label: "Digital Coupon Redemption Orchestrator"
description: "Processes digital coupon redemptions by validating the coupon, applying the discount in the POS system, and recording the redemption in Snowflake for analytics."
tags:
- marketing
- promotions
- snowflake
capability:
exposes:
- type: mcp
namespace: coupon-redemption
port: 8080
tools:
- name: redeem-digital-coupon
description: "Process a digital coupon redemption."
inputParameters:
- name: coupon_code
in: body
type: string
description: "The digital coupon code."
- name: transaction_id
in: body
type: string
description: "The POS transaction ID."
- name: store_id
in: body
type: string
description: "The store number."
steps:
- name: validate-coupon
type: call
call: "promotions.validate-coupon"
with:
code: "{{coupon_code}}"
- name: apply-discount
type: call
call: "pos-system.apply-discount"
with:
transaction_id: "{{transaction_id}}"
discount_amount: "{{validate-coupon.discount_value}}"
coupon_code: "{{coupon_code}}"
- name: record-redemption
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO coupon_redemptions (coupon_code, store_id, transaction_id, discount_amount, redeemed_at) VALUES ('{{coupon_code}}', '{{store_id}}', '{{transaction_id}}', {{validate-coupon.discount_value}}, CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: promotions
baseUri: "https://promotions.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.promotions_token"
resources:
- name: coupons
path: "/coupons/validate"
operations:
- name: validate-coupon
method: POST
- type: http
namespace: pos-system
baseUri: "https://pos.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: discounts
path: "/transactions/{{transaction_id}}/discounts"
inputParameters:
- name: transaction_id
in: path
operations:
- name: apply-discount
method: POST
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
When Dynatrace detects a synthetic monitor failure for homedepot.com, fetches the failure details, creates a PagerDuty-style ServiceNow incident, and posts an alert to the SRE Microsoft Teams channel with diagnostic links.
naftiko: "0.5"
info:
label: "Dynatrace Synthetic Monitor Alert Handler"
description: "When Dynatrace detects a synthetic monitor failure for homedepot.com, fetches the failure details, creates a PagerDuty-style ServiceNow incident, and posts an alert to the SRE Microsoft Teams channel with diagnostic links."
tags:
- monitoring
- e-commerce
- dynatrace
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: synthetic-alerts
port: 8080
tools:
- name: handle-synthetic-failure
description: "Given a Dynatrace monitor ID and failure timestamp, fetch details, create an incident, and alert SRE."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Dynatrace synthetic monitor ID."
- name: failure_timestamp
in: body
type: string
description: "The failure timestamp in ISO 8601 format."
steps:
- name: get-failure-details
type: call
call: "dynatrace.get-monitor-result"
with:
monitor_id: "{{monitor_id}}"
timestamp: "{{failure_timestamp}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Synthetic monitor failure: {{get-failure-details.monitor_name}}"
priority: "1"
category: "website_availability"
assigned_group: "SRE_Team"
description: "Monitor: {{get-failure-details.monitor_name}}. Location: {{get-failure-details.location}}. Error: {{get-failure-details.error_message}}. Response time: {{get-failure-details.response_time_ms}}ms."
- name: alert-sre
type: call
call: "msteams.post-channel"
with:
channel_id: "sre-alerts"
text: "SITE ALERT: Synthetic monitor '{{get-failure-details.monitor_name}}' FAILED at {{failure_timestamp}}. Location: {{get-failure-details.location}}. Error: {{get-failure-details.error_message}}. Incident: {{create-incident.number}}. Dashboard: {{get-failure-details.dashboard_url}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://homedepot.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: monitors
path: "/synthetic/monitors/{{monitor_id}}/results"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor-result
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Collects A/B test results from Google Optimize, enriches with revenue data from Google Analytics, and publishes findings to Confluence.
naftiko: "0.5"
info:
label: "E-Commerce A/B Test Results Pipeline"
description: "Collects A/B test results from Google Optimize, enriches with revenue data from Google Analytics, and publishes findings to Confluence."
tags:
- e-commerce
- experimentation
- google-analytics
- confluence
capability:
exposes:
- type: mcp
namespace: ab-test-results
port: 8080
tools:
- name: collect-ab-results
description: "Collect and publish A/B test results."
inputParameters:
- name: experiment_id
in: body
type: string
description: "The Google Optimize experiment ID."
steps:
- name: get-experiment-results
type: call
call: "google-optimize.get-experiment"
with:
id: "{{experiment_id}}"
- name: get-revenue-impact
type: call
call: "google-analytics.get-report"
with:
experiment_id: "{{experiment_id}}"
metric: "revenue"
- name: publish-findings
type: call
call: "confluence.create-page"
with:
space: "ECOMM"
title: "A/B Test Results: {{get-experiment-results.name}}"
body: "Winner: {{get-experiment-results.winner}}. Conversion lift: {{get-experiment-results.lift_pct}}%. Revenue impact: ${{get-revenue-impact.incremental_revenue}}."
consumes:
- type: http
namespace: google-optimize
baseUri: "https://www.googleapis.com/analytics/v3/management"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: experiments
path: "/accounts/homedepot/experiments/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-experiment
method: GET
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/homedepot:runReport"
operations:
- name: get-report
method: POST
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/api/v2"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/pages"
operations:
- name: create-page
method: POST
Schedules fleet vehicle maintenance by checking mileage from the telematics system, creating a work order in ServiceNow, and booking the appointment with the service provider.
naftiko: "0.5"
info:
label: "Fleet Vehicle Maintenance Scheduler"
description: "Schedules fleet vehicle maintenance by checking mileage from the telematics system, creating a work order in ServiceNow, and booking the appointment with the service provider."
tags:
- fleet
- maintenance
- servicenow
capability:
exposes:
- type: mcp
namespace: fleet-maintenance
port: 8080
tools:
- name: schedule-maintenance
description: "Schedule preventive maintenance for a fleet vehicle."
inputParameters:
- name: vehicle_id
in: body
type: string
description: "The fleet vehicle ID."
steps:
- name: get-vehicle-status
type: call
call: "telematics.get-vehicle"
with:
id: "{{vehicle_id}}"
- name: create-work-order
type: call
call: "servicenow.create-task"
with:
short_description: "PM: Vehicle {{vehicle_id}} at {{get-vehicle-status.mileage}} miles"
category: "fleet_maintenance"
assignment_group: "Fleet_Operations"
- name: book-service
type: call
call: "fleet-service.book-appointment"
with:
vehicle_id: "{{vehicle_id}}"
mileage: "{{get-vehicle-status.mileage}}"
service_type: "preventive_maintenance"
consumes:
- type: http
namespace: telematics
baseUri: "https://telematics.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.telematics_token"
resources:
- name: vehicles
path: "/vehicles/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-vehicle
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: fleet-service
baseUri: "https://fleet.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.fleet_service_token"
resources:
- name: appointments
path: "/appointments"
operations:
- name: book-appointment
method: POST
Manages the flooring installation workflow by capturing measurements in the field service system, generating a materials quote in SAP, and scheduling the installation appointment.
naftiko: "0.5"
info:
label: "Flooring Measurement to Install Pipeline"
description: "Manages the flooring installation workflow by capturing measurements in the field service system, generating a materials quote in SAP, and scheduling the installation appointment."
tags:
- home-services
- flooring
- sap
capability:
exposes:
- type: mcp
namespace: flooring-install
port: 8080
tools:
- name: process-flooring-measurement
description: "Convert a flooring measurement into an installation appointment."
inputParameters:
- name: measurement_id
in: body
type: string
description: "The field measurement ID."
- name: customer_id
in: body
type: string
description: "The customer account ID."
steps:
- name: get-measurements
type: call
call: "field-service.get-measurement"
with:
id: "{{measurement_id}}"
- name: generate-quote
type: call
call: "sap.create-quote"
with:
customer: "{{customer_id}}"
square_footage: "{{get-measurements.total_sqft}}"
product_sku: "{{get-measurements.selected_product}}"
- name: schedule-install
type: call
call: "field-service.create-appointment"
with:
customer_id: "{{customer_id}}"
service_type: "flooring_installation"
quote_ref: "{{generate-quote.quote_number}}"
consumes:
- type: http
namespace: field-service
baseUri: "https://fieldservice.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.field_service_token"
resources:
- name: measurements
path: "/measurements/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-measurement
method: GET
- name: appointments
path: "/appointments"
operations:
- name: create-appointment
method: POST
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_QUOTE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: quotes
path: "/QuoteSet"
operations:
- name: create-quote
method: POST
Coordinates seasonal garden center resets by updating planograms in Oracle Retail, generating purchase orders in SAP, and notifying store teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Garden Center Seasonal Reset Orchestrator"
description: "Coordinates seasonal garden center resets by updating planograms in Oracle Retail, generating purchase orders in SAP, and notifying store teams via Microsoft Teams."
tags:
- merchandising
- garden
- oracle-cloud
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: garden-reset
port: 8080
tools:
- name: execute-seasonal-reset
description: "Execute a seasonal garden center reset."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: season
in: body
type: string
description: "The season (spring, summer, fall, holiday)."
steps:
- name: update-planogram
type: call
call: "oracle-retail.update-planogram"
with:
store: "{{store_id}}"
department: "garden"
template: "garden_{{season}}"
- name: generate-po
type: call
call: "sap.create-purchase-order"
with:
store: "{{store_id}}"
category: "garden_seasonal_{{season}}"
- name: notify-store
type: call
call: "msteams.send-message"
with:
channel_id: "store-{{store_id}}-merchandising"
text: "Garden center {{season}} reset initiated. New planogram deployed. PO {{generate-po.po_number}} created for seasonal inventory."
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-msm/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: planograms
path: "/stores/{{store}}/planograms/{{department}}"
inputParameters:
- name: store
in: path
- name: department
in: path
operations:
- name: update-planogram
method: PUT
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_PO_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/PurchaseOrderSet"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a GitHub deployment completes, fetches the deployment details, checks Datadog for post-deploy error spikes, and posts the deployment summary to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Deployment Notification"
description: "When a GitHub deployment completes, fetches the deployment details, checks Datadog for post-deploy error spikes, and posts the deployment summary to the engineering Microsoft Teams channel."
tags:
- development
- ci-cd
- github
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: deploy-notify
port: 8080
tools:
- name: notify-deployment
description: "Given a GitHub repo and deployment ID, fetch details, check for error spikes, and notify the team."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository (org/repo format)."
- name: deployment_id
in: body
type: string
description: "The GitHub deployment ID."
- name: service_name
in: body
type: string
description: "The Datadog service name to monitor post-deploy."
steps:
- name: get-deployment
type: call
call: "github.get-deployment"
with:
repo: "{{repo}}"
deployment_id: "{{deployment_id}}"
- name: check-errors
type: call
call: "datadog.query-metrics"
with:
service_name: "{{service_name}}"
- name: notify-team
type: call
call: "msteams.post-channel"
with:
channel_id: "engineering-deploys"
text: "Deployment {{deployment_id}} to {{get-deployment.environment}}: {{get-deployment.status}}. Ref: {{get-deployment.ref}}. Creator: {{get-deployment.creator}}. Post-deploy error rate: {{check-errors.error_rate}}%."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com/repos"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: deployments
path: "/{{repo}}/deployments/{{deployment_id}}"
inputParameters:
- name: repo
in: path
- name: deployment_id
in: path
operations:
- name: get-deployment
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves campaign performance metrics from Google Ads including impressions, clicks, conversions, and cost per acquisition.
naftiko: "0.5"
info:
label: "Google Ads Campaign Performance Report"
description: "Retrieves campaign performance metrics from Google Ads including impressions, clicks, conversions, and cost per acquisition."
tags:
- marketing
- advertising
- google-ads
capability:
exposes:
- type: mcp
namespace: google-ads
port: 8080
tools:
- name: get-campaign-performance
description: "Fetch Google Ads campaign performance metrics."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Google Ads campaign ID."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD_YYYY-MM-DD format."
call: "google-ads.get-report"
with:
campaign: "{{campaign_id}}"
dates: "{{date_range}}"
outputParameters:
- name: impressions
type: integer
mapping: "$.metrics.impressions"
- name: clicks
type: integer
mapping: "$.metrics.clicks"
- name: conversions
type: number
mapping: "$.metrics.conversions"
- name: cpa
type: number
mapping: "$.metrics.costPerConversion"
consumes:
- type: http
namespace: google-ads
baseUri: "https://googleads.googleapis.com/v15"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: reports
path: "/customers/homedepot/campaigns/{{campaign}}/metrics"
inputParameters:
- name: campaign
in: path
operations:
- name: get-report
method: GET
Pulls page view metrics and bounce rate from Google Analytics for a given product page URL over a specified date range.
naftiko: "0.5"
info:
label: "Google Analytics Page Performance"
description: "Pulls page view metrics and bounce rate from Google Analytics for a given product page URL over a specified date range."
tags:
- marketing
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-page-metrics
description: "Given a page path and date range, return page views, unique visitors, bounce rate, and average session duration from Google Analytics."
inputParameters:
- name: page_path
in: body
type: string
description: "The URL path of the product page (e.g. /p/product-name/123456)."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "ga.run-report"
with:
page_path: "{{page_path}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: page_views
type: number
mapping: "$.rows[0].metricValues[0].value"
- name: bounce_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Given a ZIP code or city name, queries Google Maps Places API to find the nearest Home Depot stores with addresses, phone numbers, and operating hours.
naftiko: "0.5"
info:
label: "Google Maps Store Locator"
description: "Given a ZIP code or city name, queries Google Maps Places API to find the nearest Home Depot stores with addresses, phone numbers, and operating hours."
tags:
- customer-service
- store-locator
- google-maps
capability:
exposes:
- type: mcp
namespace: store-locator
port: 8080
tools:
- name: find-nearest-stores
description: "Given a location query string, return the nearest Home Depot stores with address, phone, and hours."
inputParameters:
- name: location_query
in: body
type: string
description: "A ZIP code, city, or address to search near."
call: "gmaps.nearby-search"
with:
query: "Home Depot near {{location_query}}"
outputParameters:
- name: stores
type: array
mapping: "$.results"
consumes:
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api/place"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
resources:
- name: nearby
path: "/textsearch/json"
operations:
- name: nearby-search
method: GET
Converts home services leads by enriching in Salesforce, checking installer availability, and scheduling the consultation appointment via the field service platform.
naftiko: "0.5"
info:
label: "Home Services Lead to Appointment Pipeline"
description: "Converts home services leads by enriching in Salesforce, checking installer availability, and scheduling the consultation appointment via the field service platform."
tags:
- home-services
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: services-leads
port: 8080
tools:
- name: convert-services-lead
description: "Convert a home services lead into a scheduled appointment."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID."
- name: service_type
in: body
type: string
description: "Service type (roofing, flooring, hvac, etc.)."
- name: zip_code
in: body
type: string
description: "Customer zip code."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
id: "{{lead_id}}"
- name: find-installer
type: call
call: "field-service.check-availability"
with:
service_type: "{{service_type}}"
zip_code: "{{zip_code}}"
- name: schedule-appointment
type: call
call: "field-service.create-appointment"
with:
lead_name: "{{get-lead.Name}}"
phone: "{{get-lead.Phone}}"
service_type: "{{service_type}}"
installer_id: "{{find-installer.installer_id}}"
preferred_date: "{{find-installer.next_available}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: field-service
baseUri: "https://fieldservice.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.field_service_token"
resources:
- name: availability
path: "/installers/availability"
operations:
- name: check-availability
method: POST
- name: appointments
path: "/appointments"
operations:
- name: create-appointment
method: POST
When a customer requests an installation quote (flooring, countertops, HVAC), captures the lead in HubSpot, finds the nearest certified installer via Google Maps, creates a Salesforce opportunity, and schedules the consultation via ServiceNow.
naftiko: "0.5"
info:
label: "Installation Services Lead Router"
description: "When a customer requests an installation quote (flooring, countertops, HVAC), captures the lead in HubSpot, finds the nearest certified installer via Google Maps, creates a Salesforce opportunity, and schedules the consultation via ServiceNow."
tags:
- sales
- installation-services
- hubspot
- google-maps
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: install-services
port: 8080
tools:
- name: route-install-lead
description: "Given customer details and installation type, create the lead, find an installer, create an opportunity, and schedule the consultation."
inputParameters:
- name: customer_name
in: body
type: string
description: "The customer full name."
- name: customer_email
in: body
type: string
description: "The customer email."
- name: customer_address
in: body
type: string
description: "The customer address for installation."
- name: install_type
in: body
type: string
description: "Type of installation (e.g. FLOORING, COUNTERTOP, HVAC, ROOFING)."
- name: estimated_budget
in: body
type: number
description: "The customer estimated budget."
steps:
- name: create-lead
type: call
call: "hubspot.create-contact"
with:
name: "{{customer_name}}"
email: "{{customer_email}}"
address: "{{customer_address}}"
lead_source: "Installation_Request"
install_type: "{{install_type}}"
- name: find-installer
type: call
call: "gmaps.nearby-search"
with:
query: "{{install_type}} installer near {{customer_address}}"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
name: "Install - {{install_type}} - {{customer_name}}"
amount: "{{estimated_budget}}"
stage: "Lead"
contact_email: "{{customer_email}}"
- name: schedule-consultation
type: call
call: "servicenow.create-work-order"
with:
short_description: "Installation consultation: {{install_type}} - {{customer_name}}"
assigned_group: "Installation_Services"
description: "Customer: {{customer_name}}. Address: {{customer_address}}. Type: {{install_type}}. Budget: ${{estimated_budget}}. Nearest installer: {{find-installer.stores[0].name}}. Opportunity: {{create-opportunity.id}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts"
operations:
- name: create-contact
method: POST
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api/place"
authentication:
type: apiKey
key: "$secrets.google_maps_key"
resources:
- name: nearby
path: "/textsearch/json"
operations:
- name: nearby-search
method: GET
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
When Oracle Retail detects stock falling below reorder point, creates a purchase requisition in SAP, notifies the category merchant via Microsoft Teams, and logs the auto-reorder event in Confluence.
naftiko: "0.5"
info:
label: "Inventory Reorder Automation"
description: "When Oracle Retail detects stock falling below reorder point, creates a purchase requisition in SAP, notifies the category merchant via Microsoft Teams, and logs the auto-reorder event in Confluence."
tags:
- inventory
- supply-chain
- oracle-cloud
- sap
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: auto-reorder
port: 8080
tools:
- name: trigger-auto-reorder
description: "Given a SKU, store ID, and current on-hand quantity, create a purchase requisition and notify the merchant."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU that is low on stock."
- name: store_id
in: body
type: string
description: "The store number where stock is low."
- name: on_hand_qty
in: body
type: number
description: "The current on-hand quantity."
- name: reorder_qty
in: body
type: number
description: "The recommended reorder quantity."
- name: merchant_email
in: body
type: string
description: "The category merchant email."
steps:
- name: get-product
type: call
call: "sap-commerce.get-product"
with:
sku: "{{sku}}"
- name: create-requisition
type: call
call: "sap.create-requisition"
with:
material: "{{sku}}"
plant: "Store_{{store_id}}"
quantity: "{{reorder_qty}}"
description: "Auto-reorder: {{get-product.product_name}} (on-hand: {{on_hand_qty}})"
- name: notify-merchant
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{merchant_email}}"
text: "Auto-reorder triggered: {{get-product.product_name}} ({{sku}}) at Store #{{store_id}}. On-hand: {{on_hand_qty}}. Reorder qty: {{reorder_qty}}. Requisition: {{create-requisition.req_number}}."
- name: log-event
type: call
call: "confluence.create-page"
with:
space_key: "INVENTORY"
title: "Auto-Reorder: {{sku}} - Store #{{store_id}} - {{create-requisition.req_number}}"
body: "Product: {{get-product.product_name}}. On-hand: {{on_hand_qty}}. Reorder qty: {{reorder_qty}}. Requisition: {{create-requisition.req_number}}."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products/{{sku}}"
inputParameters:
- name: sku
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_REQ_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: requisitions
path: "/A_PurchaseRequisition"
operations:
- name: create-requisition
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves the current sprint status for the e-commerce development team in Jira, returning sprint goal, completion percentage, and blockers.
naftiko: "0.5"
info:
label: "Jira E-Commerce Sprint Status"
description: "Retrieves the current sprint status for the e-commerce development team in Jira, returning sprint goal, completion percentage, and blockers."
tags:
- engineering
- e-commerce
- jira
capability:
exposes:
- type: mcp
namespace: ecommerce-sprints
port: 8080
tools:
- name: get-sprint-status
description: "Get current sprint status for e-commerce team."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
call: "jira.get-active-sprint"
with:
board: "{{board_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: goal
type: string
mapping: "$.values[0].goal"
- name: start_date
type: string
mapping: "$.values[0].startDate"
consumes:
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board}}/sprint?state=active"
inputParameters:
- name: board
in: path
operations:
- name: get-active-sprint
method: GET
Looks up a Jira issue by key and returns the current status, assignee, sprint, and story points for engineering and store technology teams.
naftiko: "0.5"
info:
label: "Jira Ticket Status"
description: "Looks up a Jira issue by key and returns the current status, assignee, sprint, and story points for engineering and store technology teams."
tags:
- development
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: dev-tracking
port: 8080
tools:
- name: get-jira-issue
description: "Given a Jira issue key, return the issue summary, status, assignee, sprint name, and story points."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g. STORE-1234)."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: sprint
type: string
mapping: "$.fields.sprint.name"
consumes:
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
When a customer requests a kitchen design consultation, creates the lead in HubSpot, checks designer availability in the workforce management system, books the appointment in ServiceNow, and sends a confirmation via MailChimp with preparation tips.
naftiko: "0.5"
info:
label: "Kitchen Design Consultation Scheduler"
description: "When a customer requests a kitchen design consultation, creates the lead in HubSpot, checks designer availability in the workforce management system, books the appointment in ServiceNow, and sends a confirmation via MailChimp with preparation tips."
tags:
- sales
- kitchen-design
- hubspot
- workforce-management
- servicenow
- mailchimp
capability:
exposes:
- type: mcp
namespace: kitchen-design
port: 8080
tools:
- name: schedule-kitchen-consultation
description: "Given customer details and preferred store, create the lead, find an available designer, book the appointment, and confirm."
inputParameters:
- name: customer_name
in: body
type: string
description: "The customer full name."
- name: customer_email
in: body
type: string
description: "The customer email."
- name: store_id
in: body
type: string
description: "The preferred store for the consultation."
- name: preferred_date
in: body
type: string
description: "Preferred consultation date in YYYY-MM-DD format."
- name: project_scope
in: body
type: string
description: "Description of the kitchen project scope."
steps:
- name: create-lead
type: call
call: "hubspot.create-contact"
with:
name: "{{customer_name}}"
email: "{{customer_email}}"
lead_source: "Kitchen_Design"
notes: "{{project_scope}}"
- name: find-designer
type: call
call: "wfm.get-available-specialist"
with:
store_id: "{{store_id}}"
specialty: "kitchen_design"
date: "{{preferred_date}}"
- name: book-appointment
type: call
call: "servicenow.create-work-order"
with:
short_description: "Kitchen design consultation: {{customer_name}}"
assigned_to: "{{find-designer.designer_id}}"
scheduled_date: "{{find-designer.available_slot}}"
description: "Customer: {{customer_name}}. Project: {{project_scope}}. Store #{{store_id}}."
- name: send-confirmation
type: call
call: "mailchimp.send-transactional"
with:
template_name: "kitchen_design_confirm"
to_email: "{{customer_email}}"
merge_vars:
customer_name: "{{customer_name}}"
designer_name: "{{find-designer.designer_name}}"
appointment_date: "{{find-designer.available_slot}}"
store_id: "{{store_id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts"
operations:
- name: create-contact
method: POST
- type: http
namespace: wfm
baseUri: "https://wfm.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.wfm_token"
resources:
- name: specialists
path: "/stores/{{store_id}}/specialists/availability"
inputParameters:
- name: store_id
in: path
operations:
- name: get-available-specialist
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
Posts employer brand content to LinkedIn, tracks engagement via LinkedIn Analytics, cross-references with career page traffic in Google Analytics, and summarizes results in a Confluence page for the talent acquisition team.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Campaign"
description: "Posts employer brand content to LinkedIn, tracks engagement via LinkedIn Analytics, cross-references with career page traffic in Google Analytics, and summarizes results in a Confluence page for the talent acquisition team."
tags:
- hr
- employer-brand
- linkedin
- google-analytics
- confluence
capability:
exposes:
- type: mcp
namespace: employer-brand
port: 8080
tools:
- name: run-employer-brand-campaign
description: "Given post content and tracking parameters, publish to LinkedIn, monitor engagement, pull career page analytics, and summarize."
inputParameters:
- name: post_content
in: body
type: string
description: "The LinkedIn post content."
- name: campaign_name
in: body
type: string
description: "The internal campaign name for tracking."
steps:
- name: publish-post
type: call
call: "linkedin.create-post"
with:
text: "{{post_content}}"
visibility: "PUBLIC"
- name: get-engagement
type: call
call: "linkedin.get-post-stats"
with:
post_id: "{{publish-post.id}}"
- name: get-career-traffic
type: call
call: "ga.run-report"
with:
page_path: "/careers"
start_date: "2026-03-20"
end_date: "2026-03-27"
- name: publish-summary
type: call
call: "confluence.create-page"
with:
space_key: "TALENT"
title: "Employer Brand: {{campaign_name}}"
body: "LinkedIn post: {{publish-post.id}}. Impressions: {{get-engagement.impressions}}. Clicks: {{get-engagement.clicks}}. Career page views: {{get-career-traffic.page_views}}. Bounce rate: {{get-career-traffic.bounce_rate}}."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
- name: stats
path: "/socialActions/{{post_id}}"
inputParameters:
- name: post_id
in: path
operations:
- name: get-post-stats
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Initiates loss prevention investigations by pulling transaction anomalies from Snowflake, creating a case in ServiceNow, and alerting the LP team via Slack.
naftiko: "0.5"
info:
label: "Loss Prevention Investigation Pipeline"
description: "Initiates loss prevention investigations by pulling transaction anomalies from Snowflake, creating a case in ServiceNow, and alerting the LP team via Slack."
tags:
- loss-prevention
- security
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: loss-prevention
port: 8080
tools:
- name: initiate-investigation
description: "Initiate a loss prevention investigation."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: anomaly_type
in: body
type: string
description: "Type of anomaly detected."
- name: transaction_ids
in: body
type: string
description: "Comma-separated suspicious transaction IDs."
steps:
- name: get-transaction-details
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT transaction_id, amount, cashier_id, timestamp FROM transactions WHERE transaction_id IN ('{{transaction_ids}}') AND store_id = '{{store_id}}'"
- name: create-lp-case
type: call
call: "servicenow.create-case"
with:
short_description: "LP Investigation: Store {{store_id}} - {{anomaly_type}}"
category: "loss_prevention"
description: "Anomaly: {{anomaly_type}}. Transactions: {{transaction_ids}}."
- name: alert-lp-team
type: call
call: "slack.post-message"
with:
channel: "loss-prevention-alerts"
text: "LP Investigation opened for Store {{store_id}}: {{anomaly_type}}. Case: {{create-lp-case.number}}. Transactions flagged: {{transaction_ids}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves email campaign performance metrics from MailChimp including open rate, click rate, unsubscribes, and revenue attributed for a given campaign ID.
naftiko: "0.5"
info:
label: "MailChimp Campaign Metrics"
description: "Retrieves email campaign performance metrics from MailChimp including open rate, click rate, unsubscribes, and revenue attributed for a given campaign ID."
tags:
- marketing
- email
- mailchimp
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: get-campaign-report
description: "Given a MailChimp campaign ID, return open rate, click rate, unsubscribes, and attributed revenue."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The MailChimp campaign ID."
call: "mailchimp.get-report"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: open_rate
type: number
mapping: "$.opens.open_rate"
- name: click_rate
type: number
mapping: "$.clicks.click_rate"
- name: unsubscribes
type: number
mapping: "$.unsubscribed"
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-report
method: GET
Pulls clearance candidates from Oracle Retail based on aging inventory, calculates optimal markdown percentage via the pricing engine, updates SAP Commerce Cloud pricing, and logs the markdown in Confluence for merchant review.
naftiko: "0.5"
info:
label: "Merchandise Markdown Processor"
description: "Pulls clearance candidates from Oracle Retail based on aging inventory, calculates optimal markdown percentage via the pricing engine, updates SAP Commerce Cloud pricing, and logs the markdown in Confluence for merchant review."
tags:
- pricing
- merchandising
- oracle-cloud
- sap
- confluence
capability:
exposes:
- type: mcp
namespace: markdown-processor
port: 8080
tools:
- name: process-markdowns
description: "Given a department and aging threshold, identify candidates, calculate markdowns, update prices, and document."
inputParameters:
- name: department
in: body
type: string
description: "The department to evaluate for markdowns."
- name: aging_days
in: body
type: number
description: "The minimum days on shelf to qualify for markdown."
- name: max_markdown_pct
in: body
type: number
description: "The maximum markdown percentage allowed."
steps:
- name: get-aging-inventory
type: call
call: "oracle-retail.get-aging-items"
with:
department: "{{department}}"
min_days: "{{aging_days}}"
- name: calculate-markdown
type: call
call: "pricing-engine.calculate-markdown"
with:
items: "{{get-aging-inventory.items}}"
max_markdown: "{{max_markdown_pct}}"
- name: update-prices
type: call
call: "sap-commerce.bulk-price-update"
with:
price_updates: "{{calculate-markdown.recommendations}}"
- name: log-markdowns
type: call
call: "confluence.create-page"
with:
space_key: "MERCH"
title: "Markdowns: {{department}} - Aging >{{aging_days}} days"
body: "Items marked down: {{calculate-markdown.item_count}}. Average markdown: {{calculate-markdown.avg_markdown_pct}}%. Total inventory value reduced: ${{calculate-markdown.total_value_reduction}}. Updated in SAP Commerce: {{update-prices.success_count}} SKUs."
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: aging
path: "/departments/{{department}}/aging-inventory"
inputParameters:
- name: department
in: path
operations:
- name: get-aging-items
method: GET
- type: http
namespace: pricing-engine
baseUri: "https://pricing.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.pricing_engine_token"
resources:
- name: markdowns
path: "/markdowns/calculate"
operations:
- name: calculate-markdown
method: POST
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: prices
path: "/products/prices/bulk"
operations:
- name: bulk-price-update
method: PUT
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Queries New Relic for application response time, throughput, and error rate for a given application name, providing real-time performance visibility for the e-commerce platform.
naftiko: "0.5"
info:
label: "New Relic Application Performance"
description: "Queries New Relic for application response time, throughput, and error rate for a given application name, providing real-time performance visibility for the e-commerce platform."
tags:
- monitoring
- e-commerce
- new-relic
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-performance
description: "Given a New Relic application ID, return response time, throughput, and error rate metrics."
inputParameters:
- name: app_id
in: body
type: string
description: "The New Relic application ID."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
outputParameters:
- name: response_time_ms
type: number
mapping: "$.application.application_summary.response_time"
- name: throughput_rpm
type: number
mapping: "$.application.application_summary.throughput"
- name: error_rate
type: number
mapping: "$.application.application_summary.error_rate"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
Provisions IT infrastructure for new store openings by creating Azure AD groups, setting up ServiceNow CMDB entries, and configuring network devices via the network management platform.
naftiko: "0.5"
info:
label: "New Store Opening IT Provisioning"
description: "Provisions IT infrastructure for new store openings by creating Azure AD groups, setting up ServiceNow CMDB entries, and configuring network devices via the network management platform."
tags:
- it
- store-opening
- azure-active-directory
- servicenow
capability:
exposes:
- type: mcp
namespace: store-it-provision
port: 8080
tools:
- name: provision-new-store-it
description: "Provision IT infrastructure for a new store."
inputParameters:
- name: store_id
in: body
type: string
description: "The new store number."
- name: store_address
in: body
type: string
description: "Store physical address."
- name: district
in: body
type: string
description: "District code."
steps:
- name: create-ad-groups
type: call
call: "azure-ad.create-group"
with:
display_name: "Store_{{store_id}}_Associates"
mail_nickname: "store{{store_id}}"
- name: create-cmdb-entries
type: call
call: "servicenow.create-ci"
with:
name: "Store_{{store_id}}_Infrastructure"
location: "{{store_address}}"
category: "store_network"
- name: configure-network
type: call
call: "network-mgmt.provision-site"
with:
site_id: "store_{{store_id}}"
address: "{{store_address}}"
template: "standard_store"
consumes:
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: groups
path: "/groups"
operations:
- name: create-group
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cis
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
- type: http
namespace: network-mgmt
baseUri: "https://network.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.network_mgmt_token"
resources:
- name: sites
path: "/sites"
operations:
- name: provision-site
method: POST
Recovers abandoned carts by pulling cart data from the e-commerce platform, enriching with customer profile from Salesforce, and sending recovery emails via MailChimp.
naftiko: "0.5"
info:
label: "Omnichannel Cart Abandonment Recovery"
description: "Recovers abandoned carts by pulling cart data from the e-commerce platform, enriching with customer profile from Salesforce, and sending recovery emails via MailChimp."
tags:
- e-commerce
- marketing
- salesforce
- mailchimp
capability:
exposes:
- type: mcp
namespace: cart-recovery
port: 8080
tools:
- name: recover-abandoned-cart
description: "Send cart abandonment recovery communication."
inputParameters:
- name: cart_id
in: body
type: string
description: "The abandoned cart ID."
steps:
- name: get-cart-details
type: call
call: "ecommerce.get-cart"
with:
id: "{{cart_id}}"
- name: get-customer-profile
type: call
call: "salesforce.get-contact"
with:
email: "{{get-cart-details.customer_email}}"
- name: send-recovery-email
type: call
call: "mailchimp.send-transactional"
with:
template_name: "cart_abandonment_recovery"
to_email: "{{get-cart-details.customer_email}}"
merge_vars:
first_name: "{{get-customer-profile.FirstName}}"
cart_items: "{{get-cart-details.items_summary}}"
cart_total: "{{get-cart-details.total}}"
consumes:
- type: http
namespace: ecommerce
baseUri: "https://api.homedepot.com/ecommerce/v2"
authentication:
type: bearer
token: "$secrets.ecommerce_token"
resources:
- name: carts
path: "/carts/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-cart
method: GET
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/email/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
When a new e-commerce order is placed, validates inventory in Oracle Retail, creates a pick task in the warehouse management system, and sends an order confirmation via MailChimp transactional email.
naftiko: "0.5"
info:
label: "Online Order Fulfillment Orchestrator"
description: "When a new e-commerce order is placed, validates inventory in Oracle Retail, creates a pick task in the warehouse management system, and sends an order confirmation via MailChimp transactional email."
tags:
- e-commerce
- fulfillment
- oracle-cloud
- mailchimp
- order-management
capability:
exposes:
- type: mcp
namespace: order-fulfillment
port: 8080
tools:
- name: process-new-order
description: "Given an order ID, customer email, store ID, and SKU list, validate inventory, create pick tasks, and send order confirmation."
inputParameters:
- name: order_id
in: body
type: string
description: "The e-commerce order ID."
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: store_id
in: body
type: string
description: "The fulfillment store number."
- name: sku_list
in: body
type: string
description: "Comma-separated list of SKUs in the order."
steps:
- name: check-inventory
type: call
call: "oracle-retail.get-stock"
with:
store_id: "{{store_id}}"
sku: "{{sku_list}}"
- name: create-pick-task
type: call
call: "wms.create-task"
with:
order_id: "{{order_id}}"
store_id: "{{store_id}}"
items: "{{sku_list}}"
priority: "standard"
- name: send-confirmation
type: call
call: "mailchimp.send-transactional"
with:
template_name: "order_confirmation"
to_email: "{{customer_email}}"
merge_vars:
order_id: "{{order_id}}"
pick_task_id: "{{create-pick-task.task_id}}"
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: stock
path: "/stores/{{store_id}}/items/{{sku}}/stock"
inputParameters:
- name: store_id
in: path
- name: sku
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: wms
baseUri: "https://wms.homedepot.com/api/v2"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: tasks
path: "/pick-tasks"
operations:
- name: create-task
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
Processes online order returns by validating the return in Oracle Retail, issuing store credit in SAP, and sending confirmation via SendGrid email.
naftiko: "0.5"
info:
label: "Online Return to Store Credit Pipeline"
description: "Processes online order returns by validating the return in Oracle Retail, issuing store credit in SAP, and sending confirmation via SendGrid email."
tags:
- e-commerce
- returns
- oracle-cloud
- sap
- sendgrid
capability:
exposes:
- type: mcp
namespace: online-returns
port: 8080
tools:
- name: process-online-return
description: "Process an online return and issue store credit."
inputParameters:
- name: order_id
in: body
type: string
description: "The original order ID."
- name: return_sku
in: body
type: string
description: "SKU being returned."
- name: customer_email
in: body
type: string
description: "Customer email."
steps:
- name: validate-return
type: call
call: "oracle-retail.validate-return"
with:
order_id: "{{order_id}}"
sku: "{{return_sku}}"
- name: issue-credit
type: call
call: "sap.create-credit-memo"
with:
order_ref: "{{order_id}}"
amount: "{{validate-return.refund_amount}}"
- name: send-confirmation
type: call
call: "sendgrid.send-email"
with:
to: "{{customer_email}}"
template_id: "return_confirmation"
dynamic_data:
order_id: "{{order_id}}"
credit_amount: "{{validate-return.refund_amount}}"
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: returns
path: "/returns/validate"
operations:
- name: validate-return
method: POST
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_CREDIT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: credits
path: "/CreditMemoSet"
operations:
- name: create-credit-memo
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves the current planogram assignment for a product at a specific store from Oracle Retail, returning bay, shelf, and facing count.
naftiko: "0.5"
info:
label: "Oracle Retail Planogram Lookup"
description: "Retrieves the current planogram assignment for a product at a specific store from Oracle Retail, returning bay, shelf, and facing count."
tags:
- merchandising
- planogram
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: planogram
port: 8080
tools:
- name: get-planogram
description: "Look up planogram placement for a product at a store."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
- name: store_id
in: body
type: string
description: "The store number."
call: "oracle-retail.get-planogram"
with:
sku: "{{sku}}"
store: "{{store_id}}"
outputParameters:
- name: bay
type: string
mapping: "$.planogram.bay"
- name: shelf
type: string
mapping: "$.planogram.shelf"
- name: facings
type: integer
mapping: "$.planogram.facings"
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-msm/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: planograms
path: "/stores/{{store}}/planograms/{{sku}}"
inputParameters:
- name: store
in: path
- name: sku
in: path
operations:
- name: get-planogram
method: GET
Retrieves the current status and assigned responder for a PagerDuty incident related to homedepot.com e-commerce platform.
naftiko: "0.5"
info:
label: "PagerDuty E-Commerce Incident Lookup"
description: "Retrieves the current status and assigned responder for a PagerDuty incident related to homedepot.com e-commerce platform."
tags:
- operations
- e-commerce
- pagerduty
capability:
exposes:
- type: mcp
namespace: ecommerce-incidents
port: 8080
tools:
- name: get-incident
description: "Look up an e-commerce PagerDuty incident."
inputParameters:
- name: incident_id
in: body
type: string
description: "The PagerDuty incident ID."
call: "pagerduty.get-incident"
with:
id: "{{incident_id}}"
outputParameters:
- name: status
type: string
mapping: "$.incident.status"
- name: urgency
type: string
mapping: "$.incident.urgency"
- name: responder
type: string
mapping: "$.incident.assignments[0].assignee.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-incident
method: GET
Processes paint color match requests by querying the formula database, creating a mix order in the store system, and notifying the paint desk associate via Slack.
naftiko: "0.5"
info:
label: "Paint Color Match Order Pipeline"
description: "Processes paint color match requests by querying the formula database, creating a mix order in the store system, and notifying the paint desk associate via Slack."
tags:
- paint
- store-operations
- slack
capability:
exposes:
- type: mcp
namespace: paint-orders
port: 8080
tools:
- name: process-color-match
description: "Process a paint color match and create a mix order."
inputParameters:
- name: color_code
in: body
type: string
description: "The color code from spectrophotometer."
- name: store_id
in: body
type: string
description: "The store number."
- name: base_product_sku
in: body
type: string
description: "The paint base SKU."
steps:
- name: get-formula
type: call
call: "paint-system.match-color"
with:
color_code: "{{color_code}}"
base_sku: "{{base_product_sku}}"
- name: create-mix-order
type: call
call: "paint-system.create-order"
with:
store_id: "{{store_id}}"
formula_id: "{{get-formula.formula_id}}"
base_sku: "{{base_product_sku}}"
- name: notify-paint-desk
type: call
call: "slack.post-message"
with:
channel: "store-{{store_id}}-paint"
text: "Paint mix order ready: {{get-formula.color_name}} ({{color_code}}). Order #{{create-mix-order.order_number}}. Base: {{base_product_sku}}."
consumes:
- type: http
namespace: paint-system
baseUri: "https://paint.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.paint_system_token"
resources:
- name: colors
path: "/colors/match"
operations:
- name: match-color
method: POST
- name: orders
path: "/mix-orders"
operations:
- name: create-order
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Triggers a refresh of the district-level sales performance Power BI dataset to update dashboards with the latest transaction data.
naftiko: "0.5"
info:
label: "Power BI District Sales Dashboard Refresh"
description: "Triggers a refresh of the district-level sales performance Power BI dataset to update dashboards with the latest transaction data."
tags:
- analytics
- sales
- power-bi
capability:
exposes:
- type: mcp
namespace: district-dashboard
port: 8080
tools:
- name: refresh-district-dashboard
description: "Trigger Power BI district sales dashboard refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.refresh-dataset"
with:
id: "{{dataset_id}}"
outputParameters:
- name: refresh_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{id}}/refreshes"
inputParameters:
- name: id
in: path
operations:
- name: refresh-dataset
method: POST
When a price match request comes in, retrieves the product price from SAP Commerce Cloud, fetches competitor pricing from Circana market data, and updates the price if the policy allows, logging the decision in Salesforce.
naftiko: "0.5"
info:
label: "Price Match Competitor Analysis"
description: "When a price match request comes in, retrieves the product price from SAP Commerce Cloud, fetches competitor pricing from Circana market data, and updates the price if the policy allows, logging the decision in Salesforce."
tags:
- pricing
- competitive-intelligence
- sap
- circana
- salesforce
capability:
exposes:
- type: mcp
namespace: price-matching
port: 8080
tools:
- name: evaluate-price-match
description: "Given a SKU and competitor URL, fetch current pricing, validate competitor price, and process the match decision."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
- name: competitor_name
in: body
type: string
description: "The competitor retailer name."
- name: competitor_price
in: body
type: number
description: "The competitor advertised price."
- name: customer_id
in: body
type: string
description: "The Salesforce customer ID requesting the match."
steps:
- name: get-current-price
type: call
call: "sap-commerce.get-product"
with:
sku: "{{sku}}"
- name: get-market-data
type: call
call: "circana.get-product-pricing"
with:
sku: "{{sku}}"
competitor: "{{competitor_name}}"
- name: log-decision
type: call
call: "salesforce.create-case"
with:
subject: "Price Match: {{sku}} vs {{competitor_name}}"
description: "SKU: {{sku}}. Our price: ${{get-current-price.price}}. Competitor ({{competitor_name}}): ${{competitor_price}}. Market avg: ${{get-market-data.market_avg}}. Customer: {{customer_id}}."
type: "Price_Match"
account_id: "{{customer_id}}"
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products/{{sku}}"
inputParameters:
- name: sku
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: circana
baseUri: "https://api.circana.com/v1"
authentication:
type: bearer
token: "$secrets.circana_token"
resources:
- name: pricing
path: "/products/{{sku}}/competitive-pricing"
inputParameters:
- name: sku
in: path
operations:
- name: get-product-pricing
method: GET
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
Tracks private label product development by pulling milestones from Jira, verifying lab test results from the testing platform, and updating the product record in SAP.
naftiko: "0.5"
info:
label: "Private Label Product Development Tracker"
description: "Tracks private label product development by pulling milestones from Jira, verifying lab test results from the testing platform, and updating the product record in SAP."
tags:
- product-development
- private-label
- jira
- sap
capability:
exposes:
- type: mcp
namespace: private-label
port: 8080
tools:
- name: track-development
description: "Track private label product development progress."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
- name: material_number
in: body
type: string
description: "The SAP material number."
steps:
- name: get-milestones
type: call
call: "jira.get-issues"
with:
jql: "project = '{{project_key}}' AND type = Milestone ORDER BY dueDate"
- name: get-test-results
type: call
call: "testing-platform.get-results"
with:
product_ref: "{{material_number}}"
- name: update-product-status
type: call
call: "sap.update-material"
with:
material_id: "{{material_number}}"
development_status: "{{get-milestones.current_phase}}"
test_status: "{{get-test-results.overall_result}}"
consumes:
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: get-issues
method: GET
- type: http
namespace: testing-platform
baseUri: "https://testing.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.testing_platform_token"
resources:
- name: results
path: "/products/{{product_ref}}/results"
inputParameters:
- name: product_ref
in: path
operations:
- name: get-results
method: GET
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/MaterialSet('{{material_id}}')"
inputParameters:
- name: material_id
in: path
operations:
- name: update-material
method: PATCH
When a new Pro Xtra lead comes in through HubSpot, enriches the contact with ZoomInfo firmographic data, creates a Salesforce opportunity, and alerts the assigned sales rep in Microsoft Teams.
naftiko: "0.5"
info:
label: "Pro Customer Lead Qualification"
description: "When a new Pro Xtra lead comes in through HubSpot, enriches the contact with ZoomInfo firmographic data, creates a Salesforce opportunity, and alerts the assigned sales rep in Microsoft Teams."
tags:
- sales
- lead-management
- hubspot
- zoominfo
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pro-sales
port: 8080
tools:
- name: qualify-pro-lead
description: "Given a HubSpot contact ID, enrich with ZoomInfo data, create a Salesforce opportunity, and notify the sales rep."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "The HubSpot contact ID for the new Pro lead."
- name: estimated_annual_spend
in: body
type: number
description: "The estimated annual spend for the Pro customer."
steps:
- name: get-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: enrich-company
type: call
call: "zoominfo.enrich-company"
with:
company_name: "{{get-contact.company}}"
domain: "{{get-contact.website}}"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
name: "Pro Xtra - {{get-contact.company}}"
amount: "{{estimated_annual_spend}}"
stage: "Qualification"
account_name: "{{get-contact.company}}"
employees: "{{enrich-company.employee_count}}"
industry: "{{enrich-company.industry}}"
- name: notify-rep
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-contact.owner_email}}"
text: "New Pro lead qualified: {{get-contact.company}} ({{enrich-company.industry}}, {{enrich-company.employee_count}} employees). Est. annual spend: ${{estimated_annual_spend}}. Opportunity: {{create-opportunity.id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: company-enrich
path: "/enrich/company"
operations:
- name: enrich-company
method: POST
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Generates project quotes for Pro customers by pulling product pricing from SAP, calculating volume discounts, and creating the quote in Salesforce.
naftiko: "0.5"
info:
label: "Pro Customer Project Quote Generator"
description: "Generates project quotes for Pro customers by pulling product pricing from SAP, calculating volume discounts, and creating the quote in Salesforce."
tags:
- pro-services
- sales
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: pro-quotes
port: 8080
tools:
- name: generate-project-quote
description: "Generate a project quote for a Pro customer."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Salesforce Pro account ID."
- name: sku_list
in: body
type: string
description: "Comma-separated SKUs with quantities."
- name: project_name
in: body
type: string
description: "The project name."
steps:
- name: get-pricing
type: call
call: "sap.get-pricing"
with:
items: "{{sku_list}}"
customer_group: "pro"
- name: get-customer-tier
type: call
call: "salesforce.get-account"
with:
id: "{{customer_id}}"
- name: create-quote
type: call
call: "salesforce.create-quote"
with:
account_id: "{{customer_id}}"
name: "{{project_name}}"
line_items: "{{get-pricing.priced_items}}"
discount_tier: "{{get-customer-tier.Pro_Tier__c}}"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_PRICING_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: pricing
path: "/PricingSimulation"
operations:
- name: get-pricing
method: POST
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-account
method: GET
- name: quotes
path: "/sobjects/Quote"
operations:
- name: create-quote
method: POST
Retrieves product details from the SAP Commerce Cloud catalog by SKU, returning name, price, department, aisle location, and current availability status.
naftiko: "0.5"
info:
label: "Product Catalog Lookup"
description: "Retrieves product details from the SAP Commerce Cloud catalog by SKU, returning name, price, department, aisle location, and current availability status."
tags:
- e-commerce
- product-catalog
- sap
capability:
exposes:
- type: mcp
namespace: product-catalog
port: 8080
tools:
- name: get-product-details
description: "Given a product SKU, return the full product record including price, department, aisle, and stock status."
inputParameters:
- name: sku
in: body
type: string
description: "The Home Depot product SKU."
call: "sap-commerce.get-product"
with:
sku: "{{sku}}"
outputParameters:
- name: product_name
type: string
mapping: "$.product.name"
- name: price
type: string
mapping: "$.product.price.value"
- name: department
type: string
mapping: "$.product.department"
- name: aisle
type: string
mapping: "$.product.aisle"
- name: in_stock
type: boolean
mapping: "$.product.stock.inStock"
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products/{{sku}}"
inputParameters:
- name: sku
in: path
operations:
- name: get-product
method: GET
Fetches product data from SAP Commerce Cloud, retrieves marketing images from Amazon S3, publishes to Facebook Shops via Meta API, and updates Google Tag Manager with product feed events.
naftiko: "0.5"
info:
label: "Product Content Syndication"
description: "Fetches product data from SAP Commerce Cloud, retrieves marketing images from Amazon S3, publishes to Facebook Shops via Meta API, and updates Google Tag Manager with product feed events."
tags:
- e-commerce
- content-syndication
- sap
- amazon-s3
- meta
- google-tag-manager
capability:
exposes:
- type: mcp
namespace: content-syndication
port: 8080
tools:
- name: syndicate-product
description: "Given a SKU, pull product data and images, publish to social commerce channels, and update tracking."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU to syndicate."
steps:
- name: get-product
type: call
call: "sap-commerce.get-product"
with:
sku: "{{sku}}"
- name: get-images
type: call
call: "s3.get-presigned-url"
with:
bucket: "homedepot-product-images"
key: "products/{{sku}}/hero.jpg"
- name: publish-to-shops
type: call
call: "meta-catalog.create-product"
with:
name: "{{get-product.product_name}}"
price: "{{get-product.price}}"
image_url: "{{get-images.presigned_url}}"
description: "{{get-product.description}}"
sku: "{{sku}}"
- name: update-gtm
type: call
call: "gtm.push-event"
with:
event: "product_syndicated"
sku: "{{sku}}"
channel: "facebook_shops"
catalog_id: "{{publish-to-shops.catalog_product_id}}"
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products/{{sku}}"
inputParameters:
- name: sku
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: aws
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: get-presigned-url
method: GET
- type: http
namespace: meta-catalog
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_ads_token"
resources:
- name: catalog-products
path: "/{{catalog_id}}/products"
inputParameters:
- name: catalog_id
in: path
operations:
- name: create-product
method: POST
- type: http
namespace: gtm
baseUri: "https://www.googletagmanager.com/api/v2"
authentication:
type: bearer
token: "$secrets.gtm_token"
resources:
- name: events
path: "/accounts/{{account_id}}/containers/{{container_id}}/events"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: push-event
method: POST
When a product recall is initiated, pulls affected order data from SAP Commerce Cloud, identifies impacted customers in Salesforce, sends recall notification emails via MailChimp, and creates a Jira epic to track the recall response.
naftiko: "0.5"
info:
label: "Product Recall Notification Workflow"
description: "When a product recall is initiated, pulls affected order data from SAP Commerce Cloud, identifies impacted customers in Salesforce, sends recall notification emails via MailChimp, and creates a Jira epic to track the recall response."
tags:
- customer-service
- product-safety
- sap
- salesforce
- mailchimp
- jira
capability:
exposes:
- type: mcp
namespace: product-recall
port: 8080
tools:
- name: execute-recall-notification
description: "Given a SKU and recall reason, identify affected customers, send notifications, and create a tracking epic."
inputParameters:
- name: sku
in: body
type: string
description: "The recalled product SKU."
- name: recall_reason
in: body
type: string
description: "The reason for the recall."
- name: recall_id
in: body
type: string
description: "The CPSC or internal recall identifier."
- name: date_range_start
in: body
type: string
description: "Start of the affected sale date range."
- name: date_range_end
in: body
type: string
description: "End of the affected sale date range."
steps:
- name: get-affected-orders
type: call
call: "sap-commerce.search-orders"
with:
sku: "{{sku}}"
date_from: "{{date_range_start}}"
date_to: "{{date_range_end}}"
- name: get-customer-list
type: call
call: "salesforce.get-contacts-by-product"
with:
sku: "{{sku}}"
order_ids: "{{get-affected-orders.order_ids}}"
- name: send-recall-emails
type: call
call: "mailchimp.create-campaign"
with:
list_id: "recall_notification_list"
subject: "Important Safety Recall Notice - {{sku}}"
template_id: "product_recall"
segment_conditions:
sku: "{{sku}}"
- name: create-recall-epic
type: call
call: "jira.create-issue"
with:
project: "SAFETY"
issue_type: "Epic"
summary: "Product Recall: {{recall_id}} - SKU {{sku}}"
description: "Recall ID: {{recall_id}}. SKU: {{sku}}. Reason: {{recall_reason}}. Affected orders: {{get-affected-orders.count}}. Customers notified: {{get-customer-list.count}}. Email campaign: {{send-recall-emails.campaign_id}}."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: orders
path: "/orders/search"
operations:
- name: search-orders
method: POST
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query"
operations:
- name: get-contacts-by-product
method: GET
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Launches a new promotional campaign by creating the offer in SAP Commerce Cloud, scheduling the MailChimp email blast, publishing a Facebook ad through Meta, and tagging the campaign in Google Analytics.
naftiko: "0.5"
info:
label: "Promotional Campaign Launch Orchestrator"
description: "Launches a new promotional campaign by creating the offer in SAP Commerce Cloud, scheduling the MailChimp email blast, publishing a Facebook ad through Meta, and tagging the campaign in Google Analytics."
tags:
- marketing
- promotions
- sap
- mailchimp
- meta
- google-analytics
capability:
exposes:
- type: mcp
namespace: campaign-launch
port: 8080
tools:
- name: launch-promo-campaign
description: "Given campaign details, create the promotion, schedule email, launch social ads, and set up analytics tracking."
inputParameters:
- name: campaign_name
in: body
type: string
description: "The promotional campaign name."
- name: discount_percent
in: body
type: number
description: "The discount percentage."
- name: category_id
in: body
type: string
description: "The product category for the promotion."
- name: start_date
in: body
type: string
description: "Campaign start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Campaign end date in YYYY-MM-DD format."
- name: audience_list_id
in: body
type: string
description: "The MailChimp audience list ID for email targeting."
steps:
- name: create-promotion
type: call
call: "sap-commerce.create-promotion"
with:
name: "{{campaign_name}}"
discount: "{{discount_percent}}"
category: "{{category_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: schedule-email
type: call
call: "mailchimp.create-campaign"
with:
list_id: "{{audience_list_id}}"
subject: "{{campaign_name}} - Save {{discount_percent}}%!"
send_time: "{{start_date}}T08:00:00Z"
- name: create-ad
type: call
call: "meta-ads.create-ad"
with:
campaign_name: "{{campaign_name}}"
objective: "CONVERSIONS"
start_time: "{{start_date}}T00:00:00Z"
end_time: "{{end_date}}T23:59:59Z"
- name: tag-analytics
type: call
call: "ga.create-annotation"
with:
description: "Campaign launch: {{campaign_name}} ({{start_date}} to {{end_date}})"
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: promotions
path: "/promotions"
operations:
- name: create-promotion
method: POST
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: basic
username: "anystring"
password: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: meta-ads
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_ads_token"
resources:
- name: ads
path: "/act_{{ad_account_id}}/campaigns"
inputParameters:
- name: ad_account_id
in: path
operations:
- name: create-ad
method: POST
- type: http
namespace: ga
baseUri: "https://www.googleapis.com/analytics/v3"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: annotations
path: "/management/accounts/{{account_id}}/webproperties/{{property_id}}/customDataSources"
inputParameters:
- name: account_id
in: path
- name: property_id
in: path
operations:
- name: create-annotation
method: POST
Processes tool rental returns by updating the rental system, inspecting equipment status in ServiceNow, and charging damage fees via the payment gateway.
naftiko: "0.5"
info:
label: "Rental Equipment Return Processor"
description: "Processes tool rental returns by updating the rental system, inspecting equipment status in ServiceNow, and charging damage fees via the payment gateway."
tags:
- rental
- equipment
- servicenow
capability:
exposes:
- type: mcp
namespace: rental-returns
port: 8080
tools:
- name: process-rental-return
description: "Process a tool rental equipment return."
inputParameters:
- name: rental_id
in: body
type: string
description: "The rental contract ID."
- name: condition
in: body
type: string
description: "Equipment condition (good, damaged, missing_parts)."
steps:
- name: close-rental
type: call
call: "rental-system.close-contract"
with:
rental_id: "{{rental_id}}"
return_condition: "{{condition}}"
- name: create-inspection
type: call
call: "servicenow.create-task"
with:
short_description: "Equipment inspection: Rental {{rental_id}}"
category: "equipment_inspection"
condition: "{{condition}}"
- name: process-charges
type: call
call: "payment-gateway.charge"
with:
rental_id: "{{rental_id}}"
charge_type: "return"
damage_assessment: "{{condition}}"
consumes:
- type: http
namespace: rental-system
baseUri: "https://rental.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.rental_system_token"
resources:
- name: contracts
path: "/contracts/{{rental_id}}/close"
inputParameters:
- name: rental_id
in: path
operations:
- name: close-contract
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: payment-gateway
baseUri: "https://payments.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.payment_gateway_token"
resources:
- name: charges
path: "/charges"
operations:
- name: charge
method: POST
When a store safety incident is reported, creates a ServiceNow incident, logs the details in Workday for the affected associate, notifies store management via Microsoft Teams, and uploads incident photos to SharePoint.
naftiko: "0.5"
info:
label: "Safety Incident Reporting"
description: "When a store safety incident is reported, creates a ServiceNow incident, logs the details in Workday for the affected associate, notifies store management via Microsoft Teams, and uploads incident photos to SharePoint."
tags:
- safety
- store-ops
- servicenow
- workday
- microsoft-teams
- sharepoint
capability:
exposes:
- type: mcp
namespace: safety-reporting
port: 8080
tools:
- name: report-safety-incident
description: "Given incident details, create tickets, update HR records, notify management, and archive documentation."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number where the incident occurred."
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the affected associate."
- name: incident_type
in: body
type: string
description: "Type of incident (e.g. SLIP_FALL, EQUIPMENT, CHEMICAL, ERGONOMIC)."
- name: description
in: body
type: string
description: "Description of the incident."
- name: store_manager_email
in: body
type: string
description: "The store manager email for notification."
steps:
- name: get-associate
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Safety incident: {{incident_type}} at Store #{{store_id}}"
category: "safety"
priority: "2"
assigned_group: "EHS_Safety"
description: "{{description}} Associate: {{get-associate.full_name}}. Store #{{store_id}}. Type: {{incident_type}}."
- name: create-doc-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "safety_incidents_site"
folder_path: "Incidents/Store{{store_id}}/{{create-incident.number}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{store_manager_email}}"
text: "SAFETY ALERT: {{incident_type}} incident at Store #{{store_id}} involving {{get-associate.full_name}}. ServiceNow ticket: {{create-incident.number}}. Documentation folder: {{create-doc-folder.url}}. Please upload photos and witness statements."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a Salesforce account record for a Pro Xtra commercial customer by account ID, returning company name, tier, credit limit, and account manager.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Lookup"
description: "Retrieves a Salesforce account record for a Pro Xtra commercial customer by account ID, returning company name, tier, credit limit, and account manager."
tags:
- customer-service
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-accounts
port: 8080
tools:
- name: get-pro-account
description: "Given a Salesforce account ID, return the Pro Xtra customer record including tier, credit limit, and assigned account manager."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the Pro customer."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: company_name
type: string
mapping: "$.Name"
- name: pro_tier
type: string
mapping: "$.Pro_Tier__c"
- name: credit_limit
type: number
mapping: "$.Credit_Limit__c"
- name: account_manager
type: string
mapping: "$.Owner.Name"
consumes:
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Retrieves the current credit balance and payment terms for a Pro Xtra customer account in Salesforce.
naftiko: "0.5"
info:
label: "Salesforce Pro Account Balance Lookup"
description: "Retrieves the current credit balance and payment terms for a Pro Xtra customer account in Salesforce."
tags:
- pro-services
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: pro-account
port: 8080
tools:
- name: get-pro-balance
description: "Look up Pro customer account balance and credit terms."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce Pro account ID."
call: "salesforce.get-account"
with:
id: "{{account_id}}"
outputParameters:
- name: credit_balance
type: number
mapping: "$.Credit_Balance__c"
- name: payment_terms
type: string
mapping: "$.Payment_Terms__c"
- name: account_status
type: string
mapping: "$.Account_Status__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-account
method: GET
Looks up a SAP S/4HANA purchase order by number, returning vendor, total value, delivery status, and expected receipt date for supply chain teams.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Looks up a SAP S/4HANA purchase order by number, returning vendor, total value, delivery status, and expected receipt date for supply chain teams."
tags:
- supply-chain
- procurement
- sap
capability:
exposes:
- type: mcp
namespace: supply-chain-po
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return status, vendor, total value, and expected delivery date."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves the payment status and expected payment date for a vendor invoice from SAP Accounts Payable.
naftiko: "0.5"
info:
label: "SAP Vendor Payment Status"
description: "Retrieves the payment status and expected payment date for a vendor invoice from SAP Accounts Payable."
tags:
- finance
- accounts-payable
- sap
capability:
exposes:
- type: mcp
namespace: vendor-payments
port: 8080
tools:
- name: get-payment-status
description: "Check payment status for a vendor invoice."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice number."
call: "sap.get-invoice-status"
with:
doc_number: "{{invoice_number}}"
outputParameters:
- name: payment_status
type: string
mapping: "$.d.PaymentStatus"
- name: expected_date
type: string
mapping: "$.d.ExpectedPaymentDate"
- name: amount
type: number
mapping: "$.d.InvoiceAmount"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZFI_AP_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/InvoiceSet('{{doc_number}}')"
inputParameters:
- name: doc_number
in: path
operations:
- name: get-invoice-status
method: GET
Pulls historical sales data from Teradata, runs a forecast model via Azure Machine Learning, updates Oracle Retail replenishment parameters, and posts the forecast summary to a Confluence page.
naftiko: "0.5"
info:
label: "Seasonal Demand Forecasting Pipeline"
description: "Pulls historical sales data from Teradata, runs a forecast model via Azure Machine Learning, updates Oracle Retail replenishment parameters, and posts the forecast summary to a Confluence page."
tags:
- supply-chain
- forecasting
- teradata
- azure-machine-learning
- oracle-cloud
- confluence
capability:
exposes:
- type: mcp
namespace: demand-forecasting
port: 8080
tools:
- name: run-seasonal-forecast
description: "Given a product category and season, pull historical data, generate forecast, update replenishment, and publish results."
inputParameters:
- name: category_id
in: body
type: string
description: "The product category ID (e.g. LUMBER, PAINT, GARDEN)."
- name: season
in: body
type: string
description: "The target season (e.g. SPRING_2026, HOLIDAY_2026)."
- name: region
in: body
type: string
description: "The geographic region for the forecast."
steps:
- name: pull-historical
type: call
call: "teradata.run-query"
with:
query: "SELECT * FROM sales_history WHERE category='{{category_id}}' AND region='{{region}}' AND sale_date >= CURRENT_DATE - INTERVAL '3' YEAR"
- name: run-forecast
type: call
call: "azureml.invoke-endpoint"
with:
endpoint_name: "seasonal-demand-model"
input_data:
category: "{{category_id}}"
season: "{{season}}"
region: "{{region}}"
historical_rows: "{{pull-historical.row_count}}"
- name: update-replenishment
type: call
call: "oracle-retail.update-replenishment"
with:
category_id: "{{category_id}}"
region: "{{region}}"
forecast_units: "{{run-forecast.predicted_units}}"
safety_stock_multiplier: "{{run-forecast.safety_factor}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "SUPPLY"
title: "Demand Forecast: {{category_id}} - {{season}} - {{region}}"
body: "Predicted demand: {{run-forecast.predicted_units}} units. Confidence: {{run-forecast.confidence_interval}}. Replenishment parameters updated. Historical sample: {{pull-historical.row_count}} records."
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: azureml
baseUri: "https://homedepot-ml.eastus2.inference.ml.azure.com"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: endpoints
path: "/score"
operations:
- name: invoke-endpoint
method: POST
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: replenishment
path: "/categories/{{category_id}}/replenishment"
inputParameters:
- name: category_id
in: path
operations:
- name: update-replenishment
method: PUT
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Fetches product page data from SAP Commerce Cloud, pulls search performance from Google Analytics, checks keyword rankings via Google Tag Manager events, and creates a Jira ticket for the content team with optimization recommendations.
naftiko: "0.5"
info:
label: "SEO Product Page Optimization"
description: "Fetches product page data from SAP Commerce Cloud, pulls search performance from Google Analytics, checks keyword rankings via Google Tag Manager events, and creates a Jira ticket for the content team with optimization recommendations."
tags:
- marketing
- seo
- sap
- google-analytics
- google-tag-manager
- jira
capability:
exposes:
- type: mcp
namespace: seo-optimization
port: 8080
tools:
- name: analyze-product-seo
description: "Given a SKU and page path, pull product data, search analytics, and create an optimization ticket."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
- name: page_path
in: body
type: string
description: "The product page URL path."
steps:
- name: get-product
type: call
call: "sap-commerce.get-product"
with:
sku: "{{sku}}"
- name: get-search-metrics
type: call
call: "ga.run-report"
with:
page_path: "{{page_path}}"
start_date: "2026-02-25"
end_date: "2026-03-27"
- name: create-seo-ticket
type: call
call: "jira.create-issue"
with:
project: "CONTENT"
issue_type: "Task"
summary: "SEO optimization: {{get-product.product_name}} ({{sku}})"
description: "Product: {{get-product.product_name}}. Page: {{page_path}}. Last 30d views: {{get-search-metrics.page_views}}. Bounce rate: {{get-search-metrics.bounce_rate}}. Current title: {{get-product.meta_title}}. Recommendation: Review title tags, meta description, and H1 structure."
consumes:
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products/{{sku}}"
inputParameters:
- name: sku
in: path
operations:
- name: get-product
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes. Used by store ops and IT support teams.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning status, priority, assigned group, and resolution notes. Used by store ops and IT support teams."
tags:
- support
- it-ops
- servicenow
capability:
exposes:
- type: mcp
namespace: it-support
port: 8080
tools:
- name: get-incident
description: "Given a ServiceNow incident number, return the incident details including state, priority, assigned group, and description."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g. INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
- name: description
type: string
mapping: "$.result.description"
consumes:
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Retrieves IT asset details for a store location from ServiceNow CMDB, returning device type, serial number, and warranty status.
naftiko: "0.5"
info:
label: "ServiceNow Store IT Asset Lookup"
description: "Retrieves IT asset details for a store location from ServiceNow CMDB, returning device type, serial number, and warranty status."
tags:
- it
- asset-management
- servicenow
capability:
exposes:
- type: mcp
namespace: store-assets
port: 8080
tools:
- name: get-store-asset
description: "Look up IT asset details at a store location."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The asset tag number."
call: "servicenow.get-asset"
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: device_type
type: string
mapping: "$.result.model_category.display_value"
- name: serial_number
type: string
mapping: "$.result.serial_number"
- name: warranty_expiry
type: string
mapping: "$.result.warranty_expiration"
consumes:
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: assets
path: "/table/alm_hardware?sysparm_query=asset_tag={{asset_tag}}"
inputParameters:
- name: asset_tag
in: query
operations:
- name: get-asset
method: GET
When an inventory discrepancy is detected, pulls the variance report from Oracle Retail, cross-references with POS transaction data in Teradata, creates a ServiceNow loss prevention case, and notifies the asset protection team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Shrinkage Alert Investigation"
description: "When an inventory discrepancy is detected, pulls the variance report from Oracle Retail, cross-references with POS transaction data in Teradata, creates a ServiceNow loss prevention case, and notifies the asset protection team via Microsoft Teams."
tags:
- loss-prevention
- inventory
- oracle-cloud
- teradata
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shrinkage-alert
port: 8080
tools:
- name: investigate-shrinkage
description: "Given a store ID, SKU, and variance amount, pull transaction data, create a loss prevention case, and notify asset protection."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: sku
in: body
type: string
description: "The SKU with the inventory discrepancy."
- name: variance_qty
in: body
type: number
description: "The number of units in the variance (negative = shrinkage)."
steps:
- name: get-inventory-detail
type: call
call: "oracle-retail.get-stock"
with:
store_id: "{{store_id}}"
sku: "{{sku}}"
- name: get-transactions
type: call
call: "teradata.run-query"
with:
query: "SELECT txn_id, txn_type, qty, associate_id, txn_timestamp FROM pos_transactions WHERE store_id='{{store_id}}' AND sku='{{sku}}' AND txn_date >= CURRENT_DATE - INTERVAL '7' DAY ORDER BY txn_timestamp DESC"
- name: create-lp-case
type: call
call: "servicenow.create-case"
with:
short_description: "Shrinkage alert: {{sku}} at Store #{{store_id}} ({{variance_qty}} units)"
category: "loss_prevention"
priority: "2"
assigned_group: "Asset_Protection"
description: "Inventory variance of {{variance_qty}} units for SKU {{sku}} at Store #{{store_id}}. System on-hand: {{get-inventory-detail.on_hand}}. Recent transactions: {{get-transactions.row_count}} in last 7 days."
- name: notify-ap
type: call
call: "msteams.post-channel"
with:
channel_id: "asset-protection-alerts"
text: "SHRINKAGE ALERT: SKU {{sku}} at Store #{{store_id}}. Variance: {{variance_qty}} units. Case: {{create-lp-case.number}}. {{get-transactions.row_count}} POS transactions in last 7 days flagged for review."
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: stock
path: "/stores/{{store_id}}/items/{{sku}}/stock"
inputParameters:
- name: store_id
in: path
- name: sku
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: teradata
baseUri: "https://teradata.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Sends formatted operational notifications to store-specific Slack channels for time-sensitive alerts and updates.
naftiko: "0.5"
info:
label: "Slack Store Operations Notifier"
description: "Sends formatted operational notifications to store-specific Slack channels for time-sensitive alerts and updates."
tags:
- communications
- store-operations
- slack
capability:
exposes:
- type: mcp
namespace: store-notifications
port: 8080
tools:
- name: send-store-notification
description: "Send an operational notification to a store Slack channel."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: message
in: body
type: string
description: "The notification message."
call: "slack.post-message"
with:
channel: "store-{{store_id}}-ops"
text: "{{message}}"
outputParameters:
- name: message_ts
type: string
mapping: "$.ts"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake for customer lifetime value metrics by customer segment, returning average CLV, purchase frequency, and retention rate.
naftiko: "0.5"
info:
label: "Snowflake Customer Lifetime Value Query"
description: "Queries Snowflake for customer lifetime value metrics by customer segment, returning average CLV, purchase frequency, and retention rate."
tags:
- analytics
- customer
- snowflake
capability:
exposes:
- type: mcp
namespace: clv-analytics
port: 8080
tools:
- name: query-clv
description: "Query customer lifetime value by segment."
inputParameters:
- name: segment
in: body
type: string
description: "Customer segment (pro, diy, online)."
call: "snowflake.execute-query"
with:
statement: "SELECT avg_clv, purchase_frequency, retention_rate FROM customer_clv WHERE segment = '{{segment}}'"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Aggregates campaign performance from Facebook (Meta) Ads and Instagram, pulls conversion data from Google Analytics, and posts a weekly performance summary to the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Social Media Campaign Performance"
description: "Aggregates campaign performance from Facebook (Meta) Ads and Instagram, pulls conversion data from Google Analytics, and posts a weekly performance summary to the marketing Microsoft Teams channel."
tags:
- marketing
- social-media
- meta
- google-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-performance
port: 8080
tools:
- name: compile-social-report
description: "Given a campaign ID and date range, aggregate social metrics and post the performance summary."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Meta Ads campaign ID."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-meta-metrics
type: call
call: "meta-ads.get-insights"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: get-conversions
type: call
call: "ga.run-report"
with:
campaign_source: "facebook"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-summary
type: call
call: "msteams.post-channel"
with:
channel_id: "marketing-performance"
text: "Social Campaign Report ({{start_date}} to {{end_date}}): Reach: {{get-meta-metrics.reach}}. Impressions: {{get-meta-metrics.impressions}}. Clicks: {{get-meta-metrics.clicks}}. Spend: ${{get-meta-metrics.spend}}. Conversions: {{get-conversions.goal_completions}}. ROAS: {{get-conversions.revenue_per_spend}}."
consumes:
- type: http
namespace: meta-ads
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_ads_token"
resources:
- name: insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-insights
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Tracks special orders by querying SAP for order status, retrieving carrier tracking from FedEx, and sending customer updates via Twilio SMS.
naftiko: "0.5"
info:
label: "Special Order Tracking Orchestrator"
description: "Tracks special orders by querying SAP for order status, retrieving carrier tracking from FedEx, and sending customer updates via Twilio SMS."
tags:
- fulfillment
- special-orders
- sap
- twilio
capability:
exposes:
- type: mcp
namespace: special-order-tracking
port: 8080
tools:
- name: track-special-order
description: "Track and notify customer on special order status."
inputParameters:
- name: order_id
in: body
type: string
description: "The special order ID."
- name: customer_phone
in: body
type: string
description: "Customer phone number."
steps:
- name: get-order-status
type: call
call: "sap.get-order"
with:
order_number: "{{order_id}}"
- name: get-carrier-tracking
type: call
call: "fedex.track-shipment"
with:
tracking_number: "{{get-order-status.tracking_number}}"
- name: notify-customer
type: call
call: "twilio.send-sms"
with:
to: "{{customer_phone}}"
body: "Home Depot Order {{order_id}}: {{get-carrier-tracking.status}}. ETA: {{get-carrier-tracking.estimated_delivery}}."
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: orders
path: "/OrderSet('{{order_number}}')"
inputParameters:
- name: order_number
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: fedex
baseUri: "https://apis.fedex.com/track/v1"
authentication:
type: bearer
token: "$secrets.fedex_token"
resources:
- name: tracking
path: "/trackingnumbers"
operations:
- name: track-shipment
method: POST
- type: http
namespace: twilio
baseUri: "https://api.twilio.com/2010-04-01"
authentication:
type: basic
username: "$secrets.twilio_account_sid"
password: "$secrets.twilio_auth_token"
resources:
- name: messages
path: "/Accounts/$secrets.twilio_account_sid/Messages.json"
operations:
- name: send-sms
method: POST
Searches Splunk for point-of-sale system error logs by store number and time range, returning error codes and frequency counts.
naftiko: "0.5"
info:
label: "Splunk POS Error Log Search"
description: "Searches Splunk for point-of-sale system error logs by store number and time range, returning error codes and frequency counts."
tags:
- operations
- pos
- splunk
capability:
exposes:
- type: mcp
namespace: pos-logs
port: 8080
tools:
- name: search-pos-errors
description: "Search for POS error logs in Splunk by store."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: hours_back
in: body
type: integer
description: "Number of hours to search back."
call: "splunk.search"
with:
search: "search index=pos store={{store_id}} level=ERROR earliest=-{{hours_back}}h | stats count by error_code"
outputParameters:
- name: error_summary
type: array
mapping: "$.results"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.homedepot.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: search
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder with store SOPs, and sends a Microsoft Teams welcome message to the new associate and their manager.
naftiko: "0.5"
info:
label: "Store Associate Onboarding"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder with store SOPs, and sends a Microsoft Teams welcome message to the new associate and their manager."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-associate-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full associate onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The associate start date in YYYY-MM-DD format."
- name: store_id
in: body
type: string
description: "The store number the associate is joining."
steps:
- name: get-associate
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New associate onboarding: {{get-associate.full_name}} - Store #{{store_id}}"
category: "hr_onboarding"
assigned_group: "Store_IT_Onboarding"
description: "Onboarding for {{get-associate.full_name}} starting {{start_date}} at Store #{{store_id}}. Provision POS access, locker assignment, and safety training enrollment."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "store_onboarding_site"
folder_path: "Associates/{{get-associate.full_name}}_Store{{store_id}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-associate.work_email}}"
text: "Welcome to The Home Depot, {{get-associate.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Store #{{store_id}} orientation docs: {{provision-folder.url}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Processes store property damage claims by creating a ServiceNow incident, documenting in SharePoint, and notifying the risk management team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Damage Claim Orchestrator"
description: "Processes store property damage claims by creating a ServiceNow incident, documenting in SharePoint, and notifying the risk management team via Microsoft Teams."
tags:
- operations
- risk
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: damage-claims
port: 8080
tools:
- name: file-damage-claim
description: "File and track a store property damage claim."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: damage_description
in: body
type: string
description: "Description of the damage."
- name: estimated_cost
in: body
type: number
description: "Estimated repair cost."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Property damage: Store {{store_id}}"
description: "{{damage_description}}"
category: "property_damage"
estimated_cost: "{{estimated_cost}}"
- name: create-documentation
type: call
call: "sharepoint.create-folder"
with:
site_id: "risk_management"
folder_path: "DamageClaims/Store_{{store_id}}/{{create-incident.number}}"
- name: notify-risk-team
type: call
call: "msteams.send-message"
with:
channel_id: "risk-management"
text: "Damage claim filed for Store {{store_id}}: {{damage_description}}. Estimated cost: ${{estimated_cost}}. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folders
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates emergency store closures by updating the store locator via Google Maps API, notifying associates via Microsoft Teams, and creating a ServiceNow major incident.
naftiko: "0.5"
info:
label: "Store Emergency Closure Coordinator"
description: "Coordinates emergency store closures by updating the store locator via Google Maps API, notifying associates via Microsoft Teams, and creating a ServiceNow major incident."
tags:
- operations
- emergency
- google-maps
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: emergency-closure
port: 8080
tools:
- name: coordinate-closure
description: "Coordinate an emergency store closure."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: reason
in: body
type: string
description: "Closure reason."
- name: expected_reopen
in: body
type: string
description: "Expected reopen date."
steps:
- name: update-store-hours
type: call
call: "google-maps.update-hours"
with:
location_id: "store_{{store_id}}"
status: "temporarily_closed"
message: "{{reason}}. Expected reopen: {{expected_reopen}}."
- name: notify-associates
type: call
call: "msteams.send-message"
with:
channel_id: "store-{{store_id}}-all"
text: "URGENT: Store {{store_id}} emergency closure effective immediately. Reason: {{reason}}. Expected reopen: {{expected_reopen}}."
- name: create-major-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Emergency closure: Store {{store_id}}"
urgency: "1"
impact: "1"
description: "Reason: {{reason}}. Expected reopen: {{expected_reopen}}."
consumes:
- type: http
namespace: google-maps
baseUri: "https://mybusiness.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_mybusiness_token"
resources:
- name: locations
path: "/accounts/homedepot/locations/{{location_id}}"
inputParameters:
- name: location_id
in: path
operations:
- name: update-hours
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Collects energy consumption data from the building management system, compares against targets in Snowflake, and publishes the report to SharePoint.
naftiko: "0.5"
info:
label: "Store Energy Management Reporter"
description: "Collects energy consumption data from the building management system, compares against targets in Snowflake, and publishes the report to SharePoint."
tags:
- sustainability
- energy
- snowflake
- sharepoint
capability:
exposes:
- type: mcp
namespace: energy-management
port: 8080
tools:
- name: report-energy-usage
description: "Generate energy management report for a store."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: month
in: body
type: string
description: "Reporting month in YYYY-MM format."
steps:
- name: get-consumption
type: call
call: "bms.get-energy-data"
with:
facility: "store_{{store_id}}"
period: "{{month}}"
- name: get-target
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT energy_target_kwh FROM store_energy_targets WHERE store_id = '{{store_id}}' AND month = '{{month}}'"
- name: publish-report
type: call
call: "sharepoint.upload-document"
with:
site_id: "sustainability"
folder_path: "EnergyReports/{{month}}"
file_name: "store_{{store_id}}_energy.json"
consumes:
- type: http
namespace: bms
baseUri: "https://bms.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: energy
path: "/facilities/{{facility}}/energy?period={{period}}"
inputParameters:
- name: facility
in: path
- name: period
in: query
operations:
- name: get-energy-data
method: GET
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-document
method: PUT
When a store associate reports an equipment issue, creates a ServiceNow work order, checks the equipment warranty in SAP, notifies the facilities team via Microsoft Teams, and logs the event in the asset management system.
naftiko: "0.5"
info:
label: "Store Equipment Maintenance Request"
description: "When a store associate reports an equipment issue, creates a ServiceNow work order, checks the equipment warranty in SAP, notifies the facilities team via Microsoft Teams, and logs the event in the asset management system."
tags:
- store-ops
- maintenance
- servicenow
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: equipment-maintenance
port: 8080
tools:
- name: submit-maintenance-request
description: "Given store ID, equipment details, and issue description, create a work order, check warranty, and notify facilities."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: equipment_id
in: body
type: string
description: "The asset ID of the equipment."
- name: issue_description
in: body
type: string
description: "Description of the equipment issue."
- name: priority
in: body
type: string
description: "Request priority (LOW, MEDIUM, HIGH, CRITICAL)."
steps:
- name: check-warranty
type: call
call: "sap.get-asset"
with:
asset_id: "{{equipment_id}}"
- name: create-work-order
type: call
call: "servicenow.create-work-order"
with:
short_description: "Equipment repair: {{equipment_id}} at Store #{{store_id}}"
priority: "{{priority}}"
assigned_group: "Facilities_Maintenance"
description: "{{issue_description}} Asset: {{equipment_id}}. Warranty status: {{check-warranty.warranty_status}}. Warranty expiry: {{check-warranty.warranty_end_date}}."
- name: notify-facilities
type: call
call: "msteams.post-channel"
with:
channel_id: "facilities-maintenance"
text: "Maintenance request: Store #{{store_id}}, Equipment {{equipment_id}}. Priority: {{priority}}. Warranty: {{check-warranty.warranty_status}}. Work order: {{create-work-order.number}}. Issue: {{issue_description}}"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/API_FIXEDASSET_0002"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: assets
path: "/A_FixedAsset('{{asset_id}}')"
inputParameters:
- name: asset_id
in: path
operations:
- name: get-asset
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Responds to store HVAC emergencies by pulling BMS alerts, creating an urgent ServiceNow work order, and dispatching the nearest HVAC technician via field service.
naftiko: "0.5"
info:
label: "Store HVAC Emergency Response Orchestrator"
description: "Responds to store HVAC emergencies by pulling BMS alerts, creating an urgent ServiceNow work order, and dispatching the nearest HVAC technician via field service."
tags:
- facilities
- emergency
- servicenow
capability:
exposes:
- type: mcp
namespace: hvac-emergency
port: 8080
tools:
- name: respond-hvac-emergency
description: "Respond to a store HVAC emergency."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: alert_type
in: body
type: string
description: "HVAC alert type (no_cooling, no_heating, refrigerant_leak)."
steps:
- name: get-bms-data
type: call
call: "bms.get-hvac-status"
with:
facility: "store_{{store_id}}"
- name: create-urgent-wo
type: call
call: "servicenow.create-incident"
with:
short_description: "HVAC Emergency: Store {{store_id}} - {{alert_type}}"
urgency: "1"
category: "facilities"
description: "Current temp: {{get-bms-data.current_temp}}F. Set point: {{get-bms-data.set_point}}F. Alert: {{alert_type}}."
- name: dispatch-technician
type: call
call: "field-service.dispatch"
with:
store_id: "{{store_id}}"
service_type: "hvac_emergency"
reference: "{{create-urgent-wo.number}}"
consumes:
- type: http
namespace: bms
baseUri: "https://bms.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: hvac
path: "/facilities/{{facility}}/hvac/status"
inputParameters:
- name: facility
in: path
operations:
- name: get-hvac-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: field-service
baseUri: "https://fieldservice.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.field_service_token"
resources:
- name: dispatch
path: "/dispatch"
operations:
- name: dispatch
method: POST
Queries Oracle Retail inventory for a specific product at a given store location, returning on-hand quantity, on-order quantity, and next expected delivery date.
naftiko: "0.5"
info:
label: "Store Inventory Check"
description: "Queries Oracle Retail inventory for a specific product at a given store location, returning on-hand quantity, on-order quantity, and next expected delivery date."
tags:
- inventory
- store-ops
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: store-inventory
port: 8080
tools:
- name: check-store-stock
description: "Given a store number and SKU, return on-hand inventory, on-order quantity, and next delivery date."
inputParameters:
- name: store_id
in: body
type: string
description: "The Home Depot store number."
- name: sku
in: body
type: string
description: "The product SKU to check."
call: "oracle-retail.get-stock"
with:
store_id: "{{store_id}}"
sku: "{{sku}}"
outputParameters:
- name: on_hand
type: number
mapping: "$.inventory.onHandQty"
- name: on_order
type: number
mapping: "$.inventory.onOrderQty"
- name: next_delivery
type: string
mapping: "$.inventory.nextDeliveryDate"
consumes:
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: stock
path: "/stores/{{store_id}}/items/{{sku}}/stock"
inputParameters:
- name: store_id
in: path
- name: sku
in: path
operations:
- name: get-stock
method: GET
Optimizes store labor scheduling by pulling traffic forecasts from Snowflake, current staffing from Workday, and publishing optimized schedules back to the workforce management system.
naftiko: "0.5"
info:
label: "Store Labor Scheduling Optimizer"
description: "Optimizes store labor scheduling by pulling traffic forecasts from Snowflake, current staffing from Workday, and publishing optimized schedules back to the workforce management system."
tags:
- hr
- scheduling
- snowflake
- workday
capability:
exposes:
- type: mcp
namespace: labor-scheduling
port: 8080
tools:
- name: optimize-schedule
description: "Optimize store labor schedule based on traffic forecast."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: week_start
in: body
type: string
description: "Week start date in YYYY-MM-DD."
steps:
- name: get-traffic-forecast
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT day_of_week, hourly_traffic_forecast FROM store_traffic_forecast WHERE store_id = '{{store_id}}' AND week_start = '{{week_start}}'"
- name: get-current-staffing
type: call
call: "workday.get-store-headcount"
with:
location: "store_{{store_id}}"
- name: publish-schedule
type: call
call: "wfm.create-schedule"
with:
store_id: "{{store_id}}"
week_start: "{{week_start}}"
traffic_data: "{{get-traffic-forecast.data}}"
headcount: "{{get-current-staffing.count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/headcount?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-store-headcount
method: GET
- type: http
namespace: wfm
baseUri: "https://wfm.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.wfm_token"
resources:
- name: schedules
path: "/schedules"
operations:
- name: create-schedule
method: POST
Generates a daily store briefing by pulling yesterday's sales from Snowflake, open incidents from ServiceNow, and staffing status from Workday, then emailing via Outlook.
naftiko: "0.5"
info:
label: "Store Manager Daily Briefing Generator"
description: "Generates a daily store briefing by pulling yesterday's sales from Snowflake, open incidents from ServiceNow, and staffing status from Workday, then emailing via Outlook."
tags:
- operations
- reporting
- snowflake
- servicenow
- workday
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: daily-briefing
port: 8080
tools:
- name: generate-briefing
description: "Generate the daily store manager briefing."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
steps:
- name: get-sales-summary
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT total_revenue, transaction_count, avg_basket_size FROM daily_store_sales WHERE store_id = '{{store_id}}' AND sale_date = CURRENT_DATE - 1"
- name: get-open-incidents
type: call
call: "servicenow.get-incidents"
with:
query: "assignment_group.name=Store_{{store_id}}^state!=6"
- name: get-staffing
type: call
call: "workday.get-daily-schedule"
with:
location: "store_{{store_id}}"
- name: send-briefing
type: call
call: "outlook.send-email"
with:
to: "storemanager_{{store_id}}@homedepot.com"
subject: "Daily Briefing: Store {{store_id}}"
body: "Sales: ${{get-sales-summary.data[0].total_revenue}} ({{get-sales-summary.data[0].transaction_count}} transactions). Open incidents: {{get-open-incidents.count}}. Scheduled associates: {{get-staffing.total_scheduled}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query={{query}}"
inputParameters:
- name: query
in: query
operations:
- name: get-incidents
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/schedules?location={{location}}&date=today"
inputParameters:
- name: location
in: query
operations:
- name: get-daily-schedule
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
At store opening time, verifies POS system status via ServiceNow, checks associate clock-ins from Workday, reviews overnight receiving in Oracle Retail, and posts the morning readiness summary to the store manager's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Store Opening Checklist Orchestrator"
description: "At store opening time, verifies POS system status via ServiceNow, checks associate clock-ins from Workday, reviews overnight receiving in Oracle Retail, and posts the morning readiness summary to the store manager's Microsoft Teams channel."
tags:
- store-ops
- daily-operations
- servicenow
- workday
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-opening
port: 8080
tools:
- name: run-opening-checklist
description: "Given a store ID and date, verify POS, staffing, and receiving status, then post the morning readiness report."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: date
in: body
type: string
description: "The date in YYYY-MM-DD format."
- name: manager_email
in: body
type: string
description: "The store manager email."
steps:
- name: check-pos-status
type: call
call: "servicenow.get-ci-status"
with:
ci_name: "POS_Store_{{store_id}}"
- name: check-staffing
type: call
call: "workday.get-attendance"
with:
location: "Store_{{store_id}}"
date: "{{date}}"
shift: "opening"
- name: check-receiving
type: call
call: "oracle-retail.get-overnight-receipts"
with:
store_id: "{{store_id}}"
date: "{{date}}"
- name: post-readiness
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{manager_email}}"
text: "Morning Readiness - Store #{{store_id}} ({{date}}): POS Status: {{check-pos-status.status}}. Associates clocked in: {{check-staffing.present_count}}/{{check-staffing.scheduled_count}}. Overnight receipts processed: {{check-receiving.receipt_count}} ({{check-receiving.units_received}} units)."
consumes:
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: ci
path: "/table/cmdb_ci?sysparm_query=name={{ci_name}}"
inputParameters:
- name: ci_name
in: path
operations:
- name: get-ci-status
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: attendance
path: "/attendance/{{location}}/{{date}}"
inputParameters:
- name: location
in: path
- name: date
in: path
operations:
- name: get-attendance
method: GET
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: receipts
path: "/stores/{{store_id}}/receipts"
inputParameters:
- name: store_id
in: path
operations:
- name: get-overnight-receipts
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Pulls daily sales from Teradata, foot traffic from Google Analytics, and open incidents from ServiceNow, then compiles a digest and posts it to the store's Microsoft Teams channel every morning.
naftiko: "0.5"
info:
label: "Store Performance Daily Digest"
description: "Pulls daily sales from Teradata, foot traffic from Google Analytics, and open incidents from ServiceNow, then compiles a digest and posts it to the store's Microsoft Teams channel every morning."
tags:
- store-ops
- reporting
- teradata
- google-analytics
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-digest
port: 8080
tools:
- name: generate-daily-digest
description: "Given a store ID and date, compile sales, traffic, and incident data into a daily digest and post to Teams."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: report_date
in: body
type: string
description: "The date for the digest in YYYY-MM-DD format."
steps:
- name: get-sales
type: call
call: "teradata.run-query"
with:
query: "SELECT SUM(net_sales) as total_sales, COUNT(DISTINCT txn_id) as txn_count FROM daily_sales WHERE store_id='{{store_id}}' AND sale_date='{{report_date}}'"
- name: get-traffic
type: call
call: "ga.run-report"
with:
store_id: "{{store_id}}"
start_date: "{{report_date}}"
end_date: "{{report_date}}"
- name: get-incidents
type: call
call: "servicenow.get-store-incidents"
with:
store_id: "{{store_id}}"
date: "{{report_date}}"
- name: post-digest
type: call
call: "msteams.post-channel"
with:
channel_id: "store-{{store_id}}-ops"
text: "Daily Digest for Store #{{store_id}} ({{report_date}}): Sales: ${{get-sales.total_sales}} across {{get-sales.txn_count}} transactions. Online traffic: {{get-traffic.page_views}} page views. Open incidents: {{get-incidents.count}}."
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: store-incidents
path: "/table/incident?sysparm_query=location={{store_id}}^opened_at={{date}}"
inputParameters:
- name: store_id
in: path
- name: date
in: path
operations:
- name: get-store-incidents
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves the current planogram from SharePoint, compares against actual shelf data from the store IoT system, logs discrepancies in Jira, and notifies the department manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Planogram Compliance Audit"
description: "Retrieves the current planogram from SharePoint, compares against actual shelf data from the store IoT system, logs discrepancies in Jira, and notifies the department manager via Microsoft Teams."
tags:
- store-ops
- planogram
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: planogram-audit
port: 8080
tools:
- name: audit-planogram
description: "Given a store ID and department, compare the planogram against shelf reality and report discrepancies."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number to audit."
- name: department
in: body
type: string
description: "The department to audit (e.g. PAINT, ELECTRICAL, PLUMBING)."
- name: manager_email
in: body
type: string
description: "The department manager email for notifications."
steps:
- name: get-planogram
type: call
call: "sharepoint.get-file"
with:
site_id: "store_ops_site"
file_path: "Planograms/Store{{store_id}}/{{department}}_current.json"
- name: get-shelf-data
type: call
call: "store-iot.get-shelf-scan"
with:
store_id: "{{store_id}}"
department: "{{department}}"
- name: log-discrepancy
type: call
call: "jira.create-issue"
with:
project: "STOREOPS"
issue_type: "Task"
summary: "Planogram discrepancy: Store #{{store_id}} - {{department}}"
description: "Planogram audit found discrepancies in {{department}} at Store #{{store_id}}. Expected SKU positions: {{get-planogram.sku_count}}. Actual matches: {{get-shelf-data.match_count}}."
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{manager_email}}"
text: "Planogram audit completed for {{department}} at Store #{{store_id}}. Discrepancies found and logged as {{log-discrepancy.key}}. Please review and correct shelf placement."
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
- type: http
namespace: store-iot
baseUri: "https://iot.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.store_iot_token"
resources:
- name: shelf-scans
path: "/stores/{{store_id}}/departments/{{department}}/shelf-scan"
inputParameters:
- name: store_id
in: path
- name: department
in: path
operations:
- name: get-shelf-scan
method: GET
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Coordinates store remodel projects by creating a Jira project, generating a budget in SAP, and distributing the project plan via SharePoint.
naftiko: "0.5"
info:
label: "Store Remodel Project Coordinator"
description: "Coordinates store remodel projects by creating a Jira project, generating a budget in SAP, and distributing the project plan via SharePoint."
tags:
- operations
- store-remodel
- jira
- sap
- sharepoint
capability:
exposes:
- type: mcp
namespace: store-remodel
port: 8080
tools:
- name: initiate-remodel
description: "Initiate and coordinate a store remodel project."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: remodel_type
in: body
type: string
description: "Remodel type (full, partial, department)."
- name: budget_amount
in: body
type: number
description: "Allocated budget."
steps:
- name: create-project
type: call
call: "jira.create-project"
with:
name: "Store {{store_id}} Remodel - {{remodel_type}}"
key: "REM{{store_id}}"
template: "store_remodel"
- name: create-budget
type: call
call: "sap.create-wbs"
with:
project_name: "Remodel_{{store_id}}"
budget: "{{budget_amount}}"
- name: distribute-plan
type: call
call: "sharepoint.upload-document"
with:
site_id: "store_operations"
folder_path: "Remodels/Store_{{store_id}}"
file_name: "remodel_plan_{{store_id}}.xlsx"
consumes:
- type: http
namespace: jira
baseUri: "https://homedepot.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project"
operations:
- name: create-project
method: POST
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZPS_WBS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: wbs
path: "/WBSElementSet"
operations:
- name: create-wbs
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-document
method: PUT
Conducts store safety audits by pulling checklist from ServiceNow, verifying training completion in Cornerstone LMS, and publishing results to SharePoint.
naftiko: "0.5"
info:
label: "Store Safety Compliance Auditor"
description: "Conducts store safety audits by pulling checklist from ServiceNow, verifying training completion in Cornerstone LMS, and publishing results to SharePoint."
tags:
- safety
- compliance
- servicenow
- sharepoint
capability:
exposes:
- type: mcp
namespace: safety-audit
port: 8080
tools:
- name: conduct-safety-audit
description: "Conduct a store safety compliance audit."
inputParameters:
- name: store_id
in: body
type: string
description: "The store number."
- name: audit_date
in: body
type: string
description: "Audit date in YYYY-MM-DD."
steps:
- name: get-checklist
type: call
call: "servicenow.get-checklist"
with:
template: "store_safety_audit"
location: "store_{{store_id}}"
- name: verify-training
type: call
call: "cornerstone.get-compliance-report"
with:
location: "store_{{store_id}}"
course_category: "safety"
- name: publish-results
type: call
call: "sharepoint.upload-document"
with:
site_id: "safety_compliance"
folder_path: "Audits/{{audit_date}}"
file_name: "store_{{store_id}}_safety_audit.json"
consumes:
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: checklists
path: "/table/checklist_template?sysparm_query=name={{template}}^location={{location}}"
inputParameters:
- name: template
in: query
- name: location
in: query
operations:
- name: get-checklist
method: GET
- type: http
namespace: cornerstone
baseUri: "https://homedepot.csod.com/services/api/x/v2"
authentication:
type: bearer
token: "$secrets.cornerstone_token"
resources:
- name: compliance
path: "/reports/compliance?location={{location}}&category={{course_category}}"
inputParameters:
- name: location
in: query
- name: course_category
in: query
operations:
- name: get-compliance-report
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-document
method: PUT
Fetches invoices from SAP, matches against goods receipts in Oracle Retail, flags discrepancies in ServiceNow for accounts payable review, and sends a summary to the finance team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Supplier Invoice Reconciliation"
description: "Fetches invoices from SAP, matches against goods receipts in Oracle Retail, flags discrepancies in ServiceNow for accounts payable review, and sends a summary to the finance team in Microsoft Teams."
tags:
- finance
- accounts-payable
- sap
- oracle-cloud
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: invoice-reconciliation
port: 8080
tools:
- name: reconcile-invoice
description: "Given a SAP invoice number, match against goods receipts and flag discrepancies."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice number."
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-goods-receipt
type: call
call: "oracle-retail.get-receipt"
with:
po_number: "{{get-invoice.po_reference}}"
vendor_id: "{{vendor_id}}"
- name: flag-discrepancy
type: call
call: "servicenow.create-task"
with:
short_description: "Invoice discrepancy: {{invoice_number}} vs GR {{get-goods-receipt.receipt_id}}"
assigned_group: "Accounts_Payable"
description: "Invoice {{invoice_number}} amount: ${{get-invoice.total_amount}}. GR amount: ${{get-goods-receipt.received_value}}. Variance: ${{get-invoice.total_amount}} - ${{get-goods-receipt.received_value}}. Vendor: {{vendor_id}}."
- name: notify-finance
type: call
call: "msteams.post-channel"
with:
channel_id: "accounts-payable"
text: "Invoice reconciliation: {{invoice_number}} for vendor {{vendor_id}}. Invoice: ${{get-invoice.total_amount}}. GR: ${{get-goods-receipt.received_value}}. Task: {{flag-discrepancy.number}}."
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_INVOICE_MAINT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: receipts
path: "/purchase-orders/{{po_number}}/receipts"
inputParameters:
- name: po_number
in: path
operations:
- name: get-receipt
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves a pre-built Tableau view as a PNG image for a given dashboard name, used for embedding store performance visuals in Slack and email reports.
naftiko: "0.5"
info:
label: "Tableau Dashboard Snapshot"
description: "Retrieves a pre-built Tableau view as a PNG image for a given dashboard name, used for embedding store performance visuals in Slack and email reports."
tags:
- analytics
- reporting
- tableau
capability:
exposes:
- type: mcp
namespace: analytics-dashboards
port: 8080
tools:
- name: get-dashboard-image
description: "Given a Tableau workbook and view name, return a PNG image URL of the rendered dashboard."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook ID."
- name: view_id
in: body
type: string
description: "The Tableau view ID within the workbook."
call: "tableau.get-view-image"
with:
workbook_id: "{{workbook_id}}"
view_id: "{{view_id}}"
outputParameters:
- name: image_url
type: string
mapping: "$.view.imageUrl"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.homedepot.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: views
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/views/{{view_id}}/image"
inputParameters:
- name: site_id
in: path
- name: workbook_id
in: path
- name: view_id
in: path
operations:
- name: get-view-image
method: GET
When a customer reserves a tool rental online, validates availability in the rental management system, creates the reservation in SAP Commerce Cloud, charges the deposit via Square, and sends a confirmation email via MailChimp.
naftiko: "0.5"
info:
label: "Tool Rental Reservation Processor"
description: "When a customer reserves a tool rental online, validates availability in the rental management system, creates the reservation in SAP Commerce Cloud, charges the deposit via Square, and sends a confirmation email via MailChimp."
tags:
- e-commerce
- tool-rental
- sap
- square
- mailchimp
capability:
exposes:
- type: mcp
namespace: tool-rental
port: 8080
tools:
- name: process-rental-reservation
description: "Given a tool ID, store ID, customer details, and rental dates, validate availability, create reservation, charge deposit, and confirm."
inputParameters:
- name: tool_id
in: body
type: string
description: "The rental tool inventory ID."
- name: store_id
in: body
type: string
description: "The store number for pickup."
- name: customer_email
in: body
type: string
description: "The customer email."
- name: start_date
in: body
type: string
description: "Rental start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Rental end date in YYYY-MM-DD format."
- name: deposit_amount
in: body
type: number
description: "The deposit amount in dollars."
steps:
- name: check-availability
type: call
call: "rental-svc.check-tool"
with:
tool_id: "{{tool_id}}"
store_id: "{{store_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: create-reservation
type: call
call: "sap-commerce.create-rental"
with:
tool_id: "{{tool_id}}"
store_id: "{{store_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
customer_email: "{{customer_email}}"
- name: charge-deposit
type: call
call: "square.create-payment"
with:
amount: "{{deposit_amount}}"
currency: "USD"
reference_id: "{{create-reservation.reservation_id}}"
- name: send-confirmation
type: call
call: "mailchimp.send-transactional"
with:
template_name: "rental_confirmation"
to_email: "{{customer_email}}"
merge_vars:
reservation_id: "{{create-reservation.reservation_id}}"
tool_name: "{{check-availability.tool_name}}"
store_id: "{{store_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
deposit: "{{deposit_amount}}"
consumes:
- type: http
namespace: rental-svc
baseUri: "https://rentals.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.rental_svc_token"
resources:
- name: tools
path: "/tools/{{tool_id}}/availability"
inputParameters:
- name: tool_id
in: path
operations:
- name: check-tool
method: GET
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: rentals
path: "/rentals"
operations:
- name: create-rental
method: POST
- type: http
namespace: square
baseUri: "https://connect.squareup.com/v2"
authentication:
type: bearer
token: "$secrets.square_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
- type: http
namespace: mailchimp
baseUri: "https://mandrillapp.com/api/1.0"
authentication:
type: apiKey
key: "$secrets.mailchimp_transactional_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
Sends delivery status SMS notifications to customers via Twilio for appliance and special order deliveries.
naftiko: "0.5"
info:
label: "Twilio Customer Delivery SMS Sender"
description: "Sends delivery status SMS notifications to customers via Twilio for appliance and special order deliveries."
tags:
- fulfillment
- notifications
- twilio
capability:
exposes:
- type: mcp
namespace: delivery-sms
port: 8080
tools:
- name: send-delivery-sms
description: "Send a delivery status SMS to a customer."
inputParameters:
- name: phone_number
in: body
type: string
description: "Customer phone number."
- name: message
in: body
type: string
description: "The SMS message text."
call: "twilio.send-sms"
with:
to: "{{phone_number}}"
body: "{{message}}"
outputParameters:
- name: message_sid
type: string
mapping: "$.sid"
consumes:
- type: http
namespace: twilio
baseUri: "https://api.twilio.com/2010-04-01"
authentication:
type: basic
username: "$secrets.twilio_account_sid"
password: "$secrets.twilio_auth_token"
resources:
- name: messages
path: "/Accounts/$secrets.twilio_account_sid/Messages.json"
operations:
- name: send-sms
method: POST
Generates vendor compliance scorecards by pulling on-time delivery metrics from SAP, quality data from Snowflake, and publishing to the vendor portal via Salesforce.
naftiko: "0.5"
info:
label: "Vendor Compliance Scorecard Generator"
description: "Generates vendor compliance scorecards by pulling on-time delivery metrics from SAP, quality data from Snowflake, and publishing to the vendor portal via Salesforce."
tags:
- procurement
- vendor
- sap
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: vendor-scorecard
port: 8080
tools:
- name: generate-scorecard
description: "Generate a vendor compliance scorecard."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The vendor ID."
- name: period
in: body
type: string
description: "Reporting period in YYYY-Q format."
steps:
- name: get-delivery-metrics
type: call
call: "sap.get-vendor-otif"
with:
vendor: "{{vendor_id}}"
period: "{{period}}"
- name: get-quality-metrics
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT defect_rate, return_rate, avg_quality_score FROM vendor_quality WHERE vendor_id = '{{vendor_id}}' AND period = '{{period}}'"
- name: publish-scorecard
type: call
call: "salesforce.update-account"
with:
vendor_id: "{{vendor_id}}"
otif_score: "{{get-delivery-metrics.otif_percentage}}"
quality_score: "{{get-quality-metrics.data[0].avg_quality_score}}"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_VENDOR_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: otif
path: "/VendorOTIFSet(Vendor='{{vendor}}',Period='{{period}}')"
inputParameters:
- name: vendor
in: path
- name: period
in: path
operations:
- name: get-vendor-otif
method: GET
- type: http
namespace: snowflake
baseUri: "https://homedepot.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://homedepot.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Vendor_Account__c/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: update-account
method: PATCH
Sets up a new vendor product by creating the item in SAP, syncing product content to the e-commerce platform, and notifying merchandising via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor New Item Setup Pipeline"
description: "Sets up a new vendor product by creating the item in SAP, syncing product content to the e-commerce platform, and notifying merchandising via Microsoft Teams."
tags:
- merchandising
- vendor
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: new-item-setup
port: 8080
tools:
- name: setup-new-item
description: "Orchestrate new vendor item setup across systems."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The vendor ID."
- name: item_name
in: body
type: string
description: "Product name."
- name: category
in: body
type: string
description: "Product category."
- name: cost_price
in: body
type: number
description: "Vendor cost price."
steps:
- name: create-sap-material
type: call
call: "sap.create-material"
with:
vendor: "{{vendor_id}}"
description: "{{item_name}}"
category: "{{category}}"
cost: "{{cost_price}}"
- name: sync-to-ecommerce
type: call
call: "sap-commerce.create-product"
with:
sku: "{{create-sap-material.material_number}}"
name: "{{item_name}}"
category: "{{category}}"
- name: notify-merchandising
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising-new-items"
text: "New item setup: {{item_name}} (SKU: {{create-sap-material.material_number}}) from vendor {{vendor_id}}. Category: {{category}}."
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/ZMM_MATERIAL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/MaterialSet"
operations:
- name: create-material
method: POST
- type: http
namespace: sap-commerce
baseUri: "https://homedepot-commerce.sap.com/occ/v2/homedepot"
authentication:
type: bearer
token: "$secrets.sap_commerce_token"
resources:
- name: products
path: "/products"
operations:
- name: create-product
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Aggregates vendor performance data from SAP, delivery metrics from Oracle Retail, and quality incidents from ServiceNow, then publishes a quarterly scorecard to Confluence and notifies the procurement team.
naftiko: "0.5"
info:
label: "Vendor Scorecard Generation"
description: "Aggregates vendor performance data from SAP, delivery metrics from Oracle Retail, and quality incidents from ServiceNow, then publishes a quarterly scorecard to Confluence and notifies the procurement team."
tags:
- supply-chain
- vendor-management
- sap
- oracle-cloud
- servicenow
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-scorecard
port: 8080
tools:
- name: generate-vendor-scorecard
description: "Given a vendor ID and quarter, aggregate performance data across systems and publish the scorecard."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor ID."
- name: quarter
in: body
type: string
description: "The reporting quarter (e.g. Q1_2026)."
steps:
- name: get-vendor-pos
type: call
call: "sap.get-vendor-orders"
with:
vendor_id: "{{vendor_id}}"
quarter: "{{quarter}}"
- name: get-delivery-metrics
type: call
call: "oracle-retail.get-vendor-delivery-stats"
with:
vendor_id: "{{vendor_id}}"
quarter: "{{quarter}}"
- name: get-quality-incidents
type: call
call: "servicenow.get-vendor-incidents"
with:
vendor_id: "{{vendor_id}}"
quarter: "{{quarter}}"
- name: publish-scorecard
type: call
call: "confluence.create-page"
with:
space_key: "PROCUREMENT"
title: "Vendor Scorecard: {{vendor_id}} - {{quarter}}"
body: "PO Count: {{get-vendor-pos.total_orders}}. On-time delivery: {{get-delivery-metrics.on_time_pct}}%. Fill rate: {{get-delivery-metrics.fill_rate_pct}}%. Quality incidents: {{get-quality-incidents.count}}. Overall score: {{get-delivery-metrics.composite_score}}."
- name: notify-procurement
type: call
call: "msteams.post-channel"
with:
channel_id: "procurement-scorecards"
text: "Vendor scorecard published for {{vendor_id}} ({{quarter}}). On-time: {{get-delivery-metrics.on_time_pct}}%. Quality incidents: {{get-quality-incidents.count}}. Full report: {{publish-scorecard.url}}"
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendor-orders
path: "/A_PurchaseOrder?$filter=Supplier eq '{{vendor_id}}'"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor-orders
method: GET
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: vendor-stats
path: "/vendors/{{vendor_id}}/delivery-stats"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor-delivery-stats
method: GET
- type: http
namespace: servicenow
baseUri: "https://homedepot.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: vendor-incidents
path: "/table/incident?sysparm_query=vendor={{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor-incidents
method: GET
- type: http
namespace: confluence
baseUri: "https://homedepot.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
When a SAP purchase order ships, fetches carrier tracking details, updates Oracle Retail with the expected arrival, and posts a supply chain update to the Microsoft Teams logistics channel.
naftiko: "0.5"
info:
label: "Vendor Shipment Tracking Pipeline"
description: "When a SAP purchase order ships, fetches carrier tracking details, updates Oracle Retail with the expected arrival, and posts a supply chain update to the Microsoft Teams logistics channel."
tags:
- supply-chain
- logistics
- sap
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shipment-tracking
port: 8080
tools:
- name: track-vendor-shipment
description: "Given a PO number and tracking number, fetch carrier details, update Oracle Retail ETA, and notify the logistics team in Microsoft Teams."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
- name: tracking_number
in: body
type: string
description: "The carrier tracking number."
- name: carrier
in: body
type: string
description: "The shipping carrier (e.g. UPS, FedEx, XPO)."
steps:
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: get-tracking
type: call
call: "carrier-api.track-shipment"
with:
carrier: "{{carrier}}"
tracking_number: "{{tracking_number}}"
- name: update-eta
type: call
call: "oracle-retail.update-delivery"
with:
po_number: "{{po_number}}"
eta: "{{get-tracking.estimated_delivery}}"
status: "{{get-tracking.status}}"
- name: notify-logistics
type: call
call: "msteams.post-channel"
with:
channel_id: "supply-chain-updates"
text: "PO {{po_number}} from {{get-po.vendor}}: {{get-tracking.status}}. ETA: {{get-tracking.estimated_delivery}}. Tracking: {{tracking_number}} via {{carrier}}."
consumes:
- type: http
namespace: sap
baseUri: "https://homedepot-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: carrier-api
baseUri: "https://logistics.homedepot.com/api/v1"
authentication:
type: bearer
token: "$secrets.logistics_token"
resources:
- name: tracking
path: "/carriers/{{carrier}}/track/{{tracking_number}}"
inputParameters:
- name: carrier
in: path
- name: tracking_number
in: path
operations:
- name: track-shipment
method: GET
- type: http
namespace: oracle-retail
baseUri: "https://homedepot.retail.oracle.com/rgbu-rms-rse/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_retail_token"
resources:
- name: deliveries
path: "/purchase-orders/{{po_number}}/delivery"
inputParameters:
- name: po_number
in: path
operations:
- name: update-delivery
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Handles website performance issues by pulling metrics from Datadog, checking CDN status in Cloudflare, and creating an incident in PagerDuty.
naftiko: "0.5"
info:
label: "Website Performance Degradation Handler"
description: "Handles website performance issues by pulling metrics from Datadog, checking CDN status in Cloudflare, and creating an incident in PagerDuty."
tags:
- e-commerce
- performance
- datadog
- cloudflare
- pagerduty
capability:
exposes:
- type: mcp
namespace: web-performance
port: 8080
tools:
- name: handle-performance-issue
description: "Respond to website performance degradation."
inputParameters:
- name: service_name
in: body
type: string
description: "The affected service name."
- name: threshold_breach
in: body
type: string
description: "Description of the threshold breach."
steps:
- name: get-metrics
type: call
call: "datadog.get-service-metrics"
with:
service: "{{service_name}}"
- name: check-cdn
type: call
call: "cloudflare.get-zone-analytics"
with:
zone: "homedepot.com"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "ecommerce_platform"
title: "Performance degradation: {{service_name}} - {{threshold_breach}}"
details: "P99 latency: {{get-metrics.p99_latency}}ms. Error rate: {{get-metrics.error_rate}}%. CDN cache hit ratio: {{check-cdn.cache_hit_ratio}}%."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/metrics/query?query=avg:trace.{{service}}.request.duration"
inputParameters:
- name: service
in: query
operations:
- name: get-service-metrics
method: GET
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: analytics
path: "/zones/{{zone}}/analytics/dashboard"
inputParameters:
- name: zone
in: path
operations:
- name: get-zone-analytics
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves the warehouse bin location for a product in the distribution center warehouse management system, returning aisle, rack, and bin number.
naftiko: "0.5"
info:
label: "WMS Bin Location Lookup"
description: "Retrieves the warehouse bin location for a product in the distribution center warehouse management system, returning aisle, rack, and bin number."
tags:
- warehouse
- fulfillment
- wms
capability:
exposes:
- type: mcp
namespace: bin-location
port: 8080
tools:
- name: get-bin-location
description: "Look up the bin location for a SKU in a distribution center."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
- name: dc_id
in: body
type: string
description: "The distribution center ID."
call: "wms.get-location"
with:
sku: "{{sku}}"
facility: "{{dc_id}}"
outputParameters:
- name: aisle
type: string
mapping: "$.location.aisle"
- name: rack
type: string
mapping: "$.location.rack"
- name: bin
type: string
mapping: "$.location.bin"
consumes:
- type: http
namespace: wms
baseUri: "https://wms.homedepot.com/api/v2"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: locations
path: "/facilities/{{facility}}/items/{{sku}}/location"
inputParameters:
- name: facility
in: path
- name: sku
in: path
operations:
- name: get-location
method: GET
Retrieves an associate profile from Workday by employee ID, returning name, job title, home store, department, and hire date.
naftiko: "0.5"
info:
label: "Workday Associate Profile"
description: "Retrieves an associate profile from Workday by employee ID, returning name, job title, home store, department, and hire date."
tags:
- hr
- workforce
- workday
capability:
exposes:
- type: mcp
namespace: hr-profiles
port: 8080
tools:
- name: get-associate
description: "Given a Workday employee ID, return the associate profile including name, title, home store, department, and hire date."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID for the associate."
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.descriptor"
- name: job_title
type: string
mapping: "$.worker.primaryJob.jobTitle"
- name: home_store
type: string
mapping: "$.worker.primaryJob.location"
- name: department
type: string
mapping: "$.worker.primaryJob.department"
- name: hire_date
type: string
mapping: "$.worker.hireDate"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/homedepot"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Retrieves the current week schedule for a store associate from Workday, returning shift times, department, and manager.
naftiko: "0.5"
info:
label: "Workday Associate Schedule Lookup"
description: "Retrieves the current week schedule for a store associate from Workday, returning shift times, department, and manager."
tags:
- hr
- scheduling
- workday
capability:
exposes:
- type: mcp
namespace: associate-schedule
port: 8080
tools:
- name: get-schedule
description: "Look up a store associate's weekly schedule."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday.get-schedule"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: shifts
type: array
mapping: "$.schedule.shifts"
- name: department
type: string
mapping: "$.schedule.department"
- name: manager
type: string
mapping: "$.schedule.manager"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/workers/{{worker_id}}/schedule"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-schedule
method: GET